안녕하세요! 제이덥입니다. 최근에 기술 면접을 준비하며, 기초적인 내용부터 하나씩 정리하고 있는데요. 이전 글에서는 Vanilla RNN이 겪는 Long-Term Dependency 문제를 다뤘는데요. 이번 포스팅에서는 이를 해결하기 위해 등장한 LSTM과 GRU의 탄생 배경과 작동 원리를 정리해보겠습니다.
1️⃣ RNN의 한계(Long-Term Dependency Problem)
지난 포스팅에서 Vanila RNN에서 Long-Term Dependency 문제에 대해서 다뤘습니다. 이를 간단히 설명하면 학습에 일어나는 Gradient Vanishing/Exploding 문제로 인해 상대적으로 오래된 시점의 정보가 유실되는 문제를 말합니다. 이를 해결하기 위해 Truncated BPTT를 이용해 개선했으나, 여전히 장기적인 정보를 저장하는데 한계가 있어서 근본적인 문제 해결을 위해서는 모델의 개선이 필요했습니다. 따라서 Cell State와 hidden State를 활용한 LSTM과 이를 경량화한 GRU가 등장하게 되었습니다.
2️⃣ LSTM(Long Short-Term Memory)
LSTM(Long Short Term Memory)는 Vanilla RNN이 갖고 있는 Gradient Vanishing/Exploding 문제를 해결하고 타임 스텝이 먼 경우에도 필요로 하는 정보를 보다 효과적으로 처리하고 학습할 수 있도록 하는 Long-Term Dependency를 개선한 모델입니다. LSTM의 코어 아이디어는 단기 기억으로 저장하고 필요에 따라 꺼내 사용함으로 더 오래 기억할 수 있도록 개선하는 것입니다. 즉, 단기 기억을 활용하여 장기 기억으로 변환을 하며 Long Short Term Memory라고 이름이 붙은 이유이죠. 이를 위해 Cell State, Hidden State로 구현하는데, Cell state에는 핵심 정보들을 저장하고, 필요할 때마다 Hidden state를 가공해 각 Time Step에 필요한 정보만 노출하여 계산을 하여 출력값을 결정하게 됩니다. 그리고 이러한 연산을 하기 위해 총 4개의 Gate(Forget Gate, Input Gate, Gate gate, Output Gate)를 이용합니다. 역할을 식을 통해 정리해보면
위 그림을 살펴보면 input으로 Xt, Ht - 1이 들어오게 되고, 이를 가중치 벡터인 W를 곱해준 후 각각 Gate에 따라 sigmoid나 tanh로 연산해줍니다. 그리고 각 게이트에 대해서 설명하면
- i (Input gate): Cell에 값을 쓸지 말지 결정하는 게이트입니다. 즉, 들어오는 input에 대해서 마지막에 sigmoid 함수를 거쳐 0-1 사이로 값을 조정해준 뒤, cell state, hidden state로 전달합니다.
- 표현식 : sigmoid(W(Xt, Ht - 1))
- f (Forget gate): 정보를 어느정도로 지울지 sigmoid 함수를 통해 0~1사이의 값으로 조정합니다.
- 표현식: sigmoid(W(Xt, Ht - 1))
- o (Output gate): Cell 정보를 hidden state에서 얼마나 활용해야 할지를 0~1사이 값으로 조정합니다.
- 표현식 : sigmoid(W(Xt, Ht - 1))
- g (Gate gate): 얼마나 많이 Cell State에 반영해야할 지 tanh함수를 통해 -1~ 1 사이의 값으로 조정합니다.
- 표현식 : tanh(W(Xt,Ht - 1))
3️⃣ GRU(Gated Recurrent Unit)
GRU는 LSTM의 모델 구조를 경량화해서 적은 메모리 요구량과 그리고 빠른 계산 시간이 가능하도록 만든 모델입니다. LSTM과 차별점은 Cell State, Hidden State를 나누지 않고, 일원화된 hidden state를 사용한다는 점입니다. 그리고 forget 게이트의 역할은 (1-input gate)로 사용한다는 점, 4개의 Gate가 아닌 Reset Gate, Update Gate만 사용한다는 점, Ht-1을 Ct와 같이 사용한다는 점이 가장 큰 차이점입니다.
출처 :
- 부스트코스 강의 : 자연어 처리의 모든 것 - Long Short Term Memory(LSTM)
- 2017 CS231n - Lecture 10: Recurrent Neural Networks
- Andrej Kapathy blog - The Unreasonable Effectiveness of Recurrent Neural Networks
- Dive into Deep Learning - LSTM
'NLP' 카테고리의 다른 글
[NLP] Recurrent Neural Network (Vanilla RNN) (0) | 2025.01.19 |
---|---|
[NLP] Backpropagation through time(BPTT)의 방법과 Long-Term Dependency 문제 (2) | 2025.01.05 |
[NLP] Word Embedding (Word2Vec, Glove) (0) | 2024.12.22 |
[NLP] Bags of Words & Naive Bayes Classifier for Document Classification (2) | 2024.11.10 |
HuggingFace 모델에 RAG 적용하기(Feat. langchain) (0) | 2024.03.17 |