LSTM的思想和GRU是类似的,并且LSTM是早于GRU提出来的,功能比GRU更强大。GRU可以说是LSTM的一个简化版本。在GRU里我们使用了2个门函数来控制信号,在LSTM里则使用了3个。

在讲LSTM之前我们先回忆一下GRU里的工作原理。GRU只保留一个内部状态c^{<t>}。在计算这个内部状态时引入了候选状态\tilde{c}^{<t>}。在更新本次循环的内部状态向量c^{<t>}时,因为引入了门函数{\Gamma}_u。所以内部状态向量的每一个元素可以理解为在之前状态c^{<t-1>}和本次候选状态\tilde{c}^{<t>}两个值里边二选一。(因为{\Gamma}_u的取值大部分情况下近似于0或者1。而且c^{<t>}={\Gamma}_u*\tilde{c}^{<t>}+(1-{\Gamma}_u)*c^{<t-1>}

在计算GRU的候选状态\tilde{c}^{<t>}时,我们也用了一个门函数来控制要忘记之前状态c^{<t-1>}哪些特征的值。
{\Gamma}_r=sigmoid(w_r[c^{<t-1>},x^{<t>}]+b_r)
\tilde{c}^{<t>}=tanh(w_c[{\Gamma}_r*c^{<t-1>},x^{<t>}]+b_c)

LSTM

LSTM 里和GRU里有几个不同,它有两个内部状态a^{<t>},c^{<t>}。同时它有3个门。一个控制\tilde{c}^{<t>}的更新,一个控制c^{<t-1>}的遗忘,还有一个控制a^{<t>}的输出。

候选状态

对于候选状态\tilde{c}^{<t>},它和GRU有两个区别:
1.它的公式里没有门的控制了。因为后边有专门的更新门来控制。
2.它使用的是a^{<t-1>}而不是c^{<t-1>}
\tilde{c}^{<t>}=tanh(w_c[a^{<t-1>},x^{<t>}]+b_c)

三个门

在LSTM里一共用了3个门。和GRU里不同的是用a^{<t-1>}替代了c^{<t-1>}
控制候选状态\tilde{c}^{<t>}的更新门{\Gamma}_u
{\Gamma}_u=sigmoid(w_u[a^{<t-1>},x^{<t>}]+b_u)

控制之前记忆状态c^{<t-1>}的遗忘门{\Gamma}_f
{\Gamma}_f=sigmoid(w_f[a^{<t-1>},x^{<t>}]+b_f)

控制内部状态a^{<t>}的输出门{\Gamma}_o
{\Gamma}_o=sigmoid(w_o[a^{<t-1>},x^{<t>}]+b_o)

内部状态c

内部状态c^{<t>}的更新由候选状态\tilde{c}^{<t>}以及上一次循环的c^{<t-1>}来决定,公式是:
c^{<t>}={\Gamma}_u*\tilde{c}^{<t>}+{\Gamma}_f*c^{<t-1>}

内部状态a

内部状态a是由c^{<t>}乘以{\Gamma}_o门来决定的,公式为:
a^{<t>}={\Gamma}_o*c^{<t>}

下边的图片可以帮助理解:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: