LSTM简介以及数学推导(FULL BPTT)

LSTM简介以及数学推导(FULL BPTT)前段时间看了一些关于LSTM方面的论文,一直准备记录一下学习过程的,因为其他事儿,一直拖到了现在,记忆又快模糊了。现在赶紧补上,本文的组织安排是这样的:先介绍rnn的BPTT所存在的问题,然后介绍最初的LSTM结构,在介绍加了遗忘控制门的,然后是加了peepholeconnections结构的LSTM,都是按照真实提出的时间顺序来写的。本文相当于把各个论文核心部分简要汇集一下而做的笔记,已提供快

大家好,又见面了,我是你们的朋友全栈君。

前段时间看了一些关于LSTM方面的论文,一直准备记录一下学习过程的,因为其他事儿,一直拖到了现在,记忆又快模糊了。现在赶紧补上,本文的组织安排是这样的:先介绍rnn的BPTT所存在的问题,然后介绍最初的LSTM结构,在介绍加了遗忘控制门的,然后是加了peephole connections结构的LSTM,都是按照真实提出的时间顺序来写的。本文相当于把各个论文核心部分简要汇集一下而做的笔记,已提供快速的了解。


一.rnn结构的BPTT学习算法存在的问题

先看一下比较典型的BPTT一个展开的结构,如下图,这里只考虑了部分图,因为其他部分不是这里要讨论的内容。

LSTM简介以及数学推导(FULL BPTT)

对于t时刻的误差信号计算如下:

LSTM简介以及数学推导(FULL BPTT)

这样权值的更新方式如下:

LSTM简介以及数学推导(FULL BPTT)

上面的公式在BPTT中是非常常见的了,那么如果这个误差信号一直往过去传呢,假设任意两个节点u, v他们的关系是下面这样的:

LSTM简介以及数学推导(FULL BPTT)

那么误差传递信号的关系可以写成如下的递归式:

LSTM简介以及数学推导(FULL BPTT)

n表示图中一层神经元的个数,这个递归式的大概含义不难理解,要求t-q时刻误差信号对t时刻误差信号的偏导,就先求出t-q+1时刻对t时刻的,然后把求出来的结果传到t-q时刻,递归停止条件是q = 1时,就是刚开始写的那部分计算公式了。将上面的递归式展开后可以得到:

LSTM简介以及数学推导(FULL BPTT)

论文里面说的是可以通过归纳来证明,我没仔细推敲这里了,把里面连乘展开看容易明白一点:

LSTM简介以及数学推导(FULL BPTT)

整个结果式对T求和的次数是n^(q-1), 即T有n^(q-1)项,那么下面看问题出在哪儿。

如果|T| > 1, 误差就会随着q的增大而呈指数增长,那么网络的参数更新会引起非常大的震荡。

如果|T| < 1, 误差就会消失,导致学习无效,一般激活函数用simoid函数,它的倒数最大值是0.25, 权值最大值要小于4才能保证不会小于1。

误差呈指数增长的现象比较少,误差消失在BPTT中很常见。在原论文中还有更详细的数学分析,但是了解到此个人觉的已经足够理解问题所在了。



二.最初的LSTM结构

为了克服误差消失的问题,需要做一些限制,先假设仅仅只有一个神经元与自己连接,简图如下:

LSTM简介以及数学推导(FULL BPTT)

根据上面的,t时刻的误差信号计算如下:

LSTM简介以及数学推导(FULL BPTT)

为了使误差不产生变化,可以强制令下式为1:

LSTM简介以及数学推导(FULL BPTT)

根据这个式子,可以得到:

LSTM简介以及数学推导(FULL BPTT)

这表示激活函数是线性的,常常的令fj(x) = x, wjj = 1.0,这样就获得常数误差流了,也叫做CEC。

但是光是这样是不行的,因为存在输入输出处权值更新的冲突(这里原论文里面的解释我不是很明白),所以加上了两道控制门,分别是input gate, output gate,来解决这个矛盾,图如下:

LSTM简介以及数学推导(FULL BPTT)


图中增加了两个控制门,所谓控制的意思就是计算cec的输入之前,乘以input gate的输出,计算cec的输出时,将其结果乘以output gate的输出,整个方框叫做block, 中间的小圆圈是CEC, 里面是一条y = x的直线表示该神经元的激活函数是线性的,自连接的权重为1.0


三.增加forget gate


最初lstm结构的一个缺点就是cec的状态值可能会一直增大下去,增加forget gate后,可以对cec的状态进行控制,它的结构如下图:
LSTM简介以及数学推导(FULL BPTT)

这里的相当于自连接权重不再是1.0,而是一个动态的值,这个动态值是forget gate的输出值,它可以控制cec的状态值,在必要时使之为0,即忘记作用,为1时和原来的结构一样。

