오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-09 00:00
관리 메뉴

우노

[DL] Momentum, NAG, AdaGrad, RMSProp, Adam 본문

AI/Deep Learning

[DL] Momentum, NAG, AdaGrad, RMSProp, Adam

운호(Noah) 2021. 1. 21. 13:21
  • 이전 포스트에서는 배치 경사하강법, 확률적 경사하강법, 미니 배치 확률적 경사하강법에 대해서 다뤘었다.

개요

  • 기존의 경사하강법(Gradient descent method)에서 특정 데이터만을 샘플링하여 학습하는 확률적 경사 하강법(SGD)은, deep neural network를 학습시키기 위해 주로 이용되고 있는 최적화 기법이다.

  • 미니 배치 단위로 정의되는 loss function을 L이라 할 때, SGD를 통한 neural network의 i번째 뉴런의 j번째 weight(w_ij)는 다음과 같이 update된다.

  • 이 때, η 는 learning rate 라고 하는 hyperparameter이고

  • ∂L / ∂w_ij(t) 는 gradient라고 하는 요소로써, weight를 어느 방향으로 update할지를 결정한다.

  • 따라서, 확률적 경사하강법(SGD)은 learning rate와 gradient라는 두 가지 요소로 구성된다는 것을 알 수 있다.

  • 최근에는 deep neural network를 더욱 효율적으로 학습시키기 위해 SGD의 변형들이 제안되었다.

  • SGD의 변형들은 크게 두 가지 분류로 나눌 수 있는데

  • 첫 번째는 momentum이라는 개념을 이용하여 gradient를 조절하는 알고리즘이고

  • 두 번째는 learning rate를 조절하는 알고리즘이다.

  • 아래의 그림은 이러한 분류에 따라 SGD의 변형들을 분류한 것이다.

Momentum

  • 기존의 SGD는 위의 식(1) 과 같이 현재 시간의 gradient만 이용해서 weight를 update한다.

  • 이와 반대로 momentum 기반의 SGD는, 이전 시간의 gradient(v_ij(t)) 까지도 고려하여 weight를 update한다.

  • momentum(v_ij(t))을 이용한 weight update 산식은 다음과 같다.

  • 이 때, weight(w_ij(t))의 update 방향을 결정하는 momentum(v_ij(t))을 구하는 산식 다음과 같다.

    • β 는 일반적으로 0.9로 설정되는 hyperparameter로써, 이전 gradient의 영향력을 조절한다.
    • 따라서, β * v_ij(t-1) 은 이전 시간의 gradient 이고
    • ∂L / ∂w_ij(t-1) 은 현재 시간의 gradient 이다.
  • momentum(v_ij(t))은 아래와 같이, 현재 시간까지의 모든 gradient를 고려한 것과 동일하게 표현할 수 있다.

    • 따라서, momentum은, 현재 시간의 gradient인 ∂L / ∂w_ij(t) 에는 가장 높은 중요도를
    • 그 이전 시간의 gradient인 ∂L / ∂w_ij(t-1) 에는 두 번째로 높은 중요도를 가지는 방식으로
    • 이전 시간의 모든 gradient를 고려하여 방향을 설정하도록 만든다.
    • 즉, 지수 가중 평균 방식이다.
  • 즉, Momentum 기반의 SGD update rule은, 이전 시간에 A라는 방향으로 움직이고 있었던 물체를 B라는 방향으로 움직이도록 변경하여도, 일정 부분은 A라는 방향으로 계속 움직이려고 하는 힘이 작용하는 것을 나타낸 것이다.

  • 아래 그림 2는 기본적인 SGD를 이용한 최적화 과정을 나타낸다.

    • SGD은 기본적으로 learning rate의 크기만큼 gradient의 방향으로 이동하기 때문에
    • 많은 경우에 최적점의 방향으로 곧장 이동하는 것이 아니라
    • 그림 2와 같이 세로축으로 진동하며 이동한다.
    • Momentum을 이용하는 경우에는 이러한 비효율적인 이동을 최소화 할 수 있다.
  • 아래 그림 3은 SGD와 momentum을 결합한 최적화 과정을 나타낸다.

    • 최적화 과정을 보면, 세로축으로 진동을 하면서도 식(4) 처럼 Momentum은 이전 시간의 이동 방향을 저장하기 때문에
    • 모든 진동 방향에는 optimum으로 이동하고자 하는, 가로축 방향의 이동 또한 존재한다는 것이다.
    • 이러한 momentum의 작용에 의해 위 그림처럼 momentum을 이용하는 SGD는, 그림 2의 기본적인 SGD 보다 더 빠르게 optimum으로 찾아갈 수 있는 것이다.
  • 특징

    • Momentum을 통해 기대할 수 있는 다른 이점은, Local optimum을 회피할 수도 있다는 것이다.
    • Local optimum에 빠지면, 알고리즘이 Local optimum 주위를 계속해서 반복하는 현상이 발생한다.
    • 이 때 momentum을 이용한다면, momentum이 일종의 관성처럼 작용하여 Local optimum 주변을 빠져나갈 수 있게 되는 것이다.
    • 그러나 momentum을 이용한다고 해서, global optimum을 찾을 수 있는 것은 아니며
    • 보통 실제로 머신 러닝 연구를 할 때는 Local optimum을 회피하겠다는 목적으로 momentum을 사용하지는 않는다.

