首页 > 其他分享 >基本循环神经网络(RNN)

基本循环神经网络(RNN)

时间:2024-06-21 12:29:22浏览次数:13  
标签:输出 RNN 梯度 神经网络 循环 隐藏 输入

RNN背景:RNN与FNN

在前馈神经网络中,信息的传递是单向的,这种限制虽然使得网络变得更容易学习,但在一定程度上也减弱了神经网络模型的能力。
在生物神经网络中,神经元之间的连接关系要复杂的多。前馈神经网络可以看着是一个复杂的函数,每次输入都是独立的,即网络的输出只依赖于当前的输入
但是在很多现实任务中,网络的输入不仅和当前时刻的输入相关,也和其过去一段时间的输出相关。比如一个有限状态自动机,其下一个时刻的状态(输出)不仅仅和当前输入相关,也和当前状态(上一个时刻的输出)相关。
此外,前馈网络难以处理时序数据,比如视频、语音、文本等。时序数据的长度一般是不固定的,而前馈神经网络要求输入和输出的维数都是固定的,不能任意改变。因此,当处理这一类和时序相关的问题时,就需要一种能力更强的模型。

循环神经网络(Recurrent Neural Network,RNN) 是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其它神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。和前馈神经网络相比,循环神经网络更加符合生物神经网络的结构。

基本循环神经网络

循环神经网络的基本结构包括输入层、隐藏层和输出层。输入层的输入是序列数据,隐藏层的输出是经过循环神经网络计算得到的结果,输出层的输出是最终的预测结果。RNN模型的循环结构是指隐藏层的输出不仅可以传递给下一时刻的隐藏层,还可以作为输入层的输入。因此,RNN模型可以处理序列数据,并将每个时刻的数据传递给下一个时刻,以便进行长时间的依赖关系分析。

结构:

x是输入向量,o是输出向量,s表示隐藏层的值;U是输入层到隐藏层的权重矩阵V是隐藏层到输出层的权重矩阵循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s-1。权重矩阵W就是隐藏层上一次的值作为这一次的输入的权重。

我们将上图的基本RNN结构在时间维度展开(RNN是一个链式结构,每个时间片使用的是相同的参数):

其中,t 是时刻, x 是输入层, s 是隐藏层, o 是输出层,矩阵 W 就是隐藏层上一次的值作为这一次的输入的权重。

为什么循环神经网络可以往前看任意多个输入值呢?

如果反复把式 2 带入到式 1,将得到:

从上面的式子中可以看出:输出受前面历次输入值的影响

训练算法

循环神经网络的训练过程比较复杂,需要更多的计算资源和时间。训练过程通常采用反向传播算法和梯度下降算法。反向传播算法(BPTT)是指通过计算输出层和隐藏层之间的误差,并将误差反向传递给隐藏层和输入层,以便更新网络的权重。梯度下降算法是指通过计算损失函数对权重的梯度,并将梯度下降的方向作为优化方向,以最小化损失函数。

反向传播算法(BPTT)

BPTT算法是针对循环层的训练算法,它的基本原理和BP算法是一样的,也包含同样的三个步骤:

1.前向计算每个神经元的输出值;
2.反向计算每个神经元的误差项δ j 值,它是误差函数E对神经元j的加权输入netj​的偏导数;
3.计算每个权重的梯度。
最后再用随机梯度下降算法更新权重。

梯度爆炸和消失问题

  • 梯度消失:梯度趋近于零,网络权重无法更新或更新的很微小,网络训练再久也不会有效果;
  • 梯度爆炸:梯度呈指数级增长,变的非常大,然后导致网络权重的大幅更新,使网络变得不稳定。

实践中前面介绍的几种RNNs并不能很好的处理较长的序列,RNN在训练中很容易发生梯度爆炸和梯度消失,这导致梯度不能在较长序列中一直传递下去,从而使RNN无法捕捉到长距离的影响。

通常来说,梯度爆炸更容易处理一些。因为梯度爆炸的时候,我们的程序会收到NaN错误。我们也可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。

梯度消失更难检测,而且也更难处理一些。总的来说,我们有三种方法应对梯度消失问题:

1、合理的初始化权重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。

2、使用relu代替sigmoid和tanh作为激活函数。

3、使用其他结构的RNNs,比如长短时记忆网络(LTSM)和Gated Recurrent Unit(GRU),这是最流行的做法。

参考:

神经网络算法——反向传播 Back Propagation-腾讯云开发者社区-腾讯云 (tencent.com)

