본문 바로가기
머신러닝, 딥러닝/Optimizer

[DL] Optimizer

by Deeppago 2022. 3. 7.

이전에 업로드한 함수의 최적해를 찾기 위한 경사 하강법(Gradient Descent)에 이어서 경사 하강법을 이용한 여러 최적화 방법인 optimizer에 대해 정리해보려고 한다. 

-목차-

1. 확률적 경사 하강법(Stocastic Gradient Descent, SGD)

    1.1 고정된 학습률

2.  SGD 모멘텀(Momentum)

    2.1 관성을 이용한 임계점 탈출과 빠른 학습

    2.2 오버 슈팅 문제

3. AdaGrad(Adaptive Gradient)

    3.1 학습 조기 중단 현상

4. RMSProp(Root Mean Square Propagation)

    4.1 최근 경로의 곡면 변화량

    4.2 학습 초기 경로 편향 문제

5. Adam(Adaptive Moment Estimation)

    5.1 초기 경로의 편향 제거

 

1. 확률적 경사 하강법(Stocastic Gradient Descent, SGD)

확률적 경사 하강법은 손실 함수의 곡면에서 '경사가 가장 가파른 곳으로 내려가다 보면 언젠가 가장 낮은 지점에 도달한다'는 가정으로 만들어졌다. 경사 하강법 알고리즘 중 가장 단순한 알고리즘이고, 알고리즘의 가정이 단순한 만큼 다양한 상황에 잘 대처하지 못하고 수렴 속도가 느리므로 최적해를 찾는 과정에서 오랜 시간이 걸릴 수 있기 때문에 성능에 한계가 있다.

확률적(Stocastic)이라는 용어는 각 배치를 포함하는 하나의 예가 무작위로 선택된다는 것을 의미한다. 즉, 확률적 경사 하강법은 데이터 세트에서 무작위로 균일하게 선택한 하나의 예를 의존하여 각 단계의 예측 경사를 계산한다.

1.1 고정된 학습률

학습률이란 최적화할 때 한 걸음의 폭을 결정하는 스텝 크기를 말하며 학습 속도를 결정한다. 확률적 경사 하강법은 지정한 고정된 학습률을 사용하는 알고리즘이므로 경험적으로 학습률을 조정할 수밖에 없다. 최적화가 어떻게 진행되는지 확인해 봐야 학습률을 어떻게 조정할지 감이 생기지만, 감에 의존하는 방식은 최적이 아니므로 효율적이지 않다. 

SGD는 학습률이 고정되어 있기 때문에 최적화가 비효율적으로 진행된다. 학습률이 낮으면 학습 속도가 느리고, 반대로 학습률이 높으면 최적해로 수렴하지 못하거나 심지어는 손실이 점점 커지는 방향으로 발산하기도 한다. 위 그림과 같이 SGD는 폭이 좁고 깊은 협곡 형태의 지형을 만나면 계곡의 벽면 사이를 왔다 갔다 하면서 진동하고 아래쪽으로는 잘 내려가지 못한다. 또한 어느 정도 큰 학습률을 고정된 크기로 사용할 경우 최소 지점 근처에서 진동하면서 최적해에 영원히 도달하지 못할 수 있으므로 모델의 성능은 떨어진다.

 


2.  SGD 모멘텀(Momentum)

모멘텀은 최적해를 향해 진행하던 속도에 관성을 주어 SGD의 느린 학습 속도와 협곡과 안장점을 만났을 때 학습이 안 되는 문제, 거친 표면에서 진동하는 문제를 해결한 최적화 알고리즘이다. 이 알고리즘의 핵심 개념과 장단점을 살펴보자.

 

모멘텀을 수식으로 표현하면 다음과 같다. 여기서 \(v_t\)는  현재 속도이고 \(\rho \)는 마찰 계수로서 보통 0.9나 0.99를 사용한다.

 

\begin{align*} v_{t+1} &= \rho v_t + \triangledown f(x_t) \\x_{t+1} &= x_t - \alpha v_{t+1}\end{align*}

 

다음 속도 \(v_{t+1}\)은 현재 속도에 마찰 계수를 곱한 뒤 그레디언트\(\triangledown f(x_t)\)를 더해서 계산한다. 파라미터 업데이트 식은 SGD의 파라미터 업데이트 식과 같은 형태이며 그레디언트 대신 속도를 사용한다.

 

 

