이번 글은 아래 3개의 사이트의 내용을 읽고 정리한 글입니다.
www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/
colah.github.io/posts/2015-08-Understanding-LSTMs/
1. RNN의 등장배경
- 사람들은 매순간 처음부터 생각을 시작하지 않습니다. 지금 블로그를 읽는 순간에도 여러분은 앞의 단어를 이해한 것을 바탕으로 각 단어들을 이해하고 있을 것입니다. 이처럼 사람의 생각은 지속(persistence)성을 가집니다.
- 전통적인 뉴럴 네트워크는 이러한 지속성을 가진 데이터를 처리할 수 없었고 이것은 큰 딜레마였습니다. 왜냐하면, 전통적인 뉴럴 네트워크는 모든 입력값은 서로 독립적이라는 것을 기본 가정으로 하기 때문입니다. 따라서 영화의 각 장면마다 어떤 유형의 일이 일어날지 분류하는 작업을 전혀 처리할수 없었습니다. 하지만 RNN의 등장으로 이러한 문제가 해결되었는데, RNN은 네트워크 안에 루프(feedbaack loop, recurrent loop)를 만들어 정보가 지속되도록 하였습니다.
2. RNN이란?
- RNN은 시퀀스의 모든 요소에 대해 동일한 작업을 수행하고 출력값이 이전 결과에 의존하기 때문에 'recurrent'라고 부릅니다. RNN은 또 "기억(memory)"를 가지고 있다고 하는데요, 이 기억은 "지금까지 어떻게 계산되어왔는지"에 대한 정보를 가지고 있습니다.
- 지난 몇 년간 RNN은 음성인식(speech recognition), 언어 모델(language modeling), 번역(translation), 이미지 캡셔닝(image captioning) 분야에 등 많은 영역에서 놀라운 성과를 보였습니다. 이 성과에는 LSTM 모델의 활용이 큰 역할을 했습니다. RNN 중에서 특별한 유형인 LSTM은 오리지널 RNN보다 훨씬 더 뛰어난 성능을 보입니다.
3. RNN의 기본 구조
- 루프의 모양이 다소 생소하지만, 루프를 펼쳐서(unfold) 오른쪽과 같이 생각한다면, 기존의 뉴럴 네트워크와 크게 다르지 않습니다(시간 축으로 Deep Neural Network를 만든것과 같습니다. 오차역전파도 시간에 따라 진행합니다("BPTT-Back Propagation Through Time"). 만약 우리가 5개의 단어로 이루어진 문장을 생각한다면, 네트워크는 4층의 뉴럴 네트워크로 펼쳐질(unrolled) 것입니다.
- RNN은 같은 네트워크를 여러번 복제한 것으로 생각될 수 있으며, 각 복사본은 이전의 메세지를 전달하는 역할을 합니다. 체인처럼 연결되어있는 오른쪽 그림을 본다면 시퀀스 또는 리스트와 연관이 있다는 예상을 할 수 있습니다.
- ouput값인 h(t)는 현재 step의 입력값 x(t)와 더불어 지난 step의 output 인 h(t-1)을 함께 계산하여 출력합니다. 그 이전step의 output 값인 h(t-1) 역시 그 전 step의 output인 h(t-2)를 함께 계산하여 출력합니다. 결국 이전의 모든 time step을 고려하여 현재의 output h(t)값을 출력하게 됩니다.
- Deep RNN : RNN에도 high level feature를 잘 추출하고자(representation capacity를 높이고자) 여러개의 hidden layer을 쌓아서 학습하는 'Deep RNN(Recurrent Neural Network)'가 있습니다.
4. RNN의 단점
RNN이 획기적인 이유는 이전의 정보를 현재의 작업에 연결할 수 있다는 아이디어이기 때문이었습니다. 그러나 RNN 모델이 늘 파워풀할까요? 그렇지 않습니다. 가장 큰 단점인 'Long term dependency'부터 살펴보겠습니다.
1) Long-term dependency
'예측하기 위해 필요한 정보를 가진 단어가 멀리 있다면?'
- 어떤 상황에서는 현재의 작업을 수행하기 위하여 최근의 정보만 필요한 경우가 있습니다. 예를들어 이전의 단어에 근거하여 다음 단어를 예측하는 언어모델을 생각해봅시다. "The clouds are in the sky" 문장에서 "sky"를 예측한다고 할때, 이 문장만 보더라도 충분한 답을 얻을 수 있습니다. 이와같이 관련 정보와 필요한 부분의 거리(gap)이 작을 때, RNN은 유용합니다.
- 그러나 반대의 경우도 존재합니다. 다음과 같은 문장에서 마지막 단어를 예측한다고 합시다. "I grew up in France.. I speak fluent French" 근처에 있는 정보는 다음 단어가 언어명이라는 힌트를 주지만, 구체적으로 어떤 언어인지를 보려면 더 앞의 문장을 보아야합니다. 즉, 관련 정보와 우리가 필요한 단어 간의 거리(gap)이 아주 큰 상황이 존재할 수 있는 것이죠. 아쉽게도 이런 경우 RNN은 관련 정보를 연결하는 학습이 어렵습니다. 이것을 "Long-term dependency" 문제라고 합니다. 다행히도 LSTM에서는 이 문제를 해결하였습니다
2) Vanishing/Exploding Gardients Problems
: layer의 길이가 길어질수록, 현재 time step에서 멀어질수록 기울기가 소실되어 학습이 어려워지는 단점이 있으며, 따라서 활성화함수로 미분값이 작은 시그모이드 보다는 기울기가 더 가파른(stiff) tanh함수가 더 선호됩니다.
3) 거리에 따라 정보 중요도가 반비례하여 감소
: 아키텍처 상 h(t) 출력시 h(t-1)의 정보를 가장 많이 반영할 수 밖에 어기 때문에 멀리 떨어져있을 경우, 정보가 퇴색될 수밖에 없다.
다음 글에서는 위와 같은 RNN의 단점을 개선하여 높은 성능을 보인 LSTM에 대해서 알아보도록 하겠습니다.
2021.05.07 - [딥러닝(Deep learning)] - [딥러닝기초] LSTM(Long Short Term Memory Networks)
'AI > 딥러닝 기초(Deep learning)' 카테고리의 다른 글
[딥러닝] GRU(Gated Recurrent Unit) (1) | 2021.05.10 |
---|---|
[딥러닝][NLP] LSTM(Long Short Term Memory Networks) (1) | 2021.05.07 |
[딥러닝][기초] 모멘텀(Momentum) (0) | 2021.04.29 |
[딥러닝][기초] 학습률(Learning rate)와 스케줄링 (0) | 2021.04.29 |
[딥러닝][기초] 앙상블(Ensemble) (0) | 2021.04.29 |
댓글