반응형
심층 신경망이란?
은닉층의 개수가 많아질수록 인공신경망이 ‘깊어졌다(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 1 / (1 + 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.5, 0.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() x = np.array([1.2, 0.8]) y = execDNN(network, x) # Deep Neural Network, 심층 신경망 실행 print("y :: ", y) | cs |
y :: [0.63406332 1.03559635]
반응형
'Applied > Artificial Intelligence' 카테고리의 다른 글
항등 함수와 소프트맥스 함수 (0) | 2019.06.11 |
---|---|
numpy를 이용한 행렬 계산 (0) | 2019.06.06 |
활성화 함수(Activation Function) (0) | 2019.06.03 |
퍼셉트론 (Perception) 알고리즘 (0) | 2019.06.02 |