2.1 관성을 이용한 임계점 탈출과 빠른 학습

진행하던 속도에 관성이 작용하면 이동 경로가 어떻게 개선되는지 살펴보자. 관성이 생기면 진행하던 속도로 계속 진행하려고 하므로, 안장점을 만나거나 깊이가 얕은 지역 최소에 빠지더라도 그 지점을 벗어날 수 있다. 손실 함수의 표면이 울퉁불퉁하면 기울기가 계속해서 바뀌기 때문에 다른 쪽으로 튕겨 나갈 수 있는데, 이때 관성이 작용하면 진행하던 속도를 유지하며 부드럽게 이동할 수 있다.

또한 경사가 가파르면 속도에 그레디언트가 더해져서 가속도가 생기므로 매우 빠르게 이동한다. 위 그림은 모멘텀으로 이동하였을 때의 그림이다. 모멘텀이 적용되지 않았을 때의 SGD그림과 비교해 보면 관성이 적용되었기 때문에 SGD보다 부드럽게 최적해를 찾아가는 것을 확인할 수 있다.

 

2.2 오버 슈팅 문제

모멘텀의 단점으로는 오버 슈팅이 있다. 경사가 가파르면 빠른 속도로 내려오다가 최소 지점을 만나면 그레디언트는 순간적으로 작아지지만 속도는 여전히 크기 때문에 최소 지점을 지나쳐 오버 슈팅이 일어날 수 있다. 최소 지점의 기울기가 비교적 작다면 그레디언트와 속도가 모두 작으므로 오벼 슈팅이 되지 않지만, 최소 지점 주변의 경사가 가파르다면 속도가 크기 때문에 오버 슈팅이 된다.

 


3. AdaGrad(Adaptive Gradient)

AdaGrad는 손실 함수의 곡면의 변화에 따라 적응적으로 학습률을 정하는 알고리즘이다.

손실 함수의 경사가 가파를 때 큰 폭으로 이동하면서 최적화 경로를 벗어나거나 최소 지점을 지나칠 수 있으므로 작은 폭으로 이동하는 것이 좋고, 경사가 완만하면 큰 폭으로 빠르게 이동하는 것이 좋다. 이와 같이 동작하려면 곡면의 변화량에 학습률이 적응적으로 조정되어야 한다.

 

곡면의 변화량은 모든 단계에서 계산했던 기울기를 모아서 크기를 측정하는 방식으로 계산된다. 먼저 모든 단계의 기울기를 하나의 벡터로 표현해보자.

 

기울기 벡터 = \((\triangledown f(x_1), \triangledown f(x_2), \triangledown f(x_3),..., \triangledown f(x_n))\)

 

각 기울기의 제곱합을 계산해서 곡면의 변화량으로 사용할 수 있다.

 

곡면의 변화량 = \(r_{t+1} = \triangledown f(x_1)^2+ \triangledown f(x_2)^2+ \triangledown f(x_3)^2+...+ \triangledown f(x_n)^2\)

 

SGD의 파라미터 업데이트 식에서 학습률 \(\alpha \)를 곡면의 변화량의 제곱근 \(\sqrt{r_{t+1}}\)로 나눠주면 적응적 학습률이 된다.

아래 수식은 적응적 학습률이 반영된 파라미터 업데이트 식으로 '그레디언트의 제곱을 누적하는 식'과 '파라미터 업데이트 식'으로 정의된다.

 

\begin{align*} r_{t+1} &= r_t + \triangledown f(x_t)^2 \\x_{t+1} &= x_t - \frac{\alpha }{\sqrt{r_{t+1}} + \epsilon }\odot \triangledown f(x_t)\end{align*}

 

AdaGrad는 모델의 파라미터 별로 곡면의 변화량을 계산하기 때문에 파라미터 별로 개별 학습률을 가지는 효과가 생긴다. 이 때문에 조금 더 정확하고 빠르게 최적해로 수렴할 수 있다.

 

3.1 학습 조기 중단 현상

