본문 바로가기
딥러닝 기초

MultiLayer Perceptron

by winston1214 2021. 7. 26.
반응형

이 글은 https://www.youtube.com/watch?v=oOQCrm4Vemo&list=PLSAJwo7mw8jn8iaXwT4MqLbZnS-LJwnBd&index=7&t=652s 

영상을 기반으로 작성하였습니다.

## Solving XOR problem with MLP

MLP structure

위 그림에서 MLP의 input layer는 input 값이 들어가게 된다. 그리고 hidden layer에서 하나의 동그라미는 hidden unit이라고 한다. 그리고 MLP에서 화살표의 의미는 가중치를 곱해주는 것이다. 또한 가중치를 곱한 후에 activation function을 통과한다. 

## XOR

x1 x2 y
0 0 0
0 1 1
1 0 1
1 1 0

이러한 XOR 문제를 해결하기 위해 다음과 같이 MLP를 구성한다.

MLP for solving XOR problem

위 그림에서 S는 sigmoid function이고 왼쪽에 있는 네모를 위에서부터 편의상 1번 layer, 아래에 있는 네모를 2번 layer, 오른쪽에 있는 layer를 final layer라고 칭한다.

input 값으로 \(x_{1} = x_{2}=0 \) 을 대입한다. 1번 layer에 통과 시켜보면 -8이 되고 그 다음엔 sigmoid 층을 통과하면 0에 근사하는 값이 된다. 그리고 2번 layer에 통과 시키면 1에 근사하는 값이 나온다. 그리고 여기서 도출된 값을 final layer에 넣어주면 -5가 나오고 이를 sigmoid에 넣어주면 0에 근사한 값이 나온다. 따라서 target 값과 output 값이 일치하게 된다. 이러한 방식으로 모두 (0,0),(0,1),(1,0),(1,1) 을 모두 해주면 다음과 같은 표가 도출된다.

x1 x2 y1 y2 \( \hat{y} \) y
0 0 0 1 0 0
1 0 0 0 1 1
0 1 0 0 1 1
1 1 1 0 0 0

모두 정확하게 예측을 함을 알 수 있다.

이러한 MLP 구조에서 어떻게 bias와 weight 를 정하고 어떻게 훈련할 수 있을까?

이러한 해답은 backpropogation에 있다.

## Backpropogation

MLP Backpropogation의 핵심은 Chain Rule이다. Chain rule을 한 번 손으로 풀어보자

예를 들어 \( f = g+b, g = wx \) 라고 하자. 이를 합치면 \( f = wx +b \) 가 나온다.

이를 그림으로 표현하면 다음과 같다.

chain rule

backpropogation을 하기 전에 feedforward를 구해보자.

\( w=-2, x = 5, b=3 \) 이라고 하자. 그러면 \( g=10 \)이 되고 \(f=-7\)이 된다. 따라서 feedfoward는 그냥 수식으로 따라가기만 하면 된다.

그러면 이를 기반으로 backpropogation을 구해보자

 우선 각각의 편미분 값을 구해보자.

\( \frac{\partial f}{\partial g} = 1, \frac{\partial f}{\partial b} = 1, \frac{\partial g}{\partial w} = x \frac{\partial g}{\partial x} = w\) 이다. 

그러면 이를 chain rule에 의해서 \( \frac{\partial f}{\partial w} = \frac{\partial f}{\partial g} \dot \frac{\partial g}{\partial w} = 1 \times x = x \) 가 도출된다. 따라서 이를 기반으로 계산을 해서 그림을 그리면 다음과 같은 그림이 도출된다. 

backpropogation chain rule graph

이런 원리를 이용하여 backpropogation을 수행하고 mlp를 훈련 시킬 수 있다.

반응형

'딥러닝 기초' 카테고리의 다른 글

Advanced Optimizer than SGD  (0) 2021.08.14
Overfitting, Regularization  (0) 2021.08.01
코드에서 파라미터 최적화  (0) 2021.07.28
History of DeepLearning  (0) 2021.07.21
Binary/Multi Classification  (0) 2021.07.18

댓글