이번에는 순환 신경망(Recurrent Neural Network)에 대해서 알아보겠습니다.
1. 순환 신경망이란?(Recurrent Neural Network)
- 순환 신경망은 순서가 있는 데이터를 다루는 아키텍처입니다.
* 예를 들어 음악, 소리, 행동에 관련된 순서를 바탕으로 정리된 데이터나 비디오와 같이 시각적인 정보가 순서가 있게 구성된 데이터 등을 다룰때 활용됩니다.
- 순환 신경망은 시간적 순서 정보인 Temporal Information 뿐만 아니라, 텍스트, 악보와 같이 공간적인 순서 정보인 Spatial Information도 다루는 신경망 구조 입니다.
- 이 구조를 간단히 시각화 및 수식으로 표현해보면 아래와 같습니다. 즉, 기존 상태와 인풋으로 입력된 순서상 다음 상태인 현재 상태를 함수에 같이 넣어서 새로운 상태를 만들어내는 것입니다.
- 위 구조를 풀어서 그려보면 아래와 같이 나오게 됩니다. 즉, 순서상 기존의 정보를 고려해서 새로운 정보가 업데이트 되는 방식을 가지고 있습니다.
- 이를 활용해 기본적인 RNN Network는 아래와 같이 입력을 one 또는 many로 받는지, 그리고 출력이 one 인지 또는 many인지에 따라서 다음과 같이 불리기도 합니다.
* one to one 은 Classification에 활용
* one to many는 이미지 캡셔닝에 활용
* many to one 은 video Classification에 활용
* many to many는 Machine translation 또는 Per-frame video classification에 활용됩니다.
- 이를 언어 모델에 적용했을때, 다음과 같이 다음 단어 예측(Next Word Prediction)에 활용이 될 수 있습니다.
- Weight Sharing
* RNN 계열에서는 에서는 모든 시점에서의 가중치가 동일한 Weight Sharing 방식을 활용하고 있습니다.
* 즉 첫번째 시계열과 두번째 시계열을 결합할 때의 가중치와 마지막 전 시계열과 마지막 시계열을 결합할 때의 가중치가 동일하게 유지되는 것을 말하며, 이를 통해 파라미터수를 절감해 계산 효율이 생긴다는 장점도 있지만, 시간에 따른 정보의 결합이 동일한 방식으로 결합되어 긴 시계열에서 중요한 정보를 장기적으로 기억하는데 한계를 가지기도 합니다.
2. 다양한 RNN 계열 모델들
- 이번에는 Vanilla RNN 모델을 바탕으로 나온 다양한 모델에 대해서 간략히 알아보겠습니다.
1) Backpropagation through Time(BPTT)
* BPTT는 시계열 데이터의 모든 시점에서 은닉상태를 계산한 뒤 이를 다음시점에 전달합니다. 그리고 마지막 시점에서의 예측 오류를 이점 시점으로 역전파하여 각 시점의 가중치에 대해 그레이디언트를 계산하는 방식입니다.
즉, forward 방향으로는 전체 데이터에 대한 순서를 고려한 loss를 계산하고, 이 오차를 역전파할때 역방향의 순서를 고려해서 업데이트 한다는 개념입니다.
* BPTT를 변형해서, 학습 시 모든 시점 대신 일정 구간만을 잘라서 역전파 하는 방법인 Truncated BPTT가 있다. 이때 각 구간의 마지막 hidden state는 다음 구간의 초기 hidden state로 넘겨져 연속성을 유지하는 방법이다.
2) LSTM (Long Short Term Memory)
- LSTM은 RNN의 장기 기억 소실 문제를 해결하기 위해 제안된 구조로, Sequential data에서 중요한 정보를 더 중점적으로 다룰 수 있도록 시계열에 따른 Skip connection과 Gating mechanism을 결합한 형태를 말한다. 이 LSTM은 시점마다 정보의 유입과 제거를 제어하여 중요한 정보는 기억하고 불필요한 정보는 잊도록 학습시킨다.
LSTM에 관해서 자세한 내용은 아래 포스팅을 참조
[딥러닝 with Python] LSTM (Long Short Term Memory)
3) Seq2Seq
- RNN 구조의 발전된 모델 구조로, 인코더와 디코더를 가지고 있는 구조 입니다.
- 해당 모델은 순서를 가진 데이터를 입력으로 받으며, 출력으로 순서를 가진 데이터를 내놓게됩니다.
- 주로 기계어 번역(Machine Translation)에서 많이 활용되며, 아래 그림과 같이 RNN을 활용해 입력된 데이터의 최종 hidden state를 도출해 이를 context vector로 저장하고, 이를 활용해 Decoder에 전달되어 출력 Sequence를 생성하는데 필요한 정보로 사용됩니다.
'딥러닝 with Python' 카테고리의 다른 글
[딥러닝 with Python] 트랜스포머 (Transformer) (4) | 2024.11.05 |
---|---|
[딥러닝 with Python] 어텐션 (Attention Mechanism) (0) | 2024.11.04 |
[딥러닝 with Python] 합성곱 신경망(Convolutional Neural Network) (1) | 2024.11.02 |
[딥러닝 with Python] 인공신경망(Artificial Neural Network / ANN), 데이터 증강(Data Augmentation) (1) | 2024.11.01 |
[개념 정리] Linear probing이란? (0) | 2024.10.31 |
댓글