一文弄懂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)
C语言内存管理避坑指南mallocfree与嵌入式堆栈(HeapSt
I2C 设备组网常见问题排查:从硬件到寄存器的全流程
Python迭代器与生成器深度解析
FreeRTOS 队列(Queue)使用与排错指南
时序预测技术对比: DNN/RNN/LSTM 在风电 功率预测中
STM32位域(bit-field)在寄存器映射中的高效应用与跨平
从Encoder-Decoder到GPT大模型的底层实现
DMA 传输配置指南:从串口、ADC 到 SPI 的高速数据吞
注意力机制深度拆解:从 Soft-Attention 到 Self-Atte
深入剖析:FreeRTOS信号量在设备通信中的工程细节
