본문 바로가기

공부 기록/딥러닝의 수학

[딥러닝의 수학] 3. DNN, Forward Pass

728x90

 

 

 

2023.07.30 - [수학 공부 기록] - [딥러닝의 수학] 2. Perceptron, MLP

 

[딥러닝의 수학] 2. Perceptron, MLP

2023.07.28 - [수학 공부 기록] - [딥러닝의 수학] 1. Introduction [딥러닝의 수학] 1. Introduction 딥러닝 시리즈의 첫 번째 글입니다. 이 글은 고려대학교 수학과 오승상 교수님의 딥러닝 강좌를 참고자료

lighter.tistory.com

 

딥러닝 시리즈의 세 번째 글입니다. 이 글은 고려대학교 수학과 오승상 교수님의 딥러닝 강좌를 참고자료로 하여 쓰임을 밝힙니다. 또한, 이 글의 목적은 이 강좌를 듣고 저의 개인적인 복습용으로 요약하여 작성하는 것임을 밝힙니다. 자세한 내용을 알고 싶으시다면 아래 링크를 참고해 주세요.

 

https://youtube.com/playlist?list=PLvbUC2Zh5oJvByu9KL82bswYT2IKf0K1M

 

오승상 딥러닝 Deep Learning

고려대학교 오승상 교수의 Deep Learning 강의 입니다. (자료) https://sites.google.com/view/seungsangoh

www.youtube.com


이 글에서 다루고자 하는 내용은 지난번에 이어서 DNN과 관련된 내용입니다.

 

이 글에서는 특히 DNN의 정의와 DNN이 어떻게 작동하는지에 대한 간단한 설명, 그리고 그 중 Forward Pass에 대해 간략하게 알아보겠습니다.

 

이후 Activation function으로 왜 sigmoid함수를 사용하는지에 대해, 그리고 또 다른 Activation function인 softmax함수에 대해 배워보겠습니다.

 


DNN은 이전에 소개했던 MLP에서 Hidden Layer의 개수가 특히 많을 때를 DNN(Deep Neural Network)이라고 합니다.

 

우리는 이전에서 Node하나가 Perceptron하나를 의미함을 배웠습니다.

 

즉, Node하나는 학습과정을 거치며 새로운 feature을 만들어냅니다.

 

이러한 Perceptron이 병렬로 나열되어있는 모습이 Layer입니다.

 

당연히 생각할 수 있는 것은, Input vector가 여러 개의 Perceptron을 거치면 거칠수록 Activation function 또한 많이 거치게 되고, 그만큼 더 복잡하고 다양한 구조를 가질 수 있을 것이란 걸 생각할 수 있습니다.

 

하지만 Layer는 병렬로 나열되어있는 Perceptron이므로, 같은 Layer위에 놓여있는 node끼리는 그런 "복잡함"에는 서로 관여하지 않을 것입니다.

 

오히려 한 Layer에서 다른 Layer로 넘어갈 때 Perceptron구조가 적용되므로, 그럴 때 Activation function이 마치 합성함수처럼 "중복"해서 적용되어 복잡한 구조를 만들어냄을 알 수 있습니다.

 

즉, Layer의 수가 많아지면 많아질 수록, 한 node에서 다른 node로 거쳐가는 모습이 많아지고, 그런 경우의 수 또한 증가하므로, 더 "좋은" feature들을 창출해 냅니다.

 

따라서, 같은 Node를 사용해서 MLP를 구성했다고 해도, Layer를 많이 사용한 DNN이 Layer를 적게 사용한 대신에 한 Layer에 많은 노드를 사용한 Shallow Neural Network보다 좀 더 복잡한 데이터를 모델링하고, 좋은 성능을 보여줄 수 있습니다.

 


DNN은 크게 두 가지의 단계를 반복해서 학습을 진행합니다.

 

