새소식

컴퓨터공학 💻/딥러닝

[딥러닝] RNN 순환 신경망(Recurrent Neural Networks) 이론

  • -
RNN 순환 신경망(Recurrent Neural Networks) 이론

퍼셉트론 인공 뉴런이 DNN(Deep Neural Network)이라면 순환신경망 RNN(Recurrent Neural Network)은 퍼셉트론의 일종의 자식 레이어로 볼 수 있습니다.

 

RNN은 신경망의 일종으로 문자열과 같이 순차적으로 등장하는 데이터 처리에 적합한 모델입니다. 입력된 데이터가 입력층에서 은닉층으로, 은닉층의 결과가 다시 같은 은닉층의 입력으로 반복(recurrent)합니다. , 이전 상태에 대한 정보를 메모리형태로 저장해서 그 다음 상태의 입력으로 사용하며 Sequence Data를 다루는 데 도움이 됩니다.

 

Sequential Data

기존 퍼셉트론 이론으로는 순차적으로 데이터를 다루는데는 어려움이 있었습니다.

I AM SO HAPPY

Sequential Data는 예를 들어 위 문장 처럼 각각의 데이터가 순차적으로 이전 데이터를 고려하여 처리합니다. 즉, AM은 I 없이는 처리할 수 없고 SO와 HAPPY역시 각각 AM과 SO없이는 처리할 수 없는 것입니다.

 

그런데 기존 퍼셉트론은 y = x * 2 + 1 에서 x가 1일 때와 2일 때, x = 2가 5로 처리된 것은 x = 1일 때 3으로 처리되었기 때문이 아닙니다. 즉, x = 2를 처리할 때 x = 1이 처리되는 것을 고려하지 않는 것입니다.

RNN은 이전 상태를 고려하여 처리합니다. (act는 activation function으로 정규화하는 과정입니다)

위 예시에서 H(X)1의 경우 바로 이전 상태인 H(X)0의 결과를 고려하여 처리하고 H(X)2는 H(X)1의 결과를 고려하여 처리합니다. 그러므로 매 결과값이 같지 않고 이전 가설의 식의 결과가 무엇이냐에 따라 다음 가설의 식의 결과가 완전히 달라지는 것입니다.

RNN을 간단한 다이어그램으로 표현하면 위와 같습니다. X가 들어왔을 때 W(X) + b를 activation function인 tanh 로 정규화해서 0~1사이 값으로 변환합니다. 그 결과물을 다음 스텝의 값으로 더해서 다시 예측을 시도하고를 반복하는 과정이 됩니다. 

 

Embedding

Embedding이란 Scalar값 혹은 String 값을 벡터화하는 것을 말합니다. Embedding 방법에는 Word2Vector 방식과 OneHot Encoding방식이 있는데 그중 OneHot Encoding방식을 설명하자면 단어 집합의 크기를 벡터의 차원으로 하고, 표현할 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식입니다. 

S N A C K
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

"SNACK" 이라는 단어를 한 글자씩 표현할 때 총 5개의 유니크한(겹치지 않는) 토큰을 5개의 차원으로 만들어줍니다. 가장 먼저 등장한 토큰 S를 1차원 [ 1, 0, 0, 0, 0 ], 다음 토큰 N을 2차원 [ 0, 1, 0, 0, 0 ] ... 등으로 마지막 토큰 까지 설정합니다. 

 

RNN의 한계점과 LSTM

tanh activation function의 역할로 인한 Vanishing gradient problem이 발생할 수 있습니다. 

tanh가 정규화(normalize)하는 과정으로 인해 시퀀스가 늘어날수록 학습률이 떨어지는 문제가 발생하는 상황입니다. 위 도식을 다시 한번 살펴봅시다. H(X)1의 경우 H(X)0을 normalize한 것을 더하여 자신을 다시 normalize합니다. 또 H(X)2의 경우 normalize된 H(X)1을 더하여 다시 자신을 normalize합니다. 이 과정이 반복될수록 H(X)99 정도의 경우 H(X)1가 어떤 결괏값이 들어왔는지에 대한 의미가 소실되어버립니다. 

 

이런 상황을 방지하고자 LSTM(Long Short Term Memory) 모델을 사용합니다. LSTM은 이전 스텝의 결과를 강제로 끌어옵니다. 예를 들어 H(X)2가 계산될 때 H(X)1을 더하고 추가로 H(X)0을 다시 한번 더하는 과정을 수행합니다. 다만, 모든 스텝을 기억하면 너무 길어지기 때문에 Forget Gate를 통해 장기 기억 상태와 단기 기억 상태를 두어 스텝 마다 모델이 어떤 스텝에서는 A 스텝을 기억하고 B스텝은 배제하는 식으로 관리합니다. 

 

참고로, RNN 구조에도 다양한 것들이 있는데 일반 RNN은 이전의 정보만을 저장 할 수 있는 것에 비해 Forward, Backward 방향의 정보도 같이 저장할 수 있도록 Bi-directional RNN을 활용하기도 합니다.

 

RNN으로 할 수 있는 것

주식 시장 예측, 부동산 토지값 예측, 챗봇 구현, 문서 분류, 통역 등 다양한 것들이 가능합니다.

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.