logo

적응적 학습률: AdaGrad, RMSProp, Adam 📂머신러닝

적응적 학습률: AdaGrad, RMSProp, Adam

개요1 2

경사하강법에서 사용되는 적응적 학습률과 이를 적용한 모델인 AdaGrad, RMSProp, Adam에 대해 설명한다.

설명

경사하강법에서 학습률learning rate은 파라매터가 수렴하는 속도, 메소드의 성공 여부 등을 결정하는 중요한 파라매터이다. 흔히 $\alpha$, $\eta$로 표기하며 파라매터를 업데이트할 때, 그래디언트를 얼마나 반영할 것인지를 결정하는 인자이다.

학습률에 따른 최적화 양상: 큰 학습률(좌), 작은 학습률(우)

$$ \boldsymbol{\theta}_{i+1} = \boldsymbol{\theta}_{i} - \alpha \nabla L (\boldsymbol{\theta}_{i}) $$

기본적인 경사하강법에서 $\alpha$는 상수로 설명되는데, 이 경우에 그래디언트는 벡터이므로 다음과 같이 모든 변수(파라매터)에 대해서 같은 학습률이 적용된다.

$$ \alpha \nabla L (\boldsymbol{\theta}) = \alpha \begin{bmatrix} \dfrac{\partial L}{\partial \theta_{1}} & \dfrac{\partial L}{\partial \theta_{2}} & \cdots & \dfrac{\partial L}{\partial \theta_{k}} \end{bmatrix} = \begin{bmatrix} \alpha\dfrac{\partial L}{\partial \theta_{1}} & \alpha\dfrac{\partial L}{\partial \theta_{2}} & \cdots & \alpha\dfrac{\partial L}{\partial \theta_{k}} \end{bmatrix} $$

따라서 학습률을 $\boldsymbol{\alpha} = (\alpha_{1}, \alpha_{2}, \dots, \alpha_{k})$와 같은 벡터로 생각하여, 그래디언트 항을 아래의 식과 같이 일반화 할 수 있다.

$$ \boldsymbol{\alpha} \odot \nabla L (\boldsymbol{\theta}) = \begin{bmatrix} \alpha_{1}\dfrac{\partial L}{\partial \theta_{1}} & \alpha_{2}\dfrac{\partial L}{\partial \theta_{2}} & \cdots & \alpha_{k}\dfrac{\partial L}{\partial \theta_{k}} \end{bmatrix} $$

여기서 $\odot$은 행렬의 아다마르 곱(성분별 곱)이다. 이런 방식으로 파라매터마다 다르게 적용되는 학습률 $\boldsymbol{\alpha}$를 적응적 학습률adaptive learning rate이라 한다. 아래의 기법들은 적응적 학습률을 그래디언트에 의존하여 결정하므로 $\boldsymbol{\alpha}$는 다음과 같은 함수라고 볼 수 있다.

$$ \boldsymbol{\alpha} (\nabla L(\boldsymbol{\theta})) = \begin{bmatrix} \alpha_{1}(\nabla L(\boldsymbol{\theta})) & \alpha_{2}(\nabla L(\boldsymbol{\theta})) & \dots & \alpha_{k}(\nabla L(\boldsymbol{\theta})) \end{bmatrix} $$

아래에서는 AdaGrad, RMSProp, Adam을 소개한다. 여기에서 중요한 사실은 모멘텀 기법을 포함한 이러한 옵티마이저들 사이에 절대적 우위는 없다는 것이다. 분야마다, 작업마다 최적의 옵티마이저가 다르므로, 단순히 "무엇이 제일 좋은지"에 대한 판단이나 질문은 좋지 않다. 본인이 속한 필드에서 주로 사용하는 것이 무엇인지를 알아보는 것이 도움이 되며, 그런게 없거나 잘 모르겠다면 SGD+모멘텀 혹은 Adam을 써보는 것이 무난하다.

AdaGrad

AdaGrad는 논문 "(Duchi et al., 2011)Adaptive subgradient methods for online learning and stochastic optimization"에서 소개된 적응적 학습률 기법이다.이름은 adaptive gradient의 줄임말로 [에이다그라드] 혹은 [아다그라드]로 읽는다. AdaGrad에서는 각 파라매터에 대한 학습률을 그래디언트에 반비례하도록 설정한다. 벡터 $\mathbf{r}$을 다음과 같이 두자.

$$ \mathbf{r} = (\nabla L) \odot (\nabla L) = \begin{bmatrix} \left( \dfrac{\partial L}{\partial \theta_{1}} \right)^{2} & \left( \dfrac{\partial L}{\partial \theta_{2}} \right)^{2} & \cdots & \left( \dfrac{\partial L}{\partial \theta_{k}} \right)^{2} \end{bmatrix} $$

