深度学习与智能故障诊断学习笔记(三)——RNN与LSTM推导详解_深度学习 故障诊断-程序员宅基地

技术标签: lstm  rnn  深度学习  

1.RNN

1.1网络结构

标准神经网络的输入输出在不同例子中可能有不同的长度,在学习中并不共享从不同位置上学到的特征。因为标准神经网络的训练集是稳定的,即所有的特征域表达的内容是同一性质的,一旦交换位置,就需要重新学习。故障诊断和健康管理属于带有时间序列的任务场景,在进行学习时参数量巨大,标准神经网络无法体现出时序上的前因后果,所以引入循环神经网络。如图所示为RNN循环神经网络的单元。

其中x^{<t>}为当前输入,a^{<t-1>}为前一个状态,b为偏置项,tanh为激活函数,用于学习非线性部分。当前输入和前一个状态分别乘以对应权重并相加,在加上偏置项,乘激活函数得到当前状态a^{<t>},此状态在下一个神经元学习时又作为a^{<t-1>}进行运算,由此实现时序关联。输出\widehat{y}^{t}的激活函数根据任务类型来选择,若是多分类可以选择softmax,若二分类则可直接选择sigmod。

(注:输出并非每个神经元都必须有,RNN可以是多输入多输出,也可以是多输入单输出,仅在学习完成后输出)

1.2RNN网络特点

 RNN网络为串联结构,可以体现出“前因后果”,后面结果的生成要参考前面的信息,且所有特征共享一套参数。这使得RNN在面对不同的输入(两个方面),可以学习到不同的相应结果,并极大的减少了训练参数量。

(RNN输入和输出数据在不同场景中可以有不同的长度)

1.3损失函数

单个时间步的损失函数可根据多分类和二分类进行自定义

整个序列的损失函数是将所有单步损失函数相加,如式。

 1.4传播过程

前向传播如图一所示。

反向传播

 (图源自吴恩达老师课件)

求解梯度即复合函数求导,按照链式法则进行求导。

反向传播具体过程需要按照损失函数来具体求解,但上式对所有RNN模型都适用。

 1.5缺点

当序列太长时,容易产生梯度消失,参数更新只能捕捉到局部以来关系,没法再捕捉序列之间长期的关联或依赖关系。

如图为RNN连接,输入x,输出o(简单线性输出),权重w,s为生成状态。

 根据前向传播可得:

假设使用平方误差作为损失函数,对单个时间点进行求梯度,假设再t=3时刻,损失函数为L3 = \frac{1}{2}\left ( {Y}_3 - {O}_3 \right )^{2}。然后根据网络参数Wx,Ws,Wo,b1,b2等求梯度。

Wo:

 Wx(具体求解过程在下边):

 经整理可得:

 具体求解过程:

首先,所求目标为L3对Wx的偏导,通过链式法则进行展开。对比前向传播公式图可知,O3中并不能直接对Wx求偏导,而是包含在S3中,所以要展开成如下形式。

但在S3中又包含S2,S2中包含Wx和S1,S1中又包含Wx,嵌套了很多层,为了方便表示,我们用\theta3来表示S3括号中的内容。进一步简化可得:

 由S3演变为S2,同理可递推求出\frac{\partial S_{2}}{\partial W_{x}}\frac{\partial S_{1}}{\partial W_{x}}

再将所求出结果回代到公式中,可以得出 \frac{\partial S_{3}}{\partial W_{x}}

再回带至 \frac{\partial L_{3}}{\partial W_{x}}

 由该式可以看出,梯度的更新同时依赖于x3,x2,x1包括其梯度值。将该式处理为

此为t=3时刻的梯度公式,推广至任意时刻的梯度公式为:

此式括号中的项为求导的连乘,此处求出的导数是介于0-1之间的,有一定的机率导致梯度消失(但非主要原因)。造成梯度消失和梯度爆炸的主要原因是最后一项:当Ws很小的时候,它的k-1的次方会无限接近于0,而当Ws大于1时,它的k-1次方会很大。

如下为t=20时梯度更新计算的结果:

从式中可以看出,t=3的节点由于连乘过多导致梯度消失,无法将信息传给t=20,因此t=20的更新无法引入t=3时的信息,认为t=20节点跟t=3的节点无关联。 

对于梯度爆炸和梯度消失,可以通过梯度修剪来解决。相对于梯度爆炸,梯度消失更难解决。而LSTM很好的解决了这些问题。

