Backpropagation through time(BPTT)

위처럼 RNN에서 수많은 입력을 바탕으로 hidden layer 가중치 계산, 최종 예측 가중치 계산을 통해 학습이 이뤄진다.

Loss function으로 예측과 ground truth의 차이를 비교하며, 가중치 행렬을 backpropagation으로 업데이트 해나간다.

하지만 현실적으로 입/출력의 길이가 길어지면, 한정된 gpu 자원으로는 한꺼번에 처리하기 어렵다.

그래서 실제로는 truncation(자름)하여 일부 데이터로만 학습을 나눠서 진행한다.

 

RNN에서 필요로 하는 정보를 저장하는 공간은 time step마다 업데이트를 수행하는 hidden state vector이다.

예를 들어, 현재까지 특정 문자를 몇 번 생성할 것이고, 몇 번 생성했는지 등의 정보가 hidden state vector에 담겨야 한다.

Hidden state vector가 n차원일 때, 어느 차원의 정보가 핵심 정보인지 역추적하여 분석할 수 있다.

위 그림의 경우에는 1차원을 추적하면서 어떻게 RNN이 변화하는지 확인하는 그림이다.

 

Quote detection cell(인용 탐지 셀)

예를 들어 1차원 값이 어떻게 나오는지 확인하여 시각화했다고 해보자.

위 그림은 1차원 값이 양수일 때 붉은색, 음수일 때 푸른색으로 output 색상을 칠한 것이다. 

따옴표를 기준으로 내부는 푸른색, 그 밖에 문장은 붉은색으로 나타나는 것을 알 수 있다.

그렇다면 해당 RNN의 hidden state vector의 1차원은 '따옴표가 열리고 닫힌 상태'를 나타내는 vector라는 말이다. 

이때 vector의 dimension을 cell이라고 부른다.

즉 hidden state vector의 1차원 벡터는 quoate detection cell(인용 탐지 셀)이 된다.

If statement cell(if구문 셀)

또 다른 예시로 위와 같은 시각화 결과가 나왔다고 해보자.

RNN의 어떤 hidden state dimension인지는 모르지만, 해당 dimension은 if statement cell임을 알 수 있다.

 

Vanishing or Exploding Gradient Problem in RNN

Vanilla RNN structure

위에서 언급한 시각화 결과는 사실 Vanilla RNN으로는 얻기 힘든 결과이다.

 └ 이때 Vanilla RNN은 입력층과 은닉층이 완전 연결(fully connected) 구조를 가진 모델이다.

위의 결과들은 RNN의 발전 모델인 LSTM과 GRU의 실행 결과이다.

그 이유는 같은 가중치를 계속해서 곱해주기 때문이다.

 

해당 가중치(W_hh)로 인해서 hidden state vector는 등비수열의 형태를 띄게 된다.

이때 공비가 1보다 크냐 작냐에 따라서 hidden state는 계속 커질 수도 작아질 수도 있다.

이런 경우를 gradient가 전파하면서 소실(vanishing)하거나 증폭(exploding)하는 문제라고 부른다.

용어로는 Long Term Dependency가 발생한다고 한다.

이러면 input이 길어질수록 유의미한 gradient signal을 보낼 수 없게 된다.

+ Recent posts