LSTM의 Cell state의 특징 및 원리에서 간단하게 Gate가 어떤 역할을 통해 처리되는지 절차를 알아봤습니다. 이번 글에서는 각각의 Gate의 특징과 더 자세한 설명으로 구성했습니다. 먼저 Forget Gate부터 살펴보겠습니다.
Forget Gate
우선 forget gate는 과거에서 넘어온 정보 중에 불필요하다고 여겨지는 데이터들을 제거해 주는 역할을 합니다. LSTM의 첫 단계는 cell state로부터 어떤 정보를 버릴 것인지를 결정하는 것부터 시작합니다. 이 작업은 Sigmoid 함수를 통해 얻어진 0~1 사이의 가중치를 곱하는 방식으로 수행됩니다.
이 단계에서는 $ ℎ_{𝑡−1} $ 과 $ 𝑥_{𝑡} $ 를 받아서 0과 1 사이의 값을 $ 𝐶_{𝑡−1} $ 에 보내줍니다. 이전 hidden state값 + 현재 입력 값이 되는데요. 이는 RNN의 기존 입력값과 동일합니다.
1. Forget Gate 수식
수식은 $ 𝑓_{𝑡}=𝜎(𝑊_{𝑓} \cdot [ℎ_{𝑡−1}, 𝑥_{𝑡}] + 𝑏_{𝑓}) $ 입니다. 여기서 $ [ℎ_{𝑡−1},𝑥_{𝑡}] $의 수학적 의미는 $ℎ_{𝑡−1} $ 벡터와 $ 𝑥_{𝑡} $ 벡터의 Concatenation을 말합니다. $ 𝑊ℎ_{𝑡−1}+𝑉𝑥_{𝑡} = 𝑊_{𝑓} \cdot [ℎ_{𝑡−1},𝑥_{𝑡}] $ 와 수식이 같다는 의미입니다.
Neural Network를 이용하여 얻어진 $ 𝑊_{𝑓} $ (Weight of Forget Gate)와 $ 𝑏_{𝑓} $ (Bias of Forget Gate)를 학습하게 됩니다. 0에 가까운 값이 나오면 정보를 버리는 효과가 있고, 아예 0이 되면 정보는 삭제되게 됩니다. 1에 가까울수록 정보 보존하게 되고, 1일 경우 데이터 그대로 전달하는 의미가 됩니다. 정리하면, Cell을 지나면서도 계속적으로 유의미한 데이터들은 Cell State Flow에 보존하는 수식입니다.
2. Forget Gate를 추가한 이유
1997년 논문의 original LSTM에서는 Forget gate가 없었습니다. Cell state가 1, 0 Weight만 주다 보니, Depth가 길어질수록 기울기 폭발하는 현상이 여전히 발생했죠. 그의 대한 보완책으로 후속 논문(1999)에서 Forget Gate를 추가하게 됩니다. 이는 입력 값 $ ℎ_{𝑡−1} $ 과 $ 𝑥_{𝑡} $ 에 따라 $ 𝐶_{𝑡−1} $ 값의 양을 조절할 수 있는 기능을 하게 된 것입니다.
Input Gate
forget gate 다음 단계는 앞으로 들어오는 새로운 정보 중 어떤 것을 cell state에 저장할 것인지를 정하는 것입니다. 이 역할을 Input Gate에서 합니다. 역시 이전 hidden state값 + 현재 입력 값(RNN의 기존 입력값)을 사용하여 현재와 바로 직전 정보에 대한 업데이트 비율을 자동 결정합니다.
1. Input Gate 처리 방식
현재 Cell의 Local state를 얻고 sigmoid layer를 이용해 중요도에 따라 얼마나 반영할지 결정합니다. 그 다음에 tanh layer가 새로운 후보 값들인 $ \hat{𝐶_{𝑡}} $ 라는 vector를 만들고 cell state에 더할 준비를 합니다.
2. Input Gate 수식
이렇게 두 단계에서 나온 정보를 합쳐서 이를 Global Cell state를 업데이트할 재료를 만들게 됩니다. 수식은 아래와 같습니다.
- $ 𝑖_{𝑡} =𝜎(𝑊_{𝑖} \cdot [ℎ_{𝑡−1},𝑥_{𝑡}]+𝑏_{𝑖}) $ ← Forget과 같은 수식
- $ \hat{𝐶_{𝑡}} = tanh(𝑊_{𝑐} \cdot [ℎ_{𝑡−1},𝑥_{𝑡} ]+𝑏_{𝐶}) $ ← 새로운 후보 추가
Update Cell state
이제 과거 state인 $ 𝐶_{𝑡−1} $ 를 업데이트해서 새로운 cell state인 $ 𝐶_{𝑡} $ 를 만들어야 합니다. 이를 Update Cell state라고 명명합니다. 이미 이전 단계(Forget, Input Gate)에서 어떤 값을 얼마나 업데이트해야 할지 결정했습니다. 여기서는 단지 실제 적용만 하면 됩니다.
우선 이전 state에 $ 𝑓_{𝑡} $ 를 곱해서 가장 첫 단계에서 잊어버리기로 정했던 것들을 실행합니다. 그 다음에는 $ 𝑖_{𝑡} \ast \hat{𝐶_{𝑡}} $ 를 추가하는 덧셈 연산을 하면 됩니다. 이는 각 state의 값을 업데이트하기로 결정한 양에 따라 조정된 새로운 후보 값이 되는 과정입니다.
- 수식 $ 𝐶_{𝑡}=𝑓_{𝑡} \ast 𝐶_{𝑡−1}+ 𝑖_{𝑡} \ast \hat{𝐶_{𝑡}} $
- 이전 Cell state와 Forget게이트 곱 + Input게이트 곱
Output Gate
마지막으로, 어떤 출력값을 보낼지 결정하는 역할이 Output Gate입니다. 이 출력(Output)은 Cell State를 기반으로 하지만, 필요한 정보만 선택된 filtered Version이 됩니다. Cell State의 어떤 부분을 출력할 것인지 결정하는 Sigmoid Layer를 실행합니다. 역시 input은 이전 hidden state값 + 현재 입력 값입니다.
그런 다음, 이미 정의된 cell state를 tanh layer에 태워서 -1과 1 사이의 값을 받은 뒤에 방금 전에 계산한 sigmoid gate의 output과 곱합니다. 여기서 곱은 원소별 곱(아다마르 곱)입니다. 원소별 곱은 기울기 소실이 얼어나지 않습니다. 최종적으로 얻어진 cell state값을 얼마나 빼낼지 결정합니다.
- $ 𝑜_{𝑡} = 𝜎(𝑊_{𝑜} \cdot [ℎ_{𝑡−1},𝑥_{𝑡}]+𝑏_{𝑜}) $ ← Forget, Input과 같은 수식
- $ ℎ_{𝑡} = 𝑜_{𝑡} \ast tanh(𝐶_{𝑡}) $ ← nolinear 함수 적용
'딥러닝' 카테고리의 다른 글
GRU 성능 분석 및 특장점 (0) | 2024.05.01 |
---|---|
LSTM 모델의 의미와 장단점 (0) | 2024.04.25 |
LSTM의 Cell State 특징 및 원리 (0) | 2024.04.22 |
LSTM의 배경 및 구조, 핵심 아이디어 (0) | 2024.04.15 |
순환신경망(RNN) 구현, Time RNN (0) | 2024.04.09 |