2.LSTM

 2.1设计思路

RNN是想把所有信息都记住,不管是有用的信息还是没用的信息。而LSTM设计了一个记忆细胞,具备选择性记忆功能,可以选择记忆重要信息,过滤掉噪声信息,减轻记忆负担。

2.2整体结构

如图为LSTM与RNN结构对比

 LSTM

 RNN

2.3单元结构

在LSTM每个时间步中,都有一个记忆细胞,这个东西给予了LSTM选择记忆功能,使得LSTM有能力自由选择每个时间步里面记忆的内容。

下图中Ct-1为上一个记忆细胞,ht-1为上一个时间点的状态,经过该单元,输出一个新的记忆细胞和一个新的状态。在单元中有三个\sigma\sigma被称为门单元,它的输出值介于0-1之间。ft为遗忘门,it为更新门,Ot为输出门。

门是一种选择性地让信息通过的方法。它们由sigmoid神经网络层和逐点乘法运算组成。Sigmoid层输出0到1之间的数字,描述每个组件应允许通过多少。值为零表示“不让任何内容通过”,而值为 1 表示“允许所有信息通过”

 

公式所示为前向传播,Ct与Ct-1,ht-1,xt等参数都有关,其中Wxf,Whf,Wxi分别代表相应权重。在单元结构图中可以看出ft与Ct-1进行×运算(对应元素相乘),gt与it进行×运算,两者相加为新生成的ct。

2.4 缓解梯度爆炸和梯度消失

此过程为公式推导(以求Wxf为例)。

 

通过调节Whf,Whi,Whg的值,可以灵活控制Ct对Ct-1的偏导值,当要从n时刻长期记忆某个东西到m时刻时,该路径上的

 从而大大缓解了梯度消失和梯度爆炸。

(B站搜索老弓的学习日记,本篇博客为RNN与LSTM的学习笔记)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Vanderbiol/article/details/124256099

智能推荐

Flutter中2个库的类名冲突解决方法_flutter 类冲突-程序员宅基地

