본문 바로가기
멋쟁이사자처럼 AIS7/실습으로 배우는 머신러닝

[실습으로 배우는 머신러닝] 4. Model Learning with Optimization -최적화와 경사하강법

by YeonGun M 2022. 11. 22.

본 내용은 K-MOOC 실습으로 배우는 머신러닝 강의의 내용을 듣고 작성하였습니다.

 

실습으로 배우는 머신러닝

 

www.kmooc.kr

 

4. Model Learning with Optimization

1) 최적화와 모형 학습

 $y$와 $\hat{y}$간의 Loss 함수를 정의하고 최적화한다.

  • Heuristic : Methods assuming the spatial properties
    ex. KNN, DT ➡️ 표면적인 수학적인 Loss 함수 X
  • Numerical Optimization : The models are mathematically formulated and optimized
    ex. Linear Regression, Logistic Regression, SVM, Neural Networks ➡️ 수학적인 Loss 함수 O

Loss 함수를 최소화하는 파라미터를 찾는 것이 일반적인 머신러닝에서 최적화를 진행하는 방법이다.

Linear Regression와 같이 단순한 모형은 Loss 함수를 쉽게 계산할 수 있으나(2차원 등) Neural Networks 등의 복잡한 모형은 Loss 함수가 고차원 공간에 존재하기에 단순히 미분해서 0되는 값이 Loss 함수의 최적화로 여기기는 무리가 있다. 그렇기에 새로운 방법이 필요하다.

수업자료: Linear Regression의 손실 함수(왼쪽), Neural Networks의 손실함수(오른쪽)

 

2) 경사하강법 개요

앞이 보이지 않는 안개가 낀 산을 내려올 때는 모든 방향으로 산을 더듬어가며 산의 높이가 가장 낮아지는 방향으로 한 발씩 내딛어갈 수 있다. 경사하강법도 마찬가지다.

 

우리는 함수의 모양은 몰라도 $f(x_0)$(함숫값)과 $\nabla f(x_0)$(함수의 기울기, 미분계수, gradient)를 구할 수는 있다. 가장 가파르게 내려갈 수 있는 방법으로 한발짝 한발짝 이동하다보면 어느 순간 평지에 다다르게 될 것이다. 물론 이 방법이 가장 낮은 지역을 찾는다는 걸 보장하진 않지만, 나름 쓸만한 결과값을 얻을 수 있다. 이러한 Iterative Algorithm-based Optimization의 최적화 방법을 Gradient Descent라 한다.

 

Gradient의 방향은 함숫값을 가장 빠르게 올려줄 수 있는 방향이고, 그 방향 반대로 가게 되면 함숫값이 가장 빠르게 줄어드는 방향이다. 

 

그러면 맨 처음에는 어느 점에 존재하는가? 모른다. 랜덤하게 혹은 일련의 규칙에 따라서 초기화(Initialize)된 상황에서 여기서부터 출발해서 조금, 조금씩 발자국을 디뎌 나가는 것이다. 지금의 위치에서 가장 좋은 W로 나아가는 과정이 경사하강법이다.

 

그러나 실제의  손실 함수는 복잡하기 때문에 제대로 알 수가 없다. 앞서 그린 함수는 2차원에 그릴 수 있는 함수이기에 눈으로 파악 가능하지만 몇백만 개, 몇천만 개의 W를 갖는 모형에 대해서는 사실상 Loss를 그릴 수 없다. 관찰이 불가능하다. 어떤 W를 가질 때 어떻게 변화할까,곡선은 어떻게 변할까, 그런 걸 한 번에 관측할 수 없는 상황이다. 다 모르는 상황이고,정말로 산 위에서 이렇게 눈을 가리고 산 아래로 내려가는 것과 같은 그런 상황인 거다.

수업자료 : 아래로 내려가요(왼쪽), 아무것도 몰라요(오른쪽)

아무것도 모르는 상황을 해결한 건 테일러 급수 정리다. 테일러는 모든 일반적인 함수들의 경우에는 무한대에 수렴하는 다항식으로 근사가 가능하다는 것을 이론적으로 연구했다. (테일러 정리에 대해서는 아래 영상을 참고)

