Coding/TIL & 배운것들

순환 신경망 (RNN)

코딩짜는 머글 2024. 11. 1. 19:58

순환 신경망이란?

시계열 데이터나 순차적인 데이터를 처리하기 위해 설계된 신경망이다. sequence 데이터를 다루는데 최적화 되어있다.(데이터가 순서를 이루고 있는 경우 작동이 잘됨) RNN은 이전 시간 단계의 정보를 현재 시간 단계로 전달해, 시퀀스 데이터의 패턴을 학습할 수 있다.

 

 

동작 원리 

  • 순환 구조 : RNN은 반복적인 구조로 구성되어, 현재 입력과 이전 단계의 은닉 상태(Hidden State)를 함께 고려해 출력을 생성한다. 이 은닉 상태는 다음 단계로 전달되어 이전 입력에 대한 정보를 유지하게 된다.
  • 동작 원리 : 네트워크 내에서 모든 단계가 동일한 가중치 행렬을 사용하여 계산을 수행하여 시퀀스의 패턴을 학습한다. 순전파(Forward Propagation)와 역전파(Backpropagation Through Time, BPTT)를 통해 가중치를 학습한다.
한계

기울기 소실/폭발 문제 : 시퀀스가 길어질수록 역전파 시 기울기가 소실되거나 폭발하여 학습이 어려워진다.

긴 시퀀스 학습의 어려움 : RNN은 장기 의존성을 학습하기 어려워, 시퀀스가 길어지면 중요한 정보를 잃는 경우가 많다.

 

변형모델

위의 한계들을 해결하기 위해 다양한 변형 모델들이 개발되었다.

 

LSTM (Long Short-Term Memory) : 입력 게이트, 망각 게이트, 출력 게이트를 통해 정보를 제어하여 과거 정보를 오래 유지 가능하다. 게이트 덕분에 중요한 정보는 장기적 유지, 필요 없는 정보는 버림으로 장기 의존성 문제를 효과적으로 해결하였다.

 

GRU (Gated Recurrent Unit) : LSTM보다 구조가 간단하다. 업데이트 게이트와 리셋 게이트를 사용해 정보를 제어한다. 연산이 더 단순해 연산량이 적고, 빠르게 학습이 가능하다. 

업데이트 게이트 : 현재 상태에서 어떤 정보를 기억할지 결정하는 게이트.
리셋 게이트 : 이전 상태에서 어떤 정보를 잊을지 결정하는 게이트. 리셋 게이트가 0에 가까워지면, 이전 상태의 정보를 무시하고 새 입력만으로 현재 상태를 결정한다.