최적화 알고리즘 - SGD, Momentum, Nesterov momentum, Adagrad

이승규·2024년 7월 13일

Deep Learning[공부용]

목록 보기
7/10

참고자료

밑바닥부터 시작하는 딥러닝

들어가기에 앞서

신경망 학습의 목적은 손실 함수의 값을 가능한 낮추는 매개변수를 찾는것이다.

이는 곧 매개변수의 최적값을 찾는 문제라고 할 수 있으며 이러한 문제를 푸는것이 “최적화”라고 한다.

이 부분에서는 SGD, Momentum, Nesterov momentum, Adagrad, RMSProp, Adam 등 다양한 최적화 최적화 알고리즘(=옵티마이저)에 대해서 정리하고자 한다.

1. 옵티마이저

옵티마이저란 딥러닝과 머신러닝에서 모델의 매개변수를 최적화하는 알고리즘을 의미한다.

구체적으로, 옵티마이저는 손실 함수(loss function)를 최소화하는 방향으로 모델의 가중치(weight)편향(bias)을 업데이트한다.


2. 확률적 경사 하강법(Stochastic Gradient Descent)

다시 한번 개념 정리

배치 경사 하강법(Batch Gradient Descent, BGD)은 전체 데이터셋(=배치)에 대한 손실함수의 기울기(gradient)를 한 번만 계산하여 모델의 parameter를 업데이트하는 방식이다

즉, 전체 훈련 데이터셋에 대해 가중치를 편미분, 업데이트 하는 방식이다.

W=WαJ(W,b)

배치 경사 하강법은 한 스텝에 모든 훈련 데이터셋을 사용하기 떄문에 학습 시간이 오래 걸린다

이러한 단점을 개선한 방법이 SGD 이다.

확률적 경사 하강법(Stochastic Gradient Descent, SGD)은 임의로 선택한 데이터에 대해 손실함수의 기울기(gradient)를 계산하여 모델의 parameter를 업데이트 하는 방법이다

적은 데이터를 사용하므로 BGD보다 계산이 빠르다.

아래의 그림을 보면 비교가 가능하다.

확률적 경사 하강법 장점

  • parameter의 변경 폭이 불안정하고, 정확도가 낮을 수 있지만 속도가 빠르다는 장점

미니 배치 경사 하강법(mini-batch gradient descent)은 전체 데이터셋을 미니 배치(mini-batch) 여러 개로 나눈 뒤,

미니 배치 한 개마다 기울기를 구합니다. 그 평균 기울기를 이용하여 모델을 업데이트해서 학습하는 방법이다.

미니 배치 경사 하강법 장점

  • 미니 배치 경사 하강법은 전체 데이터를 계산하는 것보다 빠름
  • 확률적 경사 하강법보다 안정적이어서 가장 많이 사용됨
  • 변경 폭이 확률적 경사 하강법에 비해 안정적이면서 속도도 빠름

<확률적 경사 하강법 VS 미니 배치 경사 하강법>

SGD의 parameter 변경 폭은 불안정합니다. 이 문제를 해결하기 위해 학습 속도와 운동량을 조절하는 optimizer를 적용할 수 있다

SGD의 단점을 개선해주는 MomentumAdagradAdam의 세 가지 방법이 있다.

learning rate(η)

학습률이란 최적화 할 때의 속도를 조절하는 하이퍼파라미터이며, step size라고도 합니다.
모델의 parameter를 업데이트할 때 적용되는 스텝의 크기를 결정합니다.

학습률이 너무 크면:

  • 매개변수가 최적점 근처에서 진동하거나 발산할 수 있다
  • 손실 함수의 최솟값에 도달하지 못하고 계속해서 이동한다.
  • 학습이 불안정하고 수렴하지 않는다.

학습률이 너무 작으면:

  • 매개변수 업데이트가 매우 작아져 학습 속도가 느려진다.

3. SGD의 단점.

SGD는 단순하고 구현도 쉽지만, 문제에 따라서는 비효율적일 때가 있다.

SGD의 단점을 알아보고자 다음 함수의 최솟값을 구하는 문제를 생각해보자.

<그래프와 등고선>

<기울기를 시각화한 모습>

이 기울기는 y축 방향은 크고 x축 방향은 작습니다. 여기에서 주의할 점은 최솟값이 되는 장소는 (x, y) = (0, 0)이지만, 그림이 보여주는 기울기 대부분은 (0, 0) 방향을 가리키지 않는다.

SGD에 의한 최솟값 갱신경로를 확인해 보자.

SGD는 위 그림과 같이 상당히 비효율적인 움직임을 보인다

즉, SGD의 단점은 비등방성함수(방향에 따라 성질, 기울기가 달라지는 함수)에서는 탐색 경로가 비효율적이라는 것이다.

SGD가 지그재그로 탐색하는 근본 원인은 기울어진 방향이 본래의 최솟값과 다른 방향을 가리키는 점이다.

4. Momentum

모멘텀은 최적해를 향해 진행하던 속도에 관성을 주어 SGD가 갖고 있던 문제

  • 느린 학습 속도
  • saddle point에서 학습 종료
  • 진동이 심한 점

등을 해결한 알고리즘이다.

Momentum은 '운동량'을 뜻하는 단어이다.