전역 학습률global learning rate $\epsilon$, 임의의 작은 수 $\delta$에 대해 적응적 학습률 $\boldsymbol{\alpha}$는 다음과 같다.

$$ \boldsymbol{\alpha} = \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}}} $$

수식에서 보이듯이 그래디언트의 성분이 큰 변수에 대해서는 학습률을 작게, 그래디언트의 성분이 작은 변수에 대해서는 학습률을 크게 적용한다. $\delta$는 짐작하듯이 분모가 $0$ 또는 너무 작은 수가 되는 것을 방지하는 역할을 하며, $10^{-5} \sim 10^{-7}$사이의 값을 많이 사용한다고 한다. 또한 반복마다 학습률은 누적된다. $i$번째 반복에서의 그래디언트를 $\nabla L _{i} = \nabla L (\boldsymbol{\theta}_{i})$라고 할 때,

$$ \begin{align} \mathbf{r}_{i} &= (\nabla L_{i}) \odot (\nabla L_{i}) \nonumber \\ \boldsymbol{\alpha}_{i} &= \boldsymbol{\alpha}_{i-1} + \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}_{i}}} = \sum_{j=1}^{i} \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}_{j}}} \\ \boldsymbol{\theta}_{i+1} &= \boldsymbol{\theta}_{i} - \boldsymbol{\alpha}_{i} \odot \nabla L_{i} \nonumber \end{align} $$

| 알고리즘: AdaGrad ||| |-|-|-| | In | 전역 학습률 $\epsilon$, 작은 양수 $\delta$, 에포크 $N$ || | 1. | 파라매터 $\boldsymbol{\theta}$를 임의의 값으로 초기화한다. || | 2. | 학습률을 $\boldsymbol{\alpha} = \mathbf{0}$로 초기화한다. || | 3. | **for $i = 1, \cdots, N$ do** || | 4. |    $\mathbf{r} \leftarrow \nabla L(\boldsymbol{\theta}) \odot \nabla L(\boldsymbol{\theta})$ | # 그래디언트를 계산하고 각 성분을 제곱함 | | 5. |    $\boldsymbol{\alpha} \leftarrow \boldsymbol{\alpha} + \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}}}$ | # 적응적 학습률 업데이트 | | 6. |    $\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} - \boldsymbol{\alpha} \odot \nabla L(\boldsymbol{\theta})$ | # 파라매터 업데이트 | | 7. | **end for** ||

RMSProp

RMSProp는 Root Mean Square Propagation의 줄임말로, 제프리 힌튼Geoffrey Hinton의 강의 Neural networks for machine learning에서 제안된 적응적 학습률 기법이다. 기본적으로 AdaGrad의 변형이며, 더해지는 항이 지수적으로 감소하도록 $(1)$의 덧셈을 가중합으로 바꾼 것 밖에 없다. $\rho \in (0,1)$에 대해,

$$ \boldsymbol{\alpha}_{i} = \rho \boldsymbol{\alpha}_{i-1} + (1-\rho) \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}_{i}}} = (1-\rho) \sum_{j=1}^{i} \rho^{i-j} \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}_{j}}} $$

주로 $\rho = 0.9, 0.99$와 같은 큰 값이 사용된다.

알고리즘: RMSProp
In전역 학습률 $\epsilon$, 작은 양수 $\delta$, 감쇠율 $\rho$, 에포크 $N$
1.파라매터 $\boldsymbol{\theta}$를 임의의 값으로 초기화한다.
2.학습률을 $\boldsymbol{\alpha} = \mathbf{0}$로 초기화한다.
3.for $i = 1, \dots, N$ do
4.   $\mathbf{r} \leftarrow \nabla L(\boldsymbol{\theta}) \odot \nabla L(\boldsymbol{\theta})$# 그래디언트를 계산하고 각 성분을 제곱함
5.   $\boldsymbol{\alpha} \leftarrow \rho \boldsymbol{\alpha} + (1-\rho) \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}}}$# 적응적 학습률 업데이트
6.   $\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} - \boldsymbol{\alpha} \odot \nabla L(\boldsymbol{\theta})$# 파라매터 업데이트
7.end for

Adam

Adamderives from "apative moments"은 논문 "(Kingma and Ba, 2014)Adam: A method for stochastic optimization"에서 소개된 옵티마이저이다. 적응적 학습률과 모멘텀 기법을 합친 것으로 RMSProp + momentum으로 볼 수 있다. RMSProp와 모멘텀을 이해했다면 Adam을 이해하는 것은 어렵지 않다. RMSProp, 모멘텀, Adam을 각각 비교해보면 다음과 같다. $\nabla L_{i} = \nabla L(\boldsymbol{\theta}_{i})$라고 할 때,

