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개
완전연결계층에 의한 첫 번째 입력층을 $h_{1}$ 으로 변환 / 두 번째 입력층을 $h_{2}$로 변환했다고 할 때 은닉층의 뉴런 : $\frac{1}{2}(h_{1}+h_{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)
3.2.3. word2vec 가중치와 분산표현
$W_{in}$ - 입력측 완전연결계층의 가중치 / 각 행이 각 단어의 분산표현에 해당
$W_{out}$ - 출력 측 완전연결계층의 가중치 / 단어의 의미가 인코딩된 벡터가 저장
3.5.1 CBOW 모델과 확률
$P(W_{t}|W_{t-1},W_{t+1}) : W_{t-1}, W_{t+1}이 일어난 후 W_{i}가 일어난 확률$ 즉 CBOW의 모델링 식
$$L = -\sum_k t_k \log{y_k}$$
$y_{k}$ - k번째에 해당하는 사건이 일어날 확률
$t_{k} - 정답 레이블/ one-hot vector로 표현(W_{t}가 발생, W_{t} 에 해당하는 원소만 1 나머지는 0) $
$L = -logP(W_{t}|W_{t-1},W_{t+1}) $
$P(W_{t}|W_{t-1},W_{t+1})$ 의 확률에 log를 취한 다음 마이너스를 붙인 CBOW모델의 손실함수 (negative log likelihood)
이를 확장하여
$$L = -\frac{1}{T}\sum_{t=1}^T logP(W_{t}|W_{t-1},W_{t+1}) $$
CBOW모델의 학습이 수행하는 일은 위의 식이 가능한 작게 만드는 것
3.5.2 skip-gram 모델
CBOW에서 다루는 context와 target을 역전시킨 모델
입력층 - 하나
출력층 - context의 수
loss - softmax with loss 계층들을 이용하여 구함 / 개별 손실들을 모두 더한 값을 최종 손실로
$ target(W_t)로부터 context(W_{t-1},W_{t+1})을 추측 $
$ P(W_{t-1},W_{t+1}|W_t) $ - skip-gram의 모델링 식
skip-gram모델에서는 context의 단어들이 조건부 독립이라 가정한 후 아래와 같이 분해
$P(W_{t-1},W_{t+1}|W_t) = p(W_{t-1} | W_t)P(W_{t+1}|W_t) $
이후 cross entropy error를 적용하여 skip-gram모델의 loss function 유도
$ L = -logP(W_{t-1},W_{t+1}|W_t) $
$ = -logP(W_{t-1}|W_t)P(W_{t+1}|W_t) $
$ = -(logP(W_{t-1}|W_t)+logP(W_{t+1}|W_t) $
말뭉치 전체로 확장한 skip-gram모델의 loss function
$$L = -\frac{1}{T}\sum_{t=1}^T logP(W_{t-1}|W_t)+logP(W_{t+1}|W_t)) $$
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 |
댓글