Deep-RNN 정규화가 궁금해?
이번 글에서 Recurrent Neural Network Regularization[1]이라는 논문을 소개하고자 한다. 이 논문에서는 multi-layer recurrent neural network 모델을 효과적으로 정규화하는 방법을 제시한다. 이 논문을 이해하기 위해서는 LSTM과 Dropout에 대한 이해가 필요하므로 이 둘에 대한 설명을 간단히 한 후 논문에서 제시한 모델 정규화 방법을 설명하고 글을 마치겠다.
LSTM(Long-Short-Term-Memory)과 Dropout
LSTM(Long-Short Term Memory models)이란 RNN(Recurrent Neural Network)의 hidden state에 memory cell state를 추가하여 기존 RNN의 gradient vanishing problem을 해결한 모델이다[2]. 기존의 RNN은 input 되는 학습 데이터의 길이가 길어질수록 back-propagation 단계에서 gradient가 줄어들어 weight와 bias가 유의미하게 변하지 못하는 gradient vanishing problem을 가지고 있다. 이를 해결하기 위해 LSTM은 cell state를 추가하여 과거의 정보를 얼마나 잊을지, 현재 time stamp에서 input 된 정보를 얼마나 기억할지를 결정한다. 이를 통해 gradient가 vanishing 되지 않고 잘 전달된다.
위의 LSTM 그림에서 x는 input을 의미하고, t는 time stamp, h는 output이다. 빨간 원으로 표시된 두 지점 중 위에 있는 흐름에서 cell state를 저장하고, 밑의 흐름에서는 input을 받고 output을 출력한다.
이때 왼쪽에서 오른쪽으로 연결되는 두 흐름을 과거의 정보가 같이 전달된다고 하여 recurrent connection이라 한다.
Dropout이란 deep 한 neural network 모델을 만들 때 overfitting 문제를 해결하고 정규화된 모델을 만들기 위해 말 그대로 network 일부를 생략하는 방법이다[3]. 생략된 network는 학습에 영향을 끼치지 않게 된다.
모델을 학습시키다 보면 학습 데이터에 의해 각 각의 network의 weight들이 동조화(co-adaption)되는 현상이 일어날 수 있다. 이 현상을 dropout을 적용하면 network를 무작위로 생략하여 학습을 시킴으로써 피할 수 있다.
왜 RNN은 안돼?
hidden layer 층을 여러 개 쌓아 올린 deep 한 RNN 구조를 Multi-layer RNN이라고 한다. 논문에서는 Multi-layer RNN이 존재하지만, 일반적으로 RNN을 적용하는 application들이 overfitting문제로 얕은 RNN 모델을 사용하고 있음을 지적한다. 우리는 앞서 overfitting 문제를 해결하는 방법에 대해 알아보았다. ‘dropout을 적용하면 되는 것 아닌가?’ 하는 의문이 드는 것이 자연스럽다. 하지만 논문에서는 RNN에서 dropout이 효과적으로 모델을 정규화시키지 못한다고 말한다. 이유는 과거의 정보가 현재 input 되는 정보에 영향을 미치는 RNN의 구조상 dropout을 적용하여 무작위로 network를 생략하였을 때 과거의 정보가 통째로 지워질 수 있기 때문이다. 이 결과로 학습 데이터에 noise가 증폭되고 학습에 치명적인 영향을 줄 수 있다.
IDEA
논문에서는 RNN 모델에서 과거가 다음 time stamp로 전달되는 recurrent connection이 아닌 connection에만 dropout을 적용하는 방식을 제안한다. 글로만 설명하는 것은 한계가 있음으로 논문에서 제시한 그림을 통해 설명하겠다.
위의 그림에서 y는 output이고 직사각형 하나하나는 hidden state, x는 input이고 t는 time stamp이다. multi-layer RNN을 간단히 그림으로 표현하기 위해 논문에서는 두 층의 hidden state를 가진 RNN을 표현하였다. 이때 점선으로 연결된 부분이 dropout을 적용할 수 있는 connection이다. 다음 layer 층으로 넘어가는 connection에만 dropout을 적용하는 것이 이 논문의 핵심 idea이다.
dropout을 적용하기 전과 후의 수식을 같이 놓고 차이점에 주목하여 더 자세히 알아보자.
기존의 RNN에 대한 equation이다. 여기서 ⊙는 두 벡터의 element-wise multiplication이다. 그리고 이 논문에서 각 input에 weight와 bias를 곱하는 행위를 T라는 notation으로 간단히 치환하였다. l은 multi layer에서 layer 층을 의미한다.
dropout을 적용하기 전 LSTM의 equations이다. cell state가 추가되었기 때문에 equation 하나가 더 추가되었다.
말로써 풀어보면 다음과 같다.
1. (l번째 layer, t(현재) time stamp의 memory cell state)
= (forget gate (과거의 정보를 얼마나 잊을지)) ⊙ (이전 time stamp의 cell state)
+ (input) ⊙ (input modulation gate (현재 정보를 얼마나 기억할지))
2. (l번째 layer, t(현재) time stamp의 hidden state)
= (output) ⊙ (현재의 cell state)
빨간 박스가 1번 equation에 해당하는 영역이고, 주황색 박스가 2번 equation에 해당하는 영역이다.
이제 dropout을 적용한 LSTM의 equations를 살펴보자.
D가 해당 hidden state를 random 하게 비활성화시키는 dropout operator이다. D가 적용된 hidden state를 보면 l-1 층의 같은 time stamp의 hidden state에만 dropout이 적용됨을 알 수 있다.
모든 hidden state에 dropout을 적용하는 경우 총 L 층의 hidden layer가 쌓인 모델에서 input 되는 정보는 dropout connection을 L+1번 이상 지날 수 있다. 하지만 논문에서 제안한 방법처럼 일부분에만 dropout을 적용하면 input 되는 정보는 output 될 때까지 최대 L+1번의 dropout connection을 지난다. 이렇게 dropout connection을 지나는 횟수를 제한함으로써 과거의 정보가 크게 유실됨을 방지하는 것이다.
실험
논문에서는 language modeling, speech recognition, machine translation, image caption generation 총 4가지로 실험을 진행하였다. 언어 모델의 평가 방법은 perplexity이다. perplexity는 엔트로피와 유사한 측면이 있는데, cross entropy의 근삿값으로 다룰 수 있다. ‘착각의 정도’라는 의미로 해석할 수 있기에 수치가 낮을수록 모델의 성능이 좋다.
Table 1만 간단하게 살펴보면 non-regularized LSTM 모델은 test set 점수가 114.5점이다. 이와 비교하여 Dropout을 적용한 Large-regularized LSTM은 test set 점수가 78.4점으로 더 일반화를 잘 시킨 모델이라는 결과가 나왔다.
결론
이 논문은 RNN에 dropout을 부분적으로만 적용하여 multi-layer RNN을 현실적으로 application에 사용할 수 있다는 가능성을 제시하였다. 다음 포스팅부터는 GRU, LSTM 등과 같은 여러 가지 순환신경망의 모델 구조에 대해 살펴보자.
References
[1] Wojciech Zaremba, Ilya Sutskever, Oriol Vinyals. Recurrent Neural Network Regularization(2015)
[2] https://colah.github.io/posts/2015-08-Understanding-LSTMs/
[3] Nitish Srivastava, Geoffrey Hinton, Alex Krizhevsky, Ilya Sutskever, Ruslan Salakhutdinov. Dropout: A Simple Way to Prevent Neural Networks from Overfitting(1929−1958, 2014)