RNN은 순차 데이터나 시계열 데이터를 이용하는 인공 신경망 유형이다.
순차데이터란, 순서가 있는 데이터이다. 시간적인 순서도 가능하고
공간적인 순서도 가능하다.
EX) 주식 가격이나 텍스트 데이터, 오디오 데이터
순차 데이터를 처리하여 정확한 예측을 하려면, 과거의 데이터를 어느 정도
기억하고 있어야 한다.
표준 신경망은 어느 정도 예측이 가능하지만, 멀리 떨어진 과거의 데이터를 잘 기억하지는 못한다.
표준 신경망의 구조를 순차 데이터를 잘 처리하게끔 변경하는 것이 필요하다.
이것이 바로 순환 신경망(RNN: recurrent neural network)이다.
- 가변 길이의 입력을 처리할 수 있어야 한다.
- 장기 의존성을 추적할 수 있어야 한다.
- 순서에 대한 정보를 유지해야 한다.
- 시퀀스 전체의 파라미터를 공유할 수 있어야 한다.
순환 데이터는 RNN을 학습시키는 데 사용하는 데이터이다.
학습을 위해서는 일정한 길이로 데이터를 잘라 여러 개의 훈련 샘플을 만드는 과정이 필요하다.
위 예시에서는 3개씩 잘라 훈련 샘플을 만들었다.
바로 뒤에 오는 데이터가 정답이 된다.
활성화 함수로는 tanh 함수를 주로 사용한다.
단일 입력과 단일 출력이 있는 가장 일반적인 신경망이다.
많은 머신 러닝 문제에 사용된다.
보통 “Vanilla Neural Network” 라고 한다.
하나의 입력을 받아서 많은 수의 출력을 한다. 이미지 캡션을 생성할 때 많이 사용된다.
하나의 이미지가 입력되면 이미지를 가장 잘 설명하는 캡션들이 생성되는 방식이다.
일련의 입력을 받아 단일 출력을 생성한다.
감정(Sentiment) 분석 신경망이 이 타입에 속한다.
감성 분석 신경망은 주어진 문장들이 긍정적 또는 부정적 감정인지를 분류하는 신경망이다.
예시)
많은 수의 입력을 받아 많은 수의 출력을 생성한다. 기계 번역에서 많이 쓰인다.
기계 번역에서는 단어들을 다른 단어들로 계속 출력하게 된다.
RNN은 2차원인 순방향 신경망에서 시간 축이 생겨 3차원이 되었다고 생각하면 된다.
RNN에서는 계층을 통해 오류를 역전파하는 일반적인 방법 대신, 시간을 거슬러 올라가면서 그래디언트를 역전파하는 BPTT(Backpropagation Through Time)
를 사용한다.
그래디언트를 역전파 시키다보니 역전파를 진행할 수록
그래디언트가 점점 작아지다가 사라지게 되거나,
폭발적으로 증가하게 된다.
이렇게 그래디언트가 소실되면 학습이 진행되어도 먼 거리의 의존 관계는 파악하지 못하고, 근거리에 의존 관계에만 중점을 두게 된다.
- 피드-포워드 신경망과 마찬가지로 활성화 함수를 ReLU로 바꾸면 도움이 된다.
- 가중치를 단위 행렬로 초기화한다. 바이어스는 0으로 초기화하는 것도 도움이 된다.
- 보다 복잡한 순환 유닛인 LSTM이나 GRU 같은 Gated Cell을
사용한다.
이들 게이트들은 어떤 정보를 지나가게 할 것인지를 제어할 수 있어서 장기적으로 기억할 수 있다.
폭증 해결 방안은 상당히 많지만, 그 중 많이 사용되는 방법은 그래디언트를 일정 크기 이상 커지지 못하게 하는 방법이다.