일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 주일설교
- R
- probability
- 우리들교회
- Statistics
- 데이터 과학
- Machine Learning
- 빅 데이타
- 확률
- 빅 데이터
- WebGL
- 빅데이터
- Artificial Intelligence
- 딥러닝
- MongoDB
- 김양재 목사
- 통계
- 김양재
- 인공지능
- openCV
- No SQL
- 몽고디비
- 빅데이타
- Deep learning
- node.js
- data science
- nodeJS
- Big Data
- 김양재 목사님
- c++
- Today
- Total
Scientific Computing & Data Science
[Artificial Intelligence / Posts] 역전파 (Backpropagation) Part 1. 본문
[Artificial Intelligence / Posts] 역전파 (Backpropagation) Part 1.
cinema4dr12 2017. 5. 6. 15:39by Geol Choi |
이번 포스팅에서는 딥러닝 알고리즘에서 Weights를 업데이트하는 중요한 요소들 중 하나인 역전파(Backpropagation)에 대해 알아보도록 한다.
개요
다음과 같이 2-레이어 신경망(2-Layer Neural Network)를 예로 들어보자.
그림 1. 2-레이어 신경망
그림 1.은 Fully Connected 2-레이어 신경망의 예이며, x는 입력(Input), h는 은닉 레이어(Hidden Layer), y는 출력(Output)을 의미한다. 입력-은닉 레이어, 은닉 레이어-출력을 연결하는 선들은 가중치 합(Weighted Sum)을 위한 각각의 가중치, w를 의미한다. 또한 \(b_i\)는 Input → Hidden Layer의 바이어스(Bias)를, \(b_j\)는 Hidden Layer → Output의 바이어스를 나타낸다.
예를 들어, \(x_2\)와 \(h_4\)를 연결하는 가중치는 \(w_{2,4}\)인데, Input(i)과 Hidden Layer(j)를 연결하는 가중치는 \(w_{i,j}\)로 일반화할 수 있다. 마찬가지로, Hidden Layer(j)와 Output(k)를 연결하는 가중치는 \(w_{j,k}\)로 일반화할 수 있다.
활성화 함수(Activation Function)를 \(\mathbf{G}\)라고 하면, Input-Hidden Layer 및 Hidden Layer-Output의 관계식은 각각 다음과 같이 표현할 수 있다:
\(h_j = \mathbf{G}\begin{pmatrix}\displaystyle\sum_{i=1}^{N}{(w_{i,j}x_{i}+b_i)}\end{pmatrix}\) ...(1)
\(y_k = \mathbf{G}\begin{pmatrix}\displaystyle\sum_{j=1}^{H}{(w_{j,k}h_{j}+b_j)}\end{pmatrix}\) ...(2)
여기서, N, H, M은 각각 Input의 개수와 Hidden Layer 내 노드의 개수, 출력 노드의 개수를 의미하며, 그림 1.의 예에서 N = 5, H = 4, M = 3이다.
식(1)과 식(2)를 합쳐 다음과 같이 표현이 가능하다:
\(y_k = \mathbf{G}\begin{pmatrix}\displaystyle\sum_{j=1}^{H}{(w_{j,k}\,\mathbf{G}\begin{pmatrix}\displaystyle\sum_{i=1}^{N}{(w_{i,j}x_i+b_i)}\end{pmatrix}+b_j)}\end{pmatrix}\) ...(3)
그러나, 본 포스팅에서는 설명을 간단하기 위해 바이어스 항을 포함하지 않을 것이며, 바이어스 항을 제외하여도 설명의 흐름 상에는 큰 문제가 없다. 그래서 식(1), 식(2), 식(3)은 각각 다음과 같이 정의하도록 한다.
\(h_j = \mathbf{G}\begin{pmatrix}\displaystyle\sum_{i=1}^{N}{(w_{i,j}x_{i})}\end{pmatrix}\) ...(1)'
\(y_k = \mathbf{G}\begin{pmatrix}\displaystyle\sum_{j=1}^{H}{(w_{j,k}h_{j})}\end{pmatrix}\) ...(2)'
\(y_k = \mathbf{G}\begin{pmatrix}\displaystyle\sum_{j=1}^{H}{(w_{j,k}\,\mathbf{G}\begin{pmatrix}\displaystyle\sum_{i=1}^{N}{(w_{i,j}x_i)}\end{pmatrix})}\end{pmatrix}\) ...(3)'
딥러닝에서의 일반적인 학습과정은 가중치 w를 업데이트하면서 가중치 합 결과와 실제 라벨링 된 값(Ground Truth Label)의 차이(이를 Data Loss라고 한다)를 줄여나가는 과정인데, Newton 방법인 급강하법(Steepest Gradient Descent Method)을 이용하여 w를 업데이트한다.
전체적인 학습 알고리즘은 다음과 같다:
1. w를 초기화한다.
2. Data Loss L을 w에 대해 Gradient \(\nabla_{\mathbf{w}}L\)을 계산한다.
3. 다음 식을 이용하여 w를 업데이트 한다: \(\mathbf{w}\leftarrow\mathbf{w}-\alpha(\nabla_{w}L)\)
4. 지정한 조건을 만족할 때까지 2-3을 계속 반복한다.
사실, 손실함수 L은 Data Loss와 Regularization Loss의 합으로 계산되는데, 여기서는 Data Loss에 대해서만 다룬다. 또한 3번에서, \(\alpha\)는 학습률(Learning Rate)라고 하며, 최적화 문제에서는 일반적으로 Step Size라고도 한다. 학습률이 크면 초기에는 수렴속도가 빠르나 수렴점 근처에서 지그재그(Zigzag)가 발생하여 오히려 수렴속도가 느려질 수도 있으며, 작으면 초기 수렴속도가 느리지만 수렴점 근처에서는 오히려 수렴속도가 빨라지는 특징이 있다.
w를 업데이트하는데 있어 급강하법이 아닌 확률적인 샘플링에 의한 방법(Stochastic Gradient Descent; SGD)도 있으나, 본 포스팅의 범위는 아니며, 차후에 다루도록 하겠다.
위의 알고리즘 중 3번 과정이 본 포스팅에서 집중적으로 다루고자 하는 역전파이다.
손실함수 (Loss Function)
앞서 손실함수는 Data Loss와 Regularization Loss가 있다고 하였는데, 본 포스팅에서는 손실함수를 Data Loss에 한정하도록 하겠다. 최적화 문제에 대한 다양한 손실함수가 정의될 수 있지만, Mean Square Error(MSE)와 Cross-Entropy에 대해서만 짚고 넘어간다.
우선 MSE는 예측된 값과 실측 데이터 값의 차이의 제곱합이며, 수식으로 다음과 같이 쓸 수 있다:
\(L_{\mathbf{MSE}} = \displaystyle\frac{1}{2}\displaystyle\sum_{k=1}^{M}{[y_k - \hat{y}_k]^2}\) ...(4)
여기서, 예측된 값 \(y_k\)는,
\(y_k = G\begin{pmatrix}\displaystyle\sum_{j=1}^{H}{(w_{j,k}h_j)}\end{pmatrix}\) ...(5)
이며, \(y_k\)는 실측값이다.
Cross-Entropy에 의한 손실함수는 다음과 같이 정의한다:
\(L_{\mathbf{Cross-Entropy}} = \displaystyle\sum_{k=1}^{M}{\begin{bmatrix}\hat{y}_{k}\mathrm{log}(y_k)+(1-\hat{y}_k)\mathrm{log}(1-y_k)\end{bmatrix}}\) ...(6)
Data Loss에 대한 Gradient 구하기
그림 2.에서 보는 바와 같이, Input → Output으로 계산되는 과정은 예측(Predict)이며, 반대로 Output → Input으로 계산되는 과정은 가중치 업데이트 혹은 역전파이다.
그림 2. 예측 및 가중치 업데이트
이제 가중치 w에 대한 손실함수 L의 Gradient 식을 유도하기 전에, \(w_{i,j}\)와 \(w_{j,k}\)에 의한 각각의 가중치 합을 다음과 같이 정의한다:
\(f_j = \displaystyle\sum_{i=1}^{N}{(w_{i,j}x_i)}\) ...(7)
\(f_k = \displaystyle\sum_{j=1}^{H}{(w_{j,k}h_j)} = \) ...(8)
따라서, 식(2)'와 식(8)에 의해
\(y_k = \mathbf{G}(f_k)\) ...(9)
이며, 식(1)'과 식(7)에 의해
\(h_j = \mathbf{G}(f_j)\) ...(10)
이다. 손실함수 L은 MSE로 정하고 L의 \(w_{j,k}\)에 대한 Gradient 식은 Chain Rule에 의해,
\(\displaystyle\frac{\partial L}{\partial w_{j,k}} = \displaystyle\frac{\partial L}{\partial f_k}\displaystyle\frac{\partial f_k}{\partial w_{j,k}} = \triangle_k \displaystyle\frac{\partial}{\partial w_{j,k}}{\begin{pmatrix}\displaystyle\sum_{j=1}^{H}{w_{j,k}h_j}\end{pmatrix}} = \triangle_k h_j\) ...(11)
및
\(\displaystyle\frac{\partial L}{\partial w_{i,j}} = \displaystyle\frac{\partial L}{\partial f_j}\displaystyle\frac{\partial f_j}{\partial w_{i,j}} = \triangle_j \displaystyle\frac{\partial}{\partial w_{i,j}}{\begin{pmatrix}\displaystyle\sum_{i=1}^{N}{w_{i,j}x_i}\end{pmatrix}} = \triangle_j x_i\) ...(12)
이다. 여기서, \(\triangle_k\) 및 \(\triangle_j\)는 각각
\(\triangle_k = \displaystyle\frac{\partial L}{\partial f_k}\), \(\triangle_j = \displaystyle\frac{\partial L}{\partial f_j}\)
이며, 각각을 풀어쓰면,
\(\triangle_k = \displaystyle\frac{\partial L}{\partial f_k} = \displaystyle\frac{\partial}{\partial f_k}\begin{Bmatrix}\displaystyle\frac{1}{2}\displaystyle\sum_{k=1}^{M}{[y_k - \hat{y}_k]^2}\end{Bmatrix} = \displaystyle\frac{\partial}{\partial f_k}\begin{Bmatrix}\displaystyle\frac{1}{2}\displaystyle\sum_{k=1}^{M}{[G(f_k)-\hat{y}_k]^2}\end{Bmatrix} = [G(f_k)-\hat{y}_k]G'(f_k)\)
...(13)
\(\triangle_j = \displaystyle\frac{\partial L}{\partial f_j} = \displaystyle\sum_{k=1}^{M}{\displaystyle\frac{\partial L}{\partial f_k}\displaystyle\frac{\partial f_k}{\partial f_j}} = \displaystyle\sum_{k=1}^{M}{\begin{bmatrix}\triangle_k \displaystyle\frac{\partial}{\partial f_j}\begin{Bmatrix}\displaystyle\sum_{j=1}^{H}{w_{j,k}G(f_j)}\end{Bmatrix}\end{bmatrix}} = \displaystyle\sum_{k=1}^{M}{[\triangle_k w_{j,k}]}G'(f_j)\)
...(14)
이다.
지금까지 유도한 식을 정리하면 다음과 같다:
\(\displaystyle\frac{\partial L}{\partial w_{j,k}} = \triangle_k h_j\) where \(\triangle_k = [G(f_k)-\hat{y}_k]G'(f_k)\)
\(\displaystyle\frac{\partial L}{\partial w_{i,j}} = \triangle_j x_i\) where \(\triangle_j = \begin{bmatrix}\displaystyle\sum_{k=1}^{M}{\triangle_k w_{j,k}}\end{bmatrix}G'(f_j)\)
\(y_k = G(f_k)\)
\(h_j = G(f_j)\)
\(f_j = \displaystyle\sum_{i=1}^{N}{w_{i,j}x_i}\)
\(f_k = \displaystyle\sum_{j=1}^{H}{w_{j,k}h_j}\)
활성화 함수 G가 sigmoid일 경우, 이에 대한 미분값 G'은 다음과 같이 계산된다:
\(G(z) = \displaystyle\frac{1}{1+\mathrm{exp}(-z)}\)
\(G'(z) = \displaystyle\frac{\mathrm{exp}(-z)}{[1+\mathrm{exp}(-z)]^2} = \displaystyle\frac{1}{1+\mathrm{exp}(-z)}\displaystyle\frac{\mathrm{exp}(-z)}{1+\mathrm{exp}(-z)} = G(z)(1-G(z))\)
'Artificial Intelligence > Posts' 카테고리의 다른 글
[Artificial Intelligence / Posts] Convolutional Neural Network - Pooling (0) | 2017.06.29 |
---|---|
[Artificial Intelligence / Posts] 역전파 (Backpropagation) Part 2. (1) | 2017.06.03 |
[Artificial Intelligence / Posts] R에서의 딥러닝 (0) | 2017.04.20 |
[Artificial Intelligence / Posts] Machine Learning 분류 (0) | 2017.04.03 |
[Artificial Intelligence / Posts] 핵심 머신러닝 용어 (3) | 2017.03.19 |