LSTM与GRU

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

LSTM内部结构-输入门+遗忘门+输出门

RNN和LSTM结构图对比:
在这里插入图片描述
RNN 和 LSTM的区别:
在这里插入图片描述
LSTM比RNN多了一个输入状态,包括两个输入 c t c^t ct(cell state)和 h t h^t ht(hidden state)。
首先使用LSTM的当前输入 x t x^t xt和上一个状态传递下来的 h t − 1 h^{t-1} ht1拼接训练得到四个状态。
{ z = t a n h ( W h t − 1 x t ) z i = σ ( W i h t − 1 x t ) z f = σ ( W f h t − 1 x t ) z o = σ ( W o h t − 1 x t ) \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(Wht1xt)=σ(Wiht1xt)=σ(Wfht1xt)=σ(Woht1xt)
其中, 记忆 z i z^i zi, 忘记 z f z^f zf, 输出 z o z^o zo是由拼接向量乘以权重矩阵之后,再通过一个sigmoid激活函数转换成0到1之间的数值,来作为一种门控状态。而z则是将结果通过一个tanh激活函数将转换成-1到1之间的值(这里使用tanh是因为这里是将其做为输入数据,而不是门控信号)。

3个阶段

两条数据流
第一步通过遗忘和输入门计算当前的 c t c^t ct
第二步通过输出门计算当前的 h t h^t ht
在这里插入图片描述

1、忘记

具体来说是通过计算得到的 z f z^f zf来作为忘记门控,来控制上一个状态的 c t − 1 c^{t-1} ct1哪些需要留哪些需要忘。

2、记忆

主要是会对输入 x t x^t xt 进行选择记忆。哪些重要则着重记录下来,哪些不重要,则少记一些。当前的输入内容由前面计算得到的 z z z表示。而选择的门控信号则是由 z i z^i zi来进行控制。

1 + 2

将上面两步得到的结果相加,即可得到传输给下一个状态的 c t c^t ct

3、输出

这个阶段将决定哪些将会被当成当前状态的输出。主要是通过 z o z^o zo来进行控制的。并且还对上一阶段得到的 c o c^o co进行了放缩(通过一个 t a n h tanh tanh激活函数进行变化)。
与普通RNN类似,输出 y t y^t yt往往最终也是通过 h t h^t ht变化得到。

LSTM实战-预测

参考之前的一篇:https://blog.csdn.net/ACBattle/article/details/85307422

GRU内部结构-更新门+重置门

主要包括三次数据的处理(三条明确的轨迹路线)红 + 黑 + 紫
在这里插入图片描述
总的公式为:
重 置 − 计 算 h : { r = σ ( W r h t − 1 x t ) h t − 1 ′ = h t − 1 ⨀ r h ′ = t a n h ( W h t − 1 ′ x t ) 重置-计算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:rht1h=σ(Wrht1xt)=ht1r=tanh(Wht1xt)

更 新 − 计 算 z : { z = σ ( W z h t − 1 x t ) 更新-计算z: \left\{ \begin{array}{c} z &= \sigma({W^{z}}^{x^t}_{h^{t-1}}) \\ \end{array} \right. z:{z=σ(Wzht1xt)

汇 总 输 出 : { h t = z ⨀ h t − 1 + ( 1 − z ) ⨀ h ′ 汇总输出: \left\{ \begin{array}{c} h^t = z \bigodot h^{t-1} + (1 - z)\bigodot {h^{'}} \end{array} \right. :{ht=zht1+(1z)h

通过上一个传输下来的状态 h t − 1 h^{t-1} ht1和当前节点的输入 x t x^{t} xt来获取两个门控状态。

1、重置:计算 h h h

reset: r = σ ( W r h t − 1 x t ) r = \sigma({W^{r}}^{x^t}_{h^{t-1}}) r=σ(Wrht1xt)
首先通过重置门得到
h t − 1 ′ = h t − 1 ⨀ r {h^{t-1}}^{'} = h^{t-1} \bigodot r ht1=ht1r
再将 h t − 1 ′ {h^{t-1}}^{'} ht1与输入的 x t x^t xt进行拼接,在通过一个tanh来将数据缩到{-1, 1}之内。即可得到的 h ′ h^{'} h
h ′ = t a n h ( W h t − 1 ′ x t ) h^{'}= tanh({W}^{x^t}_{{h^{t-1}}^{'}}) h=tanh(Wht1xt)
这里的 h ′ h^{'} h主要是包含了当前输入的 x t x^t xt数据。有针对性的对 h ′ h^{'} h添加到当前的隐藏状态,相当于“记忆了当前时刻的状态”。类似于LSTM的选择记忆阶段。

2、更新:计算 z z z

update: z = σ ( W z h t − 1 x t ) z = \sigma({W^{z}}^{x^t}_{h^{t-1}}) z=σ(Wzht1xt)
同时进行遗忘和更新。
我们使用了先前得到的更新门控 z(update gate)。
更新门: h t = z ⨀ h t − 1 + ( 1 − z ) ⨀ h ′ h^t = z \bigodot h^{t-1} + (1 - z)\bigodot h^{'} ht=zht1+(1z)h
门控信号的范围是 0   1 0~1 0 1,门控信号越接近1,代表“记忆”下来的数据越多;而越接近0则代表“遗忘”的越多。
疑惑:遗忘与记忆的关系和为1?

GRU实战-文本情感分类

https://blog.csdn.net/ACBattle/article/details/101945050

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值