아래의 그림은 테일러의 이론에 기반하여 2차 다항식(Quadratic Function)을 이용한 2차 근사(Quadratic approximation)를 나타낸다. 근사적으로 표현할 수 있는 이차 함수를 표현할수 있지 않을까 싶어 나타낸 거라고 이해하자. 이차함수로 근사하면, 근사된 이차함수는 미분해서 0 되는 지점을 찾는게 상대적으로 쉽다. 이 부분이 Gradient Descent의  수학적인 백그라운드라고 보자.

수업자료 : 테일러(왼쪽), 최솟값 찾자(오른쪽)

approximation된 Loss 함수를 $L(W)$라 하자. 현재 위치에서의 $W$ 값을 $W_c$

우리의 Loss 함수를 먼저,approximation된 Loss 함수를 L(w)라고 써 보면, La(W)라고 써볼까요, approximation됐으니까.이것은 먼저 L(Wc) 현재 위치에서의W값을 Wc라고 대수로 표현해볼게요, Wc.그러면 L은 사전에 정의가 되어있으니까, 이것은 함수가 있으니까L(Wc) 당연히 값을 구할 수 있죠.그러니까 현재의 L값, Loss값이되는 거겠죠, 이거 구할 수 있고그다음 텀을 보게 되면 여기Gradient가 등장합니다,Gradient, 기울기.일차 미분 계수가 여기 등장하고L(W)는 (W-Wc) 현재의 W에서얼마나 떨어지는가에 따라서 함수가변화되는 형태, 여기서 주의하셔야할 점은 Wc는 현재 Wc의 정확한값이에요, Constant.그리고 이 W는 Variable이에요,변하는 값. 이 변하는 값에 따라서approximation 함숫값이 달라지는형태라고 보시면 되겠고 일차미분해서 이렇게 되어 있고그다음에 이차식은 어떻게 표현이되느냐. 이차식은 여기다 플러스원래는 이계도 미분 계수가들어가면서 표현돼요, 제곱항이.그런데 그것을 그냥 단순하게표현을 한번 해 볼게요.2tc분의 1 그리고 ||W-Wc||의 제곱그래서 Wc가 기준이 되는 것이고Wc에서 멀어짐에 따라서 이함숫값이 달리 표현되는 거예요,다항식 형태로.그리고 이론적으로는 여기 더삼차항도 있을 수 있고 사차항,오차항 해서 무한대 차수까지표현이 정의되어 있어요.그래서 그것을 이용하게 되면완벽하게 동일한 함수로 표현할 수있다는 게 증명이 되어 있는데우리는 그 뒷부분을 제거해 버리고그냥 이차 함수로 표현한 거예요.approximation을 한 거예요.근사를 시킨 거죠.이 상태에서 내가 극소점을 구할수만 있으면 어쨌든 나는 꽤 좋은한 발자국의 업데이트, 한 발자국을내디딜 수 있는 거겠죠.
그래서 이 뒷부분은 유도 과정이있는데 일단 미분해 주면, 이approximation된 Loss 함수를 W에대해서 미분해서 0 되는 지점을정리하면 이렇게 정리됩니다.W=Wc-Tc∇L, 이렇게 나올 거고요.그러니까 이 말은 뭐냐 하면결국에는 새롭게 구해지는 이 W,그렇죠? 새롭게 구해지는 W,업데이트돼야 하는 W,이것을 Wc+1이라고 해 볼게요.Wc+1, c가 현재 위치이고 c+1이c에서 한 번 업데이트된 상황이라고보면 Wc+1은 이걸 들여다보면 Wc,그렇죠? 현재의 parameter Wc가 있고여기서 -∇L, 그렇죠?아까 우리가 언급했었던 Gradient를구하면 함수를 굉장히 빠르게 키워주는 방향이기 때문에 minimize문제면 우리가 반대로 가야 한다고했죠? 그래서 마이너스가붙은 것이고 ×tc,뭔가 이 tc는 사람이 결정해주는 Step Size라는 거예요,Step Size. 그러니까 우리가한 발자국을 크게 걸을 수도 있고작게 걸을 수도 있잖아요.그 Step Size를 결정해 주는 거예요.그것은 사람이 결정해 주는 거고이것도 마찬가지로 중요한Hyper parameter입니다.그러면 이걸 해석해 보면 내가 Wc가있는데 함수를 작게 해 줄 수 있는방향이 있고 그 방향으로 tc를곱해서 업데이트시키자.그러면 이 업데이트되는 이 과정에-∇L×tc가 있는 거겠죠, 그렇죠?이렇게 해 주면 approximation된이차 함수의 가장 작은 점이구해집니다, 그렇죠?어쨌든 approximation된 함수이긴하지만 내가 지금 가지고 있는값보다는 확실하게 작은 값을 얻을수 있다는 거겠죠.그래서 회색으로 표현된 실제함수의 값은 모르니 approximation해서 최솟값을 구하는 거다.그리고 이것을 잘 해석해 보면우리가 생각했던 그 아이디어, '눈을감고서 가파른 방향을 찾고 그방향으로 한 발자국 내디뎌 가면괜찮은 해가 구해지겠다'라는 아이디어가 이런식으로 수학적인 의미를 가지고있었다는 것을 잘 이해해 보시면좋겠습니다.

