Language Model
RNN을 많이 쓰게 되는 계기는 Language Model 사용하기 위해서이다.
Language Model 이라는 것은 우리에게 주어진 문장이 얼마나 그럴 듯한지 아닌지 판단하는 모델이라고 한다.
⇒ 단어 간의 조합과 순서를 고려하면서, 그럴 듯한 문장이구나 아니구나 판단
- Calculating the Probability of a Sentence (그럴 듯한 문장 확률에 대한 계산)
우리가 $m$개의 단어들이 존재할 때, $(w_1,...w_m)$
- The Probability of a given sequence: $p(w_1,...w_m)$
- $m$개의 단어들로 이루어진 문장의 확률은 아래와 같이 계산된다.
- $p(w_1,...w_m) = \prod_{i=1}^{m}p(w_i|w_1,...w_{i-1})$
- 하지만 문장이 길어지면 길어질수록 계산이 어려워진다는 문제점이 존재한다.
- 이를 해결하기 위해서 앞선 단어 몇 개만 고려하여 확률을 추정하는 방식이 나왔다.
- $p(w_1,...w_m) \approx \prod_{i=1}^{m}p(w_i|w_{i-n},...w_{i-1})$ ⇒ 직전 단어 $i-1$부터 $i-n$ $(n)$까지의 단어 앞까지만 고려한다.
-
$n=2$일때, bi-gram $p(w_2|w_1) = \frac{p(w_1,w_2)}{p(w_1)} = \frac{count(w_1,w_2)}{count(w_1)}$, $count(w_1)$은 우리가 가진 문서에서 $w_1$이란 단어가 몇 번 나왔는가에 대한 얘기이다. $count(w_1,w_2)$는 우리가 가진 단어 $w_1,w_2$가 연속적으로 나온 횟수를 의미한다.
-
$n=3$일때, Tri-gram $p(w_3|w_2,w_1) = \frac{p(w_1,w_2,w_3)}{p(w_2,w_1)} = \frac{count(w_1,w_2,w_3)}{count(w_1,w_2)}$
-
As the proctor started the clock, the students opened their _____
⇒라는 문장에서 $n=4$까지만 한다면, 전체 맥락을 이해하지 않고 book이라고 했을 것이다.
-
이러한 방법도 한계가 존재한다.
RNN

- RNN은 순서를 고려한다. (순차적인 정보를 처리)
- 뒤에 가중치를 고려하게된다.
RNN의 특징

-
RNN으로 무한히 많은 길이의 Input이 들어와도 Cover가 가능하다.
- 문장 길이가 10개인 것이 들어오든, 100개가 들어오든 구축할 수 있다.
- Regardless of the sequence length, the learned model always has the same input size
- 시퀀스의 길이에 상관없이, 학습 모델은 항상 같은 입력사이즈를 가진다.
-
파라미터 ($U,W,V$)가 Sharing된다.
- $U$는 Input을 Transformation시키는 역할 $(Ux)$
- $W$는 과거의 정보를 잘 넘겨오는 것
- $h_t= f(Ux_t+ WH_{t-1})$로 수식을 쓸 수가 있다.
- $V$는 $h_t$ 같은 로짓을 다시 한번 Transformation시켜주는 함수이다.
지금 들어온 정보와 과거의 들어온 정보를 더해 다음에 올 단어를 예측
- $h_t$: 네트워크의 메모리
- 과거의 Time Step에서 일어난 일들에 대한 정보를 담고 있음
- 실제 구현에서는, 너무 먼 과거에 일어난 일들은 잘 기억하지 못함
- LSTM은 이보다 더 과거의 일을 잘 기억함
- 매 Time Step마다 출력값 $y_t$를 낼 수도 안낼 수도 있다.
- 문장의 긍정/부정 추측에서는 모든 스텝마다 출력이 필요하진 않다.
- RNN은 모든 Time Step에 대해 파라미터 값을 전부 공유
- $U,V,W$
- 각 Time Step마다 입력값만 다를 뿐, 거의 똑같은 계산을 하고 있다.


$h_1$

$h_2$