NAG (Nesterov accelerated gradient)

  • 기본적인 momentum 방식은 이동을 중지해야 하는 지점에 도달해도, momentum에 의해 해당 지점을 지나칠 수 있다는 문제가 있다.

  • NAG는 이러한 문제점을 해결하기 위해 제안되었다.

  • NAG의 weight update 산식은 아래와 같이 기본적인 momentum 방식과 동일하다.

  • 하지만, NAG에서는 weight(w_ij(t))의 update 방향을 결정하는 momentum(v_ij(t)) 계산 시

  • momentum에 의해 발생하는 변화를 미리 보고 momentum을 결정한다.

  • momentum 산식은 아래와 같다.

    • β 는 일반적으로 0.9로 설정되는 hyperparameter로써, 이전 gradient의 영향력을 조절한다.
    • 따라서, β * v_ij(t-1) 은 이전 시간의 gradient 이고
    • ∂L / ∂w^_ij(t) 은 momentum 이 적용된 후의 gradient 이다.
  • 이 때, wˆ_ij(t)의 산식은 아래와 같다.

  • 아래 그림은 weight를 update하는 방향을 설정하는데 있어, 기본적인 momentum 방식과 NAG의 차이를 보여준다.

    • 기본적인 momentum 방식은, 이전의 시간의 momentum과 독립적으로 현재 시간의 gradient를 더함으로써 다음 시간의 gradient를 정했다.
    • 반면에 NAG에서는, 먼저 momentum 만큼 update를 했다고 가정한 뒤에 해당 지점에서 gradient를 계산하고, 이를 기반으로 다음 gradient의 update의 방향을 결정한다.
    • 즉, 기본적인 momentum 방식은 스텝을 계산해서 움직인 후, 이전에 내려 오던 관성 방향으로 다음 스텝을 밟는 것이며
    • NAG 방식은, 일단 관성 방향으로 먼저 움직이고, 움직인 자리에서 스텝을 계산한 뒤 다음 스텝을 밟는 것이다.
    • 기본적인 momentum 방식은, 현재의 가속도를 고려하지 않고 속도를 설정한다면, NAG는 현재의 가속도를 어느정도 고려하여 속도를 설정한다고 생각할 수 있다.
    • 이러한 update 방식을 통해 NAG는 momentum을 이용한 빠른 이동이라는 장점을 유지하면서도 momentum에 의해 과하게 이동하는 단점을 완화했다.

AdaGrad (Adaptive Gradient)

  • AdaGrad는 2011년에 제안된 SGD 기반의 알고리즘으로써, 최적화 과정을 효율적으로 만들기 위해

  • weight 업데이트 시, 고정된 learning rate가 아니라 각각의 weight마다 적합한 learning rate를 자동으로 설정한다.

  • 학습 과정에서 변화가 많았던 매개변수들은 optimum의 근처에 있을 확률이 높기 때문에, learning rate를 작게 함으로써 더욱 세밀하게 update가 되도록 만들고,

  • 변화가 적었던 매개변수들은 optimum에서 멀리 벗어나 있을 확률이 높기 때문에, learning rate를 크게 함으로써 더욱 빠르게 optimum으로 수렴하도록 만드는 것이다.

  • 경사 하강법에서 매개변수의 gradient(∂L / ∂w_ij(t)) 크기는, 매개변수가 현재 시간에 얼마나 많이 변화되었는지를 나타낸다.

  • 따라서 AdaGrad는 이러한 점을 이용하여, 매개변수가 현재 시간까지 얼마나 많이 변화되었는지를 다음과 같이 g_ij(t)로 나타낸다.

    • g_ij(t-1) 는 매개변수가 이전 시간까지 얼마나 많이 변화되었는지를 의미한다.
    • ∂L / ∂w_ij(t) 는 매개변수가 현재 시간에 얼마나 많이 변화되었는지를 의미한다.
    • 이 둘을 더해, 매개변수가 현재 시간까지 얼마나 많이 변화되었는지를 g_ij(t)로 나타낼 수 있다.
  • 매개변수가 현재 시간까지 얼마나 변화(g_ij(t))해왔는지를 계산한 다음에는, 아래의 식과 같이 w_ij(t)를 update한다.

    • 이 때, ϵ은 일반적으로 10^−8와 같은 매우 작은 수로 설정되는 상수로써, 0으로 나누는 것을 방지하기 위해 추가되었다.
    • 위 식을 보면, weight가 현재 시간까지 얼마나 많이 변화했었는지를 의미하는 g_ij(t)가 클 수록, 전체 learning rate인 (η / √g_ij(t) + ϵ )가 작아지는 것을 볼 수 있다.
    • 즉, learning rate 가 현재까지 많이 변화했으면, 줄이는 방향으로 진행된다는 것이다.
  • 특징

    • AdaGrad는 learning rate decay와 같은 방법들을 이용하여 learning rate를 직접적으로 조절하지 않아도 된다는 장점이 있다.
    • 또한, 모든 변수에 일괄적으로 동일한 learning rate를 적용하는 기존의 SGD 기반 알고리즘과는 다르게, AdaGrad는 각 변수들마다 적합한 learning rate를 자동으로 설정한다는 이점도 존재한다.
    • 그러나 AdaGrad는 학습이 오래 진행될 경우에는 변수의 update가 이루어지지 않는다는 문제점이 존재한다.
    • AdaGrad에서 learning rate를 조절하는 g_ij는 어떠한 값을 제곱한 것이 계속 더해지기 때문에 시간이 지날 수록 증가하고,
    • 이에 따라 learning rate 또한 시간에 따라 감소하여, 시간이 어느 정도 지난 뒤에는 learning rate가 매우 작아져 update가 이루어지지 않는다.
    • 이러한 문제점을 해결하기 위해 제안된 알고리즘이 AdaDelta와 RMSProp이다.

