[DL] 퍼셉트론과 역전파
목차
1. 단일 퍼셉트론(Single-Layer Perceptron)
2. 다층 퍼셉트론(Multi-Layer Perceptron, MLP)
3. 역전파 알고리즘(Backpropagation)
1. 단일 퍼셉트론(Single-Layer Perceptron)
1.1 단일 퍼셉트론 개념 및 구조

퍼셉트론은 뇌를 구성하는 신경 세포 뉴런의 동작을 기반해서 블라블라.. 는 흔한이야기 이다. 이 내용은 대충 건너뛰고 퍼셉트론의 구조와 개념에 대해 이야기 해보자 퍼셉트론은 다수의 입력을 받아 노드(뉴런)에 보내지는 경우 각각 고유한 가중치(Weight)가 곱해지게 된다. 이때 가중치가 클수록 해당 신호가 그만큼 더 중요함을 의미한다. $w_{1}x_{1} + w_{2}x_{2} +... +w_{n}x_{n}$ 이 값이 $\theta$(임계점)와 비교하여 큰지 작은지에 대한 값으로 0, 1을 판단한다.
$$출력(y) =\begin{cases}
1, & w_{1}x_{1} + w_{2}x_{2} +... +w_{n}x_{n} > \theta \\
0, & w_{1}x_{1} + w_{2}x_{2} +... +w_{n}x_{n} \leq \theta
\end{cases}$$
이때 $\theta$을 좌변으로 이항 하여 $- \theta$를 $b$ 로 치환하면 이를 편향이라고 부르게 된다. 이 값을 이용하여 노드(뉴런)이 얼마나 쉽게 활성화 되는지를 결정하게 된다. 즉, $w$는 입력 신호가 결과에 주는 영향력(중요도)을 조절하는 매개변수고, 편향은 노드(뉴런)이 얼마나 쉽게 활성화 하느냐를 조정하는 매개 변수이다.
$$출력(y) =\begin{cases}
1, & w_{1}x_{1} + w_{2}x_{2} +... +w_{n}x_{n} + b > 0 \\
0, & w_{1}x_{1} + w_{2}x_{2} +... +w_{n}x_{n} + b \leq 0
\end{cases}$$
1.2 활성화 함수
단일 퍼셉트론에서는 활성화 함수를 사용한다. 퍼셉트론 자체가 선형함수를 이용하여 나타내기 때문에 비선형함수성을 띄는 활성화 함수를 사용한다
1) 비선형성의 도입 : 활성화 함수를 사용하면 선형 결합된 입력값에 비선형성을 도입할 수 있따. 이를 통해 입력과 출력 간의 복잡한 관계를 모델링 할 수 있다. 다만, 단일 퍼셉트론의 경우 비선형성이 도입된다 하더라도 하나의 결정 경계만을 지니기 때문에 복잡한 문제를 해결하는데는 한계가 있다.
2) 출력 범위의 조절 : 활성화 함수는 출력값의 범위를 제한하는 역할을 한다. 이를 통해 특정 범위값을 예측하는 문제에 적합한 모델을 만들수 있다.
주로 사용되는 활성화 함수로는 i) 계단 함수(Step function) ii) 시그모이드 함수(Sigmoid) iii)하이퍼볼릭 탄젠트 함수(Hyperbolic Tangent Function, tanh) iv)ReLU(Rectified Linear Unit) 이 있다. 주로 문제의 특성과 목표에 따라서 선택된다. 각 함수의 특징을 고려하여 적절한 활성함수를 선택하는 것이 중요하다.
1.3 단일 퍼셉트론의 한계 및 XOR 문제
XOR 게이트는 배터적 논리합이라는 논리 회로로서 $x_{1}$ 과 $x_{2}$ 중 한 쪽이 1일 때만 1을 출력한다. 단일 퍼셉트론의 경우는 하나의 결정경계를 지니기 때문에 어떤 선을 그어도 빨간 동그라미와 파란세모를 딱 둘로 나누는 것은 불가능 하게 된다.

따라서 이를 나누기 위해서는 비선형 영역으로 분리하여야 한다. 그러기 위해서는 퍼셉트론을 쌓아 만드는 "다층 퍼셉트론" 개념이 등장해야한다. 이 개념을 이렇게 생각해 보자 NAND, AND, OR 의 논리게이트들을 중접하여 XOR 을 구현해 보면 다음과 같다.

