기존의 RNN이 가지는 단점을 완화하기 위한 모델인
multilayer RNN 과 biRNN이 무엇인지 살펴봅시다.
우선 기존의 RNN이 가지는 단점이 무엇이었는지.
long term dependency 문제가 있었습니다.
-(참고)
2024.12.07 - [RNN(Recurrent neural network)] - LSTM(Long Short Term Memory)
즉 초기의 입력값으로 집어넣은 값이 뒤쪽으로 연산이 진행될수록
그 정보가 모델의 최종 output에 잘 전달이 되지 않는 문제를 말합니다.
그래서 이 문제를 해결하기 위한 방법으로
multilayer RNN부터 살펴봅시다.
multilayer RNN
기존의 RNN은 어떤 구조였는지..
위에서 보는 many to many RNN은 입력 데이터가 주어지면
이전 cell에서의 hidden 값과 현재 입력받은 데이터 x를 input으로 받아
weight를 걸어 현재 시점에서의 hidden 값을 계산하고
이 hidden 값에 weight를 걸어 각 cell에서의 output을 출력하였습니다
이 과정을 요약하자면 아래 수식과 같았습니다.
이때 mutilayer Rnn에서는
각 시점에서 나오는 출력값을 그대로 쓰는 게 아니라
독립적인 RNN 모델의 input으로 넣습니다.
이 과정을 자세히 살펴보면
이와 같이 각 시점에서 나온 output들을
또 다른 독립적인 RNN에 input data로 사용합니다.
여기서 계산된 각 시점에서의 output을 계속해서 같은 방식으로
독립적인 RNN에 input data로 사용합니다.
최종적으로 mutilayer RNN은 아래와 같이 구성되어 있습니다.
왜 이렇게 하는지에 대해
우선 RNN은 각각의 독립적인 모델에서 같은 weight를 씁니다.
이렇게 하는 이유는 시간에 흐름에 따라 같은 기준으로 동일한 특징을
추출하기 위함이었습니다.
여기서 중요한 것은 RNN 모델을 하나만 쓰면 weight가 같기 때문에.
어느 시점에서의 무엇을 중요시하는지가 계속해서 같습니다.
다시 말해 RNN에서 사용하는 현재 weight가
초기에 x1이 들어올 때 시점에서의 x1 데이터를 중요하지 않게 처리하는 weight라면
원래도 RNN 순방향 문제로 발생하는 long term dependency 문제가 발생하는데
x1을 덜 중요하게 처리하는 weight로는 x1이라는 데이터가 더 빠르게 없어지게 됩니다.
그래서 이러한 문제를 해결하기 위해
어느 시점에서 무엇을 중요시하는지 결정하는 weight를 다양하게 쓰는 겁니다.
즉 독립적인 RNN을 mutilayer로 여러 개 쓰면
각각의 RNN의 weight마다 중요하게 처리하는 시점이 서로 다르기 때문에
어느 정도 long term dependency 문제를 해결할 수 있습니다.
다른 이유도 있습니다.
예시로 x1 데이터 입장에서
x1이라는 데이터는 이 자체로 비선형적 data일 수 있습니다.
즉 애초에 분류 자체가 불가능한 data 일 수 있다는 거죠.
그런데 mlp(multi-layer-perceptron)에서와 동일한 방법으로
이러한 비선형 데이터는 구성하는 모델의 layer를 쌓으면 쌓을수록
비선형을 풀 수 있게 됩니다. (자세한 이유는 참고)
- 참고 2024.10.15 - [인공신경망] - MLP(multi-layer perceptron)
즉 RNN 모델을 하나만 쓰는 경우에는 입력 데이터로 들어가는 x1 자체가
비선형적이면 이 비선형을 절대 풀 수가 없는데
지금처럼 multi layer를 사용하면
x1과 같은 input data 자체의 비선형을 풀 수가 있게 됩니다.
Birnn
계속해서 출현 배경은 RNN의 long term dependency 문제를 해결하기 위함입니다.
애초에 long term dependency의 발생 원인을 생각해 봅시다.
"초기에 넣는 input date가 뒤로 갈수록 계속해서 희미해진다."
즉 순방향 문제로 한쪽 방향으로만 연산을 진행하니 뒤쪽으로 갈수록 초깃값이
소실되는 게 문제였습니다.
그래서 반대 방향으로 RNN 연산을 진행하는 독립적인 RNN 하나를 더 쓰자는 것이
Birnn입니다.
구조는 아래와 같습니다.
위 구조를 살펴보면 독립적인 RNN 모델을 2개 사용합니다
이때 하나의 RNN에는 기존의 방식대로 시간 축을 따라 time-series data를 넣습니다.
다른 하나의 RNN에서는 시간 축을 따라 data를 역방향으로 넣습니다.
결과로 각각에 모델에서 나온 각각의 output을
concat 해서 최종 output으로 구현합니다.
즉 초기 데이터의 소실 위험이 있는 RNN의 결과와
data를 반대 방향으로 넣어 초기 데이터를 가장 강하게 반영한 RNN의 결과를
concat하여 최종 output을 사용하기에
dependency 문제를 어느 정도 해결할 수 있습니다.
그래서 결과적으로 독립적인 RNN에서 나온 각각의 히든 값을
concat 하자는 것이 Birnn입니다.
'RNN(Recurrent neural network)' 카테고리의 다른 글
Seq2seq 및 attention mechanism (4) | 2024.12.09 |
---|---|
RNN 기반 언어모델 (0) | 2024.12.08 |
LSTM(Long Short Term Memory) (0) | 2024.12.07 |
RNN(Recurrent neural network)이란? (0) | 2024.12.05 |