이론적으로 정의된 절차를practical하게 적용한다고 하면지금 보시는 것처럼 이것은 2개의변수가 있는 케이스예요.x1, x2 그리고 그에 따라서 뭔가Loss라고 해 볼까요?Loss 또는 일반적인 어떤 우리가줄이고자 하는 어떤 함숫값이라고해 보면 x1과 x2의 초기 위치가결정되어 있고 계속해서 GradientDescent를 하다 보면 이렇게 조금,조금씩 해가 계산되면서 계속 이런어떤 낮은 지점으로 잘해서 계속이렇게 수렴해 갈 것이다.그래서 이론적으로는 이런 오목한함수 형태, 매끄럽게 어떤 추가적인굴곡이 없고 매끄럽게 오목한 함수형태 있잖아요?극소나 극대점이 딱 하나 존재하는그런 형태에서는 GradientDescent를 적용해 주면 무조건 가장좋은 해를 찾는다는 게이론적으로는 규명되어 있고요.하지만 이런 복잡한 형태, 극소나극대점이 여러 군데 존재하고 있고굴곡이 많은 그런 데이터 형태에대해서는 가장 작은 점 그러니까무슨 말이냐면 여기서 보면극소점도 여러 개가 있잖아요.미분해서 0 되는 기울기가 0인지점도 여러 군데가있을 수 있어요.그 여러 군데 중에서 가장 작은,가장 좋은 값을 갖는 것을 전역적인최적해라고 부릅니다.Global Optimum 그러니까 전체로 다봤을 때 가장 작은 지점 그걸Global Optimum이라고 하는데 그Global Optimum을 구한다는 것은개런티를 못 해요, 아쉽게도.하지만 어쨌든 지역적인 최솟값을구한다는 것은 보장되어 있고요.그리고 일부 연구 결과들에 따르면복잡한 딥 러닝 모형이나 머신러닝모형에서 그렇게 지역적인 최소해만잘 구하더라도 꽤 성능 좋은 모형을일관되게 구할 수 있다는 것들이경험적으로 또는 이론적으로규명되어 가고 있습니다.그것은 사실 굉장히 활발하게연구되고 있는 분야예요.아직도 미지의 영역이고 계속해서우리가 풀어나가야 하는 그런분야이긴 한데요.
그리고 이런 걸contour로 그려 보면contour는 여러분 잘 아시는등고선, 사실 3차원 그래프를 봤을때 물론 되게 화려해 보이고 많은정보를 담고 있는 것 같지만3차원으로 그리다 보면 안 보이는부분도 생기게 되고 결국에는 3차원그래프도 2차원상에 표현이 되기때문에 오히려 잘 안 보이는 그런부분이 많이 생기게 됩니다.그래서 그런 3차원 정보를2차원에다가 표현하기 위해서등고선을 많이 활용하고 이것을영어로는 contour 한국말로는등고선, 이렇게 이야기하는데요.어려운 건 아니고 각각의 x와 y좌표에 따라서 함숫값이 같은 지점,함숫값이 같은 x, y 좌표들을이렇게 이어놓은 거예요.예를 들면 여기는 함숫값이 1인지점, 여기 이 등고선은 함숫값이3인 지점 그다음에 이 선들은함숫값이 5인 그런 x, y들을 이런식으로 쭉 모아서 구분해서 그려주게 되면 그래도 우리가 이함숫값이 작아지고 있구나, 커지고있구나, 이런 것들을 평면으로손쉽게 확인할 수 있는 거죠.그래서 이 등고선을 그려 보면여기가 이니셜 포인트이고여기서부터 시작해서 방향을 구해서가고, 가고, 가고, 가고, 이런식으로 계속 함수가 작아지는 것을보실 수 있을 겁니다.

 

 

