- 위의 사후 확률을 어떻게 구할 수 있을까? - CBOW에서는 맥락의 크기를 특정 값으로 한정하여 근사적으로 나타낼 수 있다
여기서는 왼쪽 2개 단어로 한정 2층 마르코프 연쇄(Markov Chain: 미래의 상태가 현재 상태에만 의존해 결정되는 것) -> 결국 특정 길이로 고정, 긴 맥락이 필요한 문제에 제대로 된 답을 도출 못함, 맥락 크기를 키울 수는 있으나 맥락 안의 단어 순서가 무시된다(bag-of-words)
일반 CBOW 모델: 은닉층에서 더해지므로 순서 무시한다
5.2 RNN이란
"순환하는 신경망"
닫힌 경로 필요 -> 데이터가 순환하면서 정보가 끊임없이 갱신 + 과거 정보 기억
시계열 데이터: 시간 방향으로 데이터 나열
현 계층으로의 입력 + 전 계층의 출력을 입력 받는다
RNN 계층: 상태를 가지는 계층, 메모리가 있는 계층 / h(t): 은닉 상태, 은닉 상태 벡터
Recursive Neural Network: 트리 구조 데이터를 처리하기 위한 신경망
시간 방향으로 펼친 신경망의 오차역전파법 -> BPTT(Backpropagation Through Time) - 시계열 데이터의 시간 크기가 너무 크면 계산량과 메모리 사용량 등 문제 - 계층이 길어짐에 따라 기울기 값이 조금씩 작아져 역전파되기 전에 0이 되어 소멸 가능 -> Truncated BPTT
순전파의 연결은 끊어지지 않고(데이터를 시간 순서대로 입력해야) 연전파의 연결만 끊어진다, 한 블록 안에서만 역전파 수행하면 된다
Truncated BPTT 미니배치 학습
데이터 입력 시작 위치를 각 미니배치의 시작 위치로 이동, 데이터를 순서대로 입력하다가 끝에 도달하면 다시 처음부터 입력
5.3 RNN 구현
가로 방향으로 성장하는 신경망 구현한다
5.3.1 RNN 계층 구현 - 은닉 상태 h 계산 순전파 및 역전파(총 3개의 연산:MatMul,+,tanh 로 구성)
5.3.2 Time RNN 계층 구현
Time RNN 계층에서 다음 블록으로 역전파의 연결은 끊어져있지만 순전파 연결은 이어져있으므로 은닉 상태를 인스턴스 변수 h에 저장해서 다음 블록에 전달한다
은닉 상태 유지 여부에 대한 stateful 인수 필요하다
5.4 시계열 데이터 처리 계층 구현
Time 계층 구현
RNNLM(RNN Language Model): RNN을 사용한 언어 모델
위와 같이 Embedding(단어 id를 단어 벡터로 변환), RNN 계층에서 출력된 은닉 상태가 Affine, softmax함수를 거쳐 확률을 출력하고 손실을 계산하여 학습 및 갱신한다
시계열 데이터 T개를 한꺼번에 처리하는 Time 계층들
RNN 계층이 과거에서 현재로 데이터를 계속 흘려보내줌으로써 과거의 정보를 인코딩해 기억할 수 있음 -> RNNLM이 과거 기억 + 다음 예측이 가능해진다
손실 계산: 데이터 1개당 평균 손실 계산
5.5 RNNLM 학습과 평가
Truncated BPTT로 학습
초기화: RNN 계층, Affine 계층에서 Xavier 초기값 사용
언어 모델의 출력: 과거 단어로부터 다음에 출현할 단어의 확률분포
언어 모델의 예측 성능 평가 척도: perplexity(혼란도)
perplexity는 (데이터 수가 하나일 때 정확히) 확률의 역수 -> 분기수(number of branches)로 이해 가능, 다음에 취할 수 있는 선택사항의 수
입력 데이터가 여러개일 경우 다음과 같이 계산
perplexity가 작을수록 좋은 예측 성능을 갖는다.
RNN 계층을 이용한 조건부 언어 모델은 이론적으로는 그때까지 등장한 모든 단어의 정보를 기억할 수 있다