GRU(Gated recurrent unit)结构介绍

GRU结构概述

GRU(Gated recurrent unit)是RNN中的一种门机制单元,与LSTM类似,GRU有一个遗忘门(forget gate),但其没有输出门(output gate)。GRU在音乐模型、语音信号模型和NLP模型中的性能与LSTM类似,而且在一些小样本数据集表现出更有的性能。

GRU结构

GRU的结构如下图所示:

Image from [38]. The GRU model combines the "forget" gate and "input"... |  Download Scientific Diagram

它只有两个门,对应输出更新门(update gate)向量:\textbf{z}_t重置门(reset gate)向量:\textbf{r}_t更新门负责控制上一时刻状态信息\textbf{h}_{t-1}对当前时刻状态的影响,更新门的值越大说明上一时刻的状态信息\textbf{h}_{t-1}带入越多。而重置门负责控制忽略前一时刻的状态信息\textbf{h}_{t-1}的程度,重置门的值越小说明忽略的越多。注意前两个,更新门和重置门的表达式,[,]表示两个向量连接,\cdot表示矩阵相乘,\sigma表示sigmoid函数。

接下来,“重置”之后的重置门向量\textbf{r}_t 与前一时刻状态\textbf{h}_{t-1}卷积 \textbf{r}_t * \textbf{h}_{t-1},再将\textbf{r}_t * \textbf{h}_{t-1}与输入\textbf{x}_t进行拼接,再通过激活函数tanh来将数据放缩到-1~1的范围内。这里包含了输入数据\textbf{x}_t,并且将上一时刻状态的卷积结果添加到当前的隐藏状态,通过此方法来记忆当前时刻的状态。

最后一个步骤是更新记忆阶段,此阶段同时进遗忘和记忆两个步骤,使用同一个门控\textbf{z}_t同时进行遗忘和选择记忆(LSTM是多个门控制) 

(\textbf{1} -\textbf{z}_t)*\textbf{h}_{t-1}:对隐藏的原状态,选择性地遗忘。 

\textbf{z}_t*{\widetilde{\textbf{h}}}_{t}:对当前节点信息,进行选择性的记忆。

GRU单元的tensorflow 实现 

def gru(inputs, state, params):
    W_xz, W_hz, b_z, W_xr, W_hr, b_r, W_xh, W_hh, b_h, W_hq, b_q = params
    H, = state
    outputs = []
    for X in inputs:
        X=tf.reshape(X,[-1,W_xh.shape[0]])
        Z = tf.sigmoid(tf.matmul(X, W_xz) + tf.matmul(H, W_hz) + b_z)
        R = tf.sigmoid(tf.matmul(X, W_xr) + tf.matmul(H, W_hr) + b_r)
        H_tilda = tf.tanh(tf.matmul(X, W_xh) + tf.matmul(R * H, W_hh) + b_h)
        H = Z * H + (1 - Z) * H_tilda
        Y = tf.matmul(H, W_hq) + b_q
        outputs.append(Y)
    return outputs, (H,)

 

 

 

 

 

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值