
RNN의 한계인 문장이 길어질 때 성능이 좋지 못하는걸
보완하기 위해 사용
3개를 입력받아 2개를 출력
3종류의 게이트를 4개의 FC Layer로 구성

기존 Cell state에서 어떤 정보를 잊을지 결정하는 게이트
ft = σ (Wf[ht-1, xt])
σ = sigmoid 함수
-> 출력범위가 0~1 비율로 변경 하는것
[ht-1, xt] :ht-1 벡터와 xt 백터를 concatenate 하는 연산
Concatenate 예시 :
1 2 3 과 4 5 6을 concatenate하면 1 2 3 4 5 6
입력 : 이전 output, 현재 입력
출력 : cell state로 가는 값

현재 입력 받은 정보에서 어떤 것을 cell state에 저장할지 결정
sigmoid[0~1]와 tanh[-1~1]를 곱한다


Forget Gate 와 Input Gate의 정보를 통해 cell state갱신
Update : Forget Gate와 Input Gate의 출력 값을 더해주는 부분
*연사자는 벡터의 각 원소 별로 곱하는 연산(Hadamard Product)


Gated Recurrent Unit의 약자
LSTM이 가지는 3개의 게이트를 2개로 간소화하고
Cell state를 없앰
hidden state하나로 장기적 기억도 관리 사용
내부적으로는 다를지몰라도 외부적으로는 똑같아 보인다.
2종류의 게이트를 2개의 FC Layer로 구성

기존 hidden state의 정보를 얼마나 초기화할지
결정하는 게이트
rt = σ (Wr[ht-1, xt])

결국 해보고 좋은거 사용하면 된다..
GRU와 LSTM 중 어떤 것이 모델의 성능 면에서 더 낫다고 단정지어 말할 수 없으며, 기존에 LSTM을 사용하면서 최적의 하이퍼 파라미터를 찾아낸 상황이라면 굳이 GRU로 바꿔서 사용할 필요는 없다
경험적으로 데이터 양이 적을 때는 매개 변수의 양이 적은 GRU가 조금 더 낫고, 데이터 양이 더 많으면 LSTM이 더 낫다고도 함
GRU보다 LSTM에 대한 연구나 사용량이더 많은데,
이는 LSTM이 더 먼저 나온 구조이기 때문이다