Câu hỏi tuyệt vời!
tl; dr: Trạng thái tế bào và trạng thái ẩn là hai thứ khác nhau, nhưng trạng thái ẩn phụ thuộc vào trạng thái tế bào và chúng thực sự có cùng kích thước.
Giải thích dài hơn
Sự khác biệt giữa hai có thể được nhìn thấy từ sơ đồ bên dưới (một phần của cùng một blog):
Trạng thái tế bào là đường kẻ đậm đi từ tây sang đông trên đỉnh. Toàn bộ khối màu xanh lá cây được gọi là 'ô'.
Trạng thái ẩn từ bước thời gian trước được coi là một phần của đầu vào ở bước thời gian hiện tại.
Tuy nhiên, khó hơn một chút để thấy sự phụ thuộc giữa hai người mà không thực hiện đầy đủ hướng dẫn. Tôi sẽ làm điều đó ở đây, để cung cấp một góc nhìn khác, nhưng bị ảnh hưởng nặng nề bởi blog. Ký hiệu của tôi sẽ giống nhau và tôi sẽ sử dụng hình ảnh từ blog trong phần giải thích của mình.
Tôi thích nghĩ về thứ tự của các hoạt động khác một chút so với cách chúng được trình bày trong blog. Cá nhân, như bắt đầu từ cổng đầu vào. Tôi sẽ trình bày quan điểm dưới đây, nhưng xin lưu ý rằng blog rất có thể là cách tốt nhất để thiết lập LSTM tính toán và giải thích này hoàn toàn là khái niệm.
Đây là những gì đang xảy ra:
Cổng đầu vào
txtht−1
xt=[1,2,3]ht=[4,5,6]
xtht−1[1,2,3,4,5,6]
WiWi⋅[xt,ht−1]+biWibi
Giả sử chúng ta đi từ đầu vào sáu chiều (độ dài của vectơ đầu vào được nối) đến quyết định ba chiều về trạng thái cần cập nhật. Điều đó có nghĩa là chúng ta cần một ma trận trọng số 3x6 và một vectơ sai lệch 3x1. Hãy cho những giá trị đó:
Wi=⎡⎣⎢123123123123123123⎤⎦⎥
bi=⎡⎣⎢111⎤⎦⎥
Tính toán sẽ là:
⎡⎣⎢123123123123123123⎤⎦⎥⋅⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢123456⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥+⎡⎣⎢111⎤⎦⎥=⎡⎣⎢224262⎤⎦⎥
c) Feed that previous computation into a nonlinearity: it=σ(Wi⋅[xt,ht−1]+bi)
σ(x)=11+exp(−x) (we apply this elementwise to the values in the vector x)
σ(⎡⎣⎢224262⎤⎦⎥)=[11+exp(−22),11+exp(−42),11+exp(−62)]=[1,1,1]
In English, that means we're going to update all of our states.
The input gate has a second part:
d) Ct~=tanh(WC[xt,ht−1]+bC)
The point of this part is to compute how we would update the state, if we were to do so. It's the contribution from the new input at this time step to the cell state. The computation follows the same procedure illustrated above, but with a tanh unit instead of a sigmoid unit.
The output Ct~ is multiplied by that binary vector it, but we'll cover that when we get to the cell update.
Together, it tells us which states we want to update, and Ct~ tells us how we want to update them. It tells us what new information we want to add to our representation so far.
Then comes the forget gate, which was the crux of your question.
The forget gate
The purpose of the forget gate is to remove previously-learned information that is no longer relevant. The example given in the blog is language-based, but we can also think of a sliding window. If you're modelling a time series that is naturally represented by integers, like counts of infectious individuals in an area during a disease outbreak, then perhaps once the disease has died out in an area, you no longer want to bother considering that area when thinking about how the disease will travel next.
Just like the input layer, the forget layer takes the hidden state from the previous time step and the new input from the current time step and concatenates them. The point is to decide stochastically what to forget and what to remember. In the previous computation, I showed a sigmoid layer output of all 1's, but in reality it was closer to 0.999 and I rounded up.
The computation looks a lot like what we did in the input layer:
ft=σ(Wf[xt,ht−1]+bf)
This will give us a vector of size 3 with values between 0 and 1. Let's pretend it gave us:
[0.5,0.8,0.9]
Then we decide stochastically based on these values which of those three parts of information to forget. One way of doing this is to generate a number from a uniform(0, 1) distribution and if that number is less than the probability of the unit 'turning on' (0.5, 0.8, and 0.9 for units 1, 2, and 3 respectively), then we turn that unit on. In this case, that would mean we forget that information.
Quick note: the input layer and the forget layer are independent. If I were a betting person, I'd bet that's a good place for parallelization.
Updating the cell state
Now we have all we need to update the cell state. We take a combination of the information from the input and the forget gates:
Ct=ft∘Ct−1+it∘Ct~
Now, this is going to be a little odd. Instead of multiplying like we've done before, here ∘ indicates the Hadamard product, which is an entry-wise product.
Aside: Hadamard product
For example, if we had two vectors x1=[1,2,3] and x2=[3,2,1] and we wanted to take the Hadamard product, we'd do this:
x1∘x2=[(1⋅3),(2⋅2),(3⋅1)]=[3,4,3]
End Aside.
In this way, we combine what we want to add to the cell state (input) with what we want to take away from the cell state (forget). The result is the new cell state.
The output gate
This will give us the new hidden state. Essentially the point of the output gate is to decide what information we want the next part of the model to take into account when updating the subsequent cell state. The example in the blog is again, language: if the noun is plural, the verb conjugation in the next step will change. In a disease model, if the susceptibility of individuals in a particular area is different than in another area, then the probability of acquiring an infection may change.
The output layer takes the same input again, but then considers the updated cell state:
ot=σ(Wo[xt,ht−1]+bo)
Again, this gives us a vector of probabilities. Then we compute:
ht=ot∘tanh(Ct)
So the current cell state and the output gate must agree on what to output.
That is, if the result of tanh(Ct) is [0,1,1] after the stochastic decision has been made as to whether each unit is on or off, and the result of ot is [0,0,1], then when we take the Hadamard product, we're going to get [0,0,1], and only the units that were turned on by both the output gate and in the cell state will be part of the final output.
[EDIT: There's a comment on the blog that says the ht is transformed again to an actual output by yt=σ(W⋅ht), meaning that the actual output to the screen (assuming you have some) is the result of another nonlinear transformation.]
The diagram shows that ht goes to two places: the next cell, and to the 'output' - to the screen. I think that second part is optional.
There are a lot of variants on LSTMs, but that covers the essentials!