본문 바로가기
AI/딥러닝 기초(Deep learning)

[딥러닝][NLP] RNN(Recurrent Neural Network)

by Hyen4110 2021. 5. 7.

이번 글은 아래 3개의 사이트의 내용을 읽고 정리한 글입니다.

www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/

wikidocs.net/22886

colah.github.io/posts/2015-08-Understanding-LSTMs/

 

Understanding LSTM Networks -- colah's blog

Posted on August 27, 2015 Humans don’t start their thinking from scratch every second. As you read this essay, you understand each word based on your understanding of previous words. You don’t throw everything away and start thinking

colah.github.io

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)값을 출력하게 됩니다. 

 

- 원래 기본 뉴럴네트워크에서 output값은 σ(Wx(t)+b) 이지만, 위의 Vanila RNN(기본 RNN)에서는 linear activation function을 갖는다는 가정아래 σ를 생략함 
https://wikidocs.net/22886

- 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)

 

[딥러닝기초] LSTM(Long Short Term Memory Networks)

이 글은 아래 사이트의 내용을 정리한 글입니다. colah.github.io/posts/2015-08-Understanding-LSTMs/ Understanding LSTM Networks -- colah's blog Posted on August 27, 2015 Humans don’t start their think..

hyen4110.tistory.com

 

댓글