[cs224n] Lecture 6 - Simple and LSTM RNNs

yoonene·2022년 5월 1일
0

Tobigs

목록 보기
4/4

Lecture Plan

  1. RNN Language Models
  2. Other uses of RNNs
  3. Exploding and vanishing gradients
  4. LSTMs

01. RNN Language Models

The Simple RNN Language Model

input sequence의 각 word embeddings과 hidden states을 입력으로 사용하고 output vector를 softmax에 통과하여 다음 단어를 예측한다.

위 그림은 t=4일 때의 output distribution을 계산한 결과이고, RNN-LM은 모든 time-step에서 ouput distribution을 계산한다.

Training an RNN Language Model

특정 t 시점에서의 RNN-LM의 Loss function은 다음과 같다.

실제 다음 단어와 예측한 결과 간의 cross-entropy가 t 시점에서의 loss function이다.

전체 input sequence의 overall loss는 다음과 같다.

입력으로 들어온 x1,..,xt의 모든 time-step에 대해 각각 loss 값을 구하고 이의 평균이 모델의 loss가 된다.

하지만 전체 corpus에 대해 loss와 gradients를 계산하는 것은 많은 시간과 연산이 소요되기 때문에 문장이나 문서 등의 단위로 나누어 입력으로 사용한다.
또는 SGD를 통해 학습하는 방법도 있다.

Backpropagation for RNNs

RNN의 backpropagation 과정은 MLP의 backpropagation 과정과 크게 다르지 않다.
다만 RNN은 모든 time-step이 입력과 출력을 가지고 있고, 각 출력을 계산하는 데 사용되는 weight matrix(Wh)가 각 step별로 같은 값을 공유한다는 특징이 있어서 이를 고려하여 역전파를 계산한다는 차이만 있다.

각 hidden state를 계산하기 위해 반복적으로 적용되는 가중치 행렬 Wh에 대한 loss function의 미분은 다음과 같이 계산한다.

Multivariavle Chain Rule

f(x,y)라는 multivariable function이 주어졌을 때, loss function의 미분은 다음과 같다.

각 변수에 대한 gradients를 더해서 loss를 구한다.

BPTT(Backpropagation Through Time)는 chain rule을 다음과 같이 적용한다.

따라서 t 시점까지 거쳐온 각 time step의 Wh에 대한 미분을 다 더해서 t 시점에서의 Wh에 대한 loss의 미분값을 구한다.

Generating text with a RNN Language Model

n-gram Language Model처럼 RNN Language Model을 통해서도 text를 생성할 수 있다.

RNN은 각 time-step 단어의 다음 단어를 예측하는 sampling을 반복하여 text를 생성한다.

생성 예시

1) RNN-LM trained on Harry Potter

2) RNN-LM trained on recipes

=> 생성된 결과가 문맥적으로 매끄럽지 않지만 특정 text style의 구조를 잘 재현할 수 있다.

Evaluating Language Models

Language Model의 대표적인 평가지표는 Perplexity이다.

corpus의 예측 확률의 역수값을 corpus의 길이 T로 normalize한다.
이는 cross-entropy에 지수함수를 취한 것과 같다.

따라서 perplexity는 작을수록 좋다.

n-gram 모델은 perplexity가 아주 잘 나와야 67 정도지만 RNN 기반의 모델들은 perplexity를 크게 향상 시켰다. 특히 LSTM은 perplexity가 30으로 가장 좋은 결과를 보였다.
30 이하로 떨어지지 않는 이유는 "Thank ( ) for inviting me" 같은 경우 괄호 안에 자명히 you가 등장하겠지만 "그는 창문 밖으로 ( )를 보았다." 같은 문장이 주어졌을 때 괄호 안에 올 수 있는 단어가 너무 많고 특정할 수 없기 때문이다.

02. Other uses of RNNs

Language Model이란 다음 단어를 예측하는 모델을 의미한다.
하지만 RNN은 다양한 task를 수행할 수 있기 때문에 RNN을 Language Model이라고 할 수 없다.

RNN은 다음과 같은 task도 수행할 수 있다.

sequence tagging

ex) Part-of-speech tagging, named entity recognition

각 time-step의 출력을 다음 단어 예측 대신 품사를 출력하도록 한다.

sentence classification

ex) sentiment classification

입력된 한 단어마다가 아니라 문장을 표현하기 위해 sentence encoding을 하고 이를 classifier layer에 입력하여 분류하는데, 보통은 마지막 hidden state를 sentence encoding으로 사용한다.

하지만 RNN의 경우 모든 hidden states를 활용해야 각 시점의 정보를 더 균형적으로 사용할 수 있기 때문에 성능이 더 좋았다.

language encoder module

ex) quenstion answering, machine translation ..

