LSTM神经网络

LSTM是什么

LSTM即Long Short Memory Network,长短时记忆网络。它其实是属于RNN的一种变种,可以说它是为了克服RNN无法很好处理远距离依赖而提出的。

我们说RNN不能处理距离较远的序列是因为训练时很有可能会出现梯度消失,即通过下面的公式训练时很可能会发生指数缩小,让RNN失去了对较远时刻的感知能力。

∂E∂W=∑t∂Et∂W=∑tk=0∂Et∂nett∂nett∂st(∏tj=k+1∂st∂sk)∂sk∂W

解决思路

RNN梯度消失不应该是由我们学习怎么去避免,而应该通过改良让循环神经网络自己具备避免梯度消失的特性,从而让循环神经网络自身具备处理长期序列依赖的能力。

RNN的状态计算公式为St=f(St−1,xt),根据链式求导法则会导致梯度变为连乘的形式,而sigmoid小于1会让连乘小得很快。为了解决这个问题,科学家采用了累加的形式,St=∑tτ=1ΔSτ,其导数也为累加,从而避免梯度消失。LSTM即是使用了累加形式,但它的实现较复杂,下面进行介绍。

LSTM模型

回顾一下RNN的模型,如下图,展开后多个时刻隐层互相连接,而所有循环神经网络都有一个重复的网络模块,RNN的重复网络模块很简单,如下下图,比如只有一个tanh层。

而LSTM的重复网络模块的结构则复杂很多,它实现了三个门计算,即遗忘门、输入门和输出门。每个门负责是事情不一样,遗忘门负责决定保留多少上一时刻的单元状态到当前时刻的单元状态;输入门负责决定保留多少当前时刻的输入到当前时刻的单元状态;输出门负责决定当前时刻的单元状态有多少输出。

每个LSTM包含了三个输入,即上时刻的单元状态、上时刻LSTM的输出和当前时刻输入。

LSTM的机制

根据上图咱们一步一步来看LSTM神经网络是怎么运作的。

首先看遗忘门,用来计算哪些信息需要忘记,通过sigmoid处理后为0到1的值,1表示全部保留,0表示全部忘记,于是有

ft=σ(Wf⋅[ht−1,xt]+bf)

其中中括号表示两个向量相连合并,Wf是遗忘门的权重矩阵,σ为sigmoid函数,bf为遗忘门的偏置项。设输入层维度为dx,隐藏层维度为dh,上面的状态维度为dc,则Wf的维度为dc×(dh+dx)。

其次看输入门,输入门用来计算哪些信息保存到状态单元中,分两部分,第一部分为

it=σ(Wi⋅[ht−1,xt]+bi)

该部分可以看成当前输入有多少是需要保存到单元状态的。第二部分为

c~t=tanh(Wc⋅[ht−1,xt]+bc)

该部分可以看成当前输入产生的新信息来添加到单元状态中。结合这两部分来创建一个新记忆。

而当前时刻的单元状态由遗忘门输入和上一时刻状态的积加上输入门两部分的积,即

ct=ft∗ct−1+it∗c~t

最后看看输出门,通过sigmoid函数计算需要输出哪些信息,再乘以当前单元状态通过tanh函数的值,得到输出。

ot=σ(Wo⋅[ht−1,xt]+bo)

ht=ot∗tanh(ct)

LSTM的训练

化繁为简,这里只讨论包含一个LSTM层的三层神经网络(如果有多个层则误差项除了沿时间反向传播外,还会向上一层传播),LSTM向前传播时与三个门相关的公式如下,

ft=σ(Wf⋅[ht−1,xt]+bf)

it=σ(Wi⋅[ht−1,xt]+bi)

c~t=tanh(Wc⋅[ht−1,xt]+bc)

ct=ft∗ct−1+it∗c~t

ot=σ(Wo⋅[ht−1,xt]+bo)

ht=ot∗tanh(ct)

需要学习的参数挺多的,同时也可以看到LSTM的输出ht有四个输入分量加权影响,即三个门相关的ftitc~tot,而且其中权重W都是拼接的,所以在学习时需要分割出来,即
Wf=Wfx+Wfh

Wi=Wix+Wih

Wc~=Wc~x+Wc~h

Wo=Wox+Woh

输出层的输入yit=Wyiht,输出为yot=σ(yit)。

设某时刻的损失函数为Et=12(yd−yot)2,则某样本的损失为

E=∑Tt=1Et

设当前时刻t的误差项δt=∂E∂ht,那么误差沿着时间反向传递则需要计算t-1时刻的误差项δt−1,则

δt−1=∂E∂ht−1=∂E∂ht∂ht∂ht−1=δt∂ht∂ht−1

