BOAZ/데이터 분석

5. RNN and LSTM

공부중인학생 2022. 8. 24. 00:24

일반적인 feed forward 신경망은 흐름이 단방향이라 시계열 데이터의 성질을 충분히 학습하기 어렵습니다.

 

 

다음과 같이 문장 내 단어 순서가 무시되거나 아니면 맥락의 크기에 비례해 가중치 매개변수가 늘어나게 됩니다. 이러한 문제를 해결하기 위해 RNN(순환 신경망)을 통해 과정의 정보를 기억하는 동시에 최신 데이터를 갱신하는 신경망이 등장하게 됩니다.

 

 

입력은 $(x_t, h_{t-1})$이고 각 t일 때 RNN의 입력은 $x_t$와 한 시각 전의 RNN 계층으로부터의 출력인 $h_{t-1}$로 이루어져 있습니다. 출력은 $h-t = tanh(h_{t-1}W_h + x_tW_x + b)$으로 현재 출력과 그 이전의 출력을 통해 출력이 결정됩니다. (과거의 정보를 기억한다.)

 

이러한 RNN은 Long-Term Dependencies라는 시퀀스 데이터의 길이가 길어질수록, 과거의 중요한 정보에 대한 학습이 어려워지는 문제가 존재합니다. 과거 기울기를 전달함에 따라 장기 의존 관계를 학습할 수 있지만 중간에 기울기가 사라지거나 너무 커지게 되면 장기 의존 관계를 학습할 수 없습니다.

 

기울기 소실과 폭발의 원인은 BPTT과정에서 기울기를 변환시키는 tanh과 행렬곱으로 생기게 됩니다.

 

 

위의 사진은 tanh를 의미하는데 이 함수의 미분값은 1과 0 사이이므로 역전파에서 기울기가 tanh 노드를 지날 때마다 그 값이 작아지게 됩니다. 행렬곱 노드를 지날 경우 매번 같은 가중치 $W_h$가 사용되는데 1보다 클 경우 기울기가 폭발, 1보다 작을 경우 기울기가 소실될 가능성이 있습니다.

 

이러한 문제를 해결하기 위한 방법으로 기울기 클리핑을 사용하거나 LSTM라는 기울기 소실에 대응하기 위한 게이트가 추가된 RNN을 사용하면 됩니다.

 

 

LSTM의 게이트는

 

- forget gate: 과거의 정보 $c_{t-1}$에서 불필요한 정보를 잊게 해주는 데이트

- input gate: 새로 추가되는 정보 g의 가치를 판단하는 게이트

- output gate: tanh($c_t$)기 다음 은닉 상태에 얼마나 중요한지 판단하는 게이트

 

게이트를 얼마나 열지 0.0 ~ 1.0 사이의 실수로 나타냅니다. 1.0에 가까울수록 비중을 크게 해서 데이터를 내보냅니다.

 

 

 

forget gate

 

과거의 hidden state$h_{t-1}$와 현재의 input $x_t$가 Sigmoid 함수를 거쳐 0.0~1.0 사이의 값(f) 이 행렬로 나옵니다.

 

 

 

output gate

 

RNN에서 구현했던 것처럼 $x_t , h_{t-1}$으로부터 새로 기억해야 할 정보를 구합니다. 새로운 정보를 추가하는 것이 목적이기에 Sigmoid가 아닌 tanh를 활성화함수로 사용합니다.

 

 

 

$x_t$,$h_{t-1}$으로부터 $tanh(c_t)$의 각 원소에 대해 얼마만큼 다음 시각으로 보낼지 결정하는 행렬o를 구합니다.

 

 

 

 

LSTM에서 기울기 소실이 발생하기 어려운 이유는 

 

 

+노드에서 상류에서 전해지는 기울기를 그래도 흘리므로 기울기 변화가 없습니다. x노드는 똑같은 가중치 행렬을 행렬곱하는 것이 아니라 매 시각마다 다른 게이트 값을 이용한 아다마르 곱을 하기에 매번 새로운 게이트 값을 이용하므로 곱셈의 효과가 누적되지 않아 기울기 소실이 일어나기 어렵습니다.

'BOAZ > 데이터 분석' 카테고리의 다른 글

6. GAN and Reinforcement Learning  (0) 2022.08.26
4. CNN  (0) 2022.08.18
3. Ensemble and Random Forest  (0) 2022.08.09
2. Decision Tree and SVM  (0) 2022.08.03
[핸즈온 머신러닝] 3장  (0) 2022.07.31