소소한 블로그

[2주차 - Day7] Gradient Descent Optimization Algorithms 본문

부스트캠프 AI Tech

[2주차 - Day7] Gradient Descent Optimization Algorithms

happy_ai 2021. 8. 12. 01:08

오늘 수업에서 Gradient Descent Methods에 대해 잠깐 소개되었습니다.

( Stochasic gradient descent, Momentum, Nesterov accelerated gradient,

Adagrad, Adadelta, RMSprop, Adam )

총 7가지네요ㅎㅎ

아무래도 한정된 시간에서 교육이 진행되다 보니,

각 방법에 대한 설명은 아주 간단하게 넘어갔습니다.

 

개인적으로 아쉬워서 각 방법에 대해 더 공부해봤습니다!

제가 본 자료들 중에 아래 논문이 가장 도움이 많이 되었습니다.

이번 게시물도 아래 논문을 기준으로 풀어냈습니다.

https://arxiv.org/pdf/1609.04747.pdf

 

저는 각 방법에 대해 deep하게 다루기보다는

간략한 개념과 아이디어에 대해 소개해드리고자 합니다.

또한 Gradient Descent의 기본 개념을 알고있다는 가정하에 진행하겠습니다.

(아래 설명에서 쓰일 모든 사진들은 위 논문의 캡쳐본입니다.)


[ Stochastic gradient descent(SGD) ]

이 개념은 Gradient Descent를 알고 계신다면 어렵지 않게 이해할 수 있습니다.

다만 파라미터의 업데이트의 주기가 어떻게 되는지에만 초점을 맞추면 됩니다.

전체 training set에 대한 모든 loss를 구한 뒤 파라미터의 업데이트가 이뤄지는 것이 아닌,

하나의 데이터에 대한 loss를 구할 때마다 파라미터의 업데이트가 이뤄지게 됩니다.

(참고로 전자는 batch gradient descent 라고 합니다.)

Stochastic gradient descent 수식 

위의 식은 SGD의 식이며 각 변수들의 정의는 아래와 같습니다.

theta: 모델의 파라미터

eta: learning rate

J: objective function(여기서는 loss function이라고 생각하시면 될 것 같습니다.)

x^(i): i번째 input 데이터

x^(i): i번째 output 데이터

 

SGD는 batch gradient descent에 비해 더 빠른 수렴속도를 보입니다.


[ Momentum ]

Momentum을 이해하기에 앞서 SGD의 단점을 이해하실 필요가 있습니다.


논문에서는 SGD를 사용하여 local optima 주변에서 파라미터를 갱신할 때,

현재 시점의 gradient vector에서 특정 차원의 값이 크게 변화한다면

파라미터가 objective function이 0이 되는 값(즉 local optima)으로 빠르게 수렴되지 않고

oscillate 즉 진동하는 현상이 일어난다고 소개하고 있습니다.

 

말로 설명하니 복잡해진 감이 있는데 아래 그림을 참고하시면 됩니다.

왼쪽은 일반적인 SGD입니다. 오른쪽과 비교하면

극소값 주변에서 파라미터를 갱신할 때

더 진동(쉬운말로 하면 왔다갔다ㅎㅎ)하는걸 볼 수 있습니다.

 

Momentum은 이런 SGD의 단점을 극복하기 위해 제안되었습니다.

Momentum은 관성을 뜻하죠.

이 방법은 현재 위치에서 파라미터를 조정할 때 이전 시점에서의 움직임을 참고합니다.

 

논문에서는 언덕에서 공을 굴릴 때를 예시로 들고 있습니다.

 

공이 바로 전 위치에서 가파른 경사에서 빠르게 굴러가고 있었다면

현재 위치에서도 이 영향이 관성으로 작용할 것이고,

만약 현재 위치에서의 기울기가 급격히 변화하더라도

전 위치에서의 관성이 작용하여 공의 움직임이 생각보다 급격히 바뀌지는 않게 됩니다.

 

관성이 없을 때 공이 언덕의 움푹파인 곳에 도달하는 경우와

관성이 있을 때 공이 언덕의 움푹파인 곳에 도달하는 경우를 비교하며 생각한다면

Momentum의 이점을 생각하실 수 있을 것 같습니다.

 

위 그림에서 보다시피 Momentum을 활용하면

이전의 움직임을 활용하기 때문에 단순 SGD보다 덜 진동하게 되고 수렴속도가 빨라지게 됩니다.

 

수식은 아래와 같습니다.

Momentum 수식


[ Nesterov accelerated gradient(NAG) ]

이 방법은 수식을 먼저 보는 것이 좋을 것 같네요.

Nesterov accelerated gradient 수식