이 모형에서는 우리가 y=wx+b라는기본 모형이 있고 여기서 w랑 b가Variable이에요.우리는 w랑 b를 구해야 해.그리고 Loss Function을 CostFunction이라고 명명해 놨고 Loss나Cost나 동일한 개념이라고 보시면되겠고 마찬가지로 w랑 b에 대해서초기에는 랜덤하게Initialization이 되어 있겠죠.그래서 왼쪽에 애니메이션을 보시면처음에는 이렇게 되어 있잖아요,함수가. 이 말은 랜덤하게Initialization이 되어 있어서이 fitting하고는 전혀 관련 없는그런 상태인 거예요.그런데 Gradient Descent를이용해서 초기 해부터 해서 계속MSE가 줄어드는 방향으로 계속업데이트를, 업데이트를 w와 b에대해서 계속해 주게 되면 이게줄어들고, 줄어들고, 줄어들고하다가 가장 작은 지점에도달하게 될 것이고요.그리고 그 상태에서 구한 회귀식을보게 되면 우리가 가지고 있는데이터들을 꽤 잘 설명하는 그런w랑 b를 얻을 수 있다.

 

 

3) 경사하강법 심화

Learning Rate

일단 우리 앞에서 본 것처럼Wc+1=Wc- 다시 써 보면 Wc+1은현재 W가 있고 이것을 -L의Gradient를 구하고 그러면 방향이결정되었으니까 여기다가 StepSize를 곱해서 이걸 업데이트해주면 된다고 말씀해 드렸고 그러면이 tc는 어떻게 결정하느냐.이 tc도 마찬가지로 Hyperparameter라고 말씀해 드렸죠.이것은 사람이 결정해 주는 거예요.그래서 보통 0.1, 0.01, 0.001 이런식으로 candidate들을 놔두고서적용해 보고 적절한 그런 Hyperparameter를 결정해 주시면되겠습니다. 이것의 의미는뭐냐 하면 본 식에서 의미를보자면 이차 approximation된Loss 함수에서 이차 함수 계수 앞에2t분의 1, 이렇게 쓰여 있게 되죠.그래서 t가 크다.예를 들어서 여기 예제처럼 t가10이다. 이러면 여러분 잘 아시는것처럼 이차 함수의 계수가 작으면어떻게 되나요?함수가 이렇게 좀 넓적해지게되겠죠. 넓적해지게 되고그러면서 아무래도 현재부터극솟값까지의 거리가당연히 넓어지는 그런 효과가나타날 겁니다.그게 고스란히 이 Step Size로연관되는 것이고요.반대로 Step Size가 작다.그러면 이차항의 계수 값이커지면서 함수가 굉장히 뾰족하게바뀌겠죠, 여기 그림처럼.그러면서 그것의 극솟값 영역부분을 찾으면 거리가 현재보다는훨씬 짧은 부분의 극솟값이찾아질 겁니다. 그래서 이게approximation된 Loss 함수에서Step Size의 의미, 이런 걸살펴본 거고요.그냥 직관적으로 내가 얼마큼업데이트시킬 것인가.현재 내가 디렉션을 구했는데,Gradient 미분을 해서 디렉션을구해놨는데 그것을 얼마큼업데이트를 해 줄 것인가.그 가중치를 부여하는 것이라고생각하셔도 좋을 것 같아요.

