Back Ground
출처: https://yjs-program.tistory.com/164
Recurrent Neural Networks (RNN) are a class of Artificial Neural Networks that can process a sequence of inputs in deep learning and retain its state while processing the next sequence of inputs. Traditional neural networks will process an input and move onto the next one disregarding its sequence. Data such as time series have a sequential order that needs to be followed in order to understand. Traditional feed-forward networks cannot comprehend this as each input is assumed to be independent of each other whereas in a time series setting each input is dependent on the previous input.
RNN이란, 입력들의 시퀀스 (순차적이고 연속적인 데이터)를 처리하고, 다음 입력의 시퀀스를 처리하는동안 입력받은 데이터를 게속 유지하는 인공신경망 클래스이다.
전통적인 Feed Forward 네트워크는 입력데이터가 시퀀셜 하더라도 서로 독립적으로 데이터를 처리하기 때문에, 서로간의 데이터가 종속적인 시계열에서는 사용하기 어려웠다. RNN 네트워크는 이러한 시퀀스 데이터를 처리하기위해서 사용되고, 대표적인 시퀀스 데이터는 자연어 처리가 존재한다.
참고: 또한, 이미지도 대표적인 Non-stationarity를 가지므로, 시계열 데이터의 일종으로 표현가능하다고 한다. 그러므로, 어떠한 시퀀스 데이트럴 다루어야 하는 RNN 알고리즘도 이미지 처리에 탁월한 성능을 보여준다고 한다.
아래는, RNN에서 중요하다고 생각되는 키워드이다.
메모리 셀
또는 RNN 셀
이라고 불린다. 현재 시점 t에서의 데이터는, 이전 시점 t-1의 데이터를 포함하기에, 기억하고있다고 말할수 있다. RNN은 입력과 출력의 길이를 다르게 설정할수 있으며, 이를 3가지의 RNN 형태로 나눌수 있습니다.
일반적인 Feed Forward
하나의 입력이 있으며, 다수의 출력이 존재. 출력이 시퀀스 데이터이다.
하나의 이미지에서 제목을 출력하는 이미지 캡셔닝이 존재. 즉, 이미지 하나를 입력(One)으로 넣어, 다수의 텍스트(Many)로 반환.
[1] 출처: https://casa-de-feel.tistory.com/39
스팸문서 분류기 및 입력된 문서의 데이터가 긍정인지 부정인지 판별하는 Sentiment classification등에서 사용됨, 출력은 고정 크기를 가지는 일반 데이터다.
출처: https://wikidocs.net/22886
번역기 등에서 사용되거나 태깅작업 (영어의 품사를 통해 단어의 위치를 결정)등에서 사용된다.
RNN의 핵심은, 이전 레이어(t-1)에서 전달된 Hidden State가 시점 t의 Memory Cell로 값을 전달하여, 이전 시퀀스데이터의 정보를 넘겨줌으로써 시계열 데이터를 처리할 수 있다.
입력값에 이전 레이어 및 출력값을 포워딩 하기때문에 장기 의존성 이슈가 생길수 있다.
장기 의존성: 입력데이터를 바로 직전 Hidden State값을 전달 받기때문에 그보다 앞전의 데이터 (t-n)의 데이터가 희석되어 정보량으 손실이 일어난다. 장기의존성 이슈를 해결하기 위해, 사용되는 알고리즘은 LSTM이 나타났다.
참고: 가장 기본적인 RNN을 Vanilla RNN 이라고함.
RNN의 장기 의존성 (단기기억에 대해서만 효과적이고, 훨씬 이전의 시점 (초반 시퀀스데이터)의 데이터 정보가 희미)이슈를, LSTM에서는 단기기억과 장기기억을 나누기위해 3가지의 게이트 형태로 해결했다.
입력게이트: 현재 정보를 저장하기 위한 게이트.
망각게이트: 이전 Hidden State가 시그모이드 (0과 1사이의값)를 거치면서, 점점 0에 가까워져 값의 역할이 낮아짐
출력게이트: 현재 시점 (t) 은닉상태를 결정.
Bidirectional : 미래 값 참조