AdaGrad에는 한 가지 치명적인 문제가 있다. 곡면의 변화량을 전체 경로의 기울기 벡터의 크기로 계산하므로 학습이 진행될수록 곡면의 변화량은 점점 커지고 때문에 학습률이 점점 작아진다는 점이다. 만일 경사가 매우 가파른 위치에서 학습을 시작했다면, 초반부터 적응적 학습률이 급격히 감소하기 시작해서 조기에 학습이 중단될 수 있다. 이처럼 조기에 학습이 중단되는 문제를 해결하기 위해 RMSProp이 제안되었다.

 


4. RMSProp(Root Mean Square Propagation)

RMSProp은 최근 경로의 곡면 변화량에 따라 학습률을 적응적으로 정하는 알고리즘이다.

 

 

곡면 변화량을 측정할 때 전체 경로가 아닌 최근 경로의 변화량을 측정하면 곡면 변화량이 누적되어 계속해서 증가하는 현상을 없앨 수 있다.

RMSProp은 최근 경로의 곡면 변화량을 측정하기 위해 지수가중이동평균을 사용한다. 

아래 식은 RMSporp의 파라미터 업데이트 식으로 '지수가중이동평균을 구하는 식'과 '파라미터 업데이트 식'으로 정의된다.

\(\beta \)는 가중치로 보통 0.9를 사용한다.

 

\begin{align*} r_{t+1} &= \beta r_t + (1-\beta )\triangledown f(x_t)^2 \\x_{t+1} &= x_t - \frac{\alpha }{\sqrt{r_{t+1}} + \epsilon }\odot \triangledown f(x_t)\end{align*}

 

4.1 최근 경로의 곡면 변화량

RMSProp의 첫 번째 식인 \(r_{t+1}\)에 대한 점화식을 풀어보자. 먼저 \(r_{t} = \beta r_{t-1}+(1-\beta )\triangledown f(x_{t-1})^2\)를 첫 번째 식에 대입하여 풀어보면 아래와 같다.

 

\begin{align*} r_{t+1} &= \beta r_t + (1-\beta )\triangledown f(x_t)^2 \\ &= \beta (\beta r_{t-1}+(1-\beta )\triangledown f(x_{t-1})^2)+(1-\beta )\triangledown f(x_{t})^2 \\ &=\beta ^2 r_{t-1}+\beta (1-\beta )\triangledown f(x_{t-1})^2+(1-\beta )\triangledown f(x_t)^2 \\ &=\beta ^2 r_{t-1}+(1-\beta )(\triangledown f(x_t)^2 + \beta \triangledown f(x_{t-1})^2)\end{align*}

 

같은 방식으로 \(r_{t-1}\)부터 \(r_1\)까지 순서대로 대입하면 아래와 같이 식이 정리된다.

 

\[r_{t+1} = \beta ^tr_1+(1-\beta )(\triangledown f(x_t)^2+\beta \triangledown f(x_{t-1})^2 + ... + \beta ^{t-1}\triangledown f(x_1)^2))\]

 

위 식의 괄호 안을 보면 \(x_1\) 지점에서 첫 번째 그레디언트 제곱 \(\triangledown f(x_1)^2\)의 가중치는 \(\beta^{t-1}\)이고 \(x_2\) 지점에서 두 번째 그레디언트 제곱 \(\triangledown f(x_2)^2\)의 가중치는 \(\beta^{t-2}\)이다. 현재 시점에서 멀어질수록 가중치가 1, \(\beta^{1}\),..., \(\beta^{t-2}\), \(\beta^{t-1}\) 형태의 \(\beta = 0.9\)의 지수승으로 변화하면서 점점 0으로 수렴한다. 즉 최근 경로의 그레디언트는 많이 반영되고, 오래된 경로의 그레디언트는 작게 반영된다.

 

위와 같이 RMSProp에서 사용되는 지수가중이동평균은 그레디언트 제곱에 곱해지는 가중치가 지수승으로 변화하기 때문에 지수가중평균이라고 부르며, 단계마다 새로운 그레디언트 제곱의 비율을 반영하여 평균이 업데이트되기 때문에 지수가중이동평균이라고 부른다.

 

4.2 학습 초기 경로 편향 문제

RMSProp은 곡면 변화량을 측정하기 위해 지수 가중이동평균을 사용한다. 

이 식으로 학습하게 되면 첫 번째 단계에서 출발 지점으로부터 멀리 떨어진 곳으로 이동하는 초기 경로의 편향 문제가 생긴다. 이러한 현상이 왜 나타나는지 아래의 식으로 확인해보자.

 