사실 우리가 이 Hyper parameter를Step Size라고 하기도 하고 또는Learning rate라고 부르기도합니다, Learning rate.그러니까 Learning rate라는 것은머신러닝에 이 Gradient Descent를적용할 때 많이 쓰는 표현이에요.머신러닝이 아닌 영역에서도 당연히이런 Gradient Descent를이용할 수 있겠는데요.그런 데서는 또 Learning 개념이아닐 수 있잖아요.함숫값을 최소화하는 것이 모델의어떤 학습을 하는 과정이 아닐 수가있기 때문에 거기서는 Learningrate라는 표현을 쓰지는 않고요.

 

보통 empirical하게 경험적으로Loss 함수의 변화도를 쭉추적하면서 너무 Loss 함수가 잘감소를 안 하는데, 너무 느리게감소하는데, 이런 경우에는 그부분에서 조금 스톱시키고 해당모형을 저장한 다음에 Learningrate를 좀 키운 다음에 학습을 계속시킨다든지 일련의 그런 모니터링작업이 계속 필요하긴 합니다.또는 Learning rate를 adaptive하게잘 업데이트해 주는 그런알고리즘들도 있어요.그래서 들어보신 분들도 있을 수있는데 아담이라는 GradientDescent Optimizer 같은 경우에는Learning rate를 적절하게,그때그때 상황에 맞게끔 필요할때는 되게 크게 Learning rate를만들고 그다음에 해가 수렴해 가는과정에서는 Learning rate를 작게만들어서 잘 최적해에 수렴할 수있게끔 adaptive하게 조절해 주는그런 일련의 방법들도 있고요.그래서 아직 꼭 이것을 써야 한다,이것이 최고라는 것도마찬가지로 없고요.그때그때 상황에 맞게끔 내가 알고있는 어떤 Optimizer들 그리고 내가현재 관찰하고 있는 Learning rate과 어떤 Loss 간의 변화, 이런걸 잘 분석하면서 적절하게 잘조절하는 것이 좋겠습니다.

물론 요새 오토 머신러닝이라고해서 그런 영역들까지 자동으로 해주는 것들이 있긴 하지만 그래도아직까지는 모델링 경험이 많이있고 해당 모델에 대한 이해를바탕으로 Hyper parameter를 잘조정해 주는 것이 중요하다.

Stochastic Gradient Descent

Gradient Descent인데 요새 주로쓰는 방법은 Stochastic Gradient Descent라는 거예요, StochasticGradient Descent.왜 또 Stochastic이라는 게 붙어서뭔가 좀 더 복잡해 보이긴 하는데그렇게 어려운 개념은 아니고요.말 그대로 Stochastic이 붙잖아요.뭔가 통계적인, 확률적인 이런개념이 붙으면 항상 따라오는개념이 있죠.샘플링, 우리 기본적인 GradientDescent를 이용한 Learning에서기본적으로 배우는 건 우리데이터를 다 사용해서 Gradient를계산하고 전체 데이터에 대한Loss를 최소화하는 방향으로업데이트한다는 것을 기본적으로배우는데 보통 빅데이터이고 굉장히어떤 데이터 관측치 하나하나마다용량이 되게 큰 경우들이 있어요.그러면 computation 과정에서중요한 게 메모리하고 그다음에computation cost, computationspeed, 이런 게 중요할 텐데 특히메모리 측면에서 데이터가 너무크게 되면 계산 과정에서 필요한메모리들이 너무 많아져요.예를 들어서 데이터가 100만개이다, 200만 개이다.그러면 그 모든 데이터를 다한꺼번에 놓고 Gradient를 구하고할 수 없어요.그래서 그중의 일부를 추출해서예를 들면 보통 이런 방식을 많이쓰는데 우리 전체 데이터가 이렇게있으면 이렇게 잘라요.예를 들어서 하나, 둘, 셋, 넷,5등분을 해서 첫 번째, 두 번째, 세번째, 네 번째, 다섯 번째, 이렇게데이터를 잘라서 보통 이 하나를batch라고 표현하는데요.이 batch마다 Gradient Descent를적용하는 거예요.원래는 전체에 대해서 Gradient를계산하고 업데이트를 해 줬는데그렇게 못 하니까 이 batch를잘라내고 이 batch에 대해서Gradient를 계산하고 이거로업데이트를 한 번 하고 여기에대해서 Gradient를 계산하고업데이트 한 번 하고 그러면 우리가총 다섯 번을 하는 효과가 나겠죠,Gradient Descent를.이렇게 해 주는 거예요.그래서 완벽히 정확한Gradient는 아니겠죠.전체 데이터에 대한 Gradient를구한 게 아니니까 완벽히 정확한Gradient는 아니겠지만 어쨌든 꽤그래도 일종의 추정하는 그런Gradient를 이용해서 여러 스텝을빠르게 나아갈 수 있기 때문에굉장히 효율적으로 함수를 최적화해줄 수 있다는 겁니다.

