좋은 질문입니다!
tl; dr : 셀 상태와 숨겨진 상태는 서로 다른 두 가지이지만 숨겨진 상태는 셀 상태에 따라 다르며 실제로 동일한 크기를 갖습니다.
더 긴 설명
이 둘의 차이점은 아래 다이어그램 (동일 블로그의 일부)에서 확인할 수 있습니다.
셀 상태는 위쪽에서 서쪽으로 동쪽으로 이동하는 굵은 선입니다. 전체 녹색 블록을 '셀'이라고합니다.
이전 시간 단계에서 숨겨진 상태는 현재 시간 단계에서 입력의 일부로 처리됩니다.
그러나 전체 연습을 수행하지 않고 둘 사이의 종속성을 보는 것이 조금 더 어렵습니다. 다른 관점을 제공하기 위해 여기서 할 것이지만 블로그의 영향을 크게받습니다. 내 표기법은 동일하며 설명에 블로그의 이미지를 사용합니다.
블로그에서 제시된 방식과는 조금 다른 작업 순서를 생각하고 싶습니다. 입력 게이트에서 시작하는 것처럼 개인적으로. 아래에이 관점을 제시하지만, 블로그가 LSTM을 계산적으로 설정하는 가장 좋은 방법 일 수 있다는 점을 명심하십시오.이 설명은 순수한 개념입니다.
무슨 일이 일어나고 있는지 :
입력 게이트
txtht−1
xt=[1,2,3]ht=[4,5,6]
xtht−1[1,2,3,4,5,6]
WiWi⋅[xt,ht−1]+biWibi
6 차원 입력 (연결된 입력 벡터의 길이)에서 업데이트 할 상태에 대한 3 차원 결정으로 넘어 가고 있다고 가정 해 봅시다. 즉, 3x6 가중치 행렬과 3x1 바이어스 벡터가 필요합니다. 그 값을 몇 가지 드리겠습니다 :
Wi=⎡⎣⎢123123123123123123⎤⎦⎥
bi=⎡⎣⎢111⎤⎦⎥
계산은 다음과 같습니다.
⎡⎣⎢123123123123123123⎤⎦⎥⋅⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢123456⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥+⎡⎣⎢111⎤⎦⎥=⎡⎣⎢224262⎤⎦⎥
it=σ(Wi⋅[xt,ht−1]+bi)
σ(x)=11+exp(−x)x
σ(⎡⎣⎢224262⎤⎦⎥)=[11+exp(−22),11+exp(−42),11+exp(−62)]=[1,1,1]
영어로, 우리는 모든 주를 업데이트한다는 의미입니다.
입력 게이트에는 두 번째 부분이 있습니다.
Ct~=tanh(WC[xt,ht−1]+bC)
이 부분의 요점은 상태를 업데이트하는 방법을 계산하는 것입니다. 이 시점에서 새로운 입력에서 셀 상태로의 기여입니다. 계산은 위에서 설명한 동일한 절차를 따르지만 S 자형 단위 대신 tanh 단위를 사용합니다.
Ct~it
itCt~
그런 다음 질문의 핵심 인 잊어 버린 문이 온다.
잊어 버린 문
잊어 버림 게이트의 목적은 더 이상 관련이없는 이전에 학습 한 정보를 제거하는 것입니다. 블로그에 제공된 예제는 언어 기반이지만 슬라이딩 윈도우를 생각할 수도 있습니다. 질병이 발병하는 동안 한 지역에서 전염성 개인의 수와 같이 자연적으로 정수로 표현되는 시계열을 모델링하는 경우 질병이 한 지역에서 사망하면 더 이상 해당 지역을 고려하지 않아도됩니다. 다음에 질병이 어떻게 진행되는지에 대해 생각합니다.
입력 레이어와 마찬가지로, 잊어 버린 레이어는 이전 시간 단계에서 숨겨진 상태와 현재 시간 단계에서 새로운 입력을 가져와 연결합니다. 요점은 확률 적으로 기억해야 할 것과 기억해야 할 것을 결정적으로 결정하는 것입니다. 이전 계산에서 나는 모든 1의 시그 모이 드 레이어 출력을 보여 주었지만 실제로 0.999에 가까워졌고 반올림했습니다.
계산은 입력 레이어에서 수행 한 것과 매우 유사합니다.
ft=σ(Wf[xt,ht−1]+bf)
이것은 우리에게 0과 1 사이의 값을 가진 크기 3의 벡터를 줄 것입니다.
[0.5,0.8,0.9]
그런 다음 정보의 세 부분 중 잊어 버릴 값을 기반으로 결정적으로 결정합니다. 이를 수행하는 한 가지 방법은 균일 (0, 1) 분포에서 숫자를 생성하고 해당 숫자가 단위가 '켜질'확률보다 작은 경우 (단위 1, 2 및 3의 경우 0.5, 0.8 및 0.9) 그런 다음 해당 장치를 켭니다. 이 경우 해당 정보를 잊어 버릴 수 있습니다.
빠른 참고 사항 : 입력 레이어와 잊어 버린 레이어는 독립적입니다. 내가 베팅 한 사람이라면 병렬 처리하기에 좋은 곳이라고 확신합니다.
셀 상태 업데이트
이제 셀 상태를 업데이트하는 데 필요한 모든 것이 있습니다. 입력과 잊어 버린 게이트의 정보를 조합하여 사용합니다.
Ct=ft∘Ct−1+it∘Ct~
∘
옆으로 :하다 마드 제품
x1=[1,2,3]x2=[3,2,1]
x1∘x2=[(1⋅3),(2⋅2),(3⋅1)]=[3,4,3]
제쳐두고
이러한 방식으로 셀 상태에 추가하려는 항목 (입력)을 셀 상태에서 제거하려는 항목 (잊어 버림)과 결합합니다. 결과는 새로운 셀 상태입니다.
출력 게이트
이것은 우리에게 새로운 숨겨진 상태를 줄 것입니다. 기본적으로 출력 게이트의 요점은 후속 셀 상태를 업데이트 할 때 모델의 다음 부분에서 고려할 정보를 결정하는 것입니다. 블로그의 예는 다시 언어입니다. 명사가 복수 인 경우 다음 단계의 동사 활용이 변경됩니다. 질병 모델에서 특정 지역의 개인의 감수성이 다른 지역의 감수성이 다르면 감염 가능성이 변경 될 수 있습니다.
출력 레이어는 동일한 입력을 다시 가져 오지만 업데이트 된 셀 상태를 고려합니다.
ot=σ(Wo[xt,ht−1]+bo)
다시, 이것은 우리에게 확률의 벡터를 제공합니다. 그런 다음 계산합니다.
ht=ot∘tanh(Ct)
따라서 현재 셀 상태와 출력 게이트는 출력 대상에 동의해야합니다.
tanh(Ct)[0,1,1]ot[0,0,1][0,0,1]
htyt=σ(W⋅ht)
ht
LSTM에는 많은 변형이 있지만 필수 사항을 다루고 있습니다!