SGD, Momentum, NAG

Henry Lee·2021년 12월 10일
0

Tensorflow

목록 보기
2/2
post-thumbnail
import tensorflow as tf

tf.keras.optimizers.SGD(
    learning_rate=0.01,
    momentum=0.0, # Momentum
    nesterov=False, # NAG (Nesterov Accelrated Gradient)
    name='SGD', **kwargs
)

Stochastic Gradient Descent

wt+1=wtηgradient(η=learningrate)w_{t+1} = w_t - \eta * gradient \\ (\eta = learning\,rate)

Momentum

wt+1=wt+v(v=velocity)w_{t+1} = w_t + v \\(v = velocity)
vt+1=mvtηgradient(m=momentcoef)v_{t+1} = m * v_t - \eta * gradient \\(m = moment\,coef)

정리하면,

wt+1=wt+mvtηgradient=SGD+mvtw_{t+1} = w_t + m*v_t - \eta*gradient \\ = SGD + m*v_t

모멘텀은 SGD에 mvtm*v_t를 더한 것!

Nesterov Accelrated Gradient

wt+1=wt+vw_{t+1} = w_t + v
vt+1=mvtηgradient(wt+mv)v_{t+1} = m * v_t -\eta * gradient(w_t + m * v)

정리하면,

wt+1=wt+mvtηgradient(wt+mvt)=Aηgradient(A)(A=wt+mvt)w_{t+1} = w_t + m*v_t - \eta*gradient(w_t+m*v_t)\\ = A - \eta*gradient(A)\\ (A = w_t + m*v_t)

NAG는 SGD에서 wtw_tAA로 한 것! 여기서 AA는 가중치(ww)와 모멘텀(mvtm*v_t)의 합이다.

최적화 함수(Optimizer Function)의 시작이라고 할 수 있는 "확률적 경사하강"(Stochastic Gradient Descent, 줄여서 'SGD')

최적화와 경사하강이 무슨 관계냐? 최적화는 예측값과 실제값의 차이, 즉 손실(Loss)이 최소가 되도록 만드는 것을 뜻하는데, 이 손실 그래프에서 경사값(기울기)를 미분으로 구해서 아래 방향으로 하강하는 것과 그 뜻을 같이 한다.

모멘텀은 local minima를 벗어날 수 있도록 SGD에 관성(Momentum)을 더한 것이다. 자동차 운전에서 속도를 붙여 진입하면 오르막길을 통과하기 수월한 것을 연상하자.

NAG는 음... 더 공부하자. 모멘텀과 비슷한 기능을 하는 것인데 한단계 꼬아서 이해가 조금 더 어렵다. 러시아의 수학자 Nesterov가 제안한 방법 같은데, 대붕을 내가 따라가려면 멀었다, 멀었어.

사실 너무 기초적인 Optimizer라서 다른 Optimizer를 공부하기 위한 목적이지, 실제 사용은 하지 않을 듯 하다. 가장 보편적인 최적화 함수는 Adam으로, 모르면 일단 '아담'부터 쓰고 보자.

profile
Today I Learned. AI Engineer.

0개의 댓글