当前位置:首页 > 学习资源 > 讲师博文 > 一文弄懂RNN、LSTM 和 GRU单元 !

一文弄懂RNN、LSTM 和 GRU单元 ! 时间:2024-07-10      来源:华清远见

RNN

循环神经网络(Recurrent Neural Network,RNN ),主要处理序列数据,输入的序列数据可以是连续的、长度不固定的序列数据,也可以是固定的序列数据。循环神经网络能保持对过去事件和当前事件的记忆,从而可以捕获长距离样本之间的关联信息。循环神经网络在文字预测、语音识别等领域表现较大优势。

RNN网络结构解析

图1是RNN网络图示



RNN存在的问题

存在梯度爆炸和消失的问题,对于长距离的句子的学习效果不好。

反向传播中,对激活函数进行求导,如果此部分大于1,那么层数增多的时候,最终的求出的梯度更新将以指数形式增加,即发生梯度爆炸,如果此部分小于1,那么随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生了梯度消失。

RNN代码示例

pytorch 简单代码示例

rnn = nn.RNN(10, 20, 2)

input = torch.randn(5, 3, 10)

h0 = torch.randn(2, 3, 20)

output, hn = rnn(input, h0)

LSTM 

长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的。

LSTM网络结构解析

LSTM网络结构如图2所示



LSTM优势

RNN中只有一个隐藏状态,LSTM增加了一个元胞状态单元,其在不同时刻有着可变的连接权重,以解决RNN中梯度消失或爆炸问题。隐藏状态控制短期记忆,元胞状态单元控制长期记忆,和配合形成长短期记忆。

LSTM代码示例

pytorch 简单代码示例

rnn = nn.LSTM(10, 20, 2)

input = torch.randn(5, 3, 10)

h0 = torch.randn(2, 3, 20)

c0 = torch.randn(2, 3, 20)

output, (hn, cn) = rnn(input, (h0, c0))

GRU单元

门控循环单元(gated recurrent unit,GRU)是为了解决循环神经网络中计算梯度, 以及矩阵连续乘积导致梯度消失或梯度爆炸的问题而提出,GRU更简单,通常它能够获得跟LSTM同等的效果,优势是计算的速度明显更快。

GRU单元结构解析

GRU单元结构如图3所示



GRU优势

GRU可以取得与LSTM想当甚至更好的性能,且收敛速度更快。

GRU代码示例

pytorch 简单代码示例

rnn = nn.GRU(10, 20, 2)

input = torch.randn(5, 3, 10)

h0 = torch.randn(2, 3, 20)

output, hn = rnn(input, h0)

上一篇:嵌入式OTA升级原理

下一篇:如何提高嵌入式代码质量?

戳我查看2020年嵌入式每月就业风云榜

点我了解华清远见高校学霸学习秘籍

猜你关心企业是如何评价华清学员的

干货分享
相关新闻
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2024 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部