⨀\bigodot⨀表示操作矩阵中对应的元素相乘,因此要求两个相乘矩阵是同型的。⨁\bigoplus⨁则代表进行矩阵加法操作。


LSTM内部结构-输入门+遗忘门+输出门
RNN和LSTM结构图对比:

RNN 和 LSTM的区别:

LSTM比RNN多了一个输入状态,包括两个输入ctc^tct(cell state)和hth^tht(hidden state)。
首先使用LSTM的当前输入xtx^txt和上一个状态传递下来的ht−1h^{t-1}ht−1拼接训练得到四个状态。
{z=tanh(Wht−1xt)zi=σ(Wiht−1xt)zf=σ(Wfht−1xt)zo=σ(Woht−1xt)
\begin{cases}
z &=tanh(W^{x^t}_{h^{t-1}}) \\
z^i &= \sigma({W^i}^{x^t}_{h^{t-1}}) \\
z^f &= \sigma({W^f}^{x^t}_{h^{t-1}}) \\
z^o &= \sigma({W^o}^{x^t}_{h^{t-1}}) \\
\end{cases}
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧zzizfzo=tanh(Wht−1xt)=σ(Wiht−1xt)=σ(Wfht−1xt)=σ(Woht−1xt)
其中, 记忆ziz^izi, 忘记zfz^fzf, 输出zoz^ozo是由拼接向量乘以权重矩阵之后,再通过一个sigmoid激活函数转换成0到1之间的数值,来作为一种门控状态。而z则是将结果通过一个tanh激活函数将转换成-1到1之间的值(这里使用tanh是因为这里是将其做为输入数据,而不是门控信号)。
3个阶段
两条数据流
第一步通过遗忘和输入门计算当前的ctc^tct
第二步通过输出门计算当前的hth^tht

1、忘记
具体来说是通过计算得到的 zfz^fzf来作为忘记门控,来控制上一个状态的ct−1c^{t-1}ct−1哪些需要留哪些需要忘。
2、记忆
主要是会对输入xtx^txt 进行选择记忆。哪些重要则着重记录下来,哪些不重要,则少记一些。当前的输入内容由前面计算得到的zzz表示。而选择的门控信号则是由ziz^izi来进行控制。
1 + 2
将上面两步得到的结果相加,即可得到传输给下一个状态的ctc^tct 。
3、输出
这个阶段将决定哪些将会被当成当前状态的输出。主要是通过zoz^ozo来进行控制的。并且还对上一阶段得到的coc^oco进行了放缩(通过一个tanhtanhtanh激活函数进行变化)。
与普通RNN类似,输出yty^tyt往往最终也是通过hth^tht变化得到。
LSTM实战-预测
参考之前的一篇:https://blog.youkuaiyun.com/ACBattle/article/details/85307422
GRU内部结构-更新门+重置门
主要包括三次数据的处理(三条明确的轨迹路线)红 + 黑 + 紫

总的公式为:
重置−计算h:{r=σ(Wrht−1xt)ht−1′=ht−1⨀rh′=tanh(Wht−1′xt)
重置-计算h :
\begin{cases}
r &= \sigma({W^{r}}^{x^t}_{h^{t-1}}) \\
{h^{t-1}}^{'} &= h^{t-1} \bigodot r \\
h^{'} &= tanh({W}^{x^t}_{{h^{t-1}}^{'}}) \\
\end{cases}
重置−计算h:⎩⎪⎨⎪⎧rht−1′h′=σ(Wrht−1xt)=ht−1⨀r=tanh(Wht−1′xt)
更新−计算z:{z=σ(Wzht−1xt) 更新-计算z: \left\{ \begin{array}{c} z &= \sigma({W^{z}}^{x^t}_{h^{t-1}}) \\ \end{array} \right. 更新−计算z:{z=σ(Wzht−1xt)
汇总输出:{ht=z⨀ht−1+(1−z)⨀h′ 汇总输出: \left\{ \begin{array}{c} h^t = z \bigodot h^{t-1} + (1 - z)\bigodot {h^{'}} \end{array} \right. 汇总输出:{ht=z⨀ht−1+(1−z)⨀h′
通过上一个传输下来的状态ht−1h^{t-1}ht−1和当前节点的输入xtx^{t}xt来获取两个门控状态。
1、重置:计算hhh
reset:r=σ(Wrht−1xt)r = \sigma({W^{r}}^{x^t}_{h^{t-1}})r=σ(Wrht−1xt)
首先通过重置门得到
ht−1′=ht−1⨀r{h^{t-1}}^{'} = h^{t-1} \bigodot rht−1′=ht−1⨀r
再将ht−1′{h^{t-1}}^{'}ht−1′与输入的xtx^txt进行拼接,在通过一个tanh来将数据缩到{-1, 1}之内。即可得到的h′h^{'}h′。
h′=tanh(Wht−1′xt)h^{'}= tanh({W}^{x^t}_{{h^{t-1}}^{'}})h′=tanh(Wht−1′xt)
这里的h′h^{'}h′主要是包含了当前输入的xtx^txt数据。有针对性的对h′h^{'}h′添加到当前的隐藏状态,相当于“记忆了当前时刻的状态”。类似于LSTM的选择记忆阶段。
2、更新:计算zzz
update: z=σ(Wzht−1xt)z = \sigma({W^{z}}^{x^t}_{h^{t-1}})z=σ(Wzht−1xt)
同时进行遗忘和更新。
我们使用了先前得到的更新门控 z(update gate)。
更新门:ht=z⨀ht−1+(1−z)⨀h′h^t = z \bigodot h^{t-1} + (1 - z)\bigodot h^{'}ht=z⨀ht−1+(1−z)⨀h′
门控信号的范围是0 10~10 1,门控信号越接近1,代表“记忆”下来的数据越多;而越接近0则代表“遗忘”的越多。
疑惑:遗忘与记忆的关系和为1?
GRU实战-文本情感分类
https://blog.youkuaiyun.com/ACBattle/article/details/101945050
本文深入探讨了长短期记忆网络(LSTM)和门控循环单元(GRU)的工作原理及内部结构。详细介绍了两种网络如何通过不同的门控机制处理序列数据,并提供了实战应用案例。
1218

被折叠的 条评论
为什么被折叠?