LSTM的输出ht可看成是一个复合函数,f[ft(ht−1),it(ht−1),c~t(ht−1),ot(ht−1)],由全导数公式有,

∂ht∂ht−1=∂ht∂ct∂ct∂ft∂ft∂netf,t∂netf,t∂ht−1+∂ht∂ct∂ct∂it∂it∂neti,t∂neti,t∂ht−1+∂ht∂ct∂ct∂c~t∂c~t∂netc~,t∂netc~,t∂ht−1+∂ht∂ot∂ot∂neto,t∂neto,t∂ht−1

其中netf,tneti,tnetc~,tneto,t表示对应函数的输入。将上述所有偏导都求出来,

∂ht∂ct=ot∗(1−tanh(ct)2)∂ct∂ft=ct−1∂ft∂netf,t=ft∗(1−ft)∂netf,t∂ht−1=Wfh

同样地,其他也可以求出来,最后得到t时刻和t-1时刻之间的关系。再设

δf,t=∂E∂netf,tδi,t=∂E∂neti,tδc~,t=∂E∂netc~,tδo,t=∂E∂neto,t

得到,

δt−1=δf,tWfh+δi,tWih+δc~,tWch+δo,tWoh

接着对某时刻t的所有权重进行求偏导,

∂E∂Wfh,t=∂E∂netf,t∂netf,t∂Wfh,t=δf,tht−1

∂E∂Wih,t=∂E∂neti,t∂neti,t∂Wih,t=δi,tht−1

∂E∂Wch,t=∂E∂netc~,t∂netc~,t∂Wch,t=δc~,tht−1

∂E∂Woh,t=∂E∂neto,t∂neto,t∂Woh,t=δo,tht−1

∂E∂Wfx=∂E∂netf,t∂netf,t∂Wfx=δf,txt

∂E∂Wix=∂E∂neti,t∂neti,t∂Wix=δi,txt

∂E∂Wcx=∂E∂netc~,t∂netc~,t∂Wcx=δc~,txt

∂E∂Wox=∂E∂neto,t∂neto,t∂Wox=δo,txt

∂E∂bo,t=∂E∂neto,t∂neto,t∂bo,t=δo,t

∂E∂bf,t=∂E∂netf,t∂netf,t∂bf,t=δf,t

∂E∂bi,t=∂E∂neti,t∂neti,t∂bi,t=δi,t

∂E∂bc,t=∂E∂netc~,t∂netc~,t∂bc,t=δc~,t

对于整个样本,它的误差是所有时刻的误差之和,而与上个时刻相关的权重的梯度等于所有时刻的梯度之和,其他权重则不必累加,最终得到

∂E∂Wfh=∑j=1tδf,jhj−1

∂E∂Wih=∑j=1tδi,jhj−1

∂E∂Wch=∑j=1tδc~,jhj−1

∂E∂Woh=∑j=1tδo,jhj−1

∂E∂bf=∑j=1tδf,j

∂E∂bi=∑j=1tδi,j

∂E∂bc=∑j=1tδc~,j

∂E∂bo=∑j=1tδo,j

∂E∂Wfx=∂E∂netf,t∂netf,t∂Wfx=δf,txt

∂E∂Wix=∂E∂neti,t∂neti,t∂Wix=δi,txt

∂E∂Wcx=∂E∂netc~,t∂netc~,t∂Wcx=δc~,txt

∂E∂Wox=∂E∂neto,t∂neto,t∂Wox=δo,txt

相关阅读:
循环神经网络
卷积神经网络
机器学习之神经网络
机器学习之感知器
神经网络的交叉熵损失函数

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

欢迎关注:

时间: 2024-09-14 20:05:47

LSTM神经网络的相关文章

(转) 干货 | 图解LSTM神经网络架构及其11种变体(附论文)

干货 | 图解LSTM神经网络架构及其11种变体(附论文) 2016-10-02 机器之心   选自FastML 作者:Zygmunt Z. 机器之心编译  参与:老红.李亚洲   就像雨季后非洲大草原许多野生溪流分化成的湖泊和水洼,深度学习已经分化成了各种不同的专门架构.   并且,每个架构都会有一个图解,这里将详细介绍它们.   神经网络在概念上很简单,并且它们十分动人.在层级上,有着一堆同质化的元素和统一的单位,并且它们之间还存在在一系列的加权连接.这就是神经网络的所有,至少从理论上来说是

教你打造股市晴雨表——通过LSTM神经网络预测股市

