RNN之GRU

LSTM 具有更长的记忆能力, 在大部分序列任务上面都取得了比基础的 RNN 模型更好的性能表现,LSTM 不容易出现梯度弥散现象。 但是 LSTM 结构相对较复杂, 计算代价较高,模型参数量较大。

一、GRU原理

 研究发现, 遗忘门是 LSTM 中最重要的门控, 甚至发现只有遗忘门的网络在多个基准数据集上面优于标准 LSTM 网络。 在简化版 LSTM中,门控循环网络(Gated Recurrent Unit,简称 GRU)是应用最广泛的 RNN 变种之一。 GRU把内部状态向量和输出向量合并,统一为状态向量 , 门控数量也减少到 2 个:复位门(Reset Gate)和更新门(Update Gate)

1.复位门

复位门用于控制上一个时间戳的状态h_{t-1}进入GRU的量。

门控向量g_{r}由当前时间戳输入x_{t}上一个时间戳状态h_{t-1}变化得到的,关系:g_{r} = \sigma(W_{r}[h_{t-1},x_{t}] + b_{r})。门控向量g_{r}只控制状态h_{t-1},而不会控制输入x_{t}\tilde{h_{t}} = \tanh (W_{h}[g_{r}h_{t-1},x_{t}] + b_{h})。当g_{r}= 0时, 新输入\tilde{h_{t}}全部来自于输入x_{t}, 不接受 h_{t-1},此时相当于复位h_{t-1}。当g_{r}= 1时, h_{t-1}和输入x_{t}共同产生新输\tilde{h_{t}}

 

2.更新门

更新门用控制上一时间戳状态 h_{t-1}和新输\tilde{h_{t}}对新状态向量 h_{t}的影响程度。 更新门控向量g_{z}g_{z} = \sigma (W_{z}[h_{t-1},x_{t}]+ b_{z})得到

 g_{z}用于控制新输入\tilde{h_{t}}信号,1-g_{z}用于控制上一时间状态h_{t-1}信号:h_{t} = (1-g_{z})h_{t-1} + g_{z}\tilde{h_{t}}

\tilde{h_{t}}h_{t-1}h_{t}的更新量处于相互竞争、此消彼长的状态。 当更新门g_{z}= 0时,h_{t}全部来自上一时间戳状态 h_{t-1}; 当更新门g_{z}= 1时, h_{t}全部来自新输\tilde{h_{t}}

二、GRU实现

1.GRUCell

GRUCell和SimpleRNNCell、LSTMCell使用一样,创建 GRU Cell 对象,并在时间轴上循环展开运算。它需要维护的初始化状态向量只有一个(单层)

x = tf.random.normal([2, 80, 100])
# 初始化状态向量, GRU 只有一个
h = [tf.zeros([2, 64])]
cell = layers.GRUCell(64)  # 新建 GRU Cell,向量长度为 64
# 在时间戳维度上解开,循环通过 cell
for xt in tf.unstack(x, axis=1):
    out, h = cell(xt, h)

 2.GRU

通过 layers.GRU 类可以方便通过 Sequential 容器可以堆叠多层 GRU 层的网络,并且不行维护初始化状态向量

net = keras.Sequential([
layers.GRU(64, return_sequences=True),
layers.GRU(64)
])
out = net(x)

 

 

 

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super.Bear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值