MATH & ML

gradient descent 본문

Machine Learning

gradient descent

BlogYong 2018. 4. 13. 10:51

결국 우리의 목적은 우리의 모델결과와 실제 target 사이의 error를 최소화시키는데에 있다.

즉 loss function을 최소화 하는 parameter(weight) W를 찾는것이 목표이다

그런데 문제는 loss function이 그냥 미분해서 구할 수 없는 경우가 자주 생기며 이 대는 어떻게 이 W를 찾을지가 중요하다.

이때 쓰는것이 바로 gradient descent이다.

수학적으로 어떤 함수의 gradient는 그 함수의 경사가 가장 가파른 곳의 벡터를 나타내게 되는데

이를 이용하여 W를 함수의 경사가 가장 가파른 방향으로 loss function이 작아지도록 계속 업데이트를 시키는 과정

그게 바로 gradient descent라고 할  수 있다.

문제는 이 과정중에 local minimum이나 saddle point에 빠지는 경우가 자주 발생하는데 이를 빠져나가는 방법에 따라 다양한 응용된 gradient descent방법이 나오고 있다.

1. stochastic gradient descent

한 번의 W를 업데이트 할 때마다 모든 데이터에 대하여 loss function을 구해서 합하는건 너무 계산량이 많아져서 이를 보완하기 위해 생긴 방법으로, loss function을 계산할 때 전체가 아닌 일부 mini-batch에 대해서만 계속 계산하며 업데이트 시키는 방법이다.

2. momentum->Nesterov Accelerated Gradient(NAG)

모멘텀이란 기존의 gradient descent방식에 관성을 주는 것이다. W를 업데이트 시킬때에 기존에 움직였던 그래디언트 방향으로의 관성을 조금 주어서 새로운 그래디언트 값으로 움직이면서도 동시에 관성으로 기존에 움직이던 방향으로 까지 가게 만들어 진동현상같은 것을 막을 수 있다.

이때 NAG는 모멘텀 방식으로 먼저 이동한 후에 그 자리에서 gradient를 구하여 그만큼 이동한다. 이는 기존 모멘텀의 단점, 멈춰야 하는데도 관성에 의해 멀리갈 수 있다, 를 해결할 수 있다. 모멘텀으로 먼저 이동하여 그 다음 gradient descent로 다음 방향을 파악하는 덕분이다.


이제 adaptive model들

어떻게 step size 를 정할 것인가에 따라 다양한 adaptive model들이 생겨났다.

3. adagrad(adaptive gradient descent)

업데이트 마다 step size를 다르게 하는데, 지금까지 변화를 많이 한 방향에 대해서는 조금씩 업데이트 시키고, 변화를 조금 한 방향에 대해서는 많이씩 업데이트 시키는 gradient descent모델이다

4. RMSProp

adagrad에서 G가 계속 해서 증가만 하기 때문에 나중에 step size가 너무 작아져서 결국 움직이지 않게 되어 이를 해결하기 위해 G를 너무 커지지는 않게 하며 최근 변화량의 상대적인 크기차이는 유지할 수 있다.

5. AdaDelta

RMSProp처럼 AdaGrad의 문제점을 보완하기위해 제안된 방법인데 G는 똑같이 없데이트하면서 대신 step size를 단위가 맞게 분자에 하나의 텀을 더 곱하여 계산하는 알고리즘이다.

6. Adam

RMSProp+Momentum이라고 할 수 있다.

'Machine Learning' 카테고리의 다른 글

sequence to sequence(seq2seq)  (0) 2018.04.23
RNN(Recurrent Neural Network)  (1) 2018.04.23
머신러닝 용어 몇 가지 정리(GAN, CNN)  (0) 2018.03.29
MLE MAP Prior Posterior  (0) 2018.03.28
머신러닝에서의 hyperparameter  (0) 2018.02.06
Comments