그래서 차이를 보자면 모든데이터를 사용하는가또는 일부분을 사용하는가.또는 극단적인 경우에는 데이터하나만 이용해서 Gradient를 구해서모든 데이터에 대해서 한 번씩업데이트해 주는 방법도 있긴 해요.이거 둘 다Stochastic Gradient Descent죠.SGD라고 볼 수 있는데 이건기본적인 Gradient Descent고요.이것도 방법이지만 그래도 뒤에서도설명하겠지만 하나만 가지고추정하기에는 너무 부정확도가 크고너무 디렉션이 noisy하게 추정되기때문에 그래도 어느 정도 메모리가허용하는 한에서는 어느 정도 큰사이즈의 batch를 가지고업데이트하는 것을 추천을 많이하게 됩니다

Full Gradient가 가능한, 그런빠르게 계산되는 상황이라면 FullGradient를 이용하는 게당연히 좋겠죠.하지만 그게 어렵고 비효율적인상황이라면 Stochastic GradientDescent를 쓴다.특히 딥 러닝에서는 SGD를 이용해서업데이트를 많이 하더라.

 

그래서 어떤 Gradient Descent의패턴을 비교해 본 건데 여기서파란색, 이게 Full Gradient예요.Full Gradient이고 보라색이 관측치하나만 이용한 것.그리고 녹색이 partial,일부분을 샘플링한 것.

 파란색 같은경우에는 정확하게 우리 Loss함수에 대해서 Gradient를 계산하기때문에 깔끔하게 수렴해 가죠.반면에 점점 하나의 뽑는 것에가까워질수록, 점점 샘플링의정도가 커질수록, 적은 양의데이터를 샘플링할수록 GradientDirection이 조금 어긋나기시작하죠. 조금 noisy해지면서그래도 최적의 해로는 수렴해갑니다.이것도 이론적으로 증명되어 있어요.이런 식으로 샘플링해서 StochasticGradient Descent를 적용하더라도우리가 최적의 해를 구할 수 있다는게 이론적으로 증명되어 있기때문에 얼마든지 사용하면 되고Full Gradient가 한 번업데이트하는 동안에 StochasticGradient Descent 같은 경우에는batch의 개수만큼 업데이트가일어나겠죠. 그러면 훨씬빠르게 해를 구할 수 있다는장점이 있어요.그래서 SGD를 빅데이터에서는많이 사용합니다.하나만 이용해서 하게 되면 이것도방법이긴 한데 너무 noisy하고오히려 수렴이 잘 안 되고 오히려더 오래 걸릴 수 있다.하나 업데이트하는 데는computational cost가 가장 낮지만,하나의 관측치만 이용하기 때문에가장 낮지만 오히려 수렴까지시간이 굉장히 오래 소요될 수있다. 그래서 기본적으로추천하는 것은 이렇게partial하게 데이터들을추출해서 Gradient Descent를 해주면 되겠다는 겁니다.

