딥러닝에서 가장 기본적인 순전파과정에 대한 실습
입력값 $x_{1}$과 $x_{2}$에 각각 가중치 $w_{1}$과 $w_{2}$를 곱한 값을 활성화함수로 계산하여 0 혹은 1로 y값 도출
import numpy as np
# 입력층 -> 은닉층(1층)
X = np.array([10, 20])
W1 = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]) # weight 2x3개
B1 = np.array([1, 2, 3]) # bias 3개
def sigmoid(x): # 활성화 함수
return 1 / (1 + np.exp(-x))
A1 = np.dot(X, W1) + B1
Z1 = sigmoid(A1)
print('A1 :', A1) # 입력신호
print('Z1 :', Z1) # 출력신호
입력층에서 은닉층으로 넘어갈 때 입력값 $x_{1}$과 $x_{2}$은 10과 20를 넣었다. 은닉층에서 생성되는 수는 3개이므로 로 weight는 2x3행렬로 주어지고 bias는 각 값에 대응되어 3개로 주어진다. 각 입력값과 가중치를 곱한 값을 더하고 편향까지 더한 값은 $a_{i}^{(1)}(i=1,2,3)$(1층에서의 a값)로 주어진다.
$a_{i}$ 값들은 각각 6, 13, 20으로 출력되었다.
활성화함수 h()는 sigmoid로 주어졌다. 각 a값들을 h()함수에 넣어 계산한 값이 $z_{i}(i=1,2,3)$로 주어진다.
$z_{i}$값들은 모두 1에 수렴하는 숫자로 출력되었다.
# 은닉층(1층) -> 출력층(2층)
W2 = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]]) # weight 3x2개
B2 = np.array([0.1, 0.2]) # bias 2개
A2 = np.dot(Z1, W2) + B2 # Z1 : [0.99752738 0.99999774 1.]
Y = sigmoid(A2)
print('A2 :', A2)
print('Y :', Y)
은닉층에서 구해진 3개의 값들을 출력층에서 2개로 출력한다. 그러므로 weight는 3x2개이고 bias는 2개이다. 이전 과정과 똑같이 입력값 $z_{i}(i=1,2,3)$와 weight 그리고 bias들을 조합하여 $a_{i}^{(2)}(i=1,2,3)$(2층에서의 a값)을 구하고 sigmoid함수로 활성화하여 최종적인 값 $y_{i}(i=1,2)$를 출력한다.
$z_{i}$ 값들은 각각 0.6996, 1.6990으로 출력되었다.
최종적인 출력값 $y_{i}$은 각각 0.6681, 0.8454로 출력되었다.
<Reference>
파이썬증권데이터분석 (김황후, 한빛미디어)
<Git>
'datascience > DL' 카테고리의 다른 글
Backpropagation(역전파) - 코드로 구해보기 (0) | 2021.06.06 |
---|---|
Backpropagation(역전파) - 은닉층 가중치 업데이트 계산식 도출 (0) | 2021.05.25 |
Backpropagation(역전파) - 출력층 가중치 업데이트 계산식 도출 (0) | 2021.05.22 |