Skip to content

Optimizer #
Find similar titles

optimizer #

정의 #

수학, 물리 컴퓨터 등에서 많이 사용되는 단어로 딥러닝에서 학습속도를 빠르고 안정적이게 하기 위해 손실함수(loss function)를 최소화하는 최적의 가중치 (weight)를 업데이트 하는 방법

종류 #

GD #

학습률(learning rate)과 손실함수의 순간기울기(gradient)를이용하여 가중치(weight)를 업데이트하는 방법 $$θt+1=θt−η∇θJ(θ)$$

  • θt+1 > 업데이트하고자 하는 가중치 값
  • θt > 이전에 사용하였던 가중치
  • η > 학습률(learning rate), 이동 step size , 보통 0.01~0.001 사용
  • η∇θJ(θ) > 손실함수의 미분값 = 순간기울기

Image

BGD #

Loss Function을 계산할 때 전체 데이터를 사용하여 계산한다
- 한번의 스텝을 내딛을 때 전체 데이터에 대한 gradient을 계산해야 하므로
트레이닝 데이터세트의 계산량이 많아지고 속도가 느림
- local minimum이나 saddle point에서 빠져나오기 힘듦

SGD #

Loss Function을 계산할 때 전체 데이터 대신 minibatch size를 결정하여 사이즈의 데이터 마다 gradient를 계산하고 업데이트 한다.
- 매 업데이트마다 들쭉날쭉한 크기의 gradient로 파라미터를 업데이트 함
- 분산이 큰 gradient는 SGD가 local minimum에서 빠져나오게 만들 수도 있지만 반대로 수렴을 방해할 수도 있음

Momentum #

Gradient Descent을 기반으로 이동하는 과정에서 관성을 주는 것이다.
현재 Gradient를 통해 이동하는 방향과는 별개로, 과거에 이동했던 방식을 기억하면서 그 방향으로 일정 정도를 추가적으로 이동함 $$ vt=γvt−1+η∇θJ(θ)$$ $$ θ=θ−vt $$

  • γ > 관성항, 얼마나 관성을 줄 것인지, 보통 0.9 정도의 값 사용

또한 이동항을 정리해 보면 Gradient들의 지수평균을 이용하여 이동한다고도 해석할 수 있다. $$vt=η∇θJ(θ)t+γη∇θJ(θ)t−1+γ2η∇θJ(θ)t−2+....$$ - SGD에 비해 상대적으로 빠르게 이동할 수 있음
- 기존에 이동했던 방향에 관성이 있어 local minima를 빠져나오고 더 좋은 minima로 이동할 수 있음
- 기존의 변수들 외에도 과거에 이동했던 양을 변수로 저장해야하므로 변수에 대한 메모리가 두 배로 필요함

NAG #

NAG는 앞을 미리 보고 현재의 관성을 조절하여 업데이트 한다.
모멘텀으로 먼저 이동 한 후 어떤 방식으로 이동해야 할 지 결정함

$$vt=γvt−1+η∇θt(θt−γvt−1)$$ $$θt+1=θt−vt$$ Image - 모멘텀의 빠른 이동에 대한 이점을 가지면서도 멈춰야 할 적절한 시점에 제동을 걸 수 있음

Adam #

RMSProp과 Momentum 방식을 합친 알고리즘

Image

  • Momentum > 지금까지 계산해온 기울기의 지수평균을 저장
  • RMSProp > 기울기의 제곱값의 지수평균을 저장
  • mt^ vt^ > Adam에서는 m과 v가 처음에 0으로 초기화 되어 있기 때문에 초반부에는 mt, vt가 0으로 편향되는 경향이 있다. 편향을 잡아주기 bias-corrected를 계산하여 expectation을 얻을 수 있다. 보정된 expectation을 가지고 gradient가 들어갈 자리에 mt^, Gt가 들어갈 자리에 vt^를 넣어 계산을 진행한다.

한 번에 보는 옵티마이저 #

Image 모르겠으면 아담 쓰세요!

참고 #

0.0.1_20210630_7_v33