四.增加Peephole的LSTM结构


上面增加遗忘门一个缺点是当前CEC的状态不能影响到input gate, forget gate在下一时刻的输出,所以增加了Peephole connections。结构如下:
LSTM简介以及数学推导(FULL BPTT)
这里的gate的输入部分就多加了一个来源了,forget gate, input gate的输入来源增加了cec前一时刻的输出,output gate的输入来源增加了cec当前时刻的输出,另外计算的顺序也必须保证如下:
  1. input gate, forget gate的输入输出
  2. cell的输入
  3. output gate的输入输出
  4. cell的输出(这里也是block的输出)

五.一个LSTM的FULL BPTT推导(用误差信号)

我记得当时看论文公式推导的时候很多地方比较难理解,最后随便谷歌了几下,找到一个写的不错的类似课件的PDF,但是已经不知道出处了,很容易就看懂LSTM的前向计算,误差反传更新了。把其中关于LSTM的部分放上来,首先网络的完整结构图如下:
LSTM简介以及数学推导(FULL BPTT)

这个结构也是rwthlm源码包中LSTM的结构,下面看一下公式的记号:
  • wij表示从神经元i到j的连接权重(注意这和很多论文的表示是反着的)
  • 神经元的输入用a表示,输出用b表示
  • 下标 ι, φ 和 ω分别表示input gate, forget gate,output gate 
  • c下标表示cell,从cell到 input, forget和output gatepeephole权重分别记做  wcι , wcφ and wcω
  • Sc表示cell c的状态
  • 控制门的激活函数用f表示,g,h分别表示cell的输入输出激活函数
  • I表示输入层的神经元的个数,K是输出层的神经元个数,H是隐层cell的个数
前向的计算:
LSTM简介以及数学推导(FULL BPTT)
误差反传更新:
LSTM简介以及数学推导(FULL BPTT)
LSTM简介以及数学推导(FULL BPTT)


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152289.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • [33]python Web 框架:Tornado

    [33]python Web 框架:Tornado1.TornadoTornado:python编写的web服务器兼web应用框架1.1.Tornado的优势轻量级web框架异步非阻塞IO处理方式出色的抗负载能力优异的处理性能,不依赖多进程/多线程,一定程度上解决C10K问题WSGI全栈替代产品,推荐同时使用其web框架和HTTP服务器1.2.TornadoVSDjang…

  • php三个数从大到小排列_php常用的流程控制语句

    php三个数从大到小排列_php常用的流程控制语句<?php$a = rand(100,999);$b = rand(100,999);$c = rand(100,999);echo “a=”.”$a”.”<br>”;echo “b=”.”$b”.”<br>”;echo “c=”.”$c”.”<br>”;if(($a > $b ) && ($a > …

  • 简述mux vlan的功能及应用场景_vlan的原理

    简述mux vlan的功能及应用场景_vlan的原理MuxVLAN是一种在交换机上的2层隔离技术,基于VLAN实现资源的控制。MuxVLAN技术中包含了主VLAN和辅助VLAN;辅助VLAN分为隔离VLAN和组VLAN。一个主VLAN中可以同时包含多个组VLAN,最多只能包含1个隔离VLAN。同一个组VLAN中的端口可以互相通信,不同组VLAN中的端口无法通信;同一个隔离组中的端口不可以通信;但是隔离VLAN与组VLAN中的端口,都可以与主VLAN中的端口进行通信。简述端口隔离的实现原理端口隔离是一种在

  • PyPDF2 | 利用 Python 实现 PDF 分割

    PyPDF2 | 利用 Python 实现 PDF 分割1.PDF分割由于疫情影响被迫在家上网课,因此教材也只能用电子版。但有一门教材是对开的扫描版,导致在iPad上阅读很不友好,因此决定寻找一个工具将PDF对半分开。图1分割前的PDF在百度了一番后,发现大多都是使用AdobeAcrobat软件进行剪裁,这完全不Pythonic,因此又找了用Python处理PDF文件的方法,最后发现了PyPDF2这个库,本…

  • nport串口服务器配置网址(串口服务器是不是网口转串口)

    NPort串口服务器有分“驱动模式”及“socket模式”如果您的程序是通过串口进行通讯,那么请选择NPort的“驱动模式”,也就是为主机添加虚拟串口,具体安装配置是(这里以windows为例):1、通过NPortSearchUtility找到网络上的NPort,请将主机IP与NPortIP在同一网段中,NPort默认IP:192.168.127.2542、选择相对应的NPort双击;3…

  • 虚拟机配置DNS服务器「建议收藏」

    虚拟机配置DNS服务器「建议收藏」虚拟机配置DNS服务DNS简介下面演示如何通过虚拟机安装DNS服务器windows2003(DNS服务端)安装DNS服务客户端做相应配置回到windows2003新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入DNS简介

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号