之前在讨论 RNN (递归神经网络) 的梯度消失 和 梯度爆炸都会对咱的网络结构产生极大的影响.

梯度爆炸, 也是在参数更新这块, 调整步伐太大, 产生 NaN 或 Inf, 代码就搞崩了直解决梯度消失...而对于梯度爆炸而已, 可以采用 clipping 的方式, 对向量进行缩放, 而不改变其方向.

梯度消失, BP的参数训练, 求导的链式法则, 可能会有项直接乘积非常小, 整个式子没有梯度, 表 词间的关联性弱. 而那篇中呢, 其实是特意留了一个待解决的方案没有去说明. 其实就是为了引出今天要谈的 LSTM.

Fix vanishing gradient

The main problem is that it is too difficult for the RNN to learn to preserve (保存) information over many timesteps (传统的 RNN 中, 没有对 每个状态的信息进行保存)

In a vanilla RNN, the hidden state is constantly being rewritten (状态更新, 就覆盖掉原来的状态信息)

\(h^{(t)} = \sigma(W_hh^{(t-1)} + W_xx^{(t)} + b)\)

看这公式就能明白, t 时刻的输出, 是由 (t-1) 时刻的 输入得到的.... 也就是说, 随着状态的不断改变, h(t) 也在不断地 插除和改写自己.

We think that how about a RNN with separate memory (另外给整个地方, 单独存起来). 那这种思路呢, 就是咱今天说的 LSTM (Long Short Term memory)

LSTM

A type of RNN proposed by Hochreiter and Schmidhuber in 1997 as a solution to the vanishing gradients problem. 两个德国的大兄弟提出来的, 针对梯度消失这块.

On step t, there is a hidden state \(h^{(t)}\) and a cell state \(c^{(t)}\)

  • Both are vectors length n (隐含层, 产生这两个向量)
  • The cell stores long-term infomation 就是用另外一个向量, 去记录每个时刻的信息. (差不多这个意思)
  • The LSTM can erase, write and read information from the cell. (能从这个 cell 中, 去读取, 改写相应的信息)

The selection of which information is erased / read / writen is controlled by three corresponding gates

  • The gates are also vectors length n .(每个门也是长度为 n 的向量)
  • On each timestep, each element of the gates can be opend(1), closed(0) 或者是 (0~1) 之间的值.
  • The gates are dynamic : their values is computed based on the current context. (基于上下文来改变 gates 值的变化的)

用公式来表达的就是这样的形式.

当然, 如果还是不够详细的话, 可以再用更为形象一点的图来表示哦

Why LSTM can solve vanishing

The LSTM architecture makes it easier for the RNN to preserve information over many timesteps (保留早期的状态信息)

这也是 LSTM 最为关键的一点 与 传统的 RNN 即保留了早期的状态信息呀.

But, LSTM does not guarantee that there is no vanishing. 也没有能做到完全避免, but it does provide an easier way for the model to learn long-distance dependencies. 在在实践应用中还是满成功的, 从几年来看的话. 行了. LSTM 就先到这里吧, 只要在理解 RNN 的基础上, 掌握它这里的一个 状态保留动态的状态 (达到保留早期信息的方式来尽可能解决梯度消失) . 即可.

