Adaptive Optimization Methods

Wonny·2025년 8월 2일

딥러닝

목록 보기
5/6
post-thumbnail

1. AdaGrad

AdaGrad는 표준 확률적 경사 하강법(SGD)의 변형 기법입니다.

둘의 차이점은 각 파라미터 별로 학습률이 다르게 적용되는 것입니다.

AdaGrad는 각 파라미터가 지금까지 얼마나 많이 업데이트 되었는지 추적합니다.

이때 덜 업데이트된 파라미터에 대해 더 큰 학습률을 주는 방식으로 작동합니다.

AdaGrad의 수식은 다음과 같습니다.

θt,i=θt1,iατ=1tgτ,i2+ϵgt,i   where gt,i=θitJt(θ)\theta_{t, i} = \theta_{t-1, i} - \frac{\alpha}{\sqrt{\sum_{\tau = 1}^t \mathbf{g}_{\tau , i}^2 + \epsilon}} \mathbf{g_{t, i}} \ \ \ \text{where}\ \mathbf{g}_{t,i} = \frac{\partial }{\partial \theta_i^t} J_t(\theta)

여기서 θt,iJt(θ)\frac{\partial}{\partial \theta_{t, i}} J_t(\theta)ii번 파라미터에 대한 현재 기울기를 의미합니다.

분모 τ=1tgτ,i2\sqrt{\sum_{\tau =1}^t \mathbf{g}_{\tau, i}^2}ii번 기울기의 제곱값을 현재까지 누적합한 것입니다.

다시 말해 ii번에 대한 과거 기울기 제곱의 누적합입니다.

기울기가 자주 발생한 파라미터는 학습률이 감소하고 반대로 잘 안 바뀐 파라미터는 학습률이 증가합니다.

아래는 AdaGrad의 pseudocode입니다.

cache += dx**2
x += - learning_rate * dx / np.sqrt(cache + 1e-8)

여기서 dx(gt,i\mathbf{g}_{t, i})는 현재 그래디언트, x(θt,i\theta_{t, i})는 파라미터 벡터, cache(τ=1tgτ,i2\sum_{\tau = 1}^t \mathbf{g}_{\tau, i}^2)는 기울기 제곱의 누적합, 1e-8은 0으로 나누는 것을 방지하는 안정화용 ϵ\epsilon입니다.

AdaGrad는 희소한(sparse) 데이터셋에서 효과적이라는 장점이 있습니다.

자주 등장하지 않는 특성에 대해 학습률이 크게 유지되어 빠르게 학습할 수 있습니다.

또한 수동으로 학습률을 조절할 필요 없이 자동으로 학습률을 조절합니다.

다만 학습이 진행될수록 학습률이 지나치게 작아지는 문제가 있습니다.

τ=1tgτ,i2\sum_{\tau =1}^t \mathbf{g}_{\tau, i}^2는 계속해서 증가만 하므로 학습이 오래 진행될수록 학습률의 영향이 미미해져 결국 학습이 멈춰버릴 수 있습니다.

이로 인해 글로벌 미니멈에 도달하기 전에 학습이 정체되거나 멈출 수 있습니다.

AdaGrad는 각 파라미터 별로 학습률을 다르게 적용할 수 있으나
학습이 진행될수록 학습률이 지나치게 작아질 수 있다.

2. RMSProp

RMSProp는 AdaGrad처럼 모든 과거 기울기 제곱을 누적하는 대신 지수 이동 평균(EMA)을 사용하여 과거 기울기 제곱을 누적합니다.

이를 통해 최근의 기울기 정보에 더 큰 비중을 두고 오래된 기울기 정보는 점차 잊어버리는 효과를 줍니다.

수식은 아래와 같습니다.

vt,i=ρvt1,i+(1ρ)gt,i2v_{t, i} = \rho v_{t-1, i} + (1 - \rho)\mathbf{g}_{t, i}^2
θt,i=θt1,iαvt,i+ϵgt,i\theta_{t, i} = \theta_{t-1, i} - \frac{\alpha}{\sqrt{\mathbf{v}_{t, i} + \epsilon}} \mathbf{g}_{t,i}

여기서 vt,iv_{t, i}tt시점의 ii번 파라미터에 대한 기울기 제곱의 지수 이동 평균이고
ρ\rho는 지수 이동 평균의 감쇠율(decay rate) 하이퍼파라미터입니다.

RMSProp는 과거 기울기 제곱의 지수 이동 평균을 사용하여 파라미터 별로 학습률을 조절하므로
학습률이 0으로 수렴하지 않아 AdaGrad의 가장 큰 문제점인 학습률 감소 문제를 해결합니다.

