Optimizer란?

  • Optimization(최적화) 기능을 하는 알고리즘을 말한다.

Optimization이란?

  • 어떤 제약조건이 있을 수도 있는 상황에서 함수의 최대치와 최소치를 찾는 것이다.
  • 최적화문제는 자원(메모리, 시간 등)의 한계 내에서 가능한 한 최선의 값을 찾아내는 것이다.

최적화 과정

최적화과정{: .center}

  1. 훈련세트에서 Neural Network를 거쳐 Output을 산출한다.
  2. Output과 실제값 사이의 Loss Function을 정의하고 Loss값을 구한다.
  3. Loss값을 줄여주는 Gradient를 구하고 Weight에 업데이트 해준다.
  4. 1~3과정을 반복하여 주어진 자원 내에서 최적의 값을 찾아낸다.

⇒ 위의 과정을 최적화 과정이라 한다.

Optimizer 종류

Optimizer 발달계보{: .center}

Gradient Descent (경사하강법)

  • 가장 기본이 되는 Optimizer이다.
  • 경사를 따라 내려가면서 Weight를 업데이트해 최솟값을 찾는 방식이다.

Gradient Descent 페이지 참고

  • 업데이트 값은 학습률과 gradient의 곱으로 이루어진다.

단점

Momentum

  • Global Minima를 구하기 위해서 관성의 법칙을 적용시킨 Optimizer이다.

Local Minima에 빠졌을 때 이전에 떨어지던 속도를 살려 빠져나가보자! 라는 아이디어를 갖는다.

  • SGD에 Momentum을 합쳐서 적용시킨다.

Momentum{: width=“600”}{: .center}

출처 : https://ratsgo.github.io/deep learning/2017/04/22/NNtricks/

  • - 마찰력을 의미한다. 일반적으로 0.9 또는 0.99의 값을 이용한다.
  • gradient와 이전 속도값을 적은량 반영시켜 Momentum을 구한다.
  • Momentum에 학습률을 적용시켜 업데이트 시킨다.

출처 : CS231n Lecture7 Training Neural Net 2

Nesterov Momentum

  • Momentum의 경우 현재 위치에서 gradient와 기존의 가지고 있던 momentum을 합친 Optimizer이다.

  • Momentum을 아래 그림의 -10에서 언덕을 내려가는 공이라 비유해보자.

    Momentum은 역삼각형을 거쳐 언덕을 다 내려가고 나서 최저점인 0을 지나 다시 올라갔다 속도를 줄이며 다시 최저점으로 향한다.

graph{: width=“400”}{: .center}

  • Nesterov Momentum은 올라갔다 다시 내려오지 말고 미리 속도를 줄이자는 아이디어를 갖는다.

    Nesterov Momentum은 미래 위치를 추정하여 그 위치에서 기울기를 구한다.

  1. 현재 momentum과 위치를 합친 미래 위치를 찾아 gradient를 구한다. (한 걸음 미리 가본 위치의 gradient)
  2. 구한 gradient를 현재 momentum과 빼서 momentum을 업데이트한다.
  3. momentum과의 합으로 미래 위치를 업데이트한다.

Nesterov method{: width=“600”}{: .center}

출처 : https://stats.stackexchange.com/questions/179915/whats-the-difference-between-momentum-based-gradient-descent-and-nesterovs-acc

Adagrad(Adaptive Gradient)

  • 적응적으로 Gradient를 적용하는 것을 learning rate에 따라서 조정하는 Optimizer이다.
  • 지금까지 비교적 많이 업데이트된 변수는 적게, 적게 업데이트된 변수는 많이 업데이트하는 아이디어를 갖는다.
  • : t에서의 gradient
  • : t까지 업데이트된 총량
  • 이전 gradient의 적용을 계속 축적시켜 루트를 씌워 분모로 두어 계산한다.
  • 이전까지 업데이트된 총량이 크다면 분모가 커져 업데이트하는 양이 감소하고 반복이 계속될수록 G가 계속 증가하면서 가중치 변화정도가 매우 작아진다.

RMSProp

Adagrad의 단점을 보완한 optimizer다. Adagrad의 경우 gradient를 제곱해 누적하고 업데이트가 계속될수록 업데이트 크기는 0에 수렴한다. 이를 RMSProp은 과거값의 반영을 점차 줄이고 최근값의 반영을 늘이는 **지수이동평균(Exponential Moving Average)**을 이용하여 보완했다.

  • 누적된 업데이트의 총량과 최근 업데이트한 양을 고려해 가중치를 조정한다.
  • : 어떤 값을 더 고려할지 조절한다.
  • : 학습률
  • : 분모가 0이 되는 것을 방지하기 위한 값
  • 지금까지 업데이트한 누적 양도 고려하지만 최근 업데이트한 양을 더 많이 고려한다.
  • 로 나눠주면서 gradient의 크기를 고려해 편향되어 탐색하지 않도록 한다.(평준화하여 공평하게 탐색한다.)

Adam(Adaptive Moment Estimation)