这篇文章配图质量太高了!
舍不得让它消失于互联网之中啊。
原文:http://colah.github.io/posts/2015-08-Understanding-LSTMs/
普通RNN
LSTM
图例
1.细胞状态 cell_status,用字母c表示
上一个细胞的旧状态为Ct-1
2. 忘记门 forget gate
concat[ht-1,xt],再做一个linear变换,经过sigmoid得到ft 。
ft是sigmoid的输出,显然在0~1范围内。
ft传给Ct-1,表示保留多少数据。0全部舍弃,1全部保留,
我们把旧状态与 相乘,丢弃掉我们确定需要丢弃的信息,得到dropped_C。
3.输入门 input gate
第一,sigmoid
层称 “输入门层” 决定什么值我们将要更新,输出it
然后,一个 tanh
层创建一个新的候选值向量,,会被加入到状态中。
把两个结果相乘,得到 ,得到变化值delta_C。
4.更新状态Ct
用forget gate里得到的dropped_C + delta_C。
这就是新的细胞状态Ct。
5.对细胞状态Ct进行处理,得到新的输出ht
首先对Ct进行tanh处理,得到(-1,1)的值。
然后对input_x =concat(ht-1,xt),linear变化之后,再sigmoid(),得到(0,1)的值。
这两个值相乘,就是新的输出值ht。
还有一些变体,就是改各种连线图结构。
问题来了!!!
为什么同样一个input=concat(ht-1,xt)
经过sigmoid和tanh之后就有截然不同的意义?
为什么可以这样相乘,可以这样相加?