Character-level Language Model

pseeej·2021년 9월 17일
0

NLP

목록 보기
5/9
post-thumbnail

이전의 문서에서 이어지는 내용으로, 같이 참고하면 좋습니다.

Character-level Language Model

Character-level Language Model

  • 예시 training sequence : "hello"
  • vocabulary : [h, e, l, o]
  • Input Layer
    - 각 cell에서 e, l, l, o 를 예측해야 다음 과정으로 넘어갈 수 있음
  • Hidden Layer
    - ht=tanh(Whhht1+Wxh+xt+b)h_t = tanh(W_{hh}h_{t-1}+W_{xh}+x_t+b)
    - WhhW_{hh}ht1h_{t-1}를, WxhW_{xh}xtx_t를 선형변환
    - 제일 첫 hidden layer인 h0h_0은 default로 0인 vector로 주어짐
  • Output Layer
    - Logit=Whyht+bLogit=W_{hy}h_t+b
    - 각 WhhW_{hh}WxhW_{xh}이 마지막 hidden layer 거쳐서 output에서 정의되는 선형변환의 parameter WhyW_{hy}로 변환됨
    - back propagation에 의해 학습 진행
    - output layer에서 가장 높은 값의 확률값을 높여서 학습 진행
  • Softmax
    - softmax 거침으로써 확률값의 형태로 결과 출력
    - 해당 time step을 거침으로써 나온 예측값다음 time step의 input으로

  • 다음과 같은 과정을 통해 무한한 길이의 character sequence 생성 가능

Additionals for RNN

  • 셰익스피어의 극본에 RNN 적용
  • RNN의 학습 과정

    - 학습이 진행될수록 처음의 한 character 주어졌을 때 뒤의 내용을 더 잘 예측할 수 있게 됨

  • 학습된 RNN에 대한 결과

    - 등장인물 : 대사 형식으로 주어짐
    - 사람 이름은 대문자
    - newline 후 대본 내용

  • RNN으로 작성된 논문
  • RNN으로 생성된 C code

Backpropagation through time (BPTT)

Backpropagation through time (BPTT)

  • 전체 sequence를 통해 loss를 계산한 다음 gradient를 계산하기 위하여 전체 sequence에 대해 backward 수행
  • 전체 sequence 대신 truncation을 수행한 sequence chunk를 이용하여 forward와 backward를 수행
  • hidden state들을 계속적으로 forward 연산 시키고, 그 중 몇 개만 backpropagate를 수행

    - forward/back propagation으로 RNN의 parameter 학습

Searching for Interpretable Cells

  • 필요한 정보가 N개 중 어디에 포함되어 있는가?
  • hidden state vector의 각각의 차원을 하나씩 고정하고, time step이 진행됨에 따라 어떻게 변화하는지 분석하여 RNN의 특성 분석

How RNN works

  • 특정 hidden state vector의 dimension을 고정해둔 상태에서 해당 dimension의 값이 어떻게 변화하는가를 확인하기 위해 사용한 시각화의 예시
  • Quote("") 감지 cell : ""가 열렸는지/닫혔는지 하는 상태를 기억
  • If 조건문 cell : if의 조건문만 따로 처리

Vanishing/Exploding Gradient Problem in RNN

Vanishing/Exploding Gradient Problem in RNN

  • 역전파 중에 각 단계에서 동일한 매트릭스를 곱하면 그라데이션이 사라지거나 폭발할 수 있음

Toy Example

  • ht=tanh(wxhxt+whhht1+b),t=1,2,3h_t = tanh(w_{xh}x_t+w_{hh}h_{t-1}+b), t = 1, 2, 3
  • whh=3,wxh=2,b=1w_hh = 3, w_{xh}=2, b=1일 때
    - h3=tanh(2x3+3h2+1)h_3 = tanh(2x_3+3h_2+1)
    - h2=tanh(2x2+3h1+1)h_2 = tanh(2x_2+3h_1+1)
    - h1=tanh(2x1+3h0+1)h_1 = tanh(2x_1+3h_0+1)
    - ...
    - h3=tanh(2x3+3tanh(2x2+3h1+1)+1)h_3 = tanh(2x_3+3tanh(2x_2+3h_1+1)+1)
  • 계속해서 중첩되는 구조가 만들어짐

  • time step 거슬러 올라가면서 back propagation 수행했을 때 WhhW_{hh}부여되는 gradient 값의 pattern 시각화
  • RNN에서의 WhhW_{hh}는 일반적으로 행과 열의 개수가 hidden state vector의 길이와 동일한 정사각행렬
  • RNN에서는 절대값이 1보다 작은 값으로 거듭제곱 수행하면서 빠르게 감소됨
  • 유의미한 gradient signal이 뒷쪽까지 잘 전달되지 않음
  • LSTM은 먼 time step까지도 gradient 값이 남아있으므로 time step간 거리가 멀어도 계산 가능
profile
세진니의 눈물 가득 블로그

0개의 댓글