위의 Momentum과 비교하면 딱 한개의 차이점을 발견할 수 있습니다.

바로 loss function의 도함수 값을 구할 때, 어느 지점의 값을 구하는지가 다릅니다.

 

Momentum의 경우 (t-1)시점에서의 parameter를 입력값으로 받고있는 반면,

NAG의 경우는 (t-1)시점에서의 parameter가 관성에 의해 움직인 값을 입력값으로 삼고 있습니다.

 

관성에 의해 움직인 대략적인 미래의 parameter의 값을 활용함으로써

생기는 이점은 아래와 같습니다.

 

효과적으로 미래상황(관성에 의해 움직인 파라미터의 gradient값)과

과거의 관성을 적절히 활용하여 Momentum보다 더 효과적으로

gradient descent를 할 수 있습니다.

(흔히 NAG는 미래의 상황을 참고하여 파라미터를 업데이트한다고 소개됩니다.)


[ Adagrad ]

Adagrad는 adaptive method입니다.

adaptive method란 파라미터별로 learning rate를 다르게 부여하는 방식입니다.

 

Adagrad는 update가 별로 이뤄지지 않았던 파라미터라면, learning rate를 키우고

update가 활발히 이뤄졌던 파라미터라면, learning rate를 줄이자라는 아이디어를 채택하고 있습니다.

 

이전의 method들은 파라미터의 learning rate가모두 eta로 동일하였습니다.

하지만 Adagrad는 아래 수식처럼 i번째 theta에 대해 learning rate를 별도 지정해주고 있습니다.

Adagrad 수식

Gt는 diagonal matrix이며,

(i, i) 대각원소의 값은 현재 시점까지 계산되었던 i번째 파라미터의 gradient들의 제곱의 합을 뜻합니다.

epsilon은 분모가 0이 되는 현상을 막고자 사용된 term입니다.

 

Adagrad는 learning rate를 자동적으로 조정해준다는 장점이 있습니다.

 

하지만 시간이 지날 수록 gradient의 제곱의 합은 계속 증가할 수 밖에 없으므로,

위의 수식에서 분모가 커지기 때문에 결국 learning rate가 0이 되어버리는 문제점이 있습니다.

이를 해결하기 위해 Adadelta, RMSprop가 등장하게 됩니다.


[ Adadelta ]

Adagrad는 시간이 지날수록 learning rate가 0에 가까워진다는 문제점이 있었습니다.

Adadelta는 t시점 이전의 모든 gradient들을 제곱하여 합하는게 아니라,

t시점으로부터 고정된 크기의 w만큼의 과거 gradient를 제곱하여 덧셈합니다.

 

수식은 아래와 같은데, 평균값을 쓸 수 있는 것은 고정된 크기의 w만큼을 보기 때문입니다.

(더 자세한 설명은 생략하겠습니다.)

Adadelta 수식-1
Adadelta 수식-2

사실 Adadelta의 논문 저자는

그림 Adadelta 수식-1에서 좌변의 unit(단위)와 우변의 unit이 다르기 때문에

(왼쪽은 parameter의 delta값, 오른쪽은 gradient의 delta값)

이를 맞춰주기 위해 eta를 설정하게 되면

아래와 같은 최종식이 도출된다고 소개하고 있습니다.

Adadelta 수식

 

Adadelta의 특징이 있다면 위에서 소개한 method와는 달리

사용자가 직접 설정할 수 있는 parameter(ex. eta, gamma)가 존재하지 않습니다.


[ RMSprop ]

사실 RMSprop은 위의 Adadelta에서 첫번째로 소개된 수식과 동일합니다.

RMSprop 수식

Adadelta는 RMSprop과는 달리 eta를 특정값으로 설정해주었다고 생각하시면 됩니다.

 

Adadelta, RMSprop 모두

Adagrad에서의 learning rate가 0으로 되는 현상을 해결해준 method입니다.


[ Adam ]

위의 method들을 모두 이해했다면 Adam 또한 쉽게 이해하실 수 있습니다.

왜냐면 Adam은 Momentum과 RMSprop(또는 Adadelta)를 합체한 것으로 볼 수 있기 때문입니다!

 

Momentum처럼 과거의 움직임(관성)을 참고하고,

RMSprop(또는 Adadelta)처럼 과거의 gradient들의 제곱의 평균을 활용하여

파라미터마다 다른 learning rate를 부여해줍니다.

 

수식은 아래와 같습니다.

Adam 수식

여기서의 gt는 도함수를 의미합니다.


여기까지 총 7가지의 Gradient Descent Method에 대해 알아봤습니다ㅎㅎ

각각 아주 간략히 적었는데도 예상보다 블로그 글이 길어지게 되었네요.

얼른 다른 공부를 해야겠네요.