기존에 설명한 RNN(순환 신경망) 은 음성인식, 번역, 필기체 인식 등 다양한 분야에서 사용되고 있다.
RNN 구조의 큰 특징은 과거의 정보들을 은닉 층(Hidden Layer)에 저장 하는것이다.
우리는 RNN을 통해서 이전의 정보를 현재의 문제에 해결하는데 주로 쓰이고 있다.
하지만 예측하는 데이터의 갭이 커질경우 점점 더 예측하기 힘들어 질뿐더러, 이전에 틀린 예측값을 사용한다면 앞으로의 예측값들은 오차의 범위가 더 늘어난다.
또한, 장기의존성 문제(The Problems of Long-term Dependencies)로 은닉층의 과거의 정보가 마지막까지 전달되지 못하는 현상이 발생한다. 즉, 1보다 작은 값이 반복적으로 곱해지기 때문에 뒷단에 갈 수록 앞의 정보를 충분히 전달할 수 없고, tanh의 함수의 기울기가 0에 가깝거나 굉장히 큰 값이 발생할 수 있어, 기울기 소실 혹은 폭팔의 문제를 일으킨다.
RNN에서는 장기의존성 문제를 해결하기 힘들다.
그래서 등장한것이 LSTM(Long Short-Term Memory) 이다.
LSTM도 RNN과 같은 체인의 방식으로 구성되어있다.
대신 반복되는 모듈이 다른 구조로 되어있다.
분홍색 원은 점단위의 연산을 표현한다.
노란색 박스는 뉴럴 네트워크의 단위이다.
LSTM의 핵심 아이디어
LSTMs의 핵심은 셀 스테이트이다.
다이어그램 상단에 위치한 수평선이 셀 스테이트이며, 마이너한 선형 연산을 거쳐 전체 체인을 관통한다.
이 구조로 인해 정보는 큰 변함 없이 계속적으로 다음 단계에 전달하게 된다.
첫번째로, 셀 스테이트에서 어떤 값을 버릴지 선택하는 과정이다. 이 결정은 'Forget gate layer' 혹은 '망각편향'이라고 불리는 시그모이드 레이어로 만들어진다.
이 게이트는 0에서 1사이의 출력값을 가지는 ht-1과 xt를 입력값으로 받는다.
출력이 0 일경우 예측에 영향을 주지 않도록 버리며 1일 경우 의미있는 값이라 판단해 셀 스테이트 값에 넣어주는 형식이다.
새로운 정보가 셀 스테이트에 저장될지의 여부를 결정하는 단계이다. 이는 두 단계로 이루어지는데
첫번째로, 'Input gate layer'라고 불리는 시그모이드 레이어는 어떤값을 업데이트할지 결정하는 역할을한다.
두번째로, tanh 레이어는 셀 스테이트에 더해질 수 있는 새로운 값을 만들어낸다.
그 다음, 이러한 두 가지 값을 합쳐서 다음 단계로 넘어간다.
오래된 셀 스테이트(Ct-1)를 새로운 스테이트인 (Ct)로 업데이트 한다.
오래된 셀 스테이트를 ft로 곱한다.
it ∗ Ct 를 한후 그 값을 셀 스테이트에 더한다.
(이전의 주어의 성별을 버리고 새로운 주어의 성별을 기억하는 부분)
마지막으로, 어떤 출력값을 출력할지 결정해야 한다.
시그모이드 레이어를 돌려 어떤 값을 출력할지 결정한다.
그 다음, 셀 스테이트를 tanh 함수를 거쳐서 -1과 1 사이의 값을 뽑아낸다.
LSTM의 변칙 패턴
1번째 변칙) Gers & Schmidhuber 이 소개한 유명한 LSTM 변칙 패턴이다.
이 버전은 'peephole connections' 을 가지고 있다.
이는 게이트(the gate)가 셀 스테이트 자체를 입력값으로 받는 방식이다.
2번째 변칙) 또 다른 변칙 패턴은 Forget gate와 Input gate를 합친 버전이다.
어떤 값을 잊어버리고 더할지 과정을 따로 수행하는것이 아니라, 동시에 결정하는 방식이다.
이 때 새로운 값이 제공될 때만 이전 값을 잊어버리게 된다.
3번째 변칙) 좀 더 극적인 변칙패턴은 게이티드 리커런트 유닛(the Gated Recurrent Unit)이다. 혹은 GUR라고도 불림
Forget gate와 Input gate를 하나의 업데이트 게이트로 합쳤으며, 셀 스테이트와 히든 스테이트 또한 합쳤다.