Momentum$\mathbf{p}_{i} = \beta_{1}\mathbf{p}_{i-1} + \nabla L_{i} \quad (\mathbf{p}_{0}=\mathbf{0}) \\ \boldsymbol{\theta}_{i+1} = \boldsymbol{\theta}_{i} - \alpha \mathbf{p}_{i}$
RMSProp$\mathbf{r}_{i} = \nabla L_{i} \odot \nabla L_{i} \\ \boldsymbol{\alpha}_{i} = \beta_{2} \boldsymbol{\alpha}_{i-1} + (1-\beta_{2})\dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}_{i}}} \quad (\boldsymbol{\alpha}_{0}=\mathbf{0})\\ \boldsymbol{\theta}_{i+1} = \boldsymbol{\theta}_{i} - \boldsymbol{\alpha}_{i} \odot \nabla L_{i}$
Adam$\mathbf{p}_{i} = \beta_{1}\mathbf{p}_{i-1} + (1-\beta_{1}) \nabla L_{i-1} \quad (\mathbf{p}_{0}=\mathbf{0}) \\\\[0.5em] \hat{\mathbf{p}}_{i} = \dfrac{\mathbf{p}_{i}}{1-(\beta_{1})^{i}} \\\\[0.5em] \mathbf{r}_{i} = \beta_{2} \mathbf{r}_{i-1} + (1-\beta_{2}) \nabla L_{i} \odot \nabla L_{i} \\\\[0.5em] \hat{\mathbf{r}}_{i} = \dfrac{\mathbf{r}}{1-(\beta_{2})^{i}} \\\\[0.5em] \hat{\boldsymbol{\alpha}}_{i} = \dfrac{\epsilon}{\delta + \sqrt{\hat{\mathbf{r}}_{i}}} \\\\[0.5em] \boldsymbol{\theta}_{i+1} = \boldsymbol{\theta}_{i} - \hat{\boldsymbol{\alpha}_{i}} \odot \hat{\mathbf{p}_{i}} $

$\hat{\mathbf{p}}_{i}$와 $\hat{\mathbf{r}}_{i}$를 계산할 때 $1 - \beta^{i}$를 나눠주는 이유는 $\mathbf{p}_{i}$와 $\mathbf{r}_{i}$은 가중합이기 때문에 이를 가중평균으로 만들어주기 위함이다.

알고리즘: Adam
In전역 학습률 $\epsilon$ (권장되는 값은 $0.001$), 에포크 $N$
작은 상수 $\delta$ (권장되는 값은 $10^{-8}$)
감쇠율 $\beta_{1}, \beta_{2}$ (권장되는 값은 각각 $0.9$와 $0.999$)
1.파라매터 $\boldsymbol{\theta}$를 임의의 값으로 초기화한다.
2.학습률을 $\boldsymbol{\alpha} = \mathbf{0}$로 초기화한다.
3.모멘텀을 $\mathbf{p} = \mathbf{0}$으로 초기화한다.
4.for $i = 1, \dots, N$ do
5.   $\mathbf{p} \leftarrow \beta_{1}\mathbf{p} + (1-\beta_{1}) \nabla L$# 가중합으로 모멘텀 업데이트
6.   $\hat{\mathbf{p}} \leftarrow \dfrac{\mathbf{p}}{1-(\beta_{1})^{i}}$# 합을 가중평균으로 보정
7.   $\mathbf{r} \leftarrow \beta_{2} \mathbf{r} + (1-\beta_{2}) \nabla L \odot \nabla L$# 가중합으로 그래디언트 제곱벡터 업데이트
8.   $\hat{\mathbf{r}} \leftarrow \dfrac{\mathbf{r}}{1-(\beta_{2})^{i}}$# 합을 가중평균으로 보정
9.   $\hat{\boldsymbol{\alpha}} \leftarrow \dfrac{\epsilon}{\delta + \sqrt{\hat{\mathbf{r}}}}$# 적응적 학습률 업데이트
10.   $\boldsymbol{\theta} = \boldsymbol{\theta} - \hat{\boldsymbol{\alpha}} \odot \hat{\mathbf{p}}$# 파라매터 업데이트
11.end for

  1. Ian Goodfellow, Deep Learning, 8.5 Algorithms with Adaptive Learning Rates ↩︎

  2. 오일석, 기계 학습(MACHINE LEARNING) (2017), ch 5.4 적응적 학습률 ↩︎