1. 각 Perceptron들마다의 가중치들과 bias들이 정해져 있을 때, 이를 반복 계산하여 최종적으로 $\mathbf{\hat{y}}$을 계산하는 Forward Pass.

2. Forward Pass의 결과를 토대로, 각 Perceptron들의 가중치들을 "갱신"해주는 Backpropagation.

 

여기에서 우리는 이 1번 단계와 2번 단계를 반복하며 Perceptron들의 가중치를 계속 갱신해 나갑니다.

 

가중치가 갱신되면 갱신될수록 DNN의 network의 성능은 더욱더 향상됩니다.

 

 

Forward Pass라는 이름을 가지는 이유는 주어진 가중치와 Bias가 있으면 이를 계속 계산하며 앞으로 나아가는 모습이기 때문입니다.

 

추가적으로, 이때 Activation Function으로 Sigmoid라는 함수를 사용합니다.

 

이 함수는 다음과 같은 식을 가집니다.

 

$$\sigma (z) = \frac {1} {1 + e^{-z}}$$

 

이 함수는 다음과 같이 부드럽게 이어지고, 미분 가능한 함수입니다.

 

 

Step Function대신 이 함수를 쓰는 가장 큰 이유는 미분이 가능하다는 점입니다.

 

Backpropagation을 할 때 미분을 사용해야 되는데, 이때 미분이 불가능하다면 갱신할 수 없습니다.

 

또한 실제 미분을 하여 계산을 안 해도 간단한 형태의 식 조작을 통해 쉽게 구할 수 있어서 많이 사용됩니다.

 


이전의 그림에서 맨 앞부분만 확인해 봅시다.

 

 

Input vector $\mathbf{x} = (1, -1)$이 주어져있고, 첫 번째 node에서 Bias와 Weight값을 적용하여 Weighted sum $z$를 구하면, $z = 1\times 1 + (-2) \times (-1) + 1 = 4$의 값이 나옵니다.

 

두 번째 node에서 마찬가지로 Bias와 Weight값을 적용하여 $z$를 구하면 $-2$가 나옵니다.

 

이에 대한 각각의 $\sigma (z)$값은 $0.98, 0.12$입니다.

 

우리는 이 과정을 "행렬"로 간주하고 다음과 같이 한 번에 구할 수 있습니다.

 

 

왼쪽 $2 \times 2$행렬의 첫 번째 row는 첫번째 node의 weight값 $1, -2$를 의미하고, 두 번째 row는 두번째 node의 weight값 $-1, 1$을 의미합니다.

 

또한, 맨 오른쪽 $2 \times 1$행렬의 각 원소는 각 node의 bias를 나타냅니다.

 

즉, 아래와 같은 수식이 성립됩니다.

 

$$\sigma ( \mathbf{z} ) = \sigma ( W \mathbf{x} + \mathbf{b} )$$

 

여기서 $W$는 Weight Matrix를 의미하고, $\mathbf{b}$는 Bias vector를 의미합니다.

 

우리는 여기서 Weight Matrix의 Row개수는 각 Layer에 node가 몇 개 있는지를 나타내며, Column개수는 Input vector의 크기를 나타냄을 알 수 있습니다.

 

 

이를 반복해서 계속 계산하면 다음과 같은 함수 $f : \mathbb{R}^{2} \rightarrow \mathbb{R}^{2}$의 $(1, -1)$의 값을 구하는 것이라고 생각할 수 있습니다.

 


각 Node별로 반복해서 계산을 하는 것이고, 이때 우리는 행렬을 사용하여 한꺼번에 Layer에 있는 모든 노드들을 계산할 수 있음을 알았습니다.

 

 

그림과 같이 크기가 $K$인 Input vector $\mathbf{x}$를 생각해 봅시다.

 

또한, 각 Layer에서 Layer로 넘어갈 때 적용되는 Weight Matrix와 Bias vector를 각각 $W^{i}, b^{i}$라고 합시다.

 

