gitbook阅读地址:循环神经网络--实现LSTM · 超智能体
网络回忆:在《循环神经网络——介绍》中提到循环神经网络用相同的方式处理每个时刻的数据。
设计目的:我们希望循环神经网络可以将过去时刻发生的状态信息传递给当前时刻的计算中。
实际问题:但普通的RNN结构却难以传递相隔较远的信息。
如果将起始时刻的隐藏状态信息
向第
时刻传递,会得到式子(2)
会被乘以多次,若允许矩阵
进行特征分解
式子(2)会变成(4)
当特征值小于1时,不断相乘的结果是特征值的
次方向
衰减; 当特征值大于1时,不断相乘的结果是特征值的t次方向
扩增。 这时想要传递的
中的信息会被掩盖掉,无法传递到
。
,如果
等于0.1,
在被不断乘以0.1一百次后会变成多小?如果
等于5,
在被不断乘以5一百次后会变得多大?若想要
所包含的信息既不消失,又不爆炸,就需要尽可能的将
的值保持在1。
上面的现象可能并不意味着无法学习,但是即便可以,也会非常非常的慢。为了有效的利用梯度下降法学习,我们希望使不断相乘的梯度的积(the product of derivatives)保持在接近1的数值。
一种实现方式是建立线性自连接单元(linear self-connections)和在自连接部分数值接近1的权重,叫做leaky units。但Leaky units的线性自连接权重是手动设置或设为参数,而目前最有效的方式gated RNNs是通过gates的调控,允许线性自连接的权重在每一步都可以自我变化调节。LSTM就是gated RNNs中的一个实现。
LSTM(或者其他gated RNNs)是在标准RNN (
)的基础上装备了若干个控制数级(magnitude)的gates。可以理解成神经网络(RNN整体)中加入其他神经网络(gates),而这些gates只是控制数级,控制信息的流动量。
数学公式:这里贴出基本LSTM的数学公式,看一眼就好,仅仅是为了让大家先留一个印象,不需要记住,不需要理解。
尽管式子不算复杂,却包含很多知识,接下来就是逐步分析这些式子以及背后的道理。 比如
的意义和使用原因,sigmoid的使用原因。
理解Gated RNNs的第一步就是明白gate到底起到什么作用。
的数值,表示该如何调节其他数据的数级的控制方式。
时,
时,原来的向量就会被对应元素相乘(element-wise)后变成:
=
时,原来的向量就会被对应元素相乘(element-wise)后变成:
: 这种gate的输入有当前的输入
和上一时刻的隐藏状态
, 表示gate是将这两个信息流作为控制依据而产生输出的。
: 这种gate的输入有当前的输入
和上一时刻的隐藏状态
,以及上一时刻的cell状态
, 表示gate是将这三个信息流作为控制依据而产生输出的。这种方式的LSTM叫做peephole connections。
明白了gate之后再回过头来看LSTM的数学公式
数学公式:
统一理解。在LSTM中,网络首先构建了3个gates来控制信息的流通量。 注: 虽然gates的式子构成方式一样,但是注意3个gates式子
和
的下角标并不相同。它们有各自的物理意义,在网络学习过程中会产生不同的权重。 有了这3个gates后,接下来要考虑的就是如何用它们装备在普通的RNN上来控制信息流,而根据它们所用于控制信息流通的地点不同,它们又被分为:
:控制有多少信息可以流入memory cell(第四个式子
)。
:控制有多少上一时刻的memory cell中的信息可以累积到当前时刻的memory cell中。
:控制有多少当前时刻的memory cell中的信息可以流入当前隐藏状态
中。 注:gates并不提供额外信息,gates只是起到限制信息的量的作用。因为gates起到的是过滤器作用,所以所用的激活函数是sigmoid而不是tanh。
,上一时刻的隐藏状态
,上一时刻的cell状态
,其中
是额外制造出来、可线性自连接的单元(请回想起leaky units)。真正的信息流来源可以说只有当前的输入
,上一时刻的隐藏状态
两处。三个gates的控制依据,以及数据的更新都是来源于这两处。
分析了gates和信息流后,再分析剩下的两个等式,来看LSTM是如何累积历史信息和计算隐藏状态
的。
其中
是本次要累积的信息来源。
所以历史信息的累积是并不是靠隐藏状态
自身,而是依靠memory cell这个自连接来累积。 在累积时,靠遗忘门来限制上一时刻的memory cell的信息,并靠输入门来限制新信息。并且真的达到了leaky units的思想,memory cell的自连接是线性的累积。
当前隐藏状态
是从
计算得来的,因为
是以线性的方式自我更新的,所以先将其加入带有非线性功能的
。 随后再靠输出门
的过滤来得到当前隐藏状态
。
下面为了加深理解循环神经网络的核心,再来和YJango一起比较一下普通RNN和LSTM的区别。
, 不同的是LSTM靠3个gates将信息的积累建立在线性自连接的memory cell之上,并靠其作为中间物来计算当前
。
的计算中。
LSTM靠3个gates将信息的积累建立在线性自连接的权重接近1的memory cell之上,并靠其作为中间物来计算当前
。
对于用LSTM来实现RNN的记忆,可以类比我们所用的手机(仅仅是为了方便记忆,并非一一对应)。
普通RNN好比是手机屏幕,而LSTM-RNN好比是手机膜。
大量非线性累积历史信息会造成梯度消失(梯度爆炸)好比是不断使用后容易使屏幕刮花。
而LSTM将信息的积累建立在线性自连接的memory cell之上,并靠其作为中间物来计算当前
好比是用手机屏幕膜作为中间物来观察手机屏幕。
输入门、遗忘门、输出门的过滤作用好比是手机屏幕膜的反射率、吸收率、透射率三种性质。
需要再次明确的是,神经网络之所以被称之为网络是因为它可以非常自由的创建合理的连接。而上面所介绍的LSTM也只是最基本的LSTM。只要遵守几个关键点,读者可以根据需求设计自己的Gated RNNs,而至于在不同任务上的效果需要通过实验去验证。下面就简单介绍YJango所理解的几个Gated RNNs的变种的设计方向。
,但是可以通过与memory cell的连接来增加控制依据或者删除某个gate的
或
来缩减控制依据。比如去掉上图中
中的
从而变成
介绍完《循环神经网络——实现LSTM》后, 接下来的第三篇《循环神经网络——代码》就是用tensorflow从头来实现网络内容。