RNN(Recurrent Neural Network, 순환신경망)을 이해해보자

ted
None
Published in
6 min readOct 5, 2020

안녕하세요. 휴먼스케이프 ted 입니다.

Recurrent Neural Network는 Neural Network의 꽃입니다.

우리가 사용하는 데이터 중에는 Sequence data(음성인식이라던지 자연어라던지 등의 문맥이 있는 데이터)들이 상당히 많이 있습니다. 이는 하나의 단어만 알고 이해한다고 전체 맥락을 이해할수 없듯, 이전의 단어들을 이해해야 전체의 맥락을 이해 할 수 있는거죠. 이런 맥락들이 있는 series 데이터는 NN/CNN에서 사용하기 어렵습니다.

Recurrent Neural Network

맥락을 이해하고 처리하기 위해서는 이전의 결과가 다음 결과에 영향을 미칠 수 있어야 합니다. 영향을 미칠 수 있어야 series 데이터들을 처리 할 수 있겠죠.

Recurrent Neural Networks 는 루프를 가지고 있다.

그림을 보시면 뉴럴넷 덩어리 A 가 있고, Xt 는 입력값, ht의 결과값 입니다.

A의 결과는 다시 A로 들어가서 루프를 만들어 주게 되는데요. 이렇기 때문에 현재의 상태(state)가 그 다음 상태(state)에 영향을 미치게 됩니다.

이를 오른쪽처럼 표현한 것을 왼쪽처럼 표현할 수 있게 됩니다. series에 적합하게 되겠죠.

x 가 있으면 RNN을 연산을 통해 상태(state)를 계산하고 그 상태(state)가 자기 입력이 되게 되고, 각 상태(state)에 대해 y값을 뽑아낼 수 있게 됩니다.

RNN은 상태(state)를 계산할때는 이전 상태(state)를 사용하게 된다는게 포인트 입니다.

기초가 되는 RNN 연산법은 tanh(sigmoid와 유사)를 써서 아래 처럼 만들어 볼 수 있습니다.

(참고) 결과의 vector 모양은 W에 따라 달라집니다.

실제로 어떻게 연산이 되는지는 바로 설명해 주셨습니다.

각 input x가 =[‘h’,‘e’,‘l’,‘l’,‘o’] 일 경우 다음 나올 캐릭터를 예측해보는 Language Model 을 RNN으로 구현해봅시다.

각 문자를 vector 로 만들어보고 hidden layer의 값을 state 라고 가정한 다음에, 아래처럼 벡터 연산을 진행해보도록 합니다.

input layer와 값와 hidden layer 를 통해 output이 나오게 됩니다.

위에서 제대로 나온값과 나오지 않은 값에 대해서는 cost 함수를 계산하여(softmax) 계산하여 학습시킬 수 있습니다.

RNN의 활용하는 것은 다양합니다.

https://github.com/TensorFlowKR/awesome_tensorflow_implementations

sequence 한 데이터의 입력과 출력이 가능하기 때문에 많은 응용이 가능하게 됩니다.

  • 언어 모델링
  • 음성 인식
  • 기계 번역
  • 대화 모델링/질문에 대해 답변하기
  • 이미지/비디오 자막넣기
  • 이미지/음악/춤 생성

RNN을 어떻게 활용하느냐에 따라 위의 응용들은 다양해지게 됩니다.

  • one to one : Vanilla Neural Network
  • one to many : Image Captioning
  • many to one : Sentiment Classification
  • many to many : Machine Translation
  • many to many : Video classification on frame level

Multi-Layer RNN 을 쓰게 되면 더 복잡한 학습들이 가능하게 됩니다.

layer가 많아지는 경우, 학습의 어려움이 있어 이를 극복하기 위한 모델들이 있습니다. 대표적으로는 LSTM(Long Short Term Memory) 를 쓰거나 GRU 를 쓰게 됩니다. (2016년 기준)

나머지는 lab시간을 통해 구현해보도록 해보겠습니다 :)

출처

Get to know us better!
Join our official channels below.

Telegram(EN) : t.me/Humanscape
KakaoTalk(KR) : open.kakao.com/o/gqbUQEM
Website : humanscape.io
Medium : medium.com/humanscape-ico
Facebook : www.facebook.com/humanscape
Twitter : twitter.com/Humanscape_io
Reddit : https://www.reddit.com/r/Humanscape_official
Bitcointalk announcement : https://bit.ly/2rVsP4T
Email : support@humanscape.io

--

--