LSTM 이란? [2-1편]
기본적인 순환신경망인 Vanilla RNN에 대해서 1편에서 설명 했습니다.
하지만 현재는 Vanilla RNN 이 사용되고 있지 않습니다.
어떠한 이유때문에 사용되고 있지 않는지, 그리고 더 발전된 RNN에 대해서 설명하도록 하겠습니다.
1. Vanilla RNN 문제점
잘 쓰이지 않는 가장 큰 이유는 기울기 손실 문제가 있습니다.
위의 그림에서 x0 가 입력이고 출력이 ht+1 이라고 할때,
ht+1 에서 출발해서 쭉 x0 에 있는 정보를 가지고 와야 합니다.
그렇게 하기 위해서 사이사이의 Gradient(기울기)가 다 만들어져야 하며,
역전파가 이루어질때 점점 기울기가 손실이 되는 문제가 있습니다.
따라서, 시점차이가 많이 날 경우 학습능력이 굉장히 저하가 됩니다.
그래서 현재는 RNN 기반의 변형 알고리즘 LSTM을 사용 합니다.
우선 위의 그림을 간단하게 다시 그림으로 표현하면 아래와 같습니다.
노랑색의 tanh 부분은 Activation Funtion 이며 FCL (Fully Connet Layer) 입니다.
"입력 x layer -> Activation Funtion -> 출력 h layer" 연결이 되는 구조 입니다.
위의 그림 기준으로 변형 알고리즘 LSTM에 대해 아래에 설명하겠습니다.
2. LSTM (Long Short-Term Memory)
Vanilla RNN 에서 가지고 있는 문제점을 개선한 알고리즘 입니다.
간단한 개념만 설명하면, 기억할 것은 오래 기억하고, 잊을 것은 빨리 잊어버리는 알고리즘 이라고 생각하면 됩니다.
LSTM 을 이해하기 위해서 State, Gate 개념을 이해 할 필요가 있습니다.
Cell State, Hidden State 2가지의 State (경로)
Forget Gate, Input Gate, Output Gate 3가지의 Gate (관문)
[1] Cell State, Hidden State
기존 RNN 에서 크게 다른 점은 State (경로)가 2개가 있다는 점 입니다.
State이 2개가 있는 이유는 기존의 Hidden State에서 Cell State가 추가되서 그렇습니다.
일반적인 RNN에서 Hidden State는 출력만 가지고 있었는데, (맨위 Vanilla RNN 구조 참고)
LSTM 에서 기억을 더 오래 유지하기 위해 Cell state가 추가 했습니다.
Cell State 역할
기억을 오랫동안 유지할 수 있는 구조
새로운 특징을 덧셈으로 받아서 보내는 구조 입니다.
Hidden State 역할
계층의 출력/다음 타임 스텝으로 넘기는 정보
RNN과 달리, Cell State가 있어서 '기억'에 관한 부분을 전담 합니다.
여기서는 간다하게 무슨 역할을 한다는 것만 챙기고,
아래에 Gate 대한 설명 후에 정리 하겠습니다.
[2] Forget Gate, Input Gate, Output Gate
Forget Gate
첫번째 Forget gate 부분은 위의 검은색 경로를 뜻 합니다.
입력과 이전의 Hidden state 를 같이 가지고, FCL을 가진 시그모이드 함수로 0 ~ 1 출력값을 보냅니다.
이를 Cell state에 곱해 주면, 0 ~ 1 사이의 값이 곱하기 때문에 값이 작아지며 필요한 출력값만 얻을 수 있는 Gate 입니다.
예를 들어서
'hello' 단어를 가지고 왔는데 Forget Gate 를 통해서 0 ~ 1 출력값 중에 index 0번, 4번이 0이 나왔다면,
'ell' 만 기억하고 넘기는 것을 말합니다.
즉, 얼만큼 잊을지를 결정하는 것이 Forget Gate의 역할 입니다.
수학 수식적으로 보면,
FCL을 가지는 시그모이드에
입력과 이전 Hidden State 곱하고 더해주고, bias를 마지막에 더해주면 된다.
Input gate
검은색 부분이 Input Gate 이고,
빨간색 부분이 우리가 알고 있는 일반적인 RNN 구조 입니다.
어떤 feature 를 뽑았을때,
feature 중에 0 ~ 1 출력값과 일반적인 RNN 에서 나온 값을 곱해서
그 값을 Cell state에 더해주는 역할을 합니다.
즉, 새로운 것을 머리속에 넣어주는 역할이라고 생각하면 됩니다.
Forget Gate 는 머릿속에서 일부를 잊어주는 역할
Input Gate 는 새로운 것을 머릿속에 넣어주는 역할
Cell state 을 다시 정의하면,
필요없는것은 잊어주고 (Forget Gate)
필요한 것은 다시 넣어주는 역할 (Input Gate)
수학 수식적으로 보면,
FCL을 가지는 시그모이드에
입력과 이전 Hidden State 곱하고 더해주고, bias를 마지막에 더해주면 된다.
그러면 Cell State를 수학적 수식으로 정리하면,
필요없는것은 잊어주고 (Forget Gate),
필요한 것은 다시 넣어주는 역할 (Input Gate)
Output Gate
바로 위에서 정의한, 필요없는것은 잊어주고, 필요한 것은 다시 넣어주는 역할까지만 했습니다.
마지막 Output Gate 에서는 얼마나 출력으로 내보낼지 결정하는 역할 입니다.
어떠한 것들은 0으로 출력 안해주고,
어떠한 것들은 1으로 출력 해주고
즉,
현재 Layer 에서 필요한 정보만 내주고,
필요하지 않은 정보는 기억만 하고 내보내주지 않는 것 입니다.
그렇게 해서 필요없는 것을 빼고 출력을 다음 Layer 에 줄텐데,
그것도 아래 경로를 통해 다음 스텝으로 넘겨 줍니다. (Cell State 와 별개로 넘겨준다.)
마지막에 tanh 함수를 사용하는 것은
앞단의 Cell State 에서 곱해주고 더해주면서 값이 커지는 것을 방지하기 위해서,
-1 ~ 1 값으로 다시 조정해주는 역할을 합니다.
즉, 정보 중에 얼마나 출력을 내보낼지 결정하는 역할 (Output Gate)
수학적 수식으로 보면,
Forget Gate 와 Input Gate를 거쳐서 나온 출력값을 얼마나 보낼지 계산 후에 다음 스텝으로 넘깁니다.
그리고 tanh 사용하여, 출력 값의 범위를 -1 ~ 1 로 유지하기 위해서 tanh 함수를 사용 합니다.
다음에는 역전파 학습은 어떻게 하는지 살펴보겠습니다.
감사합니다.