반응형

심층 신경망이란?

 

 

은닉층의 개수가 많아질수록 인공신경망이 ‘깊어졌다(deep)’고 부르며, 이렇게 충분히 깊어진 인공신경망을 러닝 모델로 사용하는 머신러닝 패러다임을 바로 딥러닝(Deep Learning)이라고 한다. 

 

그리고, 딥러닝을 위해 사용하는 충분히 깊은 인공신경망을 심층 신경망(DNN: Deep neural network)이라고 통칭한다. 

 



‘그럼 은닉층 및 출력층이 몇 개 이상이 있어야 심층 신경망이냐?’는 의문이 생길 수 있는데, 

일반적으로는 은닉층+출력층이 2개 이상이 되면 심층 신경망이라고 한다. 예를 들어, 아래와 같이 8개 은닉층+출력층으로 구성된 다층 퍼셉트론은 심층 신경망이다.

 

출처 : http://research.sualab.com/introduction/2017/10/10/what-is-deep-learning-1.html

 

 

 

 

 

심층 신경망 구현

 

이번에는 심층 신경망을 구현하는 방법에 대해 생각해보자.

 

우선 입력층인 x가 있고 각 층마다 bias와 weight가 각 입력마다 계산되어

 

(x * w) + b가 다음 출력층으로 들어갈 것이다.

 

이때 우리는 활성함수를 배웠는데 그 중, 시그모이드 함수(h())를 이용하여 출력값이 활성함수를 거치도록 해주고(z1)그 값을 다시 입력값으로 다음 층으로 전달시킨다.

 

출처 :밑바닥부터 시작하는 딥러닝 그림 참고. 문제가 될 시 삭제조치 하도록 하겠습니다.

 

이를 이제 코드를 통해 나타내보자

 

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
31
32
33
34
35
36
import tensorflow as tf
import numpy as np
 
def sigmoid(x): 
    return / (+ np.exp(-x)) 
 
def ANN(): # artificial neural network
    network = {} # 인공 신경망 dict로 정의
    network['w1'= np.array([[0.1,0.3,0.5], [0.2,0.4,0.6]])
    network['b1'= np.array([0.1,0.2,0.3])
    network['w2'= np.array([[0.1,0.5], [0.2,0.6], [0.50.6]])
    network['b2'= np.array([0.2,0.3])
    network['w3'= np.array([[0.3,0.5], [0.4,0.6]])
    network['b3'= np.array([0.1,0.2])
    
    return network
 
def execDNN(network, x):
    w1, w2, w3 = network['w1'], network['w2'], network['w3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    
    a1 = np.dot(x, w1) + b1
    z1 = sigmoid(a1)
    
    a2 = np.dot(z1, w2) + b2
    z2 = sigmoid(a2)
    
    a3 = np.dot(z2, w3) + b3
    
    return a3
    
network = ANN()
= np.array([1.20.8])
= execDNN(network, x) # Deep Neural Network, 심층 신경망 실행
 
print("y :: ", y)
cs

 

 

y :: [0.63406332 1.03559635]

반응형