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,)

 

 

 

 

 

### GRU门控循环单元的结构图与可视化 GRUGated Recurrent Unit)是一种简化版的LSTM(Long Short-Term Memory),它通过减少内部状态的数量来提高计算效率,同时保留了捕捉长期依赖的能力。以下是关于GRU架构及其可视化的详细介绍。 #### 1. GRU的核心组件 GRU的主要组成部分包括更新门(Update Gate)、重置门(Reset Gate)以及候选隐藏状态的计算模块。这些部分共同协作以决定当前时刻的状态如何受前一时刻的影响[^1]。 - **更新门 (z_t)**:控制上一时刻的信息有多少被传递到下一时刻。 - **重置门 (r_t)**:用于决定是否忽略之前的时间步中的信息。 - **候选隐藏状态 (~h_t)**:基于输入和之前的隐藏状态计算得出的新潜在状态。 #### 2. GRU的数学表达式 为了更好地理解GRU的工作原理,可以通过以下公式描述其核心操作: \[ z_t = \sigma(W_z \cdot [h_{t-1}, x_t]) \] \[ r_t = \sigma(W_r \cdot [h_{t-1}, x_t]) \] \[ \tilde{h}_t = tanh(W_h \cdot [r_t * h_{t-1}, x_t]) \] \[ h_t = (1-z_t)*h_{t-1} + z_t*\tilde{h}_t \] 其中 \(W_z, W_r, W_h\) 是权重矩阵;\(x_t\) 表示当前时刻的输入向量;\(h_{t-1}\) 和 \(h_t\) 分别表示前一时刻和当前时刻的隐藏状态[^2]。 #### 3. GRU结构图 下图为典型的GRU神经网络结构图,展示了各个门之间的连接方式以及数据流的方向: ![GRU Structure](https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Gated_recurrent_unit.svg/1920px-Gated_recurrent_unit.svg.png) 此图像清晰地描绘了更新门、重置门以及隐藏状态间的交互过程。可以看到,相比传统的RNN或LSTM,GRU减少了复杂的门控机制,从而降低了训练难度并提升了运行速度[^3]。 #### 4. MATLAB实现中的可视化方法 在MATLAB中构建GRU模型时,可以利用内置函数 `plot` 或者第三方工具箱来进行网络结构的可视化展示。例如,使用Deep Learning Toolbox提供的命令可以直接生成网络拓扑图: ```matlab layers = [ sequenceInputLayer(inputSize,'Name','input') gruLayer(hiddenUnits,'OutputMode','sequence','Name','gru') fullyConnectedLayer(outputSize,'Name','fc') regressionLayer('Name','output')]; lgraph = layerGraph(layers); plot(lgraph); ``` 上述代码片段定义了一个基本的GRU层,并将其与其他必要的层组合起来形成完整的网络结构。调用 `plot` 函数即可绘制出整个网络框架图。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值