본문 바로가기
머신러닝,딥러닝/딥러닝(김용담 강사님)

Perceptron, Multi-Layer Perceptron, Activation function 정리

by 코듀킹 2023. 7. 7.
목차
1. Perceptron
2. Multi-Layer Perceptron
3. Activation function

1. Perceptron

Perceptron은 뇌의 뉴런을 본떠서 만든 최초로 제안된 Neural Model이다. 뉴런은 수상돌기(dendrites)에서 신호를 받아서 신경세포체에서 정보처리를 한다. 신경세포체에서 들어온 자극에 대해서 반응할지 판단을 한 후에 역치(threshold) 이상의 자극이 들어오면 신호를 축삭돌기(Axon)라는 곳으로 넘긴다. 그리고 축삭의 종말에 있는 시냅스를 통해서 다음 뉴런으로 정보를 전달한다.  비슷한 신호가 반복해서 들어오면, 신호가 들어간 시냅스가 강화된다. 그 weight를 입력된 정보에 얹는다. weights는 AI모델에서는 parameters이고, 결국 딥러닝은 parametric learning이라고 볼 수 있다. 딥러닝은 퍼셉트론을 기초로 여러 layer를 쌓은 방법이다. 

 

 

 

 

퍼셉트론은 계단 함수(Step function)를 활성화 함수(Activation function)로 이용한다. 활성화 함수는 입력신호의 총합을 출력 신호로 변환해주는 함수이다. Step function은 입력으로 어떠한 값이 들어오든 0보다 크면 1로, 0과 같거나 작으면 0으로 표기해 주는 함수이다. 결과적으로 퍼셉트론은 (binary) linear classifier 똑같다고 볼 수 있다.

 

$$ y = \begin{cases}
 & \text{0, (b + w1x1 + w2x2 + ... +  wnxn)} \leq 0  \\
 & \text{1, (b + w1x1 + w2x2 + ... +  wnxn)} > 0
\end{cases} $$

 

 

2. Multi-Layer Perceptron

퍼셉트론 1개만 놓고 본다면, linear classifier 역할을 한다. linear classifier는 직선 1개로 분류를 하기 때문에, XOR problem은 풀 수 없다. 이 문제를 푸려면 직선이 2개여야 하므로, 여러 개의 퍼셉트론 모델이 필요하다. 이러한  XOR과 같은 non-linear 한 문제를 풀기 위해 고안된 모델이 Multi-Layer Perceptron이다.

 

출처 : https://www.researchgate.net/figure/Solving-XOR-problem-using-3-conventional-neurons-as-a-2-2-1-MLP-network_fig1_220283506

 

 

Multi-Layer Perceptron은 Input Layer와 Hidden Layer와 Output Layer로 구분된다. 그리고 각각의 Node에 대해서 계산을 하면 아래 이미지와 같은 계산이 이루어진다. x1,2,3,4,5가 feature 하나 하나이다. 

 

출처 : https://github.com/simonhandsome/MultiLayer-Perceptron

 

feature의 값들이 Input Layer로 들어가면 weight와 곱한 후에 모두 합친 다음, bias 1개를 더한 값의 함수로 계산된다. 이렇게 계산해서 최종적으로 나온 Output Layer의 \(\hat{y}\)를 실제 y값과 비교하면, 그 사이의 오차가 Loss가 된다. 이러한 일련의 과정을 feed-forward라고 한다. 딥러닝의 feed-forward는 input layer으로 데이터가 입력되고, hidden layer를 거쳐서 마지막에 있는 output later로 출력 값을 내보내는 과정을 말한다. 

 

 

3. Activation function

 

Activation function(활성화 함수)란, 입력 신호의 총합을 출력 신호로 변환하는 함수라고 했다. 활성화 함수는 비선형성을 가지고 있다. 입력 신호의 가중치 합인 선형 변환을 입력으로 받아 비선형 변환을 수행하며, 이를 통해 신경망이 복잡한 문제를 해결할 수 있게 된다.

 

선형 활성화 함수를 쓰면 안 되는 걸까? 퍼셉트론이 단층이라면 상관없지만, Multi-Layer Perceptron과 같이 hidden layer를 포함한 여러 층으로 쌓은 모델에서는 층을 깊게 하는 의미가 사라진다. 층을 깊게 해도 결국 linear classifier, 즉 single layer perceptron과 똑같은 결과가 나오기 때문이다. 

 

그러면 활성화 함수는 어떤 것들이 있을까? sigmoid, ReLU, Tanh 등 여러 가지가 있지만, 가장 중요한 활성화 함수는 ReLU이다. 

 

출처 :  https://www.v7labs.com/blog/neural-networks-activation-functions

위 함수는 대표적인 활성화 함수인데, ReLU를 제외한 다른 활성화 함수는 Gradient Vanishing(기울기 소실)이라는 문제가 야기된다. Gradient Vanishing이란, 역전파(Backpropagation) 과정에서 출력층에서 멀어질수록 Gradient 값이 매우 작아지는 현상을 뜻한다.

 

 

왜 이러한 현상이 일어날까? Back propagation을 할 때, loss를 구하기 위해 편미분을 하게 되는데, 예를 들어 시그모이드 함수를 미분하게 되면, x가 0일 때 값이 가장 크고, 0에서 멀어질 수록 기울기가 0으로 수렴하게 되는 걸 알 수 있다. 역전파 과정에서 0에 가까운 아주 작은 기울기가 곱해지게 되면, 앞단에서는 거의 기울기를 전달받을 수 없게 된다. 즉, weight가 더 이상 업데이트 되지 않아 학습이 되지 않게 되는 것이다. 이는 소프트맥스, tanh 함수도 마찬가지다.

 

반면에 ReLU는 어떨까? 입력값이 음수일 경우 미분값은 항상 0이라는 단점도 있지만, 입력값이 양수라면 기울기는 항상 1이다. 즉, 역전파 과정에서 기울기가 소실되는 문제를 해결할 수 있다는 것이다. 또한 함수 자체가 큰 연산이 필요가 없기 때문에 연산 속도 또한 빠르다는 장점이 있다. 이러한 특성으로 인해 활성화 함수로 ReLU가 가장 많이 쓰이고 있다.

 

layer를 하나하나 지나갈 때마다 이러한 활성화 함수를 거치게 되는데, 우리가 결국 원하는 건 loss를 x에 대해서 얼마나 줄여야 하는지를 알고 싶은 거기 때문에 계산한 loss가 x에 대해서 미분했을 때의 값을 알아야 한다. 우리가 업데이트해야 하는 것은 weight 즉, 파라미터이다. 이 걸 할 수 있는 방법이 Chain Rule이라는 것에 의해서 구해진다. 모든 loss 값을 알 수 있게끔, 모든 loss를 업데이트하기 위해서 나온 게 back-propagation(오차 역전파법)이다. 이걸 하지 않으면 학습이 되지 않는다. error를 모든 weight에 대해서 업데이트해줘야 한다. 이에 대한 내용은 다음시간에 다뤄보겠다.

댓글