深度学习笔记—— GRU(Gated Recurrent Unit)
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的GRU、Bi-RNN知识点。
热门专栏
机器学习
机器学习笔记合集
深度学习
深度学习笔记合集
文章目录
- 热门专栏
- 机器学习
- 深度学习
- GRU(Gated Recurrent Unit)
- GRU 的基本结构
- GRU 的工作原理与公式
- (1) 更新门(Update Gate)
- (2) 重置门(Reset Gate)
- (3) 生成候选隐藏状态(Candidate Hidden State)
- (4) 隐藏状态更新
- GRU 的优点
- GRU 的局限性
- GRU 与 LSTM 的对比
- Bi-RNN
- Bi-RNN 的结构
- Bi-RNN 的工作原理
- Bi-RNN 的特点
- RNN、LSTM、GRU 和 Bi-RNN 总结
- 全连接层在各神经网络模型中的作用
- 历史文章
- 机器学习
- 深度学习
GRU(Gated Recurrent Unit)
GRU 的基本结构
相比于 LSTM,GRU 的结构更为简洁:
- 少了一个门控:GRU 合并 LSTM 中的遗忘门和输入门,变为一个更新门来实现。
- 没有单独的记忆单元状态:GRU 将 LSTM 中的记忆单元状态(Cell State)合并到隐藏状态(Hidden State) 中,隐藏状态既用于存储当前时间步的信息,也用于在时间步之间传递长期信息。
这种简化使得 GRU 具有更少的参数,训练速度更快,并且在某些任务上,GRU 的性能和 LSTM 相当甚至更优。
GRU 主要由两个门组成:
更新门:
- 输入:前一时间步的隐藏状态 ( h t − 1 h_{t-1} ht−1 ) 和当前时间步的输入 ( x t x_t xt )。
- 作用:决定当前时间步的隐藏状态 多少旧的信息需要保留 ( h t − 1 h_{t-1} ht−1 ) ,以及多少新的信息需要加入 ( x t x_t xt )
重置门:
- 输入:前一时间步的隐藏状态 ( h t − 1 h_{t-1} ht−1 ) 和当前时间步的输入 ( x t x_t xt )。
- 作用:控制生成新的候选隐藏状态时,前一时间步的隐藏状态 ( h t − 1 h_{t-1} ht−1 ) 被遗忘或保留的程度。
这两个门决定了每个时间步的信息如何被保留、更新或丢弃。通过这两个门,GRU 能够高效地捕捉短期和长期的依赖关系。
GRU 的工作原理与公式
在 GRU 中,给定一个输入序列 ( x 1 , x 2 , . . . . . . , x T x_1, x_2, ......, x_T x1,x2,......,xT),每个时间步 ( t t t ) 的计算过程分为以下几个步骤:
(1) 更新门(Update Gate)
更新门 Z t Z_t Zt 控制着当前时间步的隐藏状态与前一时间步的隐藏状态之间的融合。它决定了多少旧的信息 h t − 1 h_{t-1} ht−1需要保留,以及多少新的信息 x t x_t xt需要加入,从而控制隐藏状态的更新。
- 计算公式:
z t = σ ( W z ⋅ [ h t − 1 , x t ] + b z ) z_t=\sigma(W_z\cdot[h_{t - 1},x_t]+b_z) zt=σ(Wz⋅[ht−1,xt]+bz)- z t z_t zt:更新门的输出,表示前一时间步隐藏状态 h t − 1 h_{t - 1} ht−1和当前时间步输入 x t x_t xt的融合比例。
- h t − 1 h_{t - 1} ht−1:前一时间步的隐藏状态(即记忆)。
- x t x_t xt:当前时间步的输入。
- W z W_z Wz、 b z b_z bz:更新门的权重和偏置。
- σ \sigma σ:sigmoid函数,用于将输出压缩到0和1之间。
(2) 重置门(Reset Gate)
重置门 r t r_t rt决定如何将前一时间步的隐藏状态( h t − 1 h_{t-1} ht−1 ) 和当前输入 ( x t x_t xt ) 结合,生成新的候选隐藏状态。它控制前一时间步的隐藏状态 ( h t − 1 h_{t-1} ht−1 ) 在多大程度上被遗忘。
- 计算公式:
r t = σ ( W r ⋅ [ h t − 1 , x t ] + b r ) r_t=\sigma(W_r\cdot[h_{t - 1},x_t]+b_r) rt=σ(Wr⋅[ht−1,xt]+br)- r t r_t rt:重置门的输出,决定是否丢弃前一时间步的隐藏状态信息。
- 其他符号与更新门公式中的符号相同。
重置门 r t r_t rt控制了从前一时间步的隐藏状态 h t − 1 h_{t - 1} ht−1中提取多少信息。如果 r t r_t rt值接近0,则大部分历史信息将被忽略,这在捕捉短期依赖时尤为重要;如果 r t r_t rt值接近1,则保留更多的历史信息,有助于捕捉长期依赖。
(3) 生成候选隐藏状态(Candidate Hidden State)
结合当前输入 ( x t x_t xt ) 和部分前一时刻隐藏状态信息和重置门的输出 ( r t ∗ h t − 1 r_t * h_{t-1} rt∗ht−1 ) 生成的候选隐藏状态 ( h ~ t \tilde{h}_t h~t )
- 计算公式:
h ~ t = tanh ( W h ⋅ [ r t ∗ h t − 1 , x t ] + b h ) \tilde{h}_t=\tanh(W_h\cdot[r_t*h_{t - 1},x_t]+b_h) h~t=tanh(Wh⋅[rt∗ht−1,xt]+bh)- h ~ t \tilde{h}_t h~t:候选隐藏状态,表示当前时间步的临时记忆。
- r t ∗ h t − 1 r_t*h_{t - 1} rt∗ht−1:将重置门的输出 r t r_t rt与前一时间步的隐藏状态 h t − 1 h_{t - 1} ht−1进行逐元素乘法,这决定了在生成候选状态时保留多少过去的信息。
- W h W_h Wh、 b h b_h bh:候选隐藏状态的权重和偏置。
- tanh \tanh tanh: tanh \tanh tanh函数将输出压缩到 [ − 1 , 1 ] [-1,1] [−1,1],确保隐藏状态的平稳更新。
(4) 隐藏状态更新
最终的隐藏状态 ( h t h_t ht ) 是根据更新门 ( z t z_t zt ) 的输出来决定的。更新门 ( z t z_t zt ) 控制了当前隐藏状态 ( h t h_t ht ) 是更依赖于上一时刻的隐藏状态 ( h t − 1 h_{t-1} ht−1 ) 还是新计算的候选隐藏状态 ( h ~ t \tilde{h}_t h~t )。
- 更新公式:
h t = z t ∗ h t − 1 + ( 1 − z t ) ∗ h ~ t h_t=z_t*h_{t - 1}+(1 - z_t)*\tilde{h}_t ht=zt∗ht−1+(1−zt)∗h~t- z t ∗ h t − 1 z_t*h_{t - 1} zt∗ht−1:保留一部分前一时间步的隐藏状态。
- ( 1 − z t ) ∗ h ~ t (1 - z_t)*\tilde{h}_t (1−zt)∗h~t:将新计算的候选隐藏状态加入隐藏状态中。
如果更新门 z t z_t zt接近0,则保留更多的候选隐藏状态 h ~ t \tilde{h}_t h~t,意味着网络更多地使用当前时间步的新信息;如果 z t z_t zt接近1,则保留更多的历史信息 h t − 1 h_{t - 1} ht−1,使得网络保持之前的记忆。
GRU 的优点
- GRU 和 LSTM 一样,通过门控机制可以有效地缓解梯度消失问题。
- 由于 GRU 的结构比 LSTM 简单,没有记忆单元状态,门的数量也较少,因此 GRU 的训练速度更快,计算效率高。
- 在许多任务中,GRU 的表现与 LSTM 相当,尤其在较短的序列数据上,GRU 甚至表现得更好。
GRU 的局限性
- 灵活性稍低:由于缺少独立的记忆单元状态,GRU 对非常长的依赖关系和复杂序列的处理能力可能不如 LSTM 强大。
- 统一的隐藏状态:在 GRU 中,隐藏状态既负责短期信息的存储,也负责长期信息的传递。无法更好地分离短期和长期信息。
GRU 与 LSTM 的对比
特性 | GRU | LSTM |
---|---|---|
门控机制 | 2 个门:更新门、重置门 | 3 个门:输入门、遗忘门、输出门 |
记忆状态 | 没有单独的记忆单元状态,只有隐藏状态 | 有记忆单元状态和隐藏状态 |
结构复杂性 | 结构较简单,参数较少 | 结构复杂,参数较多 |
处理长依赖 | 表现较好,能捕捉长期依赖 | 更适合处理复杂的长时间依赖 |
计算效率 | 相对较高,训练时间更快 | 计算开销较大,训练时间较长 |
- 序列较短时:在处理较短的序列时,GRU 的表现通常与 LSTM 相当甚至更好,由于 GRU 的结构更简单、计算效率更高,通常优先选择 GRU。
- 序列较长或依赖关系复杂时:在处理较长序列或有复杂长期依赖关系的任务时,LSTM 的表现通常更优,因为 LSTM 能够更灵活地通过记忆单元状态存储和传递长期信息。
- 计算资源有限时:如果对计算资源或训练时间有较高要求,GRU 是更好的选择,因为它参数更少、计算效率更高。
Bi-RNN
Bi-RNN 通过引入双向信息流,使网络能够同时考虑从左到右(前向)和从右到左(后向)的信息流动。计算每个时间步的输出时,Bi-RNN 不仅考虑当前时间步之前的信息,还考虑之后的信息,从而提升了模型对时间序列依赖的捕捉能力。
Bi-RNN 的结构
Bi-RNN 的结构与传统 RNN 不同的是,它由两个独立的 RNN 层组成:一个是处理输入序列的前向 RNN,另一个是处理输入序列的后向 RNN。这两个 RNN 层分别处理序列的正向和反向信息流,然后将它们的输出进行组合,生成最终的输出。
Bi-RNN 的工作原理
Bi-RNN 的基本工作流程如下:
- 输入序列:网络接收一个输入序列 ( x 1 , x 2 , . . . , x T x_1, x_2, ..., x_T x1,x2,...,xT ),并同时将序列传递给前向 RNN 和后向 RNN。
- 前向 RNN:前向 RNN 从序列的第一个时间步开始,逐步处理输入序列,并生成每个时间步的前向隐藏状态 ( h t → \overrightarrow{h_t} ht )。
- 后向 RNN:后向 RNN 从序列的最后一个时间步开始,逐步反向处理输入序列,并生成每个时间步的后向隐藏状态 ( h t ← \overleftarrow{h_t} ht )。
- 组合输出:在每个时间步 ( t t t ),将前向隐藏状态和后向隐藏状态进行组合,生成最终的输出 ( y t y_t yt )。
- 输出序列:最终输出的序列 ( y 1 , y 2 , . . . , y T y_1, y_2, ..., y_T y1,y2,...,yT ) 同时考虑了输入序列的前后信息。
Bi-RNN 的特点
- 前后信息的整合:双向 RNN 能够同时利用序列的前后信息,因此在处理像语音、文本等需要上下文信息的任务中表现更好。
- 适合全局依赖任务:Bi-RNN 通过从两个方向处理数据,可以捕捉到更全局的依赖关系。
- 双倍计算量:由于需要处理两个方向的序列,因此计算复杂度比单向 RNN 高。
RNN、LSTM、GRU 和 Bi-RNN 总结
特性 | RNN | LSTM | GRU | Bi-RNN |
---|---|---|---|---|
结构 | 单向循环结构,只有隐藏状态 | 有记忆单元状态和隐藏状态,三门控制信息流 | 只有隐藏状态,合并了输入门和遗忘门 | 双向结构,有前向和后向两个独立的 RNN |
记忆能力 | 适合处理短期依赖,长序列时有梯度消失问题 | 能有效处理长时依赖,解决梯度消失问题 | 简化的版本,参数更少,能处理长短期依赖 | 能同时捕捉序列的前后信息,适合上下文相关任务 |
门机制 | 无门控机制 | 有输入门、遗忘门和输出门 | 有更新门和重置门,控制信息的保留和更新 | 没有门机制,双向结构通过前向和后向的组合增强 |
计算复杂度 | 低,参数少,计算速度快 | 复杂度较高,三门结构增加计算量 | 相对简单,参数和计算量比 LSTM 少 | 计算量大,需两次遍历输入序列,较高开销 |
优点 | 结构简单,适合短序列建模 | 能捕捉长短期依赖,解决梯度消失问题 | 训练效率高,能捕捉长短期依赖 | 能同时利用历史和未来信息,捕捉前后文依赖 |
缺点 | 难以捕捉长时间依赖,容易梯度消失或爆炸 | 训练时间较长,计算资源需求大 | 虽然简化了结构,但对复杂依赖建模较弱 | 需要双向处理,实时性差,计算开销大 |
适用场景 | 短期时间序列预测、简单的文本处理任务 | 长时间序列任务,如机器翻译、文本生成 | 适合资源受限、需要较快训练的任务 | 自然语言处理、语音识别、视频分析等上下文任务 |
应用示例 | 基本序列预测、时间序列分类 | 机器翻译、语言模型、文本分类、对话系统 | 语音识别、时间序列预测、情感分析 | 命名实体识别、语义角色标注、情感分类、语音识别 |
- RNN:适合处理短期依赖的简单任务,结构较为简单,但在处理长序列时容易出现梯度消失问题。
- LSTM:通过记忆单元和门控机制解决了梯度消失问题,擅长处理长时依赖任务,适合复杂的时间序列建模。
- GRU:LSTM 的简化版本,具有较少的参数和更高的计算效率,适合在需要较快训练的任务中使用,性能上通常与 LSTM 相当。
- Bi-RNN:双向结构能够同时捕捉序列中的前向和后向信息,非常适合自然语言处理和语音处理等需要利用上下文信息的任务。
这些网络结构都是处理序列数据的基础工具,选择哪一种网络通常取决于任务的复杂性和计算资源。
全连接层在各神经网络模型中的作用
全连接层(Fully Connected Layer, FC Layer)广泛应用于分类任务或回归任务的最后阶段。全连接层的主要作用是将上层提取的特征转换为具体的决策结果或输出。它在不同类型的神经网络模型中具有不同的作用。以下是全连接层在各类神经网络模型中的作用详细解释:
- 在MLP中,全连接层是主要计算单元,完成输入到输出的映射。
- 在CNN中,全连接层主要用于整合局部特征并生成分类结果。
- 在RNN和LSTM中,全连接层将时间序列特征映射为输出结果。
- 在Transformer模型中,全连接层参与注意力机制和输出映射。
- 在GAN中,全连接层用于潜在空间和图像特征之间的映射。
- 在自编码器中,全连接层用于特征压缩和重构。
- 在注意力机制中,全连接层用于计算注意力得分并变换上下文向量。
无论在哪种神经网络中,全连接层的核心作用都是将前一层的特征进一步映射到目标空间,形成最后的输出或决策。
历史文章
机器学习
机器学习笔记——损失函数、代价函数和KL散度
机器学习笔记——特征工程、正则化、强化学习
机器学习笔记——30种常见机器学习算法简要汇总
机器学习笔记——感知机、多层感知机(MLP)、支持向量机(SVM)
机器学习笔记——KNN(K-Nearest Neighbors,K 近邻算法)
机器学习笔记——朴素贝叶斯算法
机器学习笔记——决策树
机器学习笔记——集成学习、Bagging(随机森林)、Boosting(AdaBoost、GBDT、XGBoost、LightGBM)、Stacking
机器学习笔记——Boosting中常用算法(GBDT、XGBoost、LightGBM)迭代路径
机器学习笔记——聚类算法(Kmeans、GMM-使用EM优化)
机器学习笔记——降维
深度学习
深度学习笔记——优化算法、激活函数
深度学习——归一化、正则化
深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总
深度学习笔记——卷积神经网络CNN