옵티마이저 공부

옵티마이저(Optimizer)


목차

  • Step 1. 개요
  • Step 2. 에포크, 배치 크기, 그리고 이터레이션(Epoch, Batch Size and Iteration)
    • 에포크
    • 배치 크기
    • 이터레이션
  • Step 3. 옵티마이저(Optimizer)
    • 배치 경사 하강법
    • 확률적 경사 하강법
    • 미니 배치 경사 하강법
    • 모멘텀
    • 아다그라드
    • 알엠에스프롭
    • 아담

해당 게시물은 참고자료를 참고하거나 변형하여 작성하였습니다.

Step 1. 개요


옵티마이저(optimizer)는 학습 알고리즘/최적화 알고리즘이라고도 불리는데 이것의 역할은 최적화(optimization)를 하는데 사용한다.

대부분의 학습 알고리즘의 기본적인 컨셉은 미분을 통해 gradient를 구한 후 gradient가 0이 되는 방향으로 점근적으로 나아가 최적화가 되는 값을 찾는 것이다.

우리는 옵티마이저에 대해 공부하기전 미리 알아둘 개념에 대해서 먼저 학습해보자.

Step 2. 에포크, 배치 크기, 그리고 이터레이션(Epoch, Batch Size and Iteration)


딥러닝은 실제값과 예측값의 오차로부터 옵티마이저를 이용하여 매개변수를 업데이트한다. 현실과 비유하면 사람은 문제지의 문제를 풀고, 정답지를 보면서 부족했던 점을 채워나가는 학습 과정이라고 생각하면 된다.

그런데 사람마다 동일한 문제와 정답을 주더라도 공부하는 방법은 천차만별이다. 어떤 사람은 10개 풀고 채점하고 다시 풀고 어떤 사람은 50개 풀고 채점하고 다시 푼다.

기계도 마찬가지이다. 같은 문제지와 정답을 주더라도 공부 방법을 다르게 설정할 수 있다.

위 그림으로 에포크, 배치 크기, 그리고 이터레이션에 대한 개념을 간단히 확인할 수 있다.

1) 에포크(Epoch)

에포크는 인공 신경망에서 전체 데이터에 대해서 순전파와 역전파 과정이 끝나는 한 싸이클을 이야기한다. 즉, 문제를 끝까지 풀고 정답지로 채점을 하여 한번의 공부를 끝낸 상태로 이해하면 되겠다.

만약 에포크의 크기가 매우 작다면, 앞서 배운 overfitting 이나 underfitting이 발생할 수 있다.

2) 배치 크기(Batch size)

배치 크기는 몇 개의 데이터 단위로 매개변수(weight, bias)를 업데이트 하는지를 이야기한다. 사람이 총 2,000 문제가 수록된 문제지의 문제를 200개 단위로 풀고 채점을 하면 이때 배치 크기는 200이다.

기계도 마찬가지로 배치 크기가 200이면 200개의 샘플 단위로 학습을 한다. 여기서 중요한 점은 매개변수를 업데이트를 하는 시점이 실제값과 예측값 사이의 오차를 계산하는 시점이다. 즉, 기계는 200개의 샘플을 학습하고 오차를 계산하여 이 시점마다 매개변수를 업데이트를 한다는 말이다.

3) 이터레이션(Iteration)

이터레이션은 한 번의 에포크가 끝나기 위해서 필요한 배치의 수라고 생각하면 된다. 또는 한 번의 에포크 내에서 이루어지는 매개변수가 업데이트되는 횟수이기도 하다.

위 그림에서는 총 10번의 매개변수 업데이트가 이루어진다고 생각하면된다.

자, 이제 학습 과정에 대한 용어를 알았으니 옵티마이저를 공부해보자.

Step 3. 옵티마이저(Optimizer)


손실 함수의 값을 줄여나가면서 학습하는 방법은 어떤 옵티마이저를 사용하냐에 따라서 달라진다. 앞서 공부했던 배치의 개념을 이용하여 정해준 양의 데이터만 가지고 매개변수를 조절할 수도 있고 전체 데이터를 가지고 조정할 수 있다.

1) 배치 경사 하강법(Batch Gradient Descent)

가장 기본적인 옵티마이저이자 경사 하강법이다. 이 옵티마이저는 한 번의 에포크에 모든 매개변수 업데이트를 단 한번 수행한다.

해당 방법은 전체 데이터를 고려하여 학습하므로 에포크당 시간이 오래걸리고 메모리를 많이 잡아먹지만, 전체 최적해(global minimum)을 찾을 수 있다는 장점이 있다.

2) 확률적 경사 하강법(Stocahstic Gradient Descent, SGD)

기존의 배치 경사 하강법은 시간이 너무 오래걸리는 단점을 가지고 있기에, SGD는 전체 데이터가 아닌 랜덤으로 선택한 하나의 데이터를 이용하여 매개변수를 업데이트한다.

해당 방법은 정확도가 낮을 수 있지만 속도는 배치 경사 하강법보단 빠르다는 장점을 가지고 있다.

3) 미니 배치 경사 하강법(Mini-Batch Gradient Descent)

위 방법은 사용자가 원하는 만큼의 배치 사이즈를 지정하여 매개변수를 업데이트하는 방법이다.

배치 경사 하강법보다 빠르며 SGD보다 안정적이라는 장점을 가지고 있다.

4) 모멘텀(Momentum)

모멘텀은 관성이라는 물리학의 법칙을 응용한 방법이다. 모멘텀은 계산된 접선의 기울기에 한 시점전의 접선의 기울기의 각도를 일정한 비율만큼 반영을 했다. 무슨 말이냐면 이렇게 하면 마치 언덕에서 공이 내려올 때, 중간에 작은 웅덩이에 빠지더라도 관성의 힘으로 넘어가는 효과, 즉 관성을 이용한 것이다.

기존 경사 하강법은 지역 최적해(local minimum)에 도착하면, 그것이 전체 최적해(global minimum)이라고 착각하지만 해당 방법은 관성의 힘을 빌리면서 지역 최적해에서 탈출하는 효과를 얻을 수 있다.

5) 아다그라드(Adagrad)

기존에 방법은 각각 매개변수들에게 모두 동일한 학습률(learning rate)를 적용한다. 그러나 매개변수들은 모두 의미하는 바가 다르기에 비효율적이다.

아다그라드는 매개변수마다 다른 학습률을 적용시켜 더 효율적인 학습을 가능케한다.

6) 알엠에스프롭(RMSprop)

아다그라드의 업그레이드 버전이라고 생각하면 된다. 아다그라드는 학습을 계속 진행하는 경우에 나중가서는 학습률이 감소하는 단점이 있다

해당 방법은 이 단점을 수식으로 대체하여 개선하였다.

7) 아담(Adam)

아담은 RMSprop과 모멘텀 두 가지를 합친 듯한 방법으로, 방향과 학습률을 모두 잡기 위한 방법이다.

참고자료

—[https://wikidocs.net/36033] https://creativecommons.org/licenses/by-nc-sa/2.0/kr/ (https://wikidocs.net/36033)