물리적 법칙을 이용해서 이렇게 설명할 수 있다.

α는 실제로 공기 저항이나 마찰 등에 해당하는 역할이며, 마찰 계수라 불린다

보통 α**는 0.9나 0.99로 설정*

*αV항은 물체가 아무런 힘을 받지 않을때 서서히 하강시키는 역할을 한다.*

V는 물체의 속도(velocity)이다.

모멘텀의 이동은 이렇다.

관성은 변수가 가던 방향으로 계속 가도록 하는 속도항을 추가하는 것인데, 기울기가 0이더라도 속도가 있어 더 잘 탈출하게 된다.

즉 , 진행하던 속도에 관성이 적용되니까 saddle point를 만나거나 local minima에 빠지더라도 그 지점을 벗어날 수 있다.

SGD는 기울기가 계속해서 바뀔 때, 다른쪽으로 튕겨나갈 수 있는데 관성이 작용하면 진행하던 속도를 유지하며 부드럽게 이동하게 된다.

위 그림에서도 실제로 곡선의 형태로 부드럽게 이동하는 것을 볼 수 있다.

△ 부드럽게 이동, SGD, Momentum 속도 차이

overshooting 문제

Momentum의 단점으로 overshooting 문제가 있다.

경사가 가파른 곳을 빠른 속도로 내려오다 관성을 이기지 못하고 최소 지점을 지나쳐 버리는 현상이다.

그레디언트가 완만하다면 최적해를 잘 찾겠지만, 가파를수록 overshooting될 가능성이 크다.

위의 오른쪽 그림을 보면, gradient보다 속도가 더 크기 때문에 실제 step이 커지고 지나치게 된다.

다음은 Momentum의 식입니다.

5. Nesterov momentum

네스테로프 모멘텀은 위에서 오버슈팅의 문제를 해결하기 위한 방법으로,

현재의 속도 벡터와 현재 속도로 한 걸음 미리 가 본 위치의 그레디언트 벡터를 더해 다음 위치를 정합니다.

다음 속도vt+1v_{t+1}

vt+1는 현재 속도에 마찰 계수

ρ\rho

ρ를 곱한 뒤 한 걸음 앞서서 예상 위치의 기울기를 빼서 계산된다.

네스테로프 모멘텀은 진행하던 속도에 관성을 주는 점은 SGD 모멘텀과 같다.

하지만 오버슈팅을 막기 위해 현재 속도로 한 걸음 미리 가 보고 오버 슈팅이 된 만큼 다시 내리막길로 내려가는 방식이다.

네스테로프 모멘텀은 관성이 커지더라도 오버슈팅이 될지 살펴본 다음에 교정하기 때문에 오버슈팅이 억제된다.

정리

모멘텀은 모멘텀 값과 기울기 값이 더해져서 실제 스텝을 결정하는데 반면,

네스테로프 모멘텀은 모멘텀 값이 적용된 지점에서 기울기 값을 계산한다.

모멘텀은 속도는 빠르지만 멈추어야 할 시점에서도 관성에 의해 훨씬 멀리 간다는 단점이 있지만,

네스테로프 방법은 모멘텀으로 절반 정도 이동한 후 어떤 방식으로 이동할지 다시 계산해서 스텝을 결정하기 때문에 단점을 극복합니다.


learning rate decay (학습률 감소)

초반에는 큰 폭으로 이동하여 최대한 빠르게 내려가고, 점차 학습률을 줄여 조심스럽게 내려가는 방법입니다.

초반엔 높은 학습률로 시작해 학습률을 조금씩 낮춰 작게 학습하는 방법


6. AdaGrad

아다그라드(Adagrad)라고 읽으며, Adaptive gradient의 줄임말이다.

Adagrad는 이름에서도 살짝 알 수 있듯이, 손실 함수 곡면의 변화에 따라 적응적으로 학습률을 정하는 알고리즘이다.

학습률이 너무 작으면 학습 시간이 너무 길고, 너무 크면 발산해서 학습이 제대로 이루어지지 않기 때문에 Adagrad는 이런 문제를 학습률 감소를 통해 해결한다.

즉, 많이 변화한 매개변수는 최적해에 근접했을 거란 가정하에 작은 크기로 이동하면서 세밀하게 값을 조정하고 반대로 적게 변화한 변수들은 많이 변화하도록 학습률을 크게 하여 빠르게 오차 값을 줄이고자 하는 방법이다.

지금까지 많이 변화한 매개변수는 적게 변화하도록하고, 적게 변화한 매개변수는 많이 변화하도록 learning rate의 값을 조절하는 개념이다.

아래 식은 AdaGrad의 갱신 방법에 대한 수식이다.

연산 기호⊙ 는 element wise multiplication으로 행렬의 원소별 곱셈을 의미한다.

h는 이전 기울기의 제곱들이 누적되어 더해지게 되고,

w(parameter)를 업데이트 할때 1/ √h 를 곱해 학습률을 조정하게 된다.

매개변수의 원소 중에서 많이 움직인(크게 갱신된) 원소는 학습률이 낮아진다는 뜻인데

즉, Adagrad는 학습률 감소가 적응적으로 매개변수의 원소마다 다르게 적용되어 학습을 진행하게 된다.

profile
Self supervised Learning, Time Series, Multimodal Learning

0개의 댓글