본문 바로가기
  • 데이터에 가치를 더하다, 서영석입니다.
공부하는 습관을 들이자/Deep Learning (NLP,LLM)

[딥러닝 자연어처리] 8-2. (3). 행렬곱으로 이해하는 신경망

by 꿀먹은데이터 2023. 12. 15.

딥러닝을 이용한 자연어처리 입문 # 8-2. (3). 행렬곱으로 이해하는 신경망

1. 순전파

  • 입력값 → 입력층, 은닉층 지나며 각 층에서의 가중치로 연산돼 출력층으로 향해 → 예측값 추출.

2. 행렬곱으로 순전파 이해하기

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential()

# 3개의 입력과 2개의 출력
model.add(Dense(2, input_dim=3, activation='softmax'))
model.summary()

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 2)                 8         
=================================================================
Total params: 8
Trainable params: 8
Non-trainable params: 0
_________________________________________________________________
#8개의 params가 예측되어졌다고 생각할 수 있다.
  • 3*2의 행렬이 곱해졌다고 생각할 수 있고, + 2개의 절편 → 총 8개의 param이 추정되었다고 볼 수 있다.

Y = XW + B

3. 행렬곱으로 병렬 연산 이해하기

ex) 4개의 샘플을 한 번에 계산한다고 생각. 4개의 샘플을 하나의 행렬 X로 정의

4. 행렬곱으로 다층 퍼셉트론의 순전파 이해하기

  • 코드로 구현
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential()

# 4개의 입력과 8개의 출력
model.add(Dense(8, input_dim=4, init='uniform', activation='relu'))

# 이어서 8개의 출력
model.add(Dense(8, activation='relu'))

# 이어서 3개의 출력
model.add(Dense(3, activation='softmax'))
  • 입력층 : 4개의 입력과 8개의 출력
  • 은닉층1 : 8개의 입력과 8개의 출력
  • 은닉층2 : 8개의 입력과 3개의 출력
  • 출력층 : 3개의 입력과 3개의 출력

1. 입력층 ⇒ 은닉층1

  • layer1에서 입력 행렬 X의 크기 = 14, 출력 행렬 크기 = 18.

이후 Y1*8을 통해 m,j,n 모두 추정 가능

 

2. 은닉층1 ⇒ 은닉층2

  • 같은 방식으로 X에 다시 들어간다고 생각하면 W행렬의 크기 구할 수 있음

3. 은닉층2 ⇒ 은닉층3

  • 입력층 → 은닉층 → 출력층에 대해서 연산을 가정하고 행렬 크기를 추정하고,
  • 앞으로 돌아가 오차를 줄일 수 있도록 가중치와 편향을 업데이트 하는 작업을 계속해서 반복화해주는 것

(BackPropagation)