(03강) Recurrent Neural Network and Language Modeling

RNN을 활용하는 다양한 방법과 이를 이용한 Language Model을 학습 RNN을 이용한 Language Model에서 생길 수 있는 초반 time step의 정보를 전달하기 어려운 점, Gradient Vanishing / Exploding 을 해결하기 위한 방법에 대한 복습

Further Reading

1. RNN (Recurrent Neural Network)

1.1. Basic Structure

  • RNN은 Sequential Data를 처리하기 위한 모델이다.

  • Input Value xi x_i 와 Hidden Value(누적값) hih_i의 값이 다음 모델의 Input이 된다.

ht=fW(ht1,xt) h_t = f_W(h_{t-1}, x_t)

  • ht1h_{t-1} : old hidden-state vector

  • xtx_t : input vector at some time step

  • hth_t : new hidden-state vector

  • fWf_W : RNN function with parameters W

  • yty_t : output vector at time step tt (해당시점의 hth_t를 바탕으로 최종 출력값을 구한다.)

※ 모든 layer 에서 같은 함수와 파라미터를 가진다.

ht=fW(ht1,xt)ht=tanh(Whhht1+Wxhxt)yt=Whyhth_t = f_W(h_{t-1}, x_t) \\ h_t = tanh(W_{hh}h_{t-1}+W_{xh}x_t) \\ y_t = W_{hy}h_t

  • ht h_t 는 현재 input의 값(Wxhxt W_{xh}x_t )과 지금까지의 누적 값(Whhht1W_{hh}h_{t-1})의 합을 tanh 씌운 것이다.

  • 구해진 hth_t값에 선형변환을 통해 output yty_t값을 구할 수 있다.

1.2. Types of RNNs

  • One to One Standard Neural Network, 일반 뉴런 네트워크 기본 분류

  • One to Many Image Caption Task

  • Many to One 감정분석 Task, 모든 문장을 분석한 후 하나의 결과를 도출

  • Many to Many (make output when every input is trained) Machine Translation, 문장을 다 읽은 후에 번역을 진행

  • Many to Many 단어별 품사 확인 Task

1.3. Character-level Language Model

Language Model 이란 주어진 문자를 바탕으로 다음 나타날 문자를 예측하는 Task이다. Character level의 모델을 예시로 확인해 보자.

  • 사전 구축 및 one-hot vector 로 표현

    • Vocab : "hello" -> [h, e, l, o]

    • [1, 0, 0, 0], [0, 1, 0, 0], [0,0,1,0], [0,0,0,1]

  • input layer로 부터 hidden layer의 계산

    • ht=tanh(Whhht1+Wxhht)h_t = tanh(W_{hh}h_{t-1}+W_{xh}h_t)

  • output vector 를 구하기

    • Logit=Whyht+b Logit = W_{hy}h_t +b

    • output vector는 다음 input이 되어야하므로 input의 size와 동일하게 된다.

  • 위와 같은 학습 방법으로 첫 문자 "h" 만으로 다음 단어를 계속해서 예측가능한 구조가 되었다.

  • 위는 세익스피어 글의 일부분인데 학습을 진행함에 따라 점차 문장에 가까운 글이 되어감을 확인 할 수 있다.

1.4. BPTT, Backpropagation through time

  • 역전파를 통해 학습이 진행 되는데 문장의 길이가 길게 되면 필요한 메모리가 너무 커져 truncation으로 일정 부분만 잘라서 사용하게 된다.

  • 위 예시는 특정한 hidden state vector의 dim을 고정해놓고, 그 해당 dim의 값의 변화를 음수는 파란색 양수는 붉은색으로 정도를 표시한 데이터 이다.

  • 하나 dim에 대해서 위와 같이 흥미로운 패턴을 지니는 것을 볼 수 있다. hidden state의 특정 dim이 따옴표가 열리고 닫힘에 대한 정보를 가지고 있음을 알 수 있다.

  • Vanila RNN(Original RNN)은 사실 잘 사용되지 않는다. hidden state의 연산이 반복됨에 따라 같은 Matrix의 연산(등비수열)은 Gradient Vanishing, Exploding이 발생하여 학습이 잘 되지 않기 때문이다.

  • 위 예시를 보면 whhw_{hh}값 3이 반복적으로 곱해져 증폭 Gradient Exploding 문제가 발생한다.

  • 이런 문제에 대한 해결책으로 LSTM을 다음시간에 배우기로 한다.

Last updated