하지만 모멘텀의 장점인 관성을 직접적으로 활용하지는 않습니다.

pseudocode는 아래와 같습니다.

cache = decay_rate * cache + (1 - decay_rate) * dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)

RMSProp는 과거 기울기 제곱의 지수 이동 평균을 활용하여 각 파라미터의 학습률을 조절하나 모멘텀의 장점인 관성을 직접 활용하진 않는다.

3. Adam

Adam은 모멘텀과 RMSProp의 장점을 결합한 형태입니다.

따라서 딥러닝 모델 학습에 가장 널리 사용되는 최적화 알고리즘 중 하나입니다.

Adam은 현재 스텝 tt에서 파라미터 θi\theta_i에 대해 기울기의 첫 번째 모멘트(평균)두 번째 모멘트(비중심 분산)를 추정합니다.

먼저 현재 스텝의 파라미터 θt,i\theta_{t, i}에 대한 손실 함수의 기울기를 계산합니다.

gt,i=θiL(θt)\mathbf{g}_{t, i} = \triangledown_{\theta_i} L(\theta_t)

그리고 첫 번째 모멘트인 기울기의 지수 이동 평균을 추정합니다.

mt,i=ρ1mt1,i+(1ρ1)gt,im_{t, i} = \rho_1 m_{t-1, i} + (1 - \rho_1)\mathbf{g}_{t, i}

여기서 mt,im_{t, i}는 첫 번째 모멘트 벡터이며 mt1,im_{t-1, i}는 이전 스텝의 첫 번째 모멘트 추정값입니다.

ρ1\rho_1은 첫 번째 모멘트 추정값의 감쇠율(decay rate)로 일반적으로 0.90.9를 사용합니다.

이 항은 일관된 기울기의 방향으로 가속도를 붙여 수렴 속도를 높이는 데 기여합니다.

앞서 알아본 모멘텀과 유사합니다.

두 번째 모멘트는 기울기 제곱의 지수 이동 평균을 추정합니다.

vt,i=ρ2vt1,i+(1ρ2)gt,i2v_{t, i} = \rho_2v_{t-1, i} + (1 - \rho_2)\mathbf{g}_{t,i}^2

여기서 vt,iv_{t, i}는 두 번째 모멘트 벡터이며 vt1,iv_{t-1, i}는 이전 스텝의 두 번째 모멘트 추정값입니다.

ρ2\rho_2는 두 번째 모멘트 추정값의 감쇠율로 일반적으로 0.9990.999를 사용합니다.

이 항은 과거 기울기의 크기에 따라 각 파라미터의 학습률을 조절하는 역할을 합니다.

앞서 알아본 RMSProp와 유사합니다.

따라서 Adam의 기울기 업데이트 수식은 다음과 같습니다.

θt,i=θt1,iαm^t,iv^t,i+ϵ\theta_{t, i} = \theta_{t-1, i} - \alpha \frac{\hat{m}_{t,i}}{\sqrt{\hat{v}_{t, i}} + \epsilon}

m^t,i\hat{m}_{t, i}v^t,i\hat{v}_{t, i}편향 보정입니다.

모멘트 벡터 mtm_tvtv_t가 초기화될 때 m0=v0=0m_0 = v_0 = 0이므로 학습 초기 단계에서
mtm_tvtv_t의 추정값이 0에 가깝게 편향될 수 있습니다.

따라서 아래와 같이 보정합니다.

m^t,i=mt,i1ρ1t\hat{m}_{t, i} = \frac{m_{t, i}}{1 - \rho_1^t}
v^t,i=vt,i1ρ2t\hat{v}_{t, i} = \frac{v_{t, i}}{1 - \rho_2^t}

여기서 ρ1t\rho_1^tρ2t\rho_2^t는 감쇠율의 현재 스텝인 tt의 제곱을 취한 것으로써
tt가 커질수록, 즉 학습이 진행될수록 분모가 1에 가까워지므로 보정 효과는 점차 줄어들게 됩니다.

Adam은 모멘텀과 RMSProp의 장점을 결합하여 빠르고 부드럽게 수렴하면서도 학습률이 자동으로 조절될 수 있다.

4. 정리

이번 포스팅은 기본적인 적응형 최적화 알고리즘을 살펴봤습니다.

AdaGrad, RMSProp, Adam 외에도 다양한 알고리즘이 존재합니다.

각 기법마다 장단점이 있으므로 모델이나 데이터셋에 따라 가장 적합한 기법을 선택하는 것이 중요합니다.

0개의 댓글