05일차 [ MLP ] - votus777/AI_study GitHub Wiki

오늘의 선생님 명언
사실 노트북은 무게가 문제가 아니다...어댑터 무게가 문제다

아무튼간에..

Multi Layer Perceptron

MLP

이렇게 생겼다. 사실 계속 만지고 있었던게 이 녀석

RNN, DNN, ANN 등등 뭐가 많지만 일단 모두 이 MLP를 기본으로 가지고 있다.
(DNN은 MLP하고 뭐가 달라?? 했는데 그냥 DNN이 MLP를 여러개 쓰는 거다)

딥러닝하면 빠질 수 없는 MLP.

퍼셉트론으로 이루어진 Layer층 여러 개를 선형으로 붙여 놓은 것.
Layer 하나에는 노드들이 위치해 있다.

단, 같은 층의 노드들끼리는 상호작용 하지 않는다.
위로부터 인풋을 받아서 연산을 한 후에 아래층으로 아웃풋을 내기만 한다.
따라서 피드백은 존재하지 않는다.

만약 레이어가 한 개만 존재할 경우 선형적인 문제들은 해결 가능했지만
XOR (서로 달라야만 값을 출력) 같은
비선형적인 문제는 구조적으로 풀지 못하는 단점이 있었다.

선형(Linearity)과 비선형(Non-linearity)

선형성을 가지고 있다는 것은 
꼭 그것이 직선이 아니더라도 직선의 성질을 가지고 있다고 이해된다. 

※중첩의 원리 : f(x1)+ f(x2) = f(x3)
 
이는 곧 선형성은 곧 '예측 가능성'을 내포하고 있다는 것을 시사한다. 

1개의 원인에 1개의 결과가 나오기 때문이다. 
즉, 반대로 결과를 보고 원인을 예측할 수 있다. 


반면 비선형은 쉽게 말해 카오스다. 

혼자서 드는 것보다 둘이서 들면 훨씬 편하다.   

하지만 IBS훈련을 생각해보자. (군인들이 악쓰면서 고무보트 머리에 들고 영차영차하는 그것)

꼭 사람이 많다고 더 편해지는 것은 아니다. 
가운데 껴있는 누군가는 얼굴로만 힘든 척을 하고 있을 수 있다.   
키가 작아서 열심히 들려고 해도 팔이 안닿고 있는 사람도 있을 것이다.   

그렇다고 한 명을 더 추가 한다고 모두가 덜 힘들어질까? 아무도 모른다
가운데서 몰래 무임승차 하는 사람이 생길 수 있는 것처럼
한 요소가 다른 요소와 따로 있다면 둘 다 +이지만 
이것들이 합해서 적용 될때는 상호작용을 통해 -가 될 수도 있다는 점이다.   

한가지 확실한건 옆 사람이 힘들수록 본인도 힘들어진다는 사실이다. 

이것이 비선형성의 또 다른 특징인데 결과값이 피드백 되어 식에 다시 영향을 끼치면서   
나오는 결과가 수시로 바뀌게 된다.  

선형 방정식에서 F(1)=a는 무슨 일이 있어도 a 여야 한다면   
비선형에서는 f(1)이 평소에는 잘만 a를 내놓다가도 갑자기 옆친구 2를 보고 기분이 나빠지면 a가 아닌 엉뚱한 b 를 내뱉을 수 있다.  


값들이 식 밖에서 서로 영향을 주거니 받거니 하는데,
이러니 도무지 '결과를 전혀 예측할 수 없게' 되고

예측한다고 해도 수많은 파라미터를 고려해야 하기 때문에   
기존의 선형적인 방식으로는 매우 어려운 작업이다. 

그러나 딥러닝을 통해 이 파라미터들을 계산하고 예측할 수 있게 된 것이다. 



하지만 세상 또한 비선형으로 가득 차있기 때문에   
선형적인 것보다 훨씬 고차원적인 현상을 일으킨다. 

아무튼 이 xor 문제 때문에 인공지능은 긴 침체기를 겪었다고 한다.
이를 해결하려고 여러 기법들이 나왔는데 결국은 이 MLP가 문제를 해결했다.

MLP의 학습

수식

위의 수식은 MLP의 학습을 보여준다.

새로운 w가중치에서 수정값을 빼서 실제값에 더 가까운 w를 계산한다.

우리가 자유투를 이리저리 던져보면서 어느 각도에, 어떤 세기로 던져야 하는지 학습하는 것 처럼

회귀 모델에서는 이를 계산할 때 우리가 배웠던 MSE를 사용한다. (분류 모델은 ACE를 사용)

학습

이건 학습 과정에 관한 수식이다.

gradient(기울기)는 보다시피 미분이 되어 있는데 즉,
w가 변할 때 error가 얼마나 움직이는가 라고 볼 수 있다.

만약 w가 증가하면서 error 또한 커진다면 다음에는 w를 감소하고 반대도 마찬가지, 이를 반복하면서 오차를 줄여나간다.

사족을 붙이자면, 수식에서 보았듯이   
기울기를 계산해야 하는데 기존의 0,1, 계단식 함수라면 그 사이의 기울기가 모두 0이 되어버린다.   

그래서 sigmoid라는 0과 1 사이에 있으면서 미분 가능한 함수를 쓴다.   
기적의 자연로그...

하지만 sigmoid 함수도 완벽하진 않은게 이 함수의 최대기울기 때문에    
레이어를 거듭 할 수록 점점 값이 작아져 산출되는 값이 무의미 해진다.   
  
이를 Vanishing Gradient 현상이라 한다. 
MLP를 사용하면서 Hidden Layer를 늘리다 보면 Overfitting 과 함께 마주칠 수 있는 현상이다. 
이 것을 해결하기 위해 새로운 activation function인 Tanh(하이퍼볼릭 탄젠트 함수)와   
ReLU(Rectified Linear Unit) 함수가 나왔다. (hands on 교재 365p)

ReLu는 가중치총합  a 가 큰 경우에도 기울기(gradient)가 1로 유지되므로    
a가 커도 그레디언트 감소 현상이 발생하지 않는다. CNN과 같이 레이어의 수가 많은 경우에 유용하다.  

물론 나중에도 계속 기존 함수를 보완하는 함수들이 나오고 있다. 

속으로 렐루 렐루가 뭐지 했는데 이제야 알았다

MLP의 단점

MLP는 입력층에서 데이터를 받으면 각 node에서 변환되어
hidden layer에 전달되고 최종적으로 output이 나온다.

문제는 이 hidden layer 안에서 output과 실제값을 비교하면서
그 차이를 줄이는 방향으로 연결 강도를 조절하는데,

우리는 이 hidden layer안에서 대체 어느 부분이 잘못되어 오차를 계속 유발시키는지 알 수가 없다.

또한 이런 Feed Forward Network (FFN)에서는 한 방향으로 쭉 흐르기에

오차에 대한 가중치의 조절이 불가능하다.

Reference