2021.05.20 - [Study/NLP] - [NLP/자연어처리] 순환신경망 (Recurrent Neural Network, RNN)
이전 글에서 이야기한 순환신경망 RNN은 가장 단순한 형태의 RNN이라고 하여 바닐라 RNN이라고도 한다. 이번 글에서는 바닐라 RNN의 한계에 대해서 설명하고 이를 극복하기 위한 LSTM과 GRU에 대해서 설명해보고자 한다.
1. RNN의 한계
RNN은 출력결과가 이전의 계산 결과에 의존한다. 그러나 짧은 글에 대해서는 효과를 보이지만 시점(time step)이 점점 길어질수록 앞의 정보가 희미해져 뒤에까지 충분히 전달되지 못하는 현상이 발생한다. 어쩌면 가장 중요한 정보가 시점의 앞쪽에 위치할 수 있는데, 그에 대해 충분한 기억이 되지 않으면 모델의 성능이 좋지 않게 된다. 이런 문제를 장기 의존성 문제라고 한다.
위 그림과 같이 RNN은 hidden state의 값과 입력값을 받아 tanh함수를 적용하고 output을 내뱉게 된다. 이와 비교해서 LSTM과 GRU는 어떻게 다른지 설명해보고자 한다.
2. LSTM(Long Short-Term Memory)
위의 그림은 LSTM의 내부 구조를 보여준 그림이다. LSTM은 은닉층의 메모리 셀에 입력 게이트, 망각 게이트, 출력 게이트를 추가하여 불필요한 기억을 지우고, 기억해야할 것들을 정한다. RNN에 비해 cell state라는 셀 상태 $C_t$를 추가하였다. LSTM은 RNN과 비교하여 긴 시퀀스의 입력을 처리하는데 탁월한 성능을 보인다.
LSTM에서 hidden state와 cell state를 구하기 위해 새로 추가된 삭제 게이트, 입력 게이트, 출력 게이트라고 부르는 3개의 게이트를 사용한다. 그 게이트를 통과해 0과 1사이의 값을 나오게 해서 그 값들로 게이트를 조절한다. 이제부터 각 게이트에 대해 살펴보도록 하자.
2.1 입력 게이트
입력 게이트는 현재 정보를 기억하기 위한 게이트이다. 현재 시점 t의 $x$값과 입력게이트로 이어지는 가중치$W_{xi}$를 곱한 값과 이전 시점 t-1의 은닉 상태가 입력 게이트로 이루어지는 $W_{hi}$를 곱한 값을 더하여 시그모이드 함수를 지난다. 이를 $i_t$라고 한다. 현재 시점 t의 $x$값과 입력게이트로 이어지는 가중치$W_{xg}$를 곱한 값과 이전 시점 t-1의 은닉 상태가 입력 게이트로 이루어지는 $W_{hg}$를 곱한 값을 더해서 하이퍼볼릭탄젠트 함수를 지난 함수를 $g_t$($\tilde{C_t}$)라고 부른다. 이를 수식으로 나타내면 아래와 같다.
- $i_t = \sigma(W_{xi}x_t + W_{hi}h_{t-1} + b_i)$
- $g_t = tanh(W_{xg}x_t + W_{hg}h_{t-1} + b_g)$
시그모이드 함수를 지나 0과 1 사이의 값과 하이퍼볼릭탄젠트 함수를 지나-1과 1 사이의 값 두개가 나오는데, 이 두개의 값을 가지고 기억할 정보의 양을 정한다.
2.2 삭제 게이트
삭제 게이트는 기억을 삭제하기 위한 게이트이다. 현재 시점 t의 $x$값과 이전 시점 t-1의 은닉 상태가 시그모이드 함수를 지나게 된다. 시그모이드 함수를 지나면 0과 1 사이의 값이 나오게 되는데 이 값이 곧 삭제 과정을 거친 정보의 양이다. 0에 가까울수록 정보가 많이 삭제되어 남아있는 양이 적고, 1에 가까울수록 정보를 온전히 기억한 것이다. 수식으로는 아래와 같다.
- $f_t = tanh(W_{xf}x_t + W_{hf}h_{t-1} + b_f)$
2.3 cell state(셀 상태, 장기상태)
셀 상태 $C_t$를 LSTM에서는 장기상태라고 부르기도 한다.
입력 게이트에서 구한 $i_t, g_t$이 두개의 값에 대해서 원소별 곱을 진행한다. 내적이 아님을 주의한다. 다시 말해서, 같은 크기의 두 행렬을 같은 위치의 성분끼리 곱하는 것이다. 이것이 기억할 값들이다.
삭제게이트에서 구한 $f_t$는 이전의 셀 상태와 원소별 곱을 진행한다. 시그모이드 값을 통해서 얼마나 기억을 삭제할지 정한다.
이 두개의 값을 더한 것이 현재 시점 t 의 셀 상태라고 말하며, 이 값은 다음 t+1시점의 LSTM 셀로 넘겨진다.
만일 삭제 게이트의 출력값인 $f_t$가 0이 된다면, 이전 시점의 셀 상태값은 현재 시점의 셀 상태값을 결정하기 위한 영향력이 0이 되면서 입력게이트의 결과만이 현재 시점의 셀 상태값 $C_t$를 결정한다. 반대로 입력 게이트의 값이 0이면 현재 시점의 상태값인 $C_t$는 오직 이전 시점의 셀 상태값에만 의존한다.
2.4 출력 게이트와 은닉 상태(단기 상태)
출력 게이트트 현재시점 t의 $x$값과 이전 시점 t-1의 hidden state가 시그모이드 함수를 지난 값이다. 해당 값은 현재 시점 t의 은닉 상태를 결정하는 일에 쓰인다.
여기서 은닉 상태는 단기 상태라고 하기도 한다. 장기상태의 값에 하이퍼볼릭탄젠트 함수를 적용하여 -1에서 1사이의 값과 출력게이트의 값과 원소별 곱이 이루어지면서 값이 걸러지는 효과가 발생한 은닉상태가 된다. 이 단기상태의 값은 출력층으로 향하기도 한다. 이를 수식으로 표현하면 아래와 같다.
- $o_t =\sigma(W_{xo}x_t + W_{ho}h_{t-1} + b_o)$
- $h_t = o_t \circ tanh(c_t)$
3. 게이트 순환 유닛(Gated Recurrent Unit, GRU)
GRU(Gated Recurrent Unit)는 2014년 조경현 교수님이 제안한 방법으로, LSTM의 장기 의존성 문제에 대한 해결책과 함께 은닉 상태를 업데이트하는 계산을 줄였다. GRU성능은 LSTM과 유사하면서 LSTM의 복잡도는 감소했다.
LSTM과 GRU의 성능은 비슷하기도 하고 구조 또한 비슷해서 둘 중 어느것이 더 낫다 라고 말할수는 없다. 그런데 계산할 가중치가 많지 않다는 것은 확실한 이점이라는 것이다. GRU는 reset gate, update gate 이렇게 두개가 있다. 앞으로 GRU의 작동원리에 대해 조금 더 자세히 알아보도록 하자.
3.1 Reset Gate
Reset gate는 과거의 정보를 적당히 리셋시키는 것이 목적으로, LSTM과 동일하게 t시점의 입력값과 t-1시점의 은닉 상태의 값을 입력받은 후 시그모이드 함수를 적용한 다음 은닉 상태에 원소별 곱을 적용한다.
$$r_t =\sigma(W_{xr}x_t + W_{hr}h_{t-1} + b_r)$$
3.2 Update Gate
update gate는 LSTM의 forget gate와 input gate를 합쳐놓은 느낌으로, 과거와 현재의 정보의 최신화 비율을 결정한다. update gate에서는 t시점의 입력값과 t-1시점의 은닉 상태의 값을 입력받은 후 시그모이드 함수를 적용한 값으로 얼마나 기억할지를 정하고, 1에서 뺀 값을 직전 시점의 은닉 상태의 정보에 원소별 곱을 진행한다. 이부분이 LSTM의 입력게이트와 삭제게이트와 유사하다.
- $u_t =\sigma(W_{xu}x_t + W_{hu}h_{t-1} + b_u)$
- $1-u_t$
3.3 Candidate
현 시점의 정보 후보군을 계산하는 단계를 말한다. 리셋 게이트를 통해 나온 결과와 t시점의 입력 게이트에 가중치를 곱해 더해준다.
$$\tilde{h_t} =tanh(W_{xh}x_t + W_{hr}h_{t-1}*r_t + b_u)$$
3.4 은닉층 계산
마지막으로 update 결과와 candidate결과를 결합하여 t시점의 은닉층을 계산한다.
$$h_t =(1-u_t)\circ h_{t-1} + u_t\circ \tilde{h_t}$$
4. 결론
LSTM과 GRU에 대해서 정리를 마쳤다. 앞에서도 언급했지만 무엇이 더 낫다라고 단정지어서 말할 수 없다. 데이터 양이 적을 때는 매게 변수의 양이 적은 GRU가 조금 더 낫고, 데이터 양이 많으면 LSTM이 더 낫다고 알려져 있다 .LSTM이 먼저 나온 구조라서 GRU보다 LSTM에 대한 사례들이 더 많이 있다. 실제로는 둘다 해서 더 좋은 것으로 선택하거나 하나만 하는게 더 좋을 것 같다.
'Study > NLP' 카테고리의 다른 글
[NLP/자연어처리] Seq2Seq(2) - 어텐션 매커니즘(Attention Mechanism) (0) | 2021.05.24 |
---|---|
[NLP/자연어처리] Seq2Seq(1) - RNN을 이용한 시퀀스 투 시퀀스 (0) | 2021.05.24 |
[NLP/자연어처리] 순환신경망 (Recurrent Neural Network, RNN) (0) | 2021.05.20 |
[NLP/자연어처리] 단어의 표현(2) - 카운트 기반의 단어 표현 (0) | 2021.05.18 |
[NLP/자연어처리] 단어의 표현(1) - 원핫인코딩과 워드투벡터(Word2Vec) (0) | 2021.05.14 |