RMSProp (Root Mean Square Propagation)

  • RMSProp은 학습이 진행될 수록 learning rate가 극단적으로 감소하는 AdaGrad의 문제점을 해결하기 위해 제안되었다.

  • AdaGrad에서는 g_ij(t) 산식에서

  • 매개변수가 이전 시간까지 얼마나 많이 변화되었는지를 의미하는 g_ij(t-1) 와

  • 매개변수가 현재 시간에 얼마나 많이 변화되었는지를 의미하는 ∂L / ∂w_ij(t) 를 단순히 더해서 사용했다.

  • 그러나 RMSProp에서는, g_ij(t-1) 와 ∂L / ∂w_ij(t) 에 가중치를 부여해서 다음과 같이 사용한다.

    • 시간이 흐름에 따라 오래된 데이터의 영향이 지수적으로 감쇠하도록 설계한 것이며, 이를 지수 가중 평균 방식이라고 부른다.
  • 그 다음, weight update는 AdaGrad와 동일하게 진행한다.

    • 이 식에서 ϵ은 10^−8과 같은 매우 작은 수로 설정된다.
    • AdaGrad에서의 g_ij는 현재 시간까지의 변화량의 합으로 정의되기 때문에, 시간이 지날수록 증가하고, 이에 따라 learning rate는 감소한다.
    • 그러나, RMSProp에서의 g_ij는 이전의 변화량과 현재의 변화량에 가중치를 주어, 현재 변화량이 더 높은 경향을 줄 수 있도록 설계 되어있기 떄문에, learning rate가 급격하게 감소하는 현상을 방지할 수 있다.
  • 예를 들어 β가 0.9인 경우, g_ij(t)는 다음과 같이 계산된다.

    • 이전 변화량의 경향은 점점 작아지는 것을 볼 수 있다.

Adam (Adaptive Momentum Estimation)

  • 아마도 Adam은 현재 deep neural network의 학습에 가장 광범위하게 이용되고 있는 알고리즘일 것이다.

  • 딥 러닝 실험에선 일반적으로 Adam이 가장 좋은 학습 성능을 보인다.

  • Adam을 간단히 말하자면, Momentum과 RMSProp를 합친 것 같은 알고리즘이다.

  • Momentum은 이전 gradient의 경향을 사용하는 알고리즘이고

  • RMSProp은 이전 learning rate의 경향을 사용하는 알고리즘이다.

  • 즉 momentum의 개념을 이용하지만, gradient의 경향(momentum)을 나타내는 v_ij와 learning rate의 경향을 나타내는 g_ij는 다음과 같이 지수 가중 평균으로 계산된다.

    • 이 때, β1, β2 는 일반적으로 각각 0.9와 0.999로 설정된다.
  • Adam의 논문에서는, v_ij와 g_ij를 그대로 이용하는 것이 아니라, unbiased expectation의 형태로 이용하기 위해 다음과 같이 변형한다.

  • 이 식에서 β_1(t)와 β_2(t)는 각각 β1과 β2를 t번 곱한 것이다.

  • Unbiased expectation이 식 (15, 16)과 같이 계산되는 이유는 다음 링크에 설명되어 있다.

  • 최종적으로 w_ij에 대한 update는 아래 식과 같이 이루어진다.

참고

Comments