3.1 추론 기반 기법과 신경망
단어를 벡터로 표현하는 방법
- 통계 기반 기법
- 추론 기반 방법
3.1.1 통계 기반 기법의 문제점
통계 기반 기법 - 학습 데이터를 한번에 처리(배치 학습)
추론 기반 기법 - 학습 데이터의 일부를 사용하여 순차적으로 학습(미니배치 학습)
3.1.3 신경망에서의 단어 처리
신경망에서 단어를 사용하기 위해 고정 길이의 벡터로 변환
- one-hot 벡터 - 벡터의 원소 중 하나만 1, 나머지는 모두 0인 벡테
"You say goodbye and i say hello" 의 one-hot 표현 예시
3.2 단순한 word2vec
CBOW(continuous bag-of-words) 모델의 추론 처리
CBOW - context(주변 단어)로부터 Target(중앙 단어)을 추측하는 용도의 신경망
다중 클래스 분류 신경망
- 맥락에 포함시킬 단어가 N개일 경우 입력층도 N개
CBOW 모델의 신경망 구조(노드 값의 크기 흑백의 진함으로 표현)
완전연결계층에 의한 첫 번째 입력층을 h1ℎ1 으로 변환 / 두 번째 입력층을 h2ℎ2로 변환했다고 할 때 은닉층의 뉴런 : 12(h1+h2)12(ℎ1+ℎ2)
은닉층의 뉴런 수를 입력층의 뉴런 수보다 적게 하는것이 핵심
- 단어 예측에 필요한 정보를 간결하게 담을 수 있음
- 밀집벡터 표현을 얻을 수 있음
- 은닉층의 정보는 인간이 이해할 수 없는 코드(인코딩)
- 은닉층의 정보로부터 원하는 결과를 얻는 작업(디코딩)
import numpy as np
class MatMul:
def __init__(self, W):
self.params = [W]
self.grads = [np.zeros_like(W)]
self.x = None
def forward(self, x):
W, = self.params
out = np.dot(x, W)
self.x = x
return out
def backward(self, dout):
W, = self.params
dx = np.dot(dout, W.T)
dW = np.dot(self.x.T, dout)
self.grads[0][...] = dW
return dx
c0 = np.array([[1,0,0,0,0,0,0]])
c1 = np.array([[0,0,1,0,0,0,0]])
#가중치 초기화
W_in = np.random.randn(7,3)
W_out = np.random.randn(3,7)
#계층 생성
in_layer0 = MatMul(W_in)
in_layer1 = MatMul(W_in)
out_layer = MatMul(W_out)
#forward
h0 = in_layer0.forward(c0)
h1 = in_layer1.forward(c1)
h = 0.5 * (h0+h1)
s = out_layer.forward(h)
print(s)
'독서 > 밑바닥부터 시작하는 딥러닝 2' 카테고리의 다른 글
[밑바닥부터 시작하는 딥러닝 2]Chapter 6. 게이트가 추가된 RNN (0) | 2024.07.30 |
---|---|
[밑바닥부터 시작하는 딥러닝 2] Chapter 5. 순환 신경망(RNN) (6) | 2024.07.23 |
[밑바닥부터 시작하는 딥러닝 2] Chapter 4. word2vec 속도개선 (0) | 2024.07.14 |
[밑바닥부터 시작하는 딥러닝 2] Chapter 2. 자연어와 단어의 분산 표현 (1) | 2024.06.30 |
[밑바닥부터 시작하는 딥러닝 2] Chapter 1. 신경망 복습 (0) | 2024.06.23 |