그러면 우리는 다음과 같이 최종적으로 나오는 $\mathbf{\hat{y}}$을 위와 같이 쓸 수 있습니다.

 

여기서 중요한 점은 $\sigma$의 Nonlinearity(비선형성)입니다.

 

만약 $\sigma$가 선형적인 양상을 지닌다면, 합성함수를 적용시켜도 사실상 이건 Linear 한 함수이고, 그러므로 $W^L ... W^2 W^1$을 $\textrm{W}$라는 또 다른 Weight Matrix 하나로 대체할 수 있습니다.

 

그러면 사실상 Layer하나만 거치는 것이랑 별 다를 바가 없으므로, 이것은 전혀 복잡해지지 않는 구조입니다.

 

의미가 없다는 뜻이죠.

 

이럴 때 $\sigma$의 Nonlinearlity가 합성을 하며 복잡성을 부여해 주는 역할을 해주는 것이라고 생각하면 됩니다.

 


마지막으로 Classification 문제에서 자주 사용하는 Softmax라는 Activation Function을 알아봅시다.

 

Softmax는 마지막 Layer(Output Layer)로 넘어가는 과정에서 사용합니다.

 

 

일반적인 Sigmoid를 사용하여 나온 결과를 봅시다.

 

$\hat{y}_1$의 결과가 제일 높게 나옴을 알 수 있습니다.

 

우리는 $\hat{y}_1$이 가장 높다는 사실을 주변의 결과의 비교로부터 알 수 있습니다.

 

여기서 하나가 아니라 여러 개, 즉, 비율을 고려해서 계산하는 함수가 Softmax함수입니다.

 

"확률분포는 아니지만", 비율을 고려하여 마치 "확률 분포처럼 다룰 수 있게끔"하도록 만든 것입니다.

 

실제로도 확률 분포와 유사합니다.(확률 분포가 아니라는 것에 명심합시다. 여기에서는 그 어느 곳에서 확률 개념이 사용되지 않았습니다.)

 

이 Softmax함수의 식은 다음과 같습니다.

 

$$Softmax = \frac {e^{z_i}} {\sum e ^ {z_j}}$$

 

Sigmoid를 사용한 비율이라면 $\frac {\sigma (z_i)} {\sum \sigma (z_j)}$로 구해야 하지만, 이는 매우 복잡하므로 간단하게 위와 같은 식을 사용합니다.

 

확률 분포처럼 $0$과 $1$사이의 값이 나오고, 다 더하면 $1$이 됩니다.(물론 진짜 확률 분포는 아닙니다.)

 


이전으로 되돌아가서, 우리의 목적을 살펴봅시다.

 

위의 그림과 같이, 어떤 그림이 주어져 있으면, 우리는 이를 DNN을 거쳐 이 그림이 $2$라는 사실을 알아내고 싶습니다.

 

즉, 처음에 Forward Pass를 통해 $\mathbf{\hat{y}}$를 계산한 후에, 이 값을 토대로 각각의 $W^1, b^1, ... , W^L, b^L$의 값들을 Update 해주고 싶습니다. (Backpropagation)

 

 

 

우리는 이 그림을 학습시켜 $1$을 그리면 $\hat{y}_1$이, $2$를 그리면 $\hat{y}_2$가 최댓값을 가지도록 $\theta$를 계속 갱신시켜 Network를 향상하고 싶습니다.

 

이 과정을 Backpropagation이라고 한다고 했습니다.

 

이를 하기 위해선 Cost Function의 개념을 알아야 합니다.

 

이 그림을 학습시키는 건 지도학습이기 때문에 답(Label, $y$)이 존재하고, 결국 우리는 $\hat{y}$와 $y$의 차이를 최소화하도록 학습시키고 싶습니다.

 

이 차이, Error를 정의하는 함수가 곧 Cost Function입니다.

 

다음 시간에는 Cost Function의 개념에 대해 알아보겠습니다.