[딥러닝] Optimization 방법 정리 - penny4860/study-note GitHub Wiki
1. SGD
dx = compute_grad(x)
vx = -learning_rate*dx
x = x + vx
2. SGD + momentum
dx = compute_grad(x)
vx = -learning_rate*dx + rho*vx # 이전 step에서 구해놓은 gradinet를 반영하는 부분이 추가
x = x + vx
- momemtum의 역할은?
- exponential filter로 gradinet term의 noise를 줄이는 역할
- local min, saddle point에 머물지 않고 탈출하는 역할
3. Nestrov momentum
dx = compute_grad(x + rho*vx) # parameter x를 update한 지점에서 gradient를 계산
vx = -learning_rate*dx + rho*vx
x = x + vx
- parameter를 update한 지점에서 gradient를 구하는 이유?
- parameter 가
(rho*vx)
만큼 update 될 것이 확실함으로, 그 지점에서 gradinet를 계산하는 것이 좀 더 정확하다.
- parameter 가
4. AdaGrad
grad_squared = 0
while True:
dx = compute_grad(x)
grad_squared += dx * dx
vx = -learning_rate * dx / np.sqrt(grad_squared) # historical sum으로 나눈다.
x = x + vx
-
learning rate에 의해 모든 parameter를 같은 step_size만큼 update하면 문제가 무엇인가?
- parameter 별로 민감도가 다르다.
- 따라서, 필요한 update step_size가 다름.
-
Historical Sum으로 나누는 이유?
- parameter별 step_size를 normalize하기 위해.
5. RmsProp
while True:
dx = compute_grad(x)
# grad_squared += dx * dx # AdaGrad : historical sum을 scaling term으로
grad_squared = rho*grad_squared + (1-rho)*(dx * dx) # grad_squared를 moving average
vx = momentum*vx + -learning_rate * dx / np.sqrt(grad_squared) #
x = x + vx
-
Parameters
learning_rate
rho
: Discounting factor for the history/coming gradient- 보통 논문에서
decay
로 표시하는 경우도 있음.
- 보통 논문에서
momentum
- velocity의 exponential filtering 계수
-
Note
-
AdaGrad의 문제점
- grad_squared 의 scale이 지속적으로 커진다.
- 학습이 진행될 수록 parameter의 update가 작아지는 문제
-
RmsProp의 해결책
- 이전 step에서의 grad_squared과 현재 step에서의 grad_squared의 평균을 scaling term으로 사용
-
Adam
while True:
dx = compute_grad(x)
first_moment = beta1*first_moment + (1-beta1)*dx # gradient를 exponential filtering
second_moment = beta2*second_moment + (1-beta2)*(dx * dx) # rmsprop 에서의 grad_squared 구하는 식과 동일
vx = -learning_rate * first_moment / np.sqrt(second_moment) # dx대신 first_moment를 사용
x = x + vx
-
Parameters
learning_rate
first_moment
- gradient 에 대한 exponential fitering 계수
second_moment
- grad_squared 에 대한 exponential fitering 계수
-
Note
- rmsprop과 adam
- 같은 점
grad_squared
를 exponential filtering 해서 사용- 모멘텀을 사용
- 다른 점 : momentum을 어디에 주는가?
- adam : momentum을 grad 구할때 준다.
- rmsprop : momentum을 velocity 구할떄 준다.
- 같은 점
- rmsprop과 adam