Momentum

    그런데 일반적으로 GradientDescent를 한다고 해서 GlobalMinimum를 얻는 게 개런티되지는않고 Local Minimum을 구하는 것은확실하게 개런티됩니다.그래서 보통 문제가 뭐냐 하면 그냥기본 SGD를 사용하면 LocalMinimum에 빠르게 수렴하긴 하는데거기서 벗어나지는 못해요.문제가 뭐냐 하면 랜덤하게Initialization을 하고 내가 LocalMinimum으로 갔는데 그 LocalMinimum이 그래도 꽤 좋은 LocalMinimum이라는 게 개런티될 수는없는 거거든요.예를 들어서 이렇게 시작하자마자뭔가 Local Minimum에 들어왔는데알고 보니까 밑에 훨씬 작은 그런값들이 많이 있었어요.그러면 내가 지금 여기 수렴한 것은큰 의미가 없고 모델 성능에 큰도움을 주지는 못하겠죠.그래서 이런 Local Minimum에서 좀이렇게 뛰어넘을 수 있게끔,그것보다는 더 작은 어떤 Minimum값들을 찾아 나갈 수 있는 계기를마련해 주기 위해서 Momentum이라는게 적용됩니다, Momentum.이 표현에서 우리가 알 수 있듯이뭔가 관성적인 법칙에 따라서 내가왔었던 그 방향으로 좀 더 이 해를밀어 주는 거예요.예를 들면 이 Local Minimum에도달했는데 여기서 국한되는 게아니라 이 Momentum을 더 더해 줘서내가 여기서부터 계속 이쪽으로왔던 그 관성 있죠, 지금 현재는?그래서 그 관성을 그대로 기억해놨다가 이 Momentum만큼을 더해줘서 여기를 더 뛰어넘어서이쪽으로 갈 수 있게끔 해 주는그런 방식이라고 보시면 되겠고SGD+Momentum이 가장 딥 러닝에서널리 사용되는 그런 기법이라고보시면 되겠습니다.

    Momentum은 뭐냐 하면 과거에서업데이트되어 왔던 방향을 계속기억하는 거예요.계속 기억하는 건데 일단 한번살펴보면 Momentum V1은μV0-tc∇L이죠.그러면 V0은 그냥 0이라고한번 생각해 볼게요.그러면 일단 첫 번째 Momentum은내가 첫 번째로 내디뎠던 W1일 때의Gradient의 방향일 거고요.두 번째 Momentum을 보게 되면 두번째는 μV1-tc∇L(W2)가 될 텐데여기는 뭐냐 하면 내가 첫 번째Momentum, 첫 번째 GradientDescent 업데이트를 기억해놓고그거에다가 일정 수준,예를 들면 μ가 0.1이다.그러면 0.1배를 해서 새롭게 구해진Gradient Descent 방향과 StepSize에다가 더해 주는 거예요.그러니까 말 그대로 과거에 내가움직였던 방향을 기억해 놨다가그것을 현재에다가 또 반영해 주는거죠. 그리고 V3을 구해 보면마찬가지로 두 번째 방향 이동까지를구해놨다가 세 번째에 대해서 구한Gradient 업데이트에다가 두번째까지 반영되었던 업데이트방향을 μ만큼 곱해서 더해서 쭉이렇게 계속 더해 주는 형태.그래서 그 더해진 결과를 가지고새로운 Wc+1으로 업데이트한다는겁니다, 그렇죠?Wc가 있고 내가 업데이트해야하는데 과거에 내가 쭉 왔었던 그방향을 일정 수준 더해서, 새롭게구해진 Gradient에다가 더해서업데이트해 주겠다.그러면 Local Minimum에서벗어나면서 더 좋은 LocalMinimum을 찾는 데 큰 도움이 되는방식이 되겠습니다.그래서 특히 이런 어떤 Saddlepoint, 미분 계수는 0이지만 좌우로변화는 없고 여기보다 당연히조금만 더 가면 함숫값이 줄어드는이런 포인트들은 당연히 잘벗어나야겠죠. 플러스 이런Local Minimum들,빠르게 수렴해 버리는 LocalMinimum들에서 벗어나서 계속업데이트되어 줄 수 있게끔 유도해주는 그런 좋은 어떤 방법,개념이라고 보시면 되겠습니다.

     

    댓글