[딥러닝] 옵티마이저 (Optimizer)

김죠·2023년 8월 4일
0

머신러닝

목록 보기
9/9
  • 🥇 지호의 옵티마이저 요약본

  • 옵티마이저란?

손실 함수 (Loss Function)의 결과를 최소로 해주는 모델의 파라미터 (가중치)를 찾는 알고리즘을 의미

  • 옵티마이저의 시작

    • Gradient Descent

      • Loss Function 의 값이 작아지는 방향으로 가중치를 업데이트 하며 Loss Function을 최소화하는 가중치를 찾아가는 방법

  • 문제점

    1. 가중치를 업데이트 하기 위해선, 전체 데이터 셋을 이용하여 수십번의 가중치를 업데이트 해야한다.

      예를 들어, 1000개의 데이터 셋이 존재하고, 뉴런들의 가중치가 200개가 존재한다. \rightarrow 모든 가중치를 "한 번" 변화시키기 위해서 1000 * 200 번의 계산이 필요하다.
      \rightarrow 너무 많은 메모리와 시간 사용

    2. 안정적으로 움직이는건 좋음. 그러나, 안정적으로 움직이기 때문에, Local Optima 문제가 발생할 가능성이 높음

  • 해결방안 : Mini Batch 를 이용하여 일부를 샘플링하여 학습한다면?

  • SGD (Stochastic Gradient Descent)

    • 구글링에서 나오는 미니 배치 경사 하강법 == SGD

    • 일반적으로, 10 ~ 1000개의 데이터로 구성

    • 각 배치를 포함하는 데이터가 무작위로 선택됨

    • 예를 들어, 데이터가 1000개, batch size 를 100 \rightarrow 10개의 mini batch가 나옴. \rightarrow 1 epoch 당 10번의 SGD 진행

    • SGD 장점

      • Gradient Descent에 비해 수렴 속도고 빠르다.

      • Shooting 이 일어나기 때문에, Local Optima에 빠질 위험이 적다.

    • SGD 단점

      • Gradient Descent 와 마찬가지로 Global Minimum을 찾지 못 할 가능성이 있다.
      • Shooting 이 심하게 일어나면, 최적해를 찾지 못할 가능성이 있다.
    • 해결방안 : SGD 에서 Shooting 을 줄일 수 있다면?

  • Momentum

    vv : 가속도 , α\alpha : momentum term (보통, 0.9)

    • momentummomentum == SGD + momentummomentum

    • SGD가 중구난방으로 최적해를 찾아가는 것에 대하여 그 진동을 줄이고, 최적해에 연관된 방향으로 더 가속을 해주는 방법

    • 가중치를 수정하기 전에, 기울기를 참고하여 더 그 방향으로 가려는 성질을 추가해줌.

    • 이를 통해, Shooting (지그재그) 현상이 줄어들고, Gradient의 방향이 변경되어도, 이전 방향과 크기에 영향을 받아 다른 방향으로 가중치가 변경될 수 있음.

( v1v_1 : 초기의 가속도는 존재하지 않으므로 v0v_0 = 0 )

  • momentum 장점

    • Local Minima의 문제를 피할 수 있음.

    • 더 빨리 최적해를 찾을 수 있음.

  • momentum 단점

    • Overshooting : 경사가 가파른 곳을 빠른 속도로 내려오다가, 관성을 이기지 못하고 최소 지점을 지나쳐 버리는 현상

    • 이를 개선한 알고리즘 : NesterovNesterov momentummomentum

  • Nesterov momentum

    • 현재의 속도 벡터와 현재 속도로 한 걸음 미리 가 본 위치의 Gradient Vector를 더하여 다음 위치를 정함
  • AdaGrad

    • Adaptive Gradient 의 줄임말

    • 기존 Optimizer의 경우, learning rate 값에 따라서 학습이 잘 될 수도 잘 안 될 수도 있는 문제가 존재함
      \rightarrow 개별 매개 변수에 적응적으로 (adaptive) learning rate를 조정하면서 학습을 진행

을 하면서, learning rate을 조절해가면서 다음 parameter 업데이트 값을 결정짓게 한다. 그래서 학습을 진행하면서 이미 학습이 많이 된 변수라면 최적점에 이미 가까이 갔을 것이라 판단, 학습이 아직 덜 된 드물게 등장한 변수라면 학습을 더 빨리 하게 함으로써 최적점으로 이끈다. 이렇게 되면 랜덤으로 들어오는 변수들에 대해서 효율적으로 학습을 시켜서 빨리 최적점을 찾도록 할 수 있게 된다

  \;   \;   \;   \;   \;   \;   \;   \;   \;   \;   \; GtG_t : 과거 tt 시점에서의 Gradient 제곱합
  \;   \;   \;   \;   \;   \;   \;   \;   \;   \;   \; ϵ\epsilon : 1e-8 (Zero DivisionError 피하기 위함)
  \;   \;   \;   \;   \;   \;   \;   \;   \;   \;   \; gtg_t : 현재의 기울기

AdaGrad 는 과거 gradient 양을 토대로 학습을 진행하며, learning rate 를 조절해가면서 다음 가중치의 업데이트 값을 결정하게 된다.

따라서, 이미 학습이 많이 된 변수라면, 즉, 누적된 과거의 Gradient 양이 많다면, learning rate 값을 작아지도록 조절하여 최적해로 가도록 도와준다.

그러나, GtG_t 가 계속 누적된다면 값이 커질수 밖에 없다. 그렇다면, 어느 순간 갱신량이 0이 되어 전혀 갱신이 되지 않고 결국 더 이상 학습을 진행할 수 없게 된다.
\rightarrow 이를 해결하고자 RMSprop 가 개발되었다.

  • RMSprop

    • 먼 과거의 기울기는 조금 반영하고, 최신의 기울기를 많이 반영하는 AdaGrad (\rightarrow 지수이동평균을 이용한 AdaGrad)
      γ\gamma : 지수이동평균의 업데이트 계수 (일반적으로, 0.9 혹은 0.999)

    • 지수이동평균 : 과거의 모든 기간을 대상으로 하여 최근의 데이터에 더 높은 가중치를 두는 일종의 가중이동평균법

    • RMSProp 장점

      • gtg_t 가 무한정 커지는 것을 방지하여, AdaGrad 보다 학습을 오래 할 수 있음

      • 적절한 학습률을 조정하며 효율적인 학습 가능

  • Adam

    • RMSProp + momentummomentum

단, Adam 에서는 mmvv 가 처음에 0으로 초기화 되어있다. 즉, 학습 초반에는 mtm_tvtv_t 가 0에 가깝게 bias (편향) 되어 있을 것이다.

따라서, 이를 unbiased (편항되어 있지 않은) 하게 만들어주는 과정을 거친다.

편향 : 추정량과 모수의 차이
\rightarrow 추정량의 기댓값이 모수와 같아지는 것이 가장 바람직한 경우임.

unbiased estimator 의 조건 : E(θ^\hat{\theta}) = θ\theta

  • 참고 사항 ( unbiased estimator )

  • 요약

0개의 댓글