datascience/DL

딥러닝 순전파 실습(퍼셉트론 계산과정)

patrck_jjh 2021. 5. 16. 20:49

 

 딥러닝에서 가장 기본적인 순전파과정에 대한 실습

 


 

 

 

 입력값 $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>

https://github.com/dudungE/AI_Finance/blob/master/9%EC%9E%A5_%EC%A3%BC%EA%B0%80%EB%94%A5%EB%9F%AC%EB%8B%9D_colab.ipynb