CBOW의 본래 목적은 단어의 분산 표현을 만드는것 이 아니라, 맥락으로 부터 타깃을 정확하게 추측하는 것이다. 즉, 손실 함수의 총합을 최소화하는 것을 잊으면 안되겠다.
여기 맥락으로부터 타깃을 추측하는 것의 쓰임으로 언어 모델이 등장한다.
언어 모델 : 단어 나열에 확률을 부여. 특정한 단어의 시퀸스에 대해서, 그 시퀸스가 일어날 가능성이 어느 정도인지(얼마나 단어 순서가 자연스러운지)를 확률로 평가하는 것이다. -> 기계 번역 & 음성 인식, 문장 생성
동시 확률 (은 단어 총 갯수)은 사후 확률을 사용하여 다음과 같이 분해할 수 있다.
(파이 기호는 원래 시그마 처럼 위아래에 써야 되는데 어떻게 하는지 몰라 저렇게 표기함)
요는 동시 확률은 사우 확률의 총곱으로 나타낼 수 있다는 것이다.
위는 곱셈정리로 유도할 수 있다. (p.195)
위 식(단어들의 총곱은)은 맥락이 타깃의 왼쪽(전) 단어들일 때의 확률이라는 것이다.
CBOW 모델을 언어 모델에 적용하는 수식(p.196)까지 보여주면서 말하는 CBOW의 한계는 맥락 안의 단어 순서가 무시된다는 점이다.
이를 위해 맥락의 단어 벡터를 은닉층에서 연결하는 방식(p.198 을 보면 은닉층이 쌓여있는 것)을 생각할 수 있다. -> 매개변수가 증가하고 순서를 기억해야 한다.
위에 문제를 해결하기 위해 순환 신경망 RNN이 등장한다.
RNN은 쉽게 순환하는 신경망이라고 보면 되겠다. 계층으로 표현해보자면
순환 신경망에서 입력을 시각적으로 대응해 출력한다면 이 계층에서는 무슨 동작을 하는지 알아보자.
BPTT(Backpropagation Through Time) : 시간 방향으로 펼친 신경망의 오차역전파법
Truncated BPTT : 큰 시계열 데이터를 학습할 때 BPTT를 적당한 지점을 끊어서 사용하는 오차역전법 (p.204)
RNN 처리를 한 단계만 수행하는 RNN 계층 구현 (p.211)
개의 RNN 계층으로 구성된 Time RNN 계층 구현 (p.215)
위에서 제시한 RNNLM 모델을 간단하게 구현하고 학습시키면 출현할 단어의 확률분포가 나온다.이를 퍼플렉서티(perplexity, 혼란도)로 성능을 평가한다.
퍼플렉서티는 '확률의 역수'라고 설명한다. -> 만약에 'you'라는 단어를 입력했을 때 'say'라는 단어를 0.8 확률로 예측했다면, 이 떄의 퍼플렉서티는 이다. -> 즉 퍼플렉서티(혼란도)가 낮은 입력이 좋은 입력이다.
이를 분기 수(number of branches)로 직관적으로 해석할 수 있다. 즉, 위에 예시에 퍼플렉서티가 1.25니까 출현할 단어의 후보를 1개로 좁힌것이고, 만약 다른 단어의 퍼플렉서티가 5라고 한다면 단어의 후보가 5개로 좁혀진 것이다.
입력 데이터가 여러 개일 때의 퍼플렉서티 계산 공식
= 데이터의 총개수
= 원핫 벡터로 나타낸 정답 레이블
= 개쨰 데이터의 번째 값
= 확률분포
위에서 만든 RNNLM 모델을 퍼플렉시티를 통해 성능 평가를 한다.
나에게는 본격적으로 어려워지는 장인듯 하다. RNN 개념을 복습하고 따로 공부할 필요가 있을것 같다.