훈련을 시작할 때 초기 지수가중이동평균 \(r_0\)의 값은 0이다. 지수가중이동평균의 가중치가\(\beta = 0.99\)라고 가정하고 이 상태에서 첫 단계를 실행하면 지수가중이동평균은 아래와 같다.

 

\begin{align*} \beta &= 0.99 \\ r_0 &= 0 \\ r_1 &= \beta r_0 + (1-\beta )\triangledown f(x_0)^2 \\ &= 0.01\triangledown f(x_0)^2 \end{align*}

 

이때 \(r_1\)식의 0.01은 값이 작기 때문에 \(r_1\)도 작아질 수 있다. \(r_1\)이 작아지면 적응적 학습률이 커져 출발 지점에서 멀리 떨어진 곳으로 이동하게 되고 운이 나쁘면 최적화에 좋지 않은 곳으로 갈 수도 있다.

이러한 문제점을 해결하기 위해 Adam(Adaptive Moment Estimation)이 제안되었다.

 


5. Adam(Adaptive Moment Estimation)

Adam은 SGD 모멘텀과 RMSProp이 결합된 형태로, 진행하던 속도에 관성을 주고 동시에 최근 경로 곡면의 변화량에 따라 적응적 학습률을 가지는 알고리즘이다.

Adam은 관성에 대한 장점과 적응적 학습률에 대한 장점을 모두 갖는 전략을 취한다. 그래서 최적화 성능이 우수하고 잡음 데이터에 대해 민감하게 반응하지 않는 성질이 있다. 그리고 두 알고리즘을 합치면서 학습 초기 경로가 편향되는 RMSProp의 문제를 해결했다.

 

Adam을 식으로 표현하면 아래와 같다. 첫 번째 식은 1차 관성으로 속도를 계산한다. 두 번째 식은 2차 관성으로서 그레디언트 제곱의 지수가중이동평균을 구한다. \(\beta_1 \)과 \(\beta_2 \)는 가중치로 보통 0.9나 0.99를 사용한다.

 

\begin{align*} v_{t+1} &= \beta_1 v_t + (1-\beta_1 )\triangledown f(x_t) \\ r_{t+1} &= \beta_2 r_t + (1-\beta_2 )\triangledown f(x_t)^2 \\ x_{t+1} &= x_t - \frac{\alpha }{\sqrt{r_{t+1}} + \epsilon }\odot v_{t+1} \end{align*}

 

5.1 초기 경로의 편향 제거

초기 경로의 편향 문제는 RMSProp이 가지는 문제이다. Adam은 편향을 제거하기 위해 \(v_{t+1}=\frac{v_{t+1}}{(1-\beta _1)}, r_{t+1}=\frac{r_{t+1}}{(1-\beta _1)}\)를 적용해서 알고리즘을 개선했다. 평향이 어떻게 사라지는지 아래 수식을 따라가며 확인해보자.

 

\begin{align*} \beta_1 &= 0.9, \beta_2 = 0.99 \\ v_0 &= 0, r_0 = 0 \\ v_1 &= \frac{\beta_1 v_0 + (1-\beta_1 )\triangledown f(x_0)}{(1-\beta _1)} \\ r_1 &=\frac{\beta_2 r_0 + (1-\beta_2 )\triangledown f(x_0)^2}{(1-\beta _2)} \\ v_1 &=  \triangledown f(x_0) \\ r_1 &= \triangledown f(x_0)^2\end{align*}

 

RMSProp의 첫 번째 단계에서 지수가중이동평균이 \(r_{1}= 0.01\triangledown f(x_0)^2 \)로 계산된 결과와는 다르게 Adam에서는 0.01을 상쇄하고 \(r_{1}= \triangledown f(x_0)^2 \) 이 된다. 따라서 \(r_1\)은 그레디언트의 제곱이므로 아주 작아질 일은 없다. 이로써 학습 초반에 학습률이 급격히 커지는 편향이 제거되고, 훈련이 진행될수록 \(\beta_1 \)과 \(\beta_2 \)는 1보다 작기 때문에 두 식의 분모 \((1 - \beta_1) \)과 \((1 - \beta_2) \)는 1에 수렴하므로 원래 알고리즘으로 바뀐다.

댓글