Deep Learning/NLP

RNN(Recurrent Neural Network)

BigJoo 2023. 10. 26. 16:24

NLP에 대해 공부하고 싶어져서 이에 대해 정리를 하려고 합니다.

RNN 이전의 Neural Network들은 모든 입력값들을 서로 독립적이라고 가정하였기에
이전 정보를 반영하여 계산을 처리해야하는 문제들을 처리하지 못하고 있었습니다.
이를위해 네트워크 안에 Loop를 만들어 이전 정보가 지속되도록 하는 RNN모델이 탄생하였습니다.

Recurrent에서 알 수 있듯, 한 쪽 방향으로 정보가 흘러가는 것이 아닌 layer에서 순환하는 구조를 가집니다.
위처럼 Loop를 만들어 이전 정보가 지속되도록 하고, 이를 펼쳐보면 아래와 같은 구조를 가집니다.

펼쳤을 때 RNN의 구조

현재의 input 값 x_t를 받아서 h_t라는 output 값을 출력하고, output값인 h_t를 다음 Cell에게 넘겨줍니다.
다음 Cell은 현재의 input값 x_t+1과 전 단계의 h_t를 받아 계산을 통해 h_t+1을 출력합니다.
결국 현재의 output값을 출력하기 위해 이전의 모든 output을 고려하여 계산을 수행합니다.

 

RNN의 단점

RNN의 장점은 이전의 정보를 이어받아 현재의 작업에 사용가능하다는 점이었습니다.
하지만 이것은 다양한 문제를 가져왔습니다

 

1) Long-term dependency

현재의 input값과 관련된 정보의 거리가 멀다면, 관련된 정보를 학습하는데 어렵다는 단점이 있습니다

 

2) Vanishing/Exploding Gradients Problems

layer의 길이가 길어지거나 현재 time step에서 멀어질수록 기울기가 소실되어 학습이 어려워집니다
이를 위해 미분값이 작은 Sigmoid 활성함수보다 미분값이 큰 tanh 활성함수를 사용합니다

 

3) 거리에 따라 정보 중요도가 반비례하여 감소

모델 구조의 이유로 h_t를 출력할 때 h_t-1을 가장 많이 반영하게 되어, 멀리 떨어진 정보가 퇴색됩니다.

 

 

다음 포스팅에서는 위와 같은 단점을 개선한 LSTM에 대해서 정리해보겠습니다.

 

출처

https://colah.github.io/posts/2015-08-Understanding-LSTMs/

https://hyen4110.tistory.com/24
(정리가 아주 잘되어 있어서 방문해보시는걸 추천합니다!)