🐼 목 차 🐼
1. RNN 개선 모델 : LSTM
2. LSTM 구조
3. LSTM의 단점
4. LSTM 구조 개선 모델 : Peephole connection
5. LSTM 구조 개선 모델 : GRU (Gated Recurrent Unit)
6. 정리
참고 강의 링크 : https://www.youtube.com/watch?v=006BjyZicCo&list=PLpIPLT0Pf7IoTxTCi2MEQ94MZnHaxrP0j&index=3
1. RNN 개선 모델 : LSTM
- Long Short Term Memory (LSTM)은 장기 의존성 문제를 완화한 RNN 개선 모델
- Cell state (Ct)구조를 제안하고, 세 가지 gate를 추가한 구조
- Cell state : 장기적으로 정보들을 유지하는 벡터 (Hidden vector(ht)를 구하는 데 사용)
- 세 가지 gate (vector) : Forget gate (ft), Input gate (it), Output gate (ot) (세 가지 gate를 통해 cell state, hidden state 업데이트)
- Hidden vector를 RNN에 비해 더 복잡하게 계산하는 방식(게이트 조절)으로 기울기 소실 문제 완화
- t 시점에서의 hidden vector인 ht에 Why를 곱해 hatyt를 구하는데, 여기서 ht가 RNN과 달리 구하기 복잡함
✔️ 세 가지 gate
ft=σ(Wxhfxt+Whhfht−1+bhf)
it=σ(Wxhixt+Whhiht−1+bhi)
ot=σ(Wxhoxt+Whhoht−1+bho)
C~t=tanh(Wxgxt+Whght−1+bhg) → t 시점에서의 임시 cell state
Ct=ft⊗Ct−1+it⊗C~t → t 시점에서의 cell state
ht=ot⊗tanh(Ct) → t 시점에서의 hidden vector
Ⅰ. 임시 cell state를 구하는 회로도
Ⅱ. Cell state를 구하는 회로도
Ⅲ. Hidden vector를 구하는 회로도
2. LSTM 구조
- Gate는 다음과 같은 함수로 정의되어 0~1 사이의 값을 가지는 벡터
- Gate=σ(Wxhxt+Whhht−1+bh)
- Gate는 최종적으로 0~1 사이 값을 지니므로 얼마나 적용할 것인지에 대한 가중치 역할
- Gate 마다 서로 다른 파라미터 (Wxh, Whh)를 사용하기 때문에 서로 다른 값을 지님
- σ() : 시그모이드 함수
✔️ 세 가지 gate
ft=σ(Wxhfxt+Whhfht−1+bhf)
it=σ(Wxhixt+Whhiht−1+bhi)
ot=σ(Wxhoxt+Whhoht−1+bho)
✔️ Forget gate
- Forget gate는 불필요한 과거 정보를 잊기 위한 gate (과거 cell state에서 사용하지 않을 데이터에 대한 가중치)
- 과거 데이터를 얼마나 기억할 지 가중치를 통해 조절함
- Forget gate의 값(가중치)들은 학습을 통해 알아내야 함
✔️ Input gate
- Input gate는 현재 정보를 기억하기 위한 gate (Cell state에서 사용할 데이터를 저장하기 위한 가중치)
- Forget gate와는 가중치가 다름 (그 가중치는 학습(비용함수 최소화)을 통해 알아내야 함)
✔️ Output gate
- Output gate는 어떤 정보를 output으로 내보낼지 결정하기 위한 gate (Hidden state에 cell state를 얼마나 반영할 것인지에 대한 가중치)
- Forget gate, input gate와는 가중치가 다름 (그 가중치는 학습(비용함수 최소화)을 통해 알아내야 함)
2) Cell state (Ct) 업데이트 하기
- 임시 cell state(C~t)를 생성, 이때 tanh를 통해 -1~1 사이의 값을 가지는 벡터로 산출
- 임시 cell state는 현재 입력값과 과거 hidden state 정보에 대한 정보 요약
- C~t=tanh(Wxgxt+Whght−1+bhg)
- 수식적으로는 RNN에서의 hidden state와 유사
- 현 시점에 대한 cell state((Ct)를 업데이트할 때, forget과 input gate 활용
- Ct=ft⊗Ct−1+it⊗C~t (⊗ = elementwise product, 합성곱)
- 불필요한 정보는 잊고(forget gate), 추가할 정보는 추가해서(input gate) cell state 구성
여기서 forget gate의 쓰임
여기서 input gate의 쓰임
3) Hidden state (ht) 업데이트 하기
- 최종적으로 단기적 정보 hidden state (ht)를 업데이트
- Output gate는 어떤 정보를 output으로 내보낼지 결정하기 위한 gate (=Hidden state에 cell state를 얼마나 반영할 것인지에 대한 가중치)
- ht=ot⊗tanh(Ct)
- Ct에 대한 비선형 변환 값에 또 한 번 가중치를 취해주는 것
3. LSTM의 단점
4. LSTM 구조 개선 모델 : Peephole connection
- 일반적인 LSTM에서 gate는 입력값 xt와 단기 정보(hidden state) ht−1만을 고려함
- Gate에 장기 정보(cell state) ct 정보도 활용하여 더 많은 정보가 수용되도록 개선함
✔️ 세 가지 gate (중괄호항 추가됨)
ft=σ(Wxhfxt+Whhfht−1+[WchfCt−1]+bhf)
it=σ(Wxhixt+Whhiht−1+[WchiCt−1]+bhi)
ot=σ(Wxhoxt+Whhoht−1+[WchoCt]+bho)
5. LSTM 구조 개선 모델 : GRU (Gated Recurrent Unit)
- 일반적인 LSTM에서 cell state와 세 가지 gate가 정의됨 (forget, input, output)
- Cell state 정의하는 과정에서 forget gate와 input gate가 활용됨
- Hidden state로 출력값 정의 (Output gate 활용됨)
- GRU는 LSTM의 구조를 간단하게 개선하여 파라미터 개수를 줄임
- ht 구하는 과정을 단순화함 (경량화된 LSTM)
- Forget gate, input gate를 update gate(zt)로 통합, output gate를 없애고 reset gate(rt) 정의
- Cell state, hidden state를 hidden state로 통합
- 그런데 현업에서는 GRU는 엄청 많이 막 쓰이는 추세는 아니라고 함 (왜지? 도메인마다 다른가?)
rt=σ(Wxhrxt+Whhrht−1+bhr) → Reset gate
zt=σ(Wxhzxt+Whhzht−1+bhz) → Update gate
C~t=tanh(Wxhgxt+Whhg(rt⊗ht−1)+bhg) → 임시 cell state
ht=(1−zt)⊗h(t−1)+zt⊗C~t → 최종 cell state (=hidden state)
6. 정리
- Hidden state를 구할 때 long term dependency 문제를 해결할 수 있게 웨이트를 조절한 것이 LSTM과 GRU임