https://rokart.tistory.com/entry/RNNRecurrent-Neural-Network
RNN(Recurrent Neural Network)
대학원 때 공부했던 인공지능, 데이터 분석 쪽 과목들을 복습하면서 정리해보려고 한다.디테일보다는 큰 개념 위주로 간단하게 다뤄보고자 한다. 0. 개요 첫 번째로 다뤄보고자 하는 주제는 RNN(R
rokart.tistory.com
RNN의 경우 Sequential Data가 길어질 수록 앞쪽에 있던 값들이 제대로 반영되지 않는 구조적인 문제점을 가지고 있었다. 이번에는 이를 개선하기 위해 나온 LSTM과 GRU에 대해서 알아보자.
0. 개요
위 그림은 기본적인 RNN과 LSTM, GRU의 구조적 차이를 보여준다. 기존에는 activation 함수 하나만 거치던게 연결된 구조만 보더라도 꽤 복잡해진 것을 알 수 있다. 개인적으로도 구조를 먼저 봤을때 이해가 어려웠었기 때문에 수식과 관련 개념들부터 차례대로 설명해보겠다.
1. LSTM(Long Short-term Memory cells)
기본적으로 RNN은 위와 같이 hidden state 'h'를 통해 이전 정보들을 축적하는 방식으로 동작한다. 이때 h는 다음과 같은 수식으로 계산된다.
$h_t = \tanh(U x_t + W h_{t-1} + b)$
여기서 $x_t$는 현재 시점의 입력, $h_{t-1}$는 바로 이전 시점의 hidden state이다. 이 둘에 대한 가중치 연산만으로 현재 상태 $h_t$를 계산하기 때문에, 시퀀스가 길어질수록 앞쪽 정보는 점차 희미해지는 문제가 발생하게 됐던 것이다. LSTM은 여기에 "Cell"이라는 개념과 "Gate"라는 개념을 추가시켜 이를 보완하고자 하였다.
Cell & Gate
Cell은 h(hidden state)와 마찬가지로 이전 값을 반영하는 하나의 state이다. 기존의 h가 단순한 가중치 연산과 활성화 함수를 통해 계산되기 때문에, 장기적으로 과거 정보를 유지시키는 데 한계가 있었다. 이를 보완하기 위해 LSTM은 Cell state이라는 추가적인 상태를 도입한 것이다. Cell은 입력, 출력, 이전 상태 등을 보다 정교하게 반영하기 위해 'Gate'라는 구조를 활용한다.
한줄로 요약하면 LSTM은 RNN의 hidden state를 Cell과 Gate 구조를 통해 업그레이드한 버전이라고 할 수 있다.
1. 시점 t의 Cell 현재(후보)값($~C_t$) 계산
~$C_t = tanh(W_C h_{t-1} + U_C x_t + b_C)$
C에 대한 Weight($W_C, U_C$)라는 점만 제외하면 $h_t$ 계산과 크게 다를 것이 없다.
2. forget Gate, input Gate 적용해 최종 $C_t$ 계산
$C_t = f_t * C_{t-1} + i_t *$ ~$C_t$
각 Gate는 0~1 사이의 값으로 Update되며 Cell값을 얼마나 반영할지를 결정한다
- forget gate($f_t$) : 이전 Cell($C_{t-1}$)을 얼마나 반영할지 결정
- input gate($i_t$) : 현재 input으로 부터 만들어진 새로운 Cell (~$C_t$)을 얼마나 반영할지 결정
3. output Gate 적용해 $h_t$값 계산
$h_t = o_t * \tanh(C_t)$
- output gate($f_t$) : $C_t$로 부터 계산된 최종값을 얼마나 반영할지를 결정한다
기존 hidden state는 이전 hidden state와 현재 input값을 그대로 반영하는게 끝이었다면, LSTM에서는 Cell state와 Gate 구조를 통해 이전 정보, 현재 입력 그리고 출력값까지 종합적으로 반영하고 조절할 수 있게 되었다. 다시 한번 아래의 LSTM 구조를 살펴보자. 각 요소들이 연결되어 시각적으로 복잡해 보였던 것 뿐이지 연산 자체는 위에 설명했던 3가지 과정으로 정리된다는 것을 이제 파악할 수 있을 것이다.
2. GRU(Gated Recurrent Units)
GRU는 LSTM을 좀 더 경량화한 버전이라고 보면 된다. hidden state과 Cell state을 하나로 통합하고, 기존 3개의 Gate를 2개로 줄여 효율성을 높였다. 전반적으로 LSTM이 더 좋은 표현력을 갖는 편이지만, 데이터가 적은 환경에서는 GRU가 더 좋은 성능을 보이는 경우도 있다. GRU의 동작 방식도 마찬가지로, 연산 과정을 먼저 살펴보자.
1. 시점 t의 hidden state 현재(후보)값($~h_t$) 계산
$~h_t = tanh(W_h (r_t*h_{t-1}) + U_h x_t + b_h)$
- reset gate ($r_t$) : 이전 hidden state($h_{t-1}$)를 얼마나 반영할지 결정하는 역할을 한다.
이 과정을 통해 GRU는 LSTM처럼 별도의 cell state를 만들지 않고, hidden state의 현재값($~h_t$) 계산 시에도 이전 상태를 반영하는 비율을 조절할 수 있게 된다.
2. update Gate 적용해 $h_t$ 계산
$h_t = (1-z_t)* h_{t-1} +z_t* ~h_t$
- update gate($z_t$) : 계산된 현재값 $~h_t$, 이전 값 $h_{t-1}$을 최종적으로 얼마나 반영할지를 결정하는 역할을 한다.
$(1-z_t)$항을 통해, 이전 state인 $h_{t-1}$의 반영 비율까지 하나의 gate로 조절할 수 있어, 구조와 연산을 효율적으로 통합하였다.
GRU 구조도 한번 다시 확인해보자. 연산과정을 대입하면 해당 구조도 이제 어렵지 않게 이해가 될 것이다.
LSTM과 GRU는 새로운 state와 gate 구조를 도입해, 기존 RNN이 가지고 있던 장기 의존성 문제나 그래디언트 소실 문제를 완화하고자 했다. 하지만 여전히 순차적으로 데이터를 처리하는 RNN의 기본 구조를 유지하기 때문에, 모든 정보를 완벽하게 반영하거나 병렬적으로 처리하는 데에는 한계가 존재했다.
다음에는 이러한 한계를 보완하기 위해 나오게 된 Sequence-to-Sequence(Seq2Seq) 모델과, RNN의 근본적인 구조적 한계점을 극복한 Transformer 모델에 대해서 순차적으로 살펴볼 예정이다.
'대학원 복습 > AI' 카테고리의 다른 글
RNN(Recurrent Neural Network) (0) | 2025.07.04 |
---|