(* DeepLearning from scratch2 서적을 학습한 후 정리한 내용임 )
1.2.1 신경망 추론 전체 그림
2개 데이터를 입력하여 3개 데이터를 결과로 출력하는 신경망 구현을 가정합니다.
3개의 층으로 구현됩니다.
(1) 입력층 : 2개의 뉴런으로 구성
(2) 은닉층 : 4개의 뉴런으로 구성
(3) 출력층 : 3개의 뉴런으로 구성
(* 3개의 층으로 구성되어 있지만 가중치를 지니고 있는 층은 입력층과 은닉층 사이, 은닉층과 출력층 사이 2개 이므로 이 책에서는 이 모델을 "2층 신경망" 이라고 부릅니다. )
위의 그림에서 원은 뉴런을 의미한다.
x1, x2:입력값
Wh11, Wh12,Wh13, Wh14 : X1값이 은닉층 4개의 뉴런에 영향을 주는 가중치값
Wh21, Wh22,Wh23, Wh24 : X2값이 은닉층 4개의 뉴런에 영향을 주는 가중치값
h1, h2, h3, h4 : x1, x2 입력값이 가중치에 따라 은닉층 4개의 뉴런에 전달된 값
Wy11, Wy12, Wy13 : h1값이 출력층 3개의 뉴런에 영향을 주는 가중치값
Wy21, Wy22, Wy23 : h2값이 출력층 3개의 뉴런에 영향을 주는 가중치값
Wy31, Wy32, Wy33 : h3값이 출력층 3개의 뉴런에 영향을 주는 가중치값
Wy41, Wy42, Wy43 : h4값이 출력층 3개의 뉴런에 영향을 주는 가중치값
y1, y2, y3 : h1, h2, h3, h4 히든층 뉴런값으로 부터 가중치에 따라 출력층 3개의 뉴런에 전달된 값
은닉층의 4개 뉴런값을 수식으로 정리하면 다음과 같다
h1 = X1 * Wh11 + X2 * Wh21 + bh1
h2 = X1 * Wh12 + X2 * Wh22 + bh2
h3 = X1 * Wh13 + X2 * Wh23 + bh3
h4 = X1 * Wh14 + X2 * Wh24 + bh4
위 공식을 행렬 곱으로 표현하면 다음과 같다.
[ X1 X2] * [Wh11 Wh12 Wh13 Wh14] + [ bh1 bh2 bh3 bh4 ] = [ h1 h2 h3 h4]
[Wh21 Wh22 Wh23 Wh24]
위 행렬 곱 공식에서 각 행렬을 간소화하면 다음과 같다
X * Wh + bh = h
(이후 행렬을 간소화해서 알파벳으로 표현할 때는 굵은 글씨체 사용)
행렬 곱 연산이 정상처리되려면 각 행렬의 형태가 규칙에 맞아야 한다. 즉, 행렬 곱 연산자 좌측행렬의 열 개수와 우측행렬의 행 개수가 같아야 한다
위의 간소화 공식에서 X 행렬은 1 * 2 (행 개수가 1개 , 열 개수가 2개 의미)
Wh 행렬은 2 * 4 (행 개수가 2개, 열 개수가 4개 의미)
bh 행렬은 1 * 4 (행 개수가 1개, 열 개수가 4개 의미)
결과 행렬인 h 행렬은 1 * 4 (행 개수가 1개, 열 개수가 4개 의미)
위 행렬 형태는 입력데이터가 (X1, X2) 한 개인 경우이고 보통 복수 개(N개)의 데이터를 준비한 경우 반복적으로 미니 배치 형식으로 학습을 시키게 되므로 실제 학습진행 시 행렬 형태는 아래와 같게 된다.
X (N × 2) * Wh (2 × 4) + bh( N × 4) = h(N × 4)
신경망은 사람의 뇌에서 뉴런으로 전기신호가 전달되는 과정을 모델링 한 것이다.
뉴런으로 전기신호가 전달 될 때 어느 크기 이상이 되어야 다음 뉴런으로 전달되게 되는 특성이 있다.
이를 신경망으로 구현하려면 비선형 함수가 추가되어야 한다. 이 비선형함수를 활성화함수라고 하며 여러 종류의 활성화함수 중에서 쉬운 Sigmoid 함수를 사용한다. 임의의 실수를 입력받아 0에서 1사이의 실수를 출력한다.
파이썬으로 구현해보면
def sigmiod(x):
return 1 / (1 + np.exp(-x))
'인공지능 > DeepLearning from Scratch 2' 카테고리의 다른 글
DeepLearning from scratch2 - 1.3.3 연쇄법칙 (딥러닝 학습) (0) | 2019.07.11 |
---|---|
DeepLearning from scratch2 - 1.3.2 미분과 기울기 (딥러닝 학습) (0) | 2019.07.11 |
DeepLearning from scratch2 - 1.3.1 손실함수 (딥러닝 학습) (0) | 2019.07.09 |
DeepLearning from scratch2 - 1.2.2 계층으로 클래스화 및 순전파 구현 (딥러닝 학습) (0) | 2019.07.07 |
DeepLearning from scratch2 - 1.1 수학과 파이썬 복습 (딥러닝 학습) (0) | 2019.07.01 |