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

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

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

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

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

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

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

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

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

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

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

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

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

二.最初的LSTM结构

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

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

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

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

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

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

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

三.增加forget gate

最初lstm结构的一个缺点就是cec的状态值可能会一直增大下去,增加forget gate后,可以对cec的状态进行控制,它的结构如下图:

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

四.增加Peephole的LSTM结构

上面增加遗忘门一个缺点是当前CEC的状态不能影响到input gate, forget gate在下一时刻的输出,所以增加了Peephole connections。结构如下:

这里的gate的输入部分就多加了一个来源了,forget gate, input gate的输入来源增加了cec前一时刻的输出,output gate的输入来源增加了cec当前时刻的输出,另外计算的顺序也必须保证如下:

input gate, forget gate的输入输出

cell的输入

output gate的输入输出

cell的输出(这里也是block的输出)

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

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

这个结构也是rwthlm源码包中LSTM的结构,下面看一下公式的记号:

wij表示从神经元i到j的连接权重(注意这和很多论文的表示是反着的)

神经元的输入用a表示,输出用b表示

下标 ι, φ 和 ω分别表示input gate, forget gate,output gate

c下标表示cell,从cell到 input, forget和output gate的peephole权重分别记做  wcι , wcφ and wcω

Sc表示cell c的状态

控制门的激活函数用f表示,g,h分别表示cell的输入输出激活函数

I表示输入层的神经元的个数,K是输出层的神经元个数,H是隐层cell的个数

前向的计算:

误差反传更新:

lstm数学推导_LSTM简介以及数学推导(FULL BPTT)相关推荐

  1. 3D数学-裁剪空间与透视投影矩阵的推导

    3D数学-裁剪空间与透视投影矩阵的推导 透视投影矩阵的变换本质,是将视锥体变换到裁剪空间中 视锥体的具有六个面,近裁剪面,远裁剪面,左裁剪面,右裁剪面,上裁剪面,下裁剪面 所有超出视锥体的都会被舍弃, ...

  2. 数学各个研究方向简介

    1. 数论 人类从学会计数开始就一直和自然数打交道了,后来由于实践的需要,数的概念进一步扩充,自然数被叫做正整数,而把它们的相反数叫做负整数,介于正整数和负整数中间的中性数叫做0.它们和起来叫做整数. ...

  3. 最全数学各个分支简介

    来源:算法数学俱乐部 编辑 ∑Gemini 数论 人类从学会计数开始就一直和自然数打交道了,后来由于实践的需要,数的概念进一步扩充,自然数被叫做正整数,而把它们的相反数叫做负整数,介于正整数和负整数中 ...

  4. 学计算机加数模社团,数学建模社团简介

    数学建模(Mathematical Modeling)&数学建模社团简介 Q1:什么是数学建模? A: 通过应用相关经济,管理,金融.生物.医学.环境.地质.人口.交通等领域的背景知识,从实际 ...

  5. 算法与数学之美:最全数学各个分支简介

    数论 人类从学会计数开始就一直和自然数打交道了,后来由于实践的需要,数的概念进一步扩充,自然数被叫做正整数,而把它们的相反数叫做负整数,介于正整数和负整数中间的中性数叫做0.它们和起来叫做整数. 对于 ...

  6. [转载]数学各个研究方向简介

     数论 人类从学会计数开始就一直和自然数打交道了,后来由于实践的需要,数的概念进一步 扩充,自然数被叫做正整数,而把它们的相反数叫做负整数,介于正整数和负整数中间的 中性数叫做0.它们和起来叫做整数. ...

  7. 数学建模与数据分析 || 1. 数学建模简介

    数学建模简介 文章目录 数学建模简介 1. 数学建模比赛的理解 2. 一般数据分析的流程 3. 机器学习与统计数据分析 4. 各种编程软件仅仅是工具,对问题的观察视角和解决问题的策略才是关键 4.1 ...

  8. 生日攻击简介与相关推导

    一.简介 生日攻击由生日悖论发展而来,在许多领域都发挥着重要的作用(作为攻击手段与防御手段),尤其是碰撞检测方面.现举个烂大街的例子(生日悖论): 一个班里只要有超过23个人,那么选择同一天生日的两个 ...

  9. 【数学分析】学科简介 ( 初等数学缺陷 | 微分与积分 | 学习数学分析的目的 | 数学分析与高等数学对比 )

    文章目录 一.初等数学缺陷 二.微分与积分 三.学习数学分析的目的 四.数学分析与高等数学对比 一.初等数学缺陷 初等数学的缺陷 : 计算图形的面积 , 只能计算直线 , 曲线构成的图形面积 , 不规 ...

最新文章

  1. 第三次Scream冲刺
  2. CentOS7 SELinux阻止MongoDB启动的问题
  3. The Internals of PostgreSQL
  4. 21IC上关于stm32 option bytes的操作帖子记录
  5. 单向链表的C语言实现与基本操作
  6. python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...
  7. kafka多个消费者消费一个topic_kafka:一文读懂消费者背后的那点quot;猫腻quot;
  8. android控件字体,android 设置控件的颜色字体的方法
  9. 巩固——Vue中如何使用less和scss?
  10. 处理自己计算机某的端口被占问题
  11. python3.5 爬取mzitu网站图片
  12. mujoco win7下载安装
  13. python吃显卡还是内存条_内存条与显卡金手指氧化了解决方法
  14. kali 更新后出现乱码的解决方案
  15. python的基本统计和分组分析和分布分析和交叉分析和结构分析
  16. 如何运用Microsoft Office Project 2003来做项目计划
  17. 计算机二级第一次考试不及格有没有影响,计算机二级还没有过吗?
  18. 用 VS2019 编译带 libx264, libmp3lame 的 FFmpeg 库
  19. iPad最值得期待的切实改进构想
  20. 给老孙做了个排班表!

热门文章

  1. Ubuntu18.04关闭ibus-daemon自启动
  2. shell之提取头文件
  3. Ubuntu18.04下使用docker制作ubuntu20.04镜像
  4. phtread条件变量pthread_cond_t初始化方式
  5. C语言之如何理解指针的指针(九)
  6. V4L2视频应用程序编程架构
  7. SpringBoot之第一个Restfu示例
  8. C++之编写dll库
  9. Android中GsonFormat的安装及使用
  10. WARNING: Ignoring invalid distribution -ip (e:\python\lib\site-packages)