728x90
반응형
1. 신경망의 구성
신경망은 input layers(입력층), hidden layers(은닉층), output layers(출력층)으로 나뉩니다.
사실 은닉층의 수가 최소 2개 이상이어야 deep하다고 할 수 있습니다. 즉, layer(층)이 총 3개 이상인 것을 신경망(딥러닝)이라고 합니다. (층을 셀 때 입력층은 포함x)
위의 그림은 단일 퍼셉트론으로 입력층과 활성화함수, 출력층으로만 이루어져 있습니다. 가운데 노드는 입력층에 가중치를 곱하고 Bias를 더한 선형결합 연산 후 활성함수를 거치면 출력값이 도출됩니다.
그럼 위의 그림은 무엇일까요?
가운데 hidden layer(은닉층)이 1층 있습니다. 은닉층이 1개 이상이면 다층 퍼셉트론 이라고 합니다. 하지만 딥러닝(신경망)이라고 할 수는 없습니다.
위의 그림은 hidden layer가 최소 2개인 딥러닝의 조건을 만족하고 있습니다.
2. 신경망 구조 with python
# 네트워크 구조 생성 함수 정의
def init_network():
network = {}
network['W1'] = np.array([[0.1, 0.2, 0.3, 0.4], [0.1, 0.3, 0.5, 0.7], [0.1, 0.4, 07, 1.0]]) # 3 x 4
network['B1'] = np.array([0.2, 0.4, 0.6, 0.8])
network['W2'] = np.array([[0.1, 0.2, 0.3, 0.4], [0.1, 0.3, 0.5, 0.7], [0.1, 0.4, 0.7, 1.0], [0.2, 0.4, 0.6, 1.0]]) # 4 x 4
network['B2'] = np.array([0.3, 0.5, 0.7, 0.9])
network['W3'] = np.array([[0.1], [0.2], [0.3], [0.20]]) # 4 x 1
network['B3'] = np.array([0.3])
return network
# 순전파 함수
def forward(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
z3 = sigmoid(a3) #출력층 활성함수
y = z3
return y
# 네트워크 제작
network = init_network()
# 샘플 데이터
x = np.array([1, 0.5, 0.7]) #입력층 값
# 순전파 실행
y = forward(network, x)
print(y)
x = 입력값 = 데이터셋의 특성 개수
y = 출력값 = 데이터셋의 레이블 개수
Q) y의 값의 차원의 형태는?
728x90
반응형
'딥러닝 (Deep Learning) > 딥러닝 기초' 카테고리의 다른 글
딥러닝의 개념과 동작 원리 (0) | 2021.04.22 |
---|---|
'표현(representation)을 학습하다' 의미 (0) | 2021.04.21 |
활성 함수(Activation Function) 비교 (0) | 2021.04.11 |
퍼셉트론의 한계, XOR (0) | 2021.04.08 |
신경망 관련 개념 정리 (0) | 2021.04.08 |