作者介绍: Jakob Aungiers 现就职于汇丰银行伦敦总部,担任全球资产管理的开发副总裁.擅长机器学习,神经网络等领域. (以下为译文) 谈及机器学习,神经网络无疑是当前的热门话题.因此,在网络上围绕神经网络的教程和社区多不胜数.现在虽然有大量的公共研究论文和文章涉及LSTM,但我发现,这些理论和例子并没有显示出LSTM在时间序列预测上的真正实力.有鉴于此,我决定以本文作抛砖引玉之用,使用LSTM来预测一些时间序列-例如股市(使用Keras包,对应Python版本为2.7).此项目的完整

能模仿韩寒小四写作的神奇递归神经网络(附代码)

引言 在离人工智能越来越近的今天,研究界和工业界对神经网络和深度学习的兴趣也越来越浓,期待也越来越高.  我们在深度学习与计算机视觉专栏中看过计算机通过卷积神经网络学会了识别图片的内容--模仿人类的看,而工业界大量的应用也证明了神经网络能让计算机学会听(比如百度的语音识别),于是大量的精力开始投向NLP领域,让计算机学会写也一定是非常有意思的事情,试想一下,如果计算机通过读韩寒和小四的小说,就能写出有一样的调调的文字,这是多带劲的一件事啊.  你还别说,还真有这么一类神经网络,能够在NLP上发挥

GRU神经网络

前面已经详细讲了LSTM神经网络(文末有链接回去),接着往下讲讲LSTM的一个很流行的变体. GRU是什么 GRU即Gated Recurrent Unit.前面说到为了克服RNN无法很好处理远距离依赖而提出了LSTM,而GRU则是LSTM的一个变体,当然LSTM还有有很多其他的变体.GRU保持了LSTM的效果同时又使结构更加简单,所以它也非常流行. GRU模型 回顾一下LSTM的模型,LSTM的重复网络模块的结构很复杂,它实现了三个门计算,即遗忘门.输入门和输出门. 而GRU模型如下,它只有两

深度学习必备手册(上)

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 请收下这份关于人工智能的根目录--博客整理系列(一) 关于数据科学的那些事--博客整理系列(二) 机器学习必备手册--博客整理系列(三) 扩展眼界的都在这--博客整理系列(四) 深度学习必备手册--博客整理系列(六) 深度学习的概念源于人工神经网络的研究,如果追溯深度学习的概念还是要回到2006年Hinton那篇论文,基于深信度网(DNB)提出非监督贪心逐层训练算法,未解决深层结构相关的优化难题出现的论文.

深度学习必备手册(下)

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 请收下这份关于人工智能的根目录--博客整理系列(一) 关于数据科学的那些事--博客整理系列(二) 机器学习必备手册--博客整理系列(三) 扩展眼界的都在这--博客整理系列(四) 深度学习必备手册(上)--博客整理系列(五) 深度学习的概念源于人工神经网络的研究,如果追溯深度学习的概念还是要回到2006年Hinton那篇论文,基于深信度网(DNB)提出非监督贪心逐层训练算法,未解决深层结构相关的优化难题出现的论

TensorFlow实现seq2seq

前言 前面在<深度学习的seq2seq模型>文章中已经介绍了seq2seq结构及其原理,接下去这篇文章将尝试使用TensorFlow来实现一个seq2seq网络结构,该例子能通过训练给定的训练集实现输入某个序列输出某个序列,其中输入序列和输出序列相同,这里选择使用LSTM模型. 训练样本集 为方便起见这里使用随机生成的序列作为样本,序列的长度也是随机的且在指定的范围内. LSTM机制原理 关于LSTM机制原理可看之前的文章<LSTM神经网络>. 随机序列生成器 def random

深度学习的seq2seq模型

从rnn结构说起 根据输出和输入序列不同数量rnn可以有多种不同的结构,不同结构自然就有不同的引用场合.如下图, one to one 结构,仅仅只是简单的给一个输入得到一个输出,此处并未体现序列的特征,例如图像分类场景. one to many 结构,给一个输入得到一系列输出,这种结构可用于生产图片描述的场景. many to one 结构,给一系列输入得到一个输出,这种结构可用于文本情感分析,对一些列的文本输入进行分类,看是消极还是积极情感. many to many 结构,给一些列输入得到

如何用TensorFlow训练聊天机器人(附github)

前言 实际工程中很少有直接用深度学习实现端对端的聊天机器人,但这里我们来看看怎么用深度学习的seq2seq模型来实现一个简易的聊天机器人.这篇文章将尝试使用TensorFlow来训练一个基于seq2seq的聊天机器人,实现根据语料库的训练让机器人回答问题. seq2seq 关于seq2seq的机制原理可看之前的文章<深度学习的seq2seq模型>. 循环神经网络 在seq2seq模型中会使用到循环神经网络,目前流行的几种循环神经网络包括RNN.LSTM和GRU.这三种循环神经网络的机制原理可看