기존의 RNN의 구조를 간단하게 보면서
RNN의 문제점과 함께 해당 문제점을 개선하기 위해 등장한 LSTM을 정리합니다.
기존의 RNN은 어떻게 구성되었는지
RNN 의 구성요소인 cell을 보면 시간축을 따라 반복적으로 데이터가 들어오는데
하나의 cell에서는 t 시점에서의 데이터인 Xt,
이전 층의 hidden 값인 Ht-1 각각에 weight를 걸어
tanh 활성화 함수를 거쳐 t 시점에서의 hidden 값인
Ht를 구성했었습니다.
2024.12.05 - [RNN(Recurrent neural network)] - RNN(Recurrent neural network)이란?
이런 cell들이 여러 개 모여 아래와 같이 Rnn 구조 전체를 구성하게 되는데..
여기서 문제가 되는 point는 바로 x1이라 할 수 있습니다.
현재 마지막 output인 Ht에는 이론상 x1이라는 연산이 참여합니다.
왜냐하면 첫 번째 히든값 인 h1에서 x1이 참여하였고
이것이 다음 layer의 연속적으로 히든 값을 계산하는데 참여하기 때문입니다.
그런데 이런 layer가 길어지면 길어질수록 x1이라는 데이터가 점차 소실되게 됩니다.
이게 RNN의 본질적인 문제 Long-term dependency입니다.
Long-term dependency
초기 입력 데이터가 시간이 지나면서
그 정보가 모델에 잘 전달되지 못하는 상황을 의미합니다.
그래서 이것을 막고자 LSTM이 출현합니다.
장기기억으로 가져갈 것과 단기기억으로 가져갈 것을
애초에 별도로 하면서 앞서본 초기 데이터의 소실을 부분적으로 막자는 겁니다.
그래서 LSTM의 구조를 살펴보면..
하나씩 살펴봅시다.
우선 t-1 시점에서의 히든 값(ht-1)과 t 시점에서의 입력 데이터 x에
weight를 걸어주는 것은 기존의 RNN과 완전히 동일합니다.
이때 기존의 RNN에서 각각의 행렬 size는 아래와 같았습니다.
여기서 중요한 것은 기존의 RNN에서는
위의 행렬 연산 결과로 m×1 size가 출력된다는 것입니다.
LSTM에서는 weight 행렬의 size만 아래와 같이 달리합니다.
즉 기존의 m->4m으로 행의 크기를 4배 키워
위의 행렬 연산 결과로 아래와 같이 4m x 1 size의 행렬을 출력합니다.
이렇게 한 이유는 size가 4배로 커진 행렬에 대해
각각 4개의 활성화 함수를 걸어 나온 결과들의 역할을
달리하여 사용하기 위함입니다.
즉 이렇게 시그모이드 3개 tanh 1개로 4개의 결과를 얻어냅니다.
이때 각각의 출력값을 아래와 같이 목적에 따라 이름을 달리합니다.
그래서 최종적으로 이러한 값들이 어떻게 쓰이는지 살펴봅시다.
시그모이드로 활성화함수를 걸면 어떻게 값이 구성되는지..
이 활성화 함수를 거쳐서 나온 값들은 0에 가깝거나 1이 가까운
0~1 사이에 값을 갖습니다.
따라서 시그모이드의 출력 결과인
forget gate의 출력값은 가령 아래와 같이 출력됩니다.
LSTM에서는 이 forget gate의 값과 cell state인 c와 element 곱셈을 합니다.
이때 cell state란 lstm의 이전 layer에서 장기적으로 기억하고자 하는 값입니다.
이런 cell stae가 아래와 같다고 해봅시다.
이제 c와 forget gate를 element 곱셈을 한다면 아래와 같습니다.
이때 첫 번째 행의 값이 0에 가까워지는 것을 확인할 수 있습니다.
따라서 시그모이드 함수를 통해 출력되는 forget gate는
그 이름에서 알 수 있듯이 어떤 값을 버리고 어떤 값을 선택할지 결정하게 됩니다.
즉 장기기억인 Cell state에서 무엇을 장기기억으로 가져갈 것인지를
결정하는 역할을 하게 됩니다.
이러한 연산을 통해 전체 구조는 어떻게 연산이 이루어져 있는지 살펴봅시다.
앞서본 예시처럼 장기기억으로 넘어온 Ct-1에서 forget gate와 element 곱셈을 통해
어떤 정보를 장기기억으로 넘길지 select 합니다.
Gate gate는 tanh를 활성화 함수로 하였습니다.
즉 RNN에서 하듯 정보를 gradient vanishing 없이 정보를 전달하기 위해
쓰는 활성화 함수로 이 값은 RNN에서의 히든 값과 같은 값입니다.
input gate는 시그모이드에 의한 출력값이기에
이 input gate와 Gate gate도 같은 방식으로 element 곱셈을 통해
Gate gate 중 어떤 정보를 가져갈 건지 select 하게 됩니다.
이렇게 각각 Ct-1과 Gate gate에서 select 한 행렬을 합하여
이 시점에서의 Ct를 결정합니다.
이 Ct 값을 tanh에 넣어 나온 값에 최종 output gate 와 element 곱을 통해
다시 한번 정보를 select 하여 이 시점에서의 히든 값인 ht를 결정합니다.
'RNN(Recurrent neural network)' 카테고리의 다른 글
Seq2seq 및 attention mechanism (4) | 2024.12.09 |
---|---|
Multilayer RNN, biRNN(bidirectional)이란? (0) | 2024.12.08 |
RNN 기반 언어모델 (0) | 2024.12.08 |
RNN(Recurrent neural network)이란? (0) | 2024.12.05 |