1. 최적화


 우리가 시험공부를 할때 어떻게 하는가? 시험에 나올만한 문제를 풀어본 후 채점도 하고 오답노트도 써가며 학습(Train)을 할 것이다. 공부를 하면서 모의 시험을 봤는데 50점이 나오면 마음편히 잘것인가? 조금 더 공부를 할 것인가? 몇사람 제외하고는 대부분 밤을 새서라도 공부를 더 할 것이다. 머신러닝도 마찬가지로 내가 설계한 모델과 실제 데이터와의 차이가 얼만큼 나는가 채점 해보는 것이 필요하다. 에너지함수(Energy Function)라고도 하며 손실함수(Loss Function)라고도 하며 비용함수(Cost Fucntion)라고도 하는데 모델의 출력정답을 대조해가며 채점하는 과정이다. 채점결과 만족스러운 결과가 나오면 학습을 멈추게 된다.


Slide by 마음의소리 at Naver Webtoon


 간단하게 손실함수(Loss function)를 정의해 보자면 $\mathscr{L}=(y-f(x))^2$ 라고 할 수 있겠다. $y$는 정답이고, $f$는 내가 설계한 모델이며, $x$는 시험문제가 되겠다. 뉘앙스로 볼 때 손실($\mathscr{L}$)이라는 것은 최소가 되어야 좋은 것이라 할 수 있다. 오차가 클 수록 손실이 많아지고, 오차가 적을수록 손실이 적어져 $\mathscr{L}$을 최소화 하는 모델이 강제된다. 2차함수로 손실함수를 정의한 까닭은 손실함수를 최소화 하기 위해서는 오목하거나 볼록한 모양의 함수꼴(Convex Function)이 되어야 한다. 


Slide by Wikipedia


 자주 사용하는 에너지 함수를 소개해본다. 학습 데이터는 총 $n$개이며 $i$는 데이터의 순서이다. 평균제곱 오차는 가장 직관적인 함수로 오차가 작으면 에너지가 낮아지는 것을 한번에 알 수 있다. 


1) 평균 제곱 오차, MSE(Mean Squared Error) 

$$\mathscr{L}=\frac { 1 }{ n } \sum _{ i=0 }^{ n-1 }{ { \left( y^{i}-f(x^{i}) \right)  }^{ 2 } } $$


 교차 엔트로피의 경우는 알아서 최대우도추정(Maximum Likelihood Estimation) 방법을 찾아보면 되겠다. 간단히 설명하면 우도(Likelihood)를 Bernoulli 분포로 표현하여 음수를 취한 형태이다.


2) 교차 엔트로피 오차, CEE(Cross Entropy Error)

$$ \mathscr{L}=-\sum _{ i=0 }^{ n-1 }{ \log { (f(x^{i})) } *y^{i} }  $$


2. 경사하강법(Gradient Descendent)


 최소화 하는 방법으로는 경사하강법(Gradient descendent)이 대표적이다. 말 그대로 경사를 따라 하강하여 수렴(Converge)할 때까지 반복(iteration)을 수행한다. 고등수학에서 배운 미분을 생각해보자. 기울기가 +라는 것은 증가하는 함수라는 의미이고, 기울기가 -라는 것은 감소하는 함수라는 의미이다. 그렇다면 함수를 최소화 하는 극점으로 가기 위해서는 기울기의 반대방향으로 가야한다. 극점에 수렴(Convergence)하여 시험결과에 만족했다면 학습을 마칠것이다.


 수식으로 표현하면 ${ x }_{ i+1 }={ x }_{ i }-\alpha \nabla { x }_{ i }$이다. $x$는 학습할 대상(파라미터)이며 $i$는 반복횟수를 뜻하고 $\alpha$는 학습률(Learning Rate)이라 하여 학습이 반영되는 정도를 뜻한다. 학습률이 너무 크면 수렴하지 않고 무한루프(진동)상태에 빠질 수 있는데 훗날 다시 설명하도록 하겠다.


3. Local Minimum


 수치해석 분야에 있어서 Local Minimum은 골머리 썩는 문제다. 아래 그래프에서 시스템 전체에 대한 해인 Global Minimum에 다다르기를 기도하며 모델을 만들었을 것이다. 하지만 어느위치에 Global Minimum이 있는지 알 수 없으므로 우리는 시작점을 임의로 결정할 수 밖에 없다. 만약 시작점이 A에 잡혔으면 땡큐하고 Global Minimum의 해로 찾아들어갈 것이다. 하지만 시작점이 B로 잡히게 되면 Local Minimum에 수렴하여 아무리 여러번 반복(Iteration)하여 학습을 한다해도 제대로 된 학습이 불가능할 것이다. 이를 해결하기 위해서는 초기값을 잘~ 잡아줘야 하는 수밖에 없다. 


 추가로 2014 NIPS에서 Dauphin이 말하기를 딥러닝과 같은 고차원 모델에서는 Local minimum이 아닌 안장점(Saddle Point)의 구조에서 정착이 발생한다 밝히고 이를 해결하는 알고리즘을 제시했었다. 참고하길 바란다. 



"Identifying and attacking the saddle point problem in high-dimensional non-convex optimization." NIPS2014, Dauphin, Yann N., et al


동영상 강의: https://www.youtube.com/watch?v=1tGxvS5Y4uM

+ Recent posts