Data/머신러닝 & 딥러닝

RNN과 게이팅

빛날희- 2021. 8. 3. 19:52

파이토치로 배우는 자연어처리 책을 참고하여 작성했습니다.


▶ 엘만 RNN의 문제점

엘만 RNN은 그림1과 같이 이전 셀에서의 은닉벡터와 현재 셀의 입력 벡터를 사용해 타임스텝마다 은닉상태 벡터를 계산하는 과정을 가진다. 

그림 1. RNN 구조

따라서 RNN은 이전 정보를 현재에도 반영함으로써 자연어처리에서 시퀀스 데이터인 언어를 이해하는데 유용하게 사용될 수 있다. 그러나 RNN은 다음과 같은 문제점들을 가진다. 

 

 

1. 현재 타임스텝에서 멀리 떨어져 있는 정보를 유지하기 어렵다. 

: RNN에선 시퀀스에 있는 모든 입력벡터를 모델에 넣는다. 즉 모델 학습에 유익한 정보이든 아니든 간에 무조건 다 입력으로 넣고본다. 이런 경우 모델이 주어진 task를 수행하는데 쓸모없는 데이터들의 정보까지 반영되기 때문에 비효율적인 학습이 될 수 있으며 계속해서 순차적으로 입력벡터들과 은닉벡터들을 넣어 계산하다보니 초기 부분에 존재했던 유익한 정보들이 모델에 제대로 반영될 수 없는 문제점이 발생한다. 

 

2. 그레디언트 소실, 폭주 문제가 발생할 수 있다. 

: 어떤 제한 없이 모든 입력벡터와 은닉벡터를 학습에 계속 사용하면서 그레디언트 역시 통제되지 않고 0이나 무한대로 수렴하는 문제점이 생길 수 있다. 

RNN 에서 Relu함수를 사용하거나 그레디언트 클리핑을 사용해 그레디언트 문제를 다룰 순 있지만 대체적으로 RNN에 어떤 조치를 취하기보다는 게이팅을 사용하는 것이 더욱 적합한 해결방법이 될 수 있다. 

 

 

 

▶ 게이팅

게이팅은 셀에 입력 벡터가 얼마나 들어가는지를 제어한다. 즉 모든 입력벡터를 셀에 넣지않고 제한을 가해 일정량만 셀에 입력벡터로 넣는다. 

수식1. 게이팅 기본공식

수식1에서 h는 은닉상태를 말하며 x는 입력을 의미한다. 그리고 F함수는 이전의 은닉벡터와 이번 타임스텝에서의 입력벡터에 RNN 계산을 수행하는 함수이다.

 

수식1과 같이 입력 벡터 x의 양은 람다를 통해 제어가능하다. 즉 람다는 상태 h(t-1)을 업데이트 하는데 입력 x(t)가 얼마나 들어가는지 제어한다. 함수 람다는 0에서 1값을 도출하고 0에 가까울수록 입력값이 셀에 미치는 영향이 없어지고 1에 가까울수록 입력벡터가 셀에 많이 들어간다. 함수 람다는 문맥에 따라 달라지는데 보통은 시그모이드 함수가 람다함수로 사용된다. 

 

 

▷ LSTM

LSTM은 게이팅을 확장하여 입력 벡터의 양을 제어하는 것 뿐만 아니라 이전 은닉상태의 값들을 선택적으로 지우는 데까지 확장한 모델로, task 수행에 유용하다고 생각되는 정보들을 선별하여 갖고 갈 수 있는 모델이다.  

수식2. LSTM 기본 공식

이전 은닉 벡터의 삭제는 이전 은닉벡터에 게이팅함수μ을 곱하여 구현할 수 있다. 게이팅함수μ 역시 0에서 1값을 가진다. 마찬가지로 0이면 이전 은닉벡터들을 가져가지 않고 1이면 모든 은닉벡터들을 가져간다는 의미로 이해할 수 있다.

 

 

 

 

이 외에도 다양한 게이팅 RNN이 존재한다. 

해당 포스팅에선 게이팅 모델 중 가장 간단한 모델에 대한 개념을 가볍게 훑어보았다. 

이렇듯 게이팅을 사용하여 업데이트 과정을 제어해줌으로써 우리는 RNN에서 제기되었던 그레디언트 소실 문제를 어느 정도 해결할 수 있다.