Loading [MathJax]/jax/output/CommonHTML/jax.js

기본기 다지기/Optimization

[기본이론] 최적화 방법5- RMSProp (수식o, 그래프o)

syveany 2024. 11. 6. 13:03

최적화 방법5- RMSProp

앞에서 모멘텀(Momentum)까지 정리했다. 이어서 RMSProp에 대해서 정리하려고 한다.

 

~ 목차 ~

0. 서론- 왜 갑자기 최적화를 공부하고 있는가
1. 최적화란
2. 종류
  2.1 경사하강법(GD)
  2.2 확률적 경사하강법(SGD)
  2.3 Momentum
  2.4 AdaGrad
  2.5 RMSProp
  2.6 Adam

 

 

2. 종류 

  -AdaGrad의 단점(학습이 진행될수록 기울기 제곱값이 누적되어 학습률이 작아짐)을 개선하기 위해 RMSProp이 제안되었다.

  2.5 RMSProp

  - RMSPropRoot Mean Square Propagation의 줄임말로, 기울기 제곱의 지수 이동 평균을 사용해서 학습률을 조절하는 방법이다. (c.f. 지수 이동 평균: 최근 데이터에 가중치를 주면서 과거의 데이터는 줄여나가는 가중 평균)

 

  - 잠깐 질문..

    Q1: 기울기 제곱의 지수 이동 평균을 사용할까?

     - 사실 이전에 Rprop(Resilient Propagation)라는 최적화 방법이 제안되었었다. 경사하강법을 개선한 방법으로, 기울기가 크면 학습률을 작게 하고 작으면 학습률을 크게 하는 방법이다. 하지만 Rprop를 미니배치 학습에서 적용하게 되면 각 미니배치마다의 기울기 크기가 달라질 수 있기 때문에 학습이 일관되지 않게 이루어진다는 문제가 있었다. 이를 보완하기 위해 기울기 제곱의 이동 평균을 사용해서 기울기 크기를 정규화하는 방법인 RMSProp이 제안되었다 [2].

 

  - 수식을 보면서 알아가보자. RMSProp의 가중치 매개변수 업데이트 공식은 아래와 같다.

 

hβh+(1β)LWLW

(β: 과거 값에 대한 가중치)

 

WWη1h+ϵLW

 

     - AdaGrad의 hh+LWLW과 비교했을 때,

        hLWLW에 각각 β(1β)가 곱해졌음을 알 수 있다. 이 부분이 바로 지수 이동 평균을 나타낸다.

     - 여기서 β과거의 값에 부여하는 가중치로, 보통 0.9로 설정된다. β값이 클수록 과거값이 많이 반영된다.

 

  - RMSProp의 장단점은 아래와 같다.

 

    (장점) 학습이 계속 진행되어도 안정적인 학습률 유지 가능

       - 기울기 제곱의 이동 평균을 사용하기 때문에 학습이 진행되어도 학습률이 지나치게 작아지지 않고 안정적으로 유지된다. 최근 기울기 제곱에 더 많은 가중치를 두면서 과거값은 점차 줄여나가기 때문이다.

 

       - 0.1에서 0.8 범위의 무작위 기울기 100개로 이 과정을 확인해보겠다. 가독성의 이유로 계산은 3개만 적었다.

 

           STEP1: 기울기 0.5

                 - AdaGrad

                   h1=0+(0.5)2=0.25

                   lr=1h1+ϵ=10.25+1082.0

                 - RMSProp

                   h1=β0+(1β)(0.5)2=0.90+0.10.25=0.025

                   lr=1h1+ϵ=10.025+1086.3246

 

           STEP2: 기울기 0.25

                 - AdaGrad

                   h2=h1+(0.25)2=0.25+0.0625=0.3125

                   lr=1h2+ϵ=10.3125+1081.7889

                 - RMSProp

                   h2=βh1+(1β)(0.25)2=0.90.025+0.10.0625=0.02875

                   lr=1h2+ϵ=10.02875+1085.8993

 

           STEP3: 기울기 0.75

                 - AdaGrad

                   h3=h2+(0.75)2=0.3125+0.5625=0.875

                   lr=1h3+ϵ=10.875+1081.0690

                 - RMSProp

                   h3=βh2+(1β)(0.75)2=0.90.02875+0.10.5625=0.082625

                   lr=1h3+ϵ=10.082625+1083.4842

          .

          .

 

       - 같은 방식으로 나머지 97개를 계산해서 표로 나타내보면 아래와 같다.