LSTM 原理的更多相关文章

  1. RNN(一)——RNN和LSTM原理

    背景 神经网络,卷积神经网络等其他深度学习算法,都有个局限性,各个输入在算法内部是相对独立的.比如:'星际争霸有意思,我爱玩'这句话,是有上下文关系的. 如果放在其他网络里面,各个分词将会独立处理.但 ...

  2. 长短时记忆网络LSTM和条件随机场crf

    LSTM 原理 CRF 原理 给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型.假设输出随机变量构成马尔科夫随机场(概率无向图模型)在标注问题应用中,简化成线性链条件随机场,对数线性判别 ...

  3. 时间序列(六): 炙手可热的RNN: LSTM

    目录 炙手可热的LSTM 引言 RNN的问题 恐怖的指数函数 梯度消失* 解决方案 LSTM 设计初衷 LSTM原理 门限控制* LSTM 的 BPTT 参考文献: 炙手可热的LSTM 引言 上一讲说 ...

  4. 郑捷2017年电子工业出版社出版的图书《NLP汉语自然语言处理原理与实践》

    郑捷2017年电子工业出版社出版的图书<NLP汉语自然语言处理原理与实践> 第1章 中文语言的机器处理 1 1.1 历史回顾 2 1.1.1 从科幻到现实 2 1.1.2 早期的探索 3 ...

  5. 长短时记忆神经网络(LSTM)介绍以及简单应用分析

    本文分为四个部分,第一部分简要介绍LSTM的应用现状:第二部分介绍LSTM的发展历史,并引出了受众多学者关注的LSTM变体——门控递归单元(GRU):第三部分介绍LSTM的基本结构,由基本循环神经网络 ...

  6. 深度学习-LSTM与GRU

    http://www.sohu.com/a/259957763_610300此篇文章绕开了数学公式,对LSTM与GRU采用图文并茂的方式进行说明,尤其是里面的动图,让人一目了然.https://zyb ...

  7. LSTM和双向LSTM讲解及实践

    LSTM和双向LSTM讲解及实践 目录 RNN的长期依赖问题LSTM原理讲解双向LSTM原理讲解Keras实现LSTM和双向LSTM 一.RNN的长期依赖问题 在上篇文章中介绍的循环神经网络RNN在训 ...

  8. 【面试QA-基本模型】LSTM

    目录 为什么传统 CNN 适用于 CV 任务,RNN 适用于 NLP 任务 RNN 原理 LSTM 原理 GRU 原理 RNN BPTT LSTM 如何解决 RNN 的梯度消失问题 怎样增加 LSTM ...

  9. 使用Keras进行深度学习:(六)LSTM和双向LSTM讲解及实践

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 介绍 长短期记忆(Long Short Term Memory, ...

  10. NLP-训练个model出来写诗

    2018年新年,腾讯整出来个ai春联很吸引眼球,刚好有个需求让我看下能不能训出来个model来写出诗经一样的文风,求助了下小伙伴,直接丢过来2个github,原话是: 查了一下诗经一共38000个字, ...

随机推荐

  1. JavaScript 之 高级程序设计 基础篇 (一)

    导读 此篇文章为作者拜读JavaScrpit 第四版(红宝石)的笔记内容.适用于有经验的程序员阅读:作者 java开发出身.在之前前后端不分离的时代 使用esayUI JQuery的时代 经常写 js ...

  2. 无界 | Bncr | Boundless Nodejs Chat Robot 机器人框架安装使用教程

    背景:Bncr 是一个开箱即用的Nodejs Chat RoBot(会话式机器人)框架.它基于OOP函数响应式编程,具有占用小.响应快.开发易等特点,允许开发者创建高度可测试.可扩展.松散耦合且易于维 ...

  3. wordpress无法显示gitee图床的图片

    wordpress无法显示gitee图床的图片 Question:如题 Solution:是防盗链的问题,gitee官网给出了防盗链的方法,而github貌似没有. Reference:你已经是个成熟 ...

  4. webpack 科学修改 node_modules 某个包的部分文件为本地文件

    需求总是千变万化,npm 不是万能的,node_modules 里面的文件也是需要维护的. 如果 npm install 安装了某个包,然而这个包里面部分文件不支持你的需求,这时候怎么办? 比如:ht ...

  5. `go install`指令行为分析

    分析go install [build flags] [packages]指令做了什么,如何实现安装GO软件,我们如何编写一个软件使得可以使用该指令安装自己编写的程序. 参考go官方文档 安装位置 $ ...

  6. 1h玩转kubernetes

    学习k8s就跟学习office三件套上,95%的人只会5%,而5%的知识可以干95%的事情,所以不要觉的k8s难 1 kubernetes 1 什么是kubernetes Kubernetes 是一个 ...

  7. docker 配置安装宝塔面板

    宝塔镜像 https://hub.docker.com/r/btpanel/baota 配置宝塔 第一步:创建一个名为 bt-data 的目录,此目录将存储宝塔数据. $ mkdir bt-data ...

  8. linux clickhouse 密码设置

    默认密码 clickhouse 安装好之后,系统默认的登录账号密码是 /etc/clickhouse-server/users.d/default-password.xml 文件中配置的,默认密码是 ...

  9. Golang入门:协程(goroutine)

    goroutine goroutine 是 Go 的并发模型的核心概念.为了理解 goroutine,我们来定义几个术语.第一个是进程.进程是程序的实例,由计算机的操作系统运行.操作系统将一些资源(如 ...

  10. php使用redis锁

    redis加锁分类 redis能用的的加锁命令分别是INCR.SETNX.SET 利用predis操作redis方法大全 第一种锁命令INCR 这种加锁的思路是, 当 key 不存在,那么 key 的 ...