循环神经网络——RNN的训练算法:BPTT_rnn bptt-CSDN博客

循环神经网络(RNN)及衍生LSTM、GRU详解 - 凌逆战 - 博客园 (cnblogs.com)

深度学习--前馈神经网络、反馈神经网络_前馈神经网络和反馈神经网络-CSDN博客

标签:输出,RNN,梯度,神经网络,循环,隐藏,输入
From: https://blog.csdn.net/qq_45452617/article/details/139803280

相关文章

  • 基于卷积神经网络的图像风格迁移研究(论文)
    目录1绪论11.1研究背景11.2研究目的和意义11.2.1研究的应用价值11.2.2研究的前沿性和学术性31.3研究内容51.3.1风格建模51.3.2图像重建51.4研究现状和挑战61.4.1评估方法61.4.2理论支撑61.4.3风格迁移的三向权衡71.5前人研究工作7......
  • 三级缓存---解决 Spring 循环依赖
    1.循环依赖1.1什么是循环依赖首先,什么是循环依赖?这个其实好理解,就是两个Bean互相依赖,类似下面这样:“”"@ServicepublicclassAService{ @Autowired BServicebService;}@ServicepublicclassBService{ @Autowired AServiceaService;}“”"AServic......
  • 基于语音信号MFCC特征提取和GRNN神经网络的人员身份检测算法matlab仿真
    1.算法运行效果图预览    2.算法运行软件版本MATLAB2022a 3.部分核心程序P=[Dat1_wav1;Dat1_wav2;Dat2_wav1;Dat2_wav2;Dat3_wav1;Dat3_wav2;Dat4_wav1;Dat4_wav2];T=[ones(800,1);2*ones(800,1);3*ones(800,1);4*ones(800,1)];%GRNN训练net=newgrnn(......
  • 基于python-CNN卷积神经网络的鱼类识别-含数据集+pyqt界面
    代码下载地址:https://download.csdn.net/download/qq_34904125/89434763本代码是基于pythonpytorch环境安装的。下载本代码后,有个requirement.txt文本,里面介绍了如何安装环境,环境需要自行配置。或可直接参考下面博文进行环境安装。深度学习环境安装教程-anaconda-python-......
  • python 基础习题6--for循环和while循环
    1.用for循环打印1--10这10个数字,格式如下:运行结果如下: 12345678910 2.用 while循环打印1-10这个10个数字,请在横线处填空:counter=1whilecounter<= ________:print(counter)___________ 3.请问这段代码返回什么结果:(可以在环境中......
  • MATLAB神经网络工具箱使用介绍
      本文介绍MATLAB软件中神经网络拟合(NeuralNetFitting)工具箱的具体使用方法。  在MATLAB人工神经网络ANN代码这篇文章中,我们介绍了MATLAB软件中神经网络(ANN)的纯代码实现;而在MATLAB软件中,其实基于神经网络拟合工具箱,就可以点点鼠标实现神经网络的回归。本文就对基于这一工具......
  • 43、基于神经网络拟合函数的体脂估计(matlab)
    1、神经网络拟合函数的原理及流程神经网络拟合函数是一种基于人工神经元之间相互连接的模型,用来拟合复杂的非线性函数关系。其原理是通过多层次的神经元网络,每一层神经元通过激活函数将输入信号加权求和后输出,经过多次迭代优化权值,使得网络输出与实际值误差最小化。流程如下:......
  • PyTorch -- RNN 快速实践
    RNNLayertorch.nn.RNN(input_size,hidden_size,num_layers,batch_first)input_size:输入的编码维度hidden_size:隐含层的维数num_layers:隐含层的层数batch_first:·True指定输入的参数顺序为:x:[batch,seq_len,input_size]h0:[batch,num_layers,hidden_siz......
  • Spring是如何通过三级缓存解决循环依赖的
    Spring是如何利用三级缓存解决循环依赖的转载自:https://www.cnblogs.com/xw-01/p/17561035.html1.定义问题1.1什么是循环依赖其实好理解,就是两个Bean互相依赖,类似下面这样:@ServicepublicclassAService{ @Autowired BServicebService;}@ServicepublicclassBSer......
  • 如何解决深度神经网络中的梯度消失问题
    引言深度神经网络(DNNs)以其强大的特征学习能力在多个领域取得了巨大成功。然而,随着网络深度的增加,梯度消失问题逐渐显现,严重影响了深层网络的训练效率和性能。本文将探讨梯度消失问题的原因、影响以及解决这一问题的多种策略。梯度消失问题的定义在深度神经网络的训练过程......