기울기 0.1~0.8 범위의 무작위값으로 해서 그린 AdaGrad와 RMSProp의 lr 변화

 

      ★ ht: AdaGrad는 값이 계속 누적되지만, RMSProp은 비교적 일정한 범위 안에서 유지됨을 알 수 있다.

       lr: AdaGrad의 학습률은 계속 작아지지만, RMSProp은 비교적 안정적인 학습률을 유지함을 알 수 있다.

 

 

 

    (단점) 특정 상황에서 최적화 경로가 불안정해질 수 있음

      - hβh+(1β)LWLW라는 수식은 기울기 제곱의 크기만 누적하는 식이다.

        즉, 각 시점에서 기울기의 크기를 조정해서 학습률을 변화시키지만, 이전 기울기의 방향성을 반영하지는 못한다.

        그래서 ①진동이 심한 지역이나 ②초기 학습단계에서 학습이 불안정해질 수 있다.

         ① 진동이 심한 지역

          - 진동이 심하다는 뜻은 손실함수의 곡률이 높은 지역이라는 의미이다. 손실함수의 곡률이 높으면

             기울기의 방향이 자주 바뀌면서 최적화 경로가 불안정해지고, 방향이 계속 이리저리 바뀌게 된다. 

            (e.g. x축 방향이 매우 가파르고 y축 방향은 평평한 경우 -> x축 방향의 경사를 따라서 왔다갔다 오르락내리락)

          - 운이 나쁘면 국소값 근처에서 진동하거나 아예 빠져버릴 수도 있다.

         ② 초기 학습 단계

          - 위의 그래프에서도 볼 수 있듯이, ht가 0에서 시작하기 때문에 학습률이 튈 수 있다.

 

 

 

  - 앞에서 든 손실함수 L의 예시를 사용해서 가중치 매개변수를 1번 갱신할 때 필요한 행렬식을 알아보자.

      e.g. L=e12+e22+e32+e42+e52일 때,

            GD, SGD, Momentum, AdaGrad, RMSProp에서 가중치 매개변수를 1번 갱신할 때 필요한 행렬식

            각각 아래의 표와 같다. (RMSProp의 학습률은 η가 아니라 ηh1+ϵ임을 알 수 있다.)

Gradient Descent Stochastic Gradient Descent
[w1w2w3w4w5][w1w2w3w4w5]η[2e1e1w12e2e2w22e3e3w32e4e4w42e5e5w5] [w1w2w3w4w5][w1w2w3w4w5]η[02eieiwi0]
Momentum
[w1w2w3w4w5][w1w2w3w4w5]+[αv1η2e1e1w1αv2η2e2e2w2αv3η2e3e3w3αv4η2e4e4w4αv5η2e5e5w5]
AdaGrad RMSProp
[w1w2w3w4w5][w1w2w3w4w5]η[1h1+ϵLw11h2+ϵLw21h3+ϵLw31h4+ϵLw41h5+ϵLw5] [w1w2w3w4w5][w1w2w3w4w5]η[1h1+ϵLw11h2+ϵLw21h3+ϵLw31h4+ϵLw41h5+ϵLw5]

 

가중치 매개변수를 1번 갱신할 때 필요한 행렬식은 모양상으로 봤을 때 AdaGrad와 RMSProp이 같아보인다.

  하지만 h가 다르므로(AdaGrad는 과거값 고려x, RMSProp은 과거값 고려o) 결과는 다르다!

- 이전 기울기의 크기뿐만 아니라 방향성을 반영하기 위해, RMSPropMomentum을 결합한 방법인 Adam이 제안되었다.

- 다음 포스팅에서는 Adam에 대해서 정리해보려고 한다.

 

 

참고문헌

[1] 사이토 고키, 『밑바닥부터 시작하는 딥러닝』, Chapter 6: 학습 관련 기술들, 한빛미디어, 2017.

[2] T. Tieleman and G. Hinton, "Lecture 6e - RMSProp: Divide the Gradient by a Running Average of Its Recent Magnitude," presented in Neural Networks for Machine Learning, University of Toronto, 2012. [Online]. Available: http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf

[3] 혁펜하임, "[Easy! 딥러닝] 6-4강. Momentum과 RMSProp," 동영상, 2023년 9월 19일. https://www.youtube.com/watch?v=-oHYAUhq5ao&t=355s.