文章浏览阅读2.7w次。Flutter中2个库的类名冲突解决方法例如,我们在使用国际化时,会给组件(如,日历组件),设置一个本地属性来显示当地语言:locale: Locale("zh")上例中,显示中文。当我们引用第三方库 date_format 来格式化日期时,由于 date_format 库中,也包含了 Locale 组件,这时,就会报错。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lUi4kEip-1609149717960)(evernotecid://6FE75482-5_flutter 类冲突

新技术加速隐私暴露,如何应对?-程序员宅基地

文章浏览阅读9.3k次。新技术加速隐私暴露,如何应对?(一)原创数据玩家一个数据玩家的自我修养2019-10-09收录于话题#新技术与隐私保护8个点击上方蓝字关注数据玩家 正文约4000字,读完需11分钟序最近的大数据行业风声鹤唳,多家大数据服务头部企业、贷超、催收公司被查,引发行业地震,未被牵连的企业纷纷自查,其他头部公司黑稿和纠纷频出。从业者如惊弓之鸟,人人自危;普通用户纷纷叫好,同时引发对隐私保护的担忧和强监管诉求。此刻我又想...

elementUI el-dialog自适应高度,仅body内容部分滚动_el-dialog高度自适应-程序员宅基地

文章浏览阅读1.5w次,点赞5次,收藏11次。定义样式如下:.abow_dialog { display: flex; justify-content: center; align-items: Center; overflow: hidden; .el-dialog { margin: 0 auto !important; height: 90%; ..._el-dialog高度自适应

C++实现简单五子棋游戏_c++五子棋-程序员宅基地

文章浏览阅读6.5w次,点赞106次,收藏633次。  五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜。 规则(1)对局双方各执一色棋子。 (2)空棋盘开局。 (3)黑先、白后,交替下子,每次只能下一子。 (4)棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动,不得从棋盘上拿掉或拿起另落别处..._c++五子棋

python箭头符号怎么打_python – 用箭头标记matplotlib直方图bin-程序员宅基地

文章浏览阅读1.2k次。您可以使用注释添加箭头:import pandas as pdimport matplotlib.pyplot as plt#import seaborn as snsimport numpy as npfig,ax = plt.subplots()series = pd.Series(np.random.normal(0,1000))series.plot(kind='hist',bins=50..._python右箭头怎么打出来

python数据滤波_python实现滤波-程序员宅基地

文章浏览阅读1.1k次。Python+OpenCV基础教程2:平滑图像学习模糊/平滑图像,消除噪点。图片等可到源码处下载。1、目标2、教程滤波与模糊推荐大家先阅读:番外篇:卷积基础(图片边框),有助于理解卷积和滤波的概念。关于滤波和模糊,很多人分不清,我来给大家理理(虽说如此,我后面也会混着用,,ԾㅂԾ,,):它们都属于卷积,不同滤波方法之间只是卷积...文章初商2019-08-04484浏览量深度学习第18讲:CNN经..._python 血氧滤波

随便推点

python ordereddict_Python标准库使用OrderedDict类的实例讲解-程序员宅基地

文章浏览阅读135次。目标:创建一个字典,记录几对python词语,使用OrderedDict类来写,并按顺序输出。写完报错:[root@centos7 tmp]# python python_terms.pyFile "python_terms.py", line 9from name,language in python_terms.items():^SyntaxError: invalid syntax代码如下:..._python ordereddict 循环输出

RabbitMQ的使用_rabbitmq system.in.read()-程序员宅基地

文章浏览阅读1.2k次。目录RabbitMQ的使用一.Java连接RabbitMQ1.1创建Maven项目1.2导入依赖1.3创建工具类连接RabbitMQ二.通讯方式1.Hello-World2.Work3.Publish/Subscribe4.Routing5.TopicRabbitMQ的使用一.Java连接RabbitMQ1.1创建Maven项目pass 。。。。1.2导入依赖<dependencies> <dependen._rabbitmq system.in.read()

浅谈对象内存分配问题_对象分配问题-程序员宅基地

文章浏览阅读225次。堆,又叫自由存储区,它是在程序执行的过程中动态分配的,所以它最大的特性就是动态性。在C++中,所有堆对象的创建和销毁都要由程序员负责,所以,如果处理不好,就会发生内存问题。如果分配了堆对象,却忘记了释放,就会产生内存泄漏;而如果已释放了对象,却没有将相应的指针置为NULL,该指针就是所谓的“悬挂指针”,再度使用此指针时,就会出现非法访问,严重时就导致程序崩溃。  那么,C++中_对象分配问题

音视频开发之旅(64) - 部分android手机编码的视频在ios上无法播放_base media / version 2-程序员宅基地

文章浏览阅读4k次。目录 问题描述 问题分析 问题原因 问题解决 资料 收获 一、问题描述用小米11 录制视频上传后,在iPhone的Safari浏览器或者应用的H5中无法播放,而android设备上的确实可以正常播放。同样的操作,在一些其他android的手机上传的视频,在ios端却可以正常播放。二、问题分析拿到(能播放和不能播放)两个视频。分析下这两个视频有什么差异。通过MediaInfo查看两个视频的基本信息不能播放的视频{"_base media / version 2

Sourcetree 虽然不咋的好用,但了解一些基本使用也算可以_sourcetree好用吗-程序员宅基地

文章浏览阅读1.4k次。一、基本介绍1.1 基本介绍  Sourcetree 是一款Windows 和Mac OS X 下免费的 SVN、Git 客户端,同时也是 Mercurial 和 Subversion 版本控制系统工具。Sourcetree 支持创建、克隆、提交、push、pull 和合并等操作。SourceTree 拥有一个精美简洁的界面,无需使用命令行,可以处理托管和本地存储库,主要依赖可视化界面操作,省去繁琐复杂不容易理解的终端命令,大大简化了开发者与代码库之间的 Git 操作方式,这对于那些不熟悉Git命令的开_sourcetree好用吗

多任务学习:Transformer based MultiHead Self-Attention Networks_transformer多任务-程序员宅基地

文章浏览阅读2.4k次。孤岛模型被证明是单词生成模型的理想基础。马尔可夫链蒙特卡洛(MCMC)方法,在统计物理和材料科学领域均产生了重大影响。同样,在自然语言处理领域,深度学习技术也扮演着至关重要的角色,包括基于RNN、CNN、LSTM等的预训练语言模型、神经机器翻译、条件随机场、长短时记忆网络等,这些模型都取得了显著的效果。而在医疗问答系统中,自然语言理解和机器阅读理解组件的实现也逐渐成为关键任务,如何将两种学习模型结合起来,并对医疗数据进行有效处理,是关键之处。_transformer多任务