본문 바로가기

AI

RNN

- Recurrent Neural Network

RNN은 입력과 출력을 sequence 단위로 처리하는 sequence 모델

input의 사이즈가 정해진 deep neural network를 문장 분석에 사용하면 같은 의미의 문장이지만

단어의 개수가 달라지면 해석하지 못한다

 

Slot을 채워넣는 Slot Filling에서 이러한 모델을 사용할 수 있다

예를 들어 티켓 예약 시스템은 목적지와 날짜를 문장을 통해 알아내고 싶다

두 문장은 같은 값을 slot에 채워넣지만 단어의 숫자가 다르다

 

I would like to arrive Taipei on November 2nd

On November 2nd, I’ll arrive at Taipei

 

원리는 다음과 같다

RNN은 반복이라는 recurrent의 의미에 맞게 parameter를 특정 위치에서만 쓰는 것이 아니라 이전 시점에서 나온 값을 다음 시점에서도 사용한다

따라서 input의 길이가 달라지는 것에 대응이 가능하다

 

 

RNN 모델의 다양한 구성과 각각 쓰이는 예시이다

 

 

셀들을 계속 그리는 것은 비효율적이므로 이렇게 자기 자신을 가르키는 보통 화살표를 추가해서 사용한다

식으로 표현한다면

new state : $ h_t$, old state : $h_{t-1}$

function with parameters W : $ f_W $ ( 이 함수는 어느 time step에서나 같다 )

input vector at some time step : $x_t$

$$ h_t = f_W(h_{t-1},x_t) $$ 

이다

 

바닐라 RNN 모델을 살펴보면

$$ h_t = tanh(W_{hh}h_{t-1}+W_{xh}x_t) $$ 

$$ y_t =W_{hy}h_t $$

처럼 parameter가 t에 관계없이 공유된다

tanh를 사용하는 이유는 gradient를 유지하는데 좋다고 한다

 

- Backpropagation Through Time ( BPTT )

학습 과정에서는 backpropagation을 쓰는 것은 같다

하지만 초창기 step에 들어온 input은 layer 몇개만 backpropagate 해주면 되는 반면

마지막에 가까운 step은 layer가 너무 깊어지는 문제가 발생한다

이를 해결하기 위해 최근 몇 step만 포함하여 학습시키는 Truncated BPTT를 보통 사용한다

 

우리가 backpropagation을 위해 구해야 하는 값은 $ \frac{dL}{dW}$

 

 

모든 step에서의 loss를 더해 L을 만들어준다

$ \frac{dL}{dW} = \sum_{j=0}^{T-1}\frac{dL_j}{dW} $

 

 

$L_j$를 구하는데 W를 여러번 사용했으므로 gradient를 다 더해준다

$ \frac{dL_j}{dW} = \sum_{k=1}^{j}\frac{dL_j}{dh_k}\frac{dh_k}{dW} $

 

chain rule을 사용하여 아래와 같이 바꾸어준다

$ \frac{dL_j}{dW} = \sum_{k=1}^{j}\frac{dL_j}{dy_j}\frac{dy_j}{dh_j}\frac{dh_j}{dh_k}\frac{dh_k}{dW} $

 

위의 식에서 $ \frac{dh_j}{dh_k} $을 보면 중간이 생략된 채 chain rule 마지막만 적용된 것을 알 수 있다

$ \frac{dh_j}{dh_k} = \prod_{m=k+1}^{j}\frac{dh_m}{dh_{m-1}} $ 로 고치면 생략된 부분을 알 수 있다

chain rule은 이해되는데 자코비안이랑 관련있다는 부분은 잘 이해가 안된다.. 수학 배경지식이 부족한 느낌ㅠㅠ

 

$$  \frac{dL_j}{dW} = \sum_{k=1}^{j}\frac{dL_j}{dy_j}\frac{dy_j}{dh_j} (\prod_{m=k+1}^{j}\frac{dh_m}{dh_{m-1}})\frac{dh_k}{dW} $$

아무튼 최종식!

 

$ h_m = f(W_hh_{m-1}+W_xx_m) $이니까

자코비안 부분을 이해하지 못해서 그런가 $ \frac{dh_m}{dh_{m-1}} = W_h^Tdiag(f'(W_hh_{m-1}+W_xm_x)) $ 라고 하는데 이부분이 잘 이해가 안된다

교수님께서도 수식은 자세히 알 필요 없다고 넘어가셔서 나중에 시간여유가 생길때 찾아볼 예정이다

 

위의 식을 보면 weight의 곱이 많다

이때문에 너무 커지거나 작아지거나 하는 gradient 문제가 발생할 가능성이 높아진다

해결을 위해 너무 커지면 방향은 유지하되 크기를 줄이는 gradient clipping을 사용하면 gradient exploding 문제를 막을 수 있다

vanishing gradient 문제를 해결하기 위해서는 LSTM이라는 모델을 사용하면 좋다고 한다

 

-  LSTM (Long Short Term Memory)

LSTM은 옛날 정보를 저장하는 메모리를 셀에 새롭게 만들어준 형태이다

input, forget, output gate를 사용하여 필요한 정보들을 저장한다

이를 통해 RNN에 비해 input이 긴 경우 성능이 좋다고 한다

 

- GRU (Gated Recurrent Unit)

LSTM에서 input,forget gate를 합쳐 하나의 gate로 만든 형태

셀 구조도 더 간단하다고 한다

 

ITE4053 : Deep Lerarning ( Hanyang University )

'AI' 카테고리의 다른 글

GAN  (0) 2021.06.13
Supervised Learning vs Unsupervised Learning  (0) 2021.06.13
Convolution & CNN  (0) 2021.05.31
Optimization Algorithms  (0) 2021.04.20
Batch Normalization  (0) 2021.04.18