이처럼 여러 논리 게이트를 중첩하게 되면 XOR 게이트를 구현할 수 있다. 이를 다층 퍼셉트론 개념과 연결해 보자.
2. 다층 퍼셉트론(Multi-Layer Perceptron, MLP)
다층 퍼셉트론이란 입력층, 출력층에서 중간에 "은닉층(hidden layer)를 추가한 구조이다. XOR 의 경우는 은닉층이 1개 추가된 경우이지만 다층 퍼셉트론은 1개 이상의 은닉층이 있는 퍼셉트론을 말한다. 물론 은닉층이 2개이상인 경우는 Deep Nueral Network, DNN 이라하여 심층 신경망이라고 부르기도한다. MLD, DNN 도 마찬가지로 가중치와 편향을 찾고 이를 학습하는 과정이 필요하다. 이때도 마찬가지로 loss function 를 사용하고 optimizer(ex, adam)을 사용하여 가중치를 찾아가고 그에 대한 평가로서 R, f1-score 등 다양한 평가지표를 사용하게 된다. 이중 신경망의 가중치와 편향을 효과적으로 조정하는 역전파 알고리즘에 대해 알아보고자 한다.
3. 역전파 알고리즘(Backpropagation, 오차역전파)
3.1 개념
심층 신경망을 학습한다는 것은 결국 출력값과 오차가 최소를 이루도록 w(가중치)와 b(편향, bias)를 결정하는 것이다. 이러한 방법으로 "경사하강법(Gradient Descent)"가 있는데 이는 learnig rate크기 만큼 움직이면서 오차가 최소가 되도록 가중치와 편향을 조절해 나간다. 결국 역전파 알고리즘도 이 경사하강법을 이용하는 것이다. 순전파와 역전파에 대해 알아보기 위해 계산 그래프를 보자
계산 그래프는 말그대로 노드를 하나의 연산으로 생각하는 것이다. 다음과 같은 문제가 있을때, 계산 그래프를 표현해보자.
100원짜리 연필을 n개 사고, m의 부가세가 붙는 경우 얼마를 지불해야하는가?

계산 그래프를 보면 연필 개수와 부가세의 값, 연필의 가격을 입력으로 주어지게 되면 각 노드에 있는 연산에 따라 왼쪽에서 오른쪽으로 진행하게 된다. 이것을 '순전파' 라고 하며 순전파를 통해 신경마의 출력값을 계산하고, 손실 함수를 사용해 예측값과 실제값 간의 오차를 구한다. 그리고 이렇게 계산된 손실 함수를 역방향 '역전파'를 통해 최솟값을 찾아 나가는 과정이다.
3.2. 연쇄 법칙과 그래디언트 계산
위 계산 그래프를 통해 순전파의 계산을 보았다. 역전파는 그 반대의 순서를 통해 미분을 해나가게 되는데 이는 연쇄법칙(chain rule)을 이용하는 것이다. 다음 예제를 통해서 역전파를 이해해 보자. 해당 신경망은 'Pytorch로 시작하는 딥러닝 입문' 에서 발췌했으며 이하 내용도 책을 참고 한것이다.

순전파 계산은 앞서 살폈듯이 왼쪽에서 오른쪽으로 계산 그래프를 이동한다. 그 이동을 통해서 예측값을 출력하고 그 값을 실제값과 비교하여 오차를 계산한다. 그리고 역전파 계산을 통해 오차를 최소화 하도록 $W_{1}, W_{2}... W{8}$ 을 업데이트 한다.
우리가 흔히 보는 경사 하강법의 기본 식을 상기해보자.
$$W := W - \alpha {\partial cost \over \partial W}$$
따라서 8개의 모든 가중치에 대해 오차에 대한 가중치 미분값을 구해야 한다.
1) 역전파 1단계

위 과정을 반복하여 $W_{5}, ... W_{8}$ 까지의 가중치를 업데이트 하였다.
2) 역전파 2단계

위와 같은 방법으로 $W_{1}, ... W_{4}$ 까지도 업데이트 할 수 있다. 물론 이 과정은 라이브러리가 알아서 다 해줘서 이해가 안된다면 그냥 두어도 되지만 한번쯤은 이해하면 좋을거 같다.