3.1 추론 기반 기법과 신경망
단어를 벡터로 표현하는 방법
- 통계 기반 기법
- 추론 기반 방법
3.1.1 통계 기반 기법의 문제점

통계 기반 기법 - 학습 데이터를 한번에 처리(배치 학습)
추론 기반 기법 - 학습 데이터의 일부를 사용하여 순차적으로 학습(미니배치 학습)
3.1.3 신경망에서의 단어 처리
신경망에서 단어를 사용하기 위해 고정 길이의 벡터로 변환
- one-hot 벡터 - 벡터의 원소 중 하나만 1, 나머지는 모두 0인 벡테

3.2 단순한 word2vec
CBOW(continuous bag-of-words) 모델의 추론 처리
CBOW - context(주변 단어)로부터 Target(중앙 단어)을 추측하는 용도의 신경망
다중 클래스 분류 신경망
- 맥락에 포함시킬 단어가 N개일 경우 입력층도 N개

완전연결계층에 의한 첫 번째 입력층을 h1 으로 변환 / 두 번째 입력층을 h2로 변환했다고 할 때 은닉층의 뉴런 : 12(h1+h2)
은닉층의 뉴런 수를 입력층의 뉴런 수보다 적게 하는것이 핵심
- 단어 예측에 필요한 정보를 간결하게 담을 수 있음
- 밀집벡터 표현을 얻을 수 있음
- 은닉층의 정보는 인간이 이해할 수 없는 코드(인코딩)
- 은닉층의 정보로부터 원하는 결과를 얻는 작업(디코딩)

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)

3.2.3. word2vec 가중치와 분산표현
Win - 입력측 완전연결계층의 가중치 / 각 행이 각 단어의 분산표현에 해당
Wout - 출력 측 완전연결계층의 가중치 / 단어의 의미가 인코딩된 벡터가 저장


3.5.1 CBOW 모델과 확률

P(Wt|Wt−1,Wt+1):Wt−1,Wt+1이일어난후Wi가일어난확률 즉 CBOW의 모델링 식
L=−∑ktklogyk
yk - k번째에 해당하는 사건이 일어날 확률
tk−정답레이블/one−hotvector로표현(Wt가발생,Wt에해당하는원소만1나머지는0)
L=−logP(Wt|Wt−1,Wt+1)
P(Wt|Wt−1,Wt+1) 의 확률에 log를 취한 다음 마이너스를 붙인 CBOW모델의 손실함수 (negative log likelihood)
이를 확장하여
L=−1TT∑t=1logP(Wt|Wt−1,Wt+1)
CBOW모델의 학습이 수행하는 일은 위의 식이 가능한 작게 만드는 것
3.5.2 skip-gram 모델
CBOW에서 다루는 context와 target을 역전시킨 모델

입력층 - 하나
출력층 - context의 수
loss - softmax with loss 계층들을 이용하여 구함 / 개별 손실들을 모두 더한 값을 최종 손실로
target(Wt)로부터context(Wt−1,Wt+1)을추측
P(Wt−1,Wt+1|Wt) - skip-gram의 모델링 식
skip-gram모델에서는 context의 단어들이 조건부 독립이라 가정한 후 아래와 같이 분해
P(Wt−1,Wt+1|Wt)=p(Wt−1|Wt)P(Wt+1|Wt)
이후 cross entropy error를 적용하여 skip-gram모델의 loss function 유도
L=−logP(Wt−1,Wt+1|Wt)
=−logP(Wt−1|Wt)P(Wt+1|Wt)
=−(logP(Wt−1|Wt)+logP(Wt+1|Wt)
말뭉치 전체로 확장한 skip-gram모델의 loss function
L=−1TT∑t=1logP(Wt−1|Wt)+logP(Wt+1|Wt))
skip-gram 모델
맥락의 수만큼 loss추측 - loss function은 각 context에서 구한 loss의 총합
단어 분산 표현의 정밀도면에서 CBOW보다 더 좋은 경우가 많음
CBOW 모델
타깃 하나의 loss 추측
skip-gram모델보다 학습속도 빠름
3.5.3 통계 기반 vs 추론 기반
통계 기반 - 말뭉치의 전체 통계로부터 1회 학습
- 처음부터 계산하여 학습속도 상대적 느림
- 단어 유사성
추론 기반 - 말뭉치의 일부분씩 여러번 학습(mini batch)
- parameter 학습
- 단어 유사성 + 단어사이의 패턴
### 본 게시물은 밑바닥부터 시작하는 딥러닝 2를 읽고 정리한 노트입니다. ###
'----------책---------- > 밑바닥부터 시작하는 딥러닝2' 카테고리의 다른 글
CHAPTER 6 게이트가 추가된 RNN (0) | 2020.02.27 |
---|---|
CHAPTER 5 순환 신경망(RNN) (0) | 2020.02.18 |
CHAPTER 4 word2vec 속도 개선 (0) | 2020.02.06 |
CHAPTER2 - 자연어와 단어의 분산 표현 (0) | 2020.01.31 |
CHAPTER 1 - 신경망 복습 (0) | 2020.01.13 |
댓글