Chapter 4. 딥러닝, 그것이 알고 싶다.

MLP를 행렬과 벡터로 나타내기

첫번째 히든 레이어까지만 볼 때

$$f_1(\begin{bmatrix} x_{1} & x_{2}\end{bmatrix} \begin{bmatrix} w_{1} & w_{3} & w_{5} \\ w_{2} & w_{4} & w_{6}\end{bmatrix}+\begin{bmatrix}b_{1} & b_{2} & b_{3}\end{bmatrix})$$

두번째 히든 레이어까지 보면,

$$f_2(f_1(\begin{bmatrix} x_{1} & x_{2}\end{bmatrix} \begin{bmatrix} w_{1} & w_{3} & w_{5} \\ w_{2} & w_{4} & w_{6}\end{bmatrix}+\begin{bmatrix}b_{1} & b_{2} & b_{3}\end{bmatrix}) \textbf{W}_2+\textbf{b}_2)$$

\(\textbf{W}_2\) 와 \(\textbf{b}_2\)는 2번째 레이어의 웨이트와 바이어스 행렬이다.

즉, MLP는 행렬을 곱하고 바이어스를 더하고 Activation Function을 적용해주는 것을 반복적으로 해주는 것이다.

여기서, Activation Function이 Linear 함수이면 층을 깊게 쌓아도 의미가 없다. 위 식에서 만약 Activation Fucntion이 \(f(x)=x\) 처럼 Linear Function이라 가정하고 전개해보면, 

$$f_2(f_1(\textbf{x} \textbf{W}_1 + \textbf{b}_1) \textbf{W}_2 + \textbf{b}_2) ) = \textbf{x}\textbf{W}_1\textbf{W}_2 + \textbf{b}_1 \textbf{W}_2  + \textbf{b}_2$$ 

위처럼 되면 \( \textbf{W}_1\textbf{W}_2\)를 그냥 하나의 변수로 두고 학습을 하는 것이나 마찬가지가 된다(오히려 안좋음).

따라서 Activation Function은 반드시 Non-Linear Function을 써야 한다.
(linear -> non-linear -> linear -> non-linear 하는 것도 마찬가지)

Backpropagation

혁펜하임의 설명보다 아래 블로그가 10만배 좋다

https://www.3blue1brown.com/lessons/backpropagation-calculus

 

3Blue1Brown - Backpropagation calculus

The math of backpropagation, the algorithm by which neural networks learn.

www.3blue1brown.com

위와 같이 생긴 신경망이 있다고 하자. \(z\)에 시그모이드 함수와 같은 Activation Function을 취한 결과 값이 \(a\)이다. \(C_0\)와 \(y\)의 차이가 최종 Loss라고 하자. 우리가 원하는 것은 아래 그림 처럼 w의 변화에 따른 Loss값의 변화량이다.

태어나서 이렇게 감동적인 그림은 처음이다.

이를 식으로 나타내면 다음과 같다.

\(\frac{\partial C_0}{\partial w^{L}}\)을 바로 구할 수 없기 때문에 Chain Rule를 사용해서 구해야 한다. 

각각의 미분을 구하면 다음과 같다(여기서 Activation Function은 sigmoid function, loss function은 MSE)

위의 각각의 미분 값을 다 합쳐주면 결국,

참고로 시그모이드 함수의 미분은,

그러나, 우리는 위 그림처럼 레이어가 1개가 아니고 여러개이다. 

당황하지 말고 줄기를 따라서 하나씩 미분해서 곱해주면 된다.