본 글은 카이스트 최윤재 교수님의 Programming for AI (AI504, Fall 2020), Class 9: Recurrent Neural Networks와 WikiDocs의 딥 러닝을 이용한 자연어 처리 입문을 바탕으로 정리한 글입니다.
장단기 메모리 (Long Short-Term Memory, LSTM)
바닐라 RNN 이후 바닐라 RNN의 한계를 극복하기 위한 다양한 RNN의 변형이 나왔고, LSTM도 그중 하나입니다.
LSTM은 RNN의 특별한 한 종류로, 긴 의존 기간을 필요로 하는 학습을 수행할 능력을 갖고 있습니다.
Vanilla RNN의 한계
앞 챕터에서 바닐라 RNN은 출력 결과가 이전의 계산 결과에 의존한다는 것을 언급한 바 있습니다.
하지만 바닐라 RNN은 비교적 짧은 시퀀스(sequence)에 대해서만 효과를 보이는 단점이 있습니다.
- 바닐라 RNN의 시점(time step)이 길어질수록 앞의 정보가 뒤로 충분히 전달되지 못하는 현상이 발생
- 위의 그림은 첫번째 입력값인 \(x_1\)의 정보량을 짙은 남색으로 표현했을 때, 색이 점차 얕아지는 것으로 시점이 지날수록 \(x_1\)의 정보량이 손실되어가는 과정을 표현
- 뒤로 갈수록 \(x_1\)의 정보량은 손실되고, 시점이 충분히 긴 상황에서는 \(x_1\)의 전체 정보에 대한 영향력은 거의 의미가 없을 수도 있습니다.
가장 중요한 정보가 시점의 앞 쪽에 위치한 상황에 RNN이 충분한 기억력을 가지고 있지 못한다면 다음 단어를 엉뚱하게 예측합니다.
즉, 필요한 정보를 얻기 위한 시간 격차가 커지게 되면 RNN은 학습하는 정보를 계속 이어나가기 힘들어합니다.
이를 장기 의존성 문제(the problem of Long-Term Dependencies)라고 합니다.
이와 관련된 기울기 소실 문제(Vanishing gradient)도 존재합니다.
Vanilla RNN의 내부
$$h_{t} = tanh(W_{x}x_{t} + W_{h}h_{t−1} + b)$$
바닐라 RNN은 \(x_t\)와 \(h_{t-1}\)이라는 두 개의 입력이 각각의 가중치와 곱해져서 메모리 셀의 입력이 됩니다.
그리고 이를 하이퍼볼릭탄젠트 함수의 입력으로 사용하고 이 값은 은닉층의 출력인 은닉 상태가 됩니다.
LSTM (Long Short-Term Memory)
LSTM은 은닉층의 메모리 셀에 입력 게이트, 삭제 게이트, 출력 게이트를 추가하여 불필요한 기억을 지우고, 기억해야 할 것들을 정합니다.
LSTM은 은닉 상태(hidden state)를 계산하는 식이 전통적인 RNN보다 조금 더 복잡해졌으며 셀 상태(cell state)라는 값을 추가하였습니다.
위의 그림에서는 t시점의 셀 상태를 \(C_t\)로 표현했습니다.
LSTM은 RNN과 비교하여 긴 시퀀스의 입력을 처리하는데 탁월한 성능을 보입니다.
셀 상태 또한 이전에 배운 은닉 상태처럼 이전 시점의 셀 상태가 다음 시점의 셀 상태를 구하기 위한 입력으로서 사용됩니다.
은닉 상태값과 셀 상태 값을 구하기 위해서 새로 추가된 3개의 게이트를 사용합니다.
각 게이트는 입력 게이트, 삭제 게이트, 출력 게이트라고 부르며 이 3개의 게이트에는 공통적으로 시그모이드 함수가 존재합니다.
시그모이드 함수를 지나면 0과 1 사이의 값이 나오게 되는데 이 값들을 가지고 게이트를 조절합니다.
- 이하 식에서 σ는 시그모이드 함수를 의미
- 이하 식에서 tanh는 하이퍼볼릭탄젠트 함수를 의미
- \(x_t\)와 함께 각 게이트에서 사용되는 4개의 가중치 $$W_{xi},W_{xg},W_{xf},W_{xo}$$
- \(h_{t−1}\)와 함께 각 게이트에서 사용되는 4개의 가중치 $$W_{hi},W_{hg},W_{hf},W_{ho}$$
- 각 게이트에서 사용되는 4개의 편향 $$b_i,b_g,b_f,b_o$$
입력 게이트 (Input gate)
$$i_{t}=σ(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})$$
- 두 식은 가중치와 편향만 다름
입력 게이트는 현재 정보를 기억하기 위한 게이트입니다.
즉, 앞으로 들어오는 새로운 정보 중 어떤 것을 cell state에 저장할 것인지를 정합니다.
먼저, "input gate layer"라고 불리는 sigmoid layer가 어떤 값을 업데이트할지 정합니다.
그다음에 tanh layer가 새로운 후보 값들인 \(g_t\)라는 vector를 만들고, cell state에 더할 준비를 합니다.
\(i_t\)는 시그모이드 함수를 지나 0과 1 사이의 값, \(g_t\)는 하이퍼볼릭탄젠트 함수를 지나 -1과 1 사이의 값 두 개가 나오게 됩니다.
이렇게 두 단계에서 나온 정보를 합쳐서 state를 업데이트할 재료를 만들게 됩니다.
삭제 게이트 (Forget gate)
$$f_{t}=σ(W_{xf}x_{t}+W_{hf}h_{t-1}+b_{f})$$
삭제 게이트는 기억을 삭제하기 위한 게이트입니다.
즉, cell state로부터 어떤 정보를 버릴 것인지를 정하는 것입니다.
시그모이드 함수를 지나면 0과 1 사이의 값이 나오게 되는데, 이 값이 곧 삭제 과정을 거친 정보의 양입니다.
0에 가까울수록 정보가 많이 삭제된 것이고 ("죄다 갖다 버려라")
1에 가까울수록 정보를 온전히 기억한 것입니다. ("모든 정보를 보존해라")
이를 가지고 셀 상태를 구하게 되는데, 구체적으로는 아래의 셀 상태 수식을 보면 됩니다.
셀 상태 (Cell State)
$$C_{t}=f_{t}∘C_{t-1}+i_{t}∘g_{t}$$
셀 상태를 LSTM에서는 장기 상태라고 부르기도 합니다.
입력 게이트에서 구한 \(i_t\), \(g_t\) 이 두 개의 값에 대해서 원소별 곱(entrywise product)을 진행합니다.
이것이 이번에 선택된 기억할 값입니다.
- 원소별 곱 : 같은 크기의 두 행렬이 있을 때 같은 위치의 성분끼리 곱하는 것
- 여기서는 식으로 ∘ 로 표현합니다.
입력 게이트에서 선택된 기억을 삭제 게이트의 결괏값과 더합니다.
이 값을 현재 시점 t의 셀 상태라고 하며, 이 값은 다음 t+1 시점의 LSTM 셀로 넘겨집니다.
삭제 게이트와 입력 게이트의 영향력을 이해해봅시다.
만약 삭제 게이트의 출력 값인 \(f_t\)가 0이 된다면, 이전 시점의 셀 상태 값인 \(C_{t-1}\)은 현재 시점의 셀 상태 값을 결정하기 위한 영향력이 0이 되면서, 오직 입력 게이트의 결과만이 현재 시점의 셀 상태값 \(C_t\)을 결정할 수 있습니다.
이는 삭제 게이트가 완전히 닫히고 입력 게이트를 연 상태를 의미합니다.
반대로 입력 게이트의 \(i_t\)값을 0이라고 한다면, 현재 시점의 셀 상태 값 \(C_t\)는 오직 이전 시점의 셀 상태값 \(C_{t-1}\)의 값에만 의존합니다.
이는 입력 게이트를 완전히 닫고 삭제 게이트만을 연 상태를 의미합니다.
결과적으로 삭제 게이트는 이전 시점의 입력을 얼마나 반영할지를 의미하고,
입력 게이트는 현재 시점의 입력을 얼마나 반영할지를 결정합니다.
출력 게이트와 은닉 상태(Output gate)
$$o_{t}=σ(W_{xo}x_{t}+W_{ho}h_{t-1}+b_{o})$$
$$h_{t}=o_{t}∘tanh(c_{t})$$
가장 먼저, sigmoid layer에 input 데이터를 태워서 cell state의 어느 부분을 output으로 내보낼지를 정합니다.
그러고 나서 cell state를 tanh layer에 태워서 -1과 1 사이의 값을 받은 뒤에 방금 전에 계산한 sigmoid gate의 output과 곱해줍니다.
그렇게 하면 우리가 output으로 보내고자 하는 부분만 내보낼 수 있게 됩니다.
'Data Science > NLP' 카테고리의 다른 글
[NLP] NLP briefing (0) | 2022.05.04 |
---|---|
[NLP] NLP Introduction (0) | 2022.05.03 |
[NLP] Attention Mechanism (0) | 2022.03.28 |
[NLP] GRU (Gated Recurrent Unit) (0) | 2022.03.28 |
[NLP] RNN (Recurrent Neural Network) (0) | 2022.03.28 |
댓글