RNN을 통해 문장을 encoding하고 그 vector값을 다른 모델의 input으로 활용한다.
예를 들어 question answering task에서 question을 encoding 할 때 RNN을 사용할 수 있다.

generate text (Decoding)

ex) speech recognition, machine translation, summarization

input을 원하는 task에 따라 conditioning한 결과를 RNN-LM에 입력하여 다음 단어를 생성한다.

03. Vanishing and Exploding Gradients

gradient를 계산할 때 chain rule에 의해서 h1에 대한 t=4 시점의 loss의 미분값은 위와 같이 구할 수 있다.
하지만 연쇄적으로 계산에 사용되는 각 미분값이 작다면 작은 값들이 계속 곱해져 gradient가 소실될 수 있다.

proof

t 시점의 hidden state

계산의 편의를 위해 activation function을 비선형이 아닌 항등함수라 가정하고 증명.

ht를 이전 시점 h(t-1)로 편미분하면 Wh가 도출된다.

현재 시점 i의 loss를 특정 과거 시점 j에 대해 편미분하면 chain rule에 의해 위와 같이 전개된다. l = i - j 를 의미한다.
i와 j 사이의 시점마다 Wh가 도출되므로 결국엔 i 시점의 loss를 i 번째 hidden state로 미분한 값에 Wh를 l 번 곱한 것과 같아진다.
따라서 Wh가 1보다 작다면 l이 크면 클수록 J(i)를 H(j)에 대해 미분한 결과가 작아져 기울기가 소실되는 vanishing gradient가 발생하고, 반대로 Wh가 1보다 크면 gradient가 너무 커지는 exploding gradient가 발생한다.

Vanishing gradient

결국 가까이에 위치한 dependency에 대해서만 학습되고 멀리 위치한 dependency에 대해서는 정보가 소실되어 학습이 어려워진다.
즉 weigth가 long-term effects보다 near affects에 대해 update된다.

예시)

사람이 보면 정답은 tickets으로 아주 쉽지만, RNN은 정답 정보가 있는 tickets와 빈칸의 거리가 멀기 때문에 tickets에 대한 정보가 소실되어 예측이 어렵다.

Exploding gradient

만약 gradient가 매우 크다면 parameter update도 매우 큰 step으로 수행된다.

  • 간단한 해결방법: Gradient clipping

단순히 gradient의 임계치를 설정하는 것.
특정 threshold 이상의 gradient가 들어오면 threshold로 줄여서 update한다. -> 같은 방향이지만 더 작은 step으로 update

Long Short-Term Memory RNNs (LSTMs)

LSTM은 메모리를 분리하여 과거의 정보를 저장하고 불필요한 정보는 잊어버리며 필요할 때 필요한 만큼 저장해놓은 정보를 활용하여 장기의존성 문제를 해결한다.

  • LSTM은 2개의 hidden vector를 사용한다.
    • hidden state: short-term memory 조절
    • cell state: long-term momory 보존
  • 3개의 gate를 사용하여 매 time step의 cell state와 hidden state, input에서 취할 정보의 양을 결정한다.
    * forget gate: 이전 시점의 cell state에서 어느 정도의 정보를 가져갈 것인지 결정
    • input gate: 새로 들어온 입력 정보에서 장기 기억으로 가져갈 정보의 양 결정
    • output gate: 입력 정보에 sigmoid를 취함 -> 현재 정의된 cell state(장기기억)에서 어느 정도의 정보를 hidden state(단기기억)로 사용할지 결정

  • forget gate layer

    이전 시점의 cell state에서 어느 정도의 정보를 가져갈 것인지 결정
    h(t-1)과 x(t)를 받아 sigmoid를 통과시켜 0과 1 사이의 값으로 조정한다.
    * 0: 정보 삭제 ~ 1: 정보 반영
  • input gate layer


새로 들어온 입력 정보에서 장기 기억으로 가져갈 정보의 양 결정
h(t-1)과 x(t)를 받는다.
tanh를 통해 기존의 hidden state와 같이 -1와 1 사이의 값으로 만들어 장기 기억으로 올라갈 새로운 정보들의 후보를 생성한다.
sigmoid를 통과 시킨 값인 i를 활용하여 정보를 어느 정도 cell state로 가져갈지 결정

  • Update gate layer

    Ct = 과거의 정보를 얼마나 반영할 지 + 현재의 정보를 얼마나 반영할 지

  • Output gate layer

    현재 정의된 cell state(장기기억)에서 어느 정도의 정보를 hidden state(단기기억)로 사용할지 결정. 즉 다음 시점에 입력으로 사용될 hidden state에 현재의 cell state 정보를 얼마나 반영할 지 결정
    output gate는 cell state에 관여하지 않지만 hidden state에 관여함.

0개의 댓글