Advertisement

LSTM思想解析—论文精读(Learning to Forget: Continual Prediction with LSTM)

阅读量:

本文对LSTM的另一篇论文进行解析:Learning to Forget: Continual Prediction with LSTM(Felix A. Gers,1999)。该论文是在论文Long Short-term Memory (Sepp Hochreiter,1997)的基础上提出了遗忘门(forget gate)。

一、为什么要提出遗忘门

Sepp Hochreiter在1999年提出了LSTM算法,该算法是对RNN的改进,论文具体解析详见[LSTM思想解析—论文精读(Long Short-Term Memery)]( "LSTM思想解析—论文精读(Long Short-Term Memery)")Long Short-Term Memery[LSTM思想解析—论文精读(Long Short-Term Memery)]( "LSTM思想解析—论文精读(Long Short-Term Memery)")。当输入到LSTM中的数据为连续的流数据,这些数据并未预先分割成一个个具有明确起点和终点的子训练集,LSTM就无法自行判断什么时候将记忆单元的状态进行重置,这就会导致状态一直无限地增长,最后导致LSTM无法工作了。

下面通过数学公式来说明LSTM存在的不足:
图1 图1

上图为论文Long Short-term Memory 提出的LSTM架构。net_{c}表示记忆单元的输入,net_{in}表示输入门,net_{out}表示输出门,s_{c}表示记忆单元状态。那么:
net_{out_{j}}=um_{m}{}w_{out_{j}m}y{m};y^{out_{j}}=f_{out_{j}} (1)
net_{in_{j}}=um_{m}{}w_{in_{j}m}y{m};y^{in_{j}}=f_{in_{j}} (2)

其中,下标j代表记忆单元块的索引(即第j个记忆单元块),下标v表示记忆单元块中的第v个记忆单元。因此,c_{j}^{v}就表示第j个记忆单元块中的第v个记忆单元。w_{lm}表示从神经元m到神经元l的权重。

激活函数f是sigmoid函数:f=rac{1}{1+e^{-x}} (3)

该记忆单元自身 的输入(t-1时刻的输出,变为t时刻该记忆单元的输入):
net_{c_{j}{v}}(t)=\sum_{m}{}w_{c_{j}{v}m}y{m} (4)

激活函数g是sigmoid函数的变种:g=rac{4}{1+e^{-x}}-2 (5)

记忆单元状态: s_{c_{j}{v}}(0)=0;s_{c_{j}{v}}=s_{c_{j}{v}}(t-1)+y{in_{j}}g 对于t>0 (6)

记忆单元输出:y{c_{j}{v}}=y^{out_{j}}h (7)

h为激活函数h=rac{2}{1+e^{-x}}-1 (8)

假定LSTM网络有一个输入层、一个隐藏层(由记忆单元组成)和一个输出层,那输出层的第k个神经元输出为:net_{k}=um_{m}{}w_{km}ym,y^{k}=f_{k} (9)

激活函数f_{k}为sigmoid函数。

当记忆细胞状态s_{c}随着连续输入流无限增大时,那么经过激活函数h时:

由于h=rac{2}{1+e^{-x}}-1 ,那么随着x的无限增大,h(x)的值就趋近于1,从而饱和了。饱和会带来两个问题:(1)当h(x)的值趋近于1时,{h}'就趋近于0({h}'=rac{-2e{-x}}{(1+e^{-x}){2} }),带来梯度消失问题。(2)记忆单元的输出值为y{c_{j}{v}}=y^{out_{j}}h当h(x)的值为1时,那么记忆单元的输出值就等于输出门的输出值,此时记忆单元就退化为一个普通的BPTT了(本来输出门的作用就是确定是否访问记忆单元的内容,现在h为1了,那么就必然会访问记忆单元的内容了,和BPTT没啥区别了)。

上述问题没有在论文Long Short-Term Memery中出现。为什么呢?在Long Short-Term Memery论文实验中,输入序列都有明确的开头和结尾标志,每当新的序列输入时,就会人为重置记忆细胞状态为0。

二、什么是遗忘门

遗忘门的提出是为了解决:输入数据是连续的数据流,造成激活函数h(x)饱和,从而出现梯度消失或记忆细胞退化为普通BPTT的问题。遗忘门的作用就是让记忆单元可以在适当的时间将状态进行重置,从而丢弃那些内容过时且无用的信息。
图2

上图为添加遗忘门后的LSTM结构。在图中,y^{arphi}表示遗忘门。与其他门的计算方式一样,遗忘门的计算公式为:
net_{arphi_{j}}=um_{m}{}w_{\varphi_{j}m}y{m};y^{arphi_{j}}=f_{arphi_{j}} (10)

激活函数f_{arphi_{j}}为sigmoid函数,因此y^{arphi_{j}}的取值范围为0~1。

根据上图红框中的公式,公式(6)变为了:
s_{c_{j}{v}}(0)=0;s_{c_{j}{v}}=y{\varphi_{j}}(t)s_{c_{j}{v}}+y^{in_{j}}g (11)

输入门和输出门的初始化偏置为负数(为了解决记忆单元滥用问题),遗忘门的初始化偏置为正数。遗忘门在初期时不起作用的,整个记忆单元就像论文Long Short-term Memory 提出的一样。

三、带遗忘门的LSTM反向传播算法

LSTM的反向传播算法融合了截断BPTT和RTRL,并稍加修改:在输出层和输出门使用截断的BPTT;在到记忆单元的权重、输入门、遗忘门使用了截断的RTRL。截断意味着误差只在记忆单元或各种门内传播。CEC的存在,使得LSTM的误差更新并未受到指数级衰减。作者采用oteq表示截断。为了简单,每个记忆单元块中只有一个记忆单元。

误差反向传播,是将误差从输出反向传播至输入的过程。根据图2,在误差反向传播时,首先需要计算输出层的误差,然后是输出门、记忆单元状态S_{c}、输入门和遗忘门。

采用均方误差作为损失函数,用t^{k}表示目标值:E=rac{1}{2} um_{k}{}e_{k}(t){2}; e_{k}=t{k}(t)-y{k} (12)

假设权重更新时使用的学习率为lpha,那么从神经元m到神经元l的权重值更新为:
igtriangleup w_{lm}=-lpha rac{artial E}{artial w_{lm}}=-lpha rac{artial E}{artial y^{k}} rac{artial y^{k}}{artial w_{lm}} =lpha um_{k}^{} e_{k}rac{artial y^{k}}{artial w_{lm}}
oteqlpha um_{k}^{}e_{k}rac{artial y^{k}}{artial y^{l}} rac{artial y^{l}}{artial net_{l}}rac{artial net_{l}}{artial w_{lm}}

其中,rac{artial net_{l}}{artial w_{lm}}=y^{m},那么igtriangleup w_{lm}=lpha rac{artial y^{l}}{artial net_{l}} rac{artial y^{k}}{artial y{l}(t)})y{m} (13)

elta {l}=rac{artial y^{l}}{artial net{l}} rac{artial y^{k}}{artial y^{l}},那么

1、对于输出层:

此时l=k。对公式(9)求导,可得:rac{artial y^{k}}{artial net_{k}}=f{}'_{k} 那么,elta {k}=f{}'{k}e_{k} (14)

2、对于输出门:

由于隐藏层神经元是直接和输出层直接相连的,根据rac{artial y^{k}}{artial y^{l}}=rac{artial y^{k}}{artial net_{k}} rac{artial net_{k}}{artial y^{l}} ={f}'{k}w{kl} 等式两边同乘以e_{k},并根据公式(14)得:
rac{artial y^{k}}{artial y^{l}}e_{k}=w_{kl}{f}'{k}e{k}=w_{kl} elta _{k}

对公式(1)求导,可得:rac{artial y^{out_{j}}}{artial net_{out_{j}}}=f{}'{out{j}}

当l=out,有公式:rac{artial y^{k}}{artial y^{out_{j}}} e_{k}=rac{artial y{c_{j}{v} }}{artial y_{out_{j}}} rac{artial y^{k}}{artial y{c_{j}{v} }} e_{k}=hw_{kc_{j}^{v}}elta_{k}

rac{artial y^{out_{j}}}{artial net_{out_{j}}}=f{}'{out{j}}rac{artial y^{k}}{artial y^{out_{j}}} e_{k}=hw_{kc_{j}^{v}}elta_{k}带入公式(13),可得(令l=out):elta {out{j}}^{v}= f{}'{out{j}}h (表示第v个记忆单元对elta {out{j}}的贡献)

假设第j个记忆单元块中有S_{j}个记忆单元,因为同一个记忆单元块中的所有记忆单元共享一个输出门,那么elta {out{j}}=um_{v=1}^{S_{j}} elta {out{j}}^{v}。因此:
elta {out{j}}= f{}'{out{j}}um_{k}^{} w_{kc_{j}^{v}}elta_{k} (15)

上述公式(14)和(15)分别是输出层神经元和输出门的误差公式,采用的是截断BPTT。若更新输出层和输出门的权重,可以根据公式igtriangleup w_{lm}=lpha elta _{l}y^{m}进行更新。将公式中的l换成输出单元k或输出门out_{j}

3、对于细胞状态、输入门、遗忘门

接下来计算输入门和遗忘门的误差更新公式,采用的是截断RTRL方法:
igtriangleup w_{lm}=-lpha rac{artial E}{artial w_{lm}} oteq -lpha rac{artial E}{artial s_{c_{j}^{v}}} rac{artial s_{c_{j}^{v}}}{artial w_{lm}}= lpha e_{s_{c_{j}^{v}}} *rac{artial s_{c_{j}^{v}}}{artial w_{lm}} (16)

在公式(16),作者令rac{artial E}{artial s_{c_{j}{v}}(t)}=-e_{s_{c_{j}{v}}},所有才有上面的公式(16)

下面计算公式(16)中的第一部分e_{s_{c_{j}^{v}}}=-rac{artial E}{artial s_{c_{j}^{v}}}oteq-rac{artial E}{artial y^{k}} rac{artial y^{k}}{artial y{c_{j}{v}}} rac{artial y{c_{j}{v}}}{artial s_{c_{j}^{v}}}
e_{s_{c_{j}^{v}}}=rac{artial y{c_{j}{v}}}{artial s_{c_{j}^{v}}}eft }{artial y{c_{j}{v}}}e_{k} ight 其中,w_{c_{j}^{v}l} elta_{k} =rac{artial y^{k}}{artial y{c_{j}{v}}}e_{k}

根据公式(7),我们可以得到rac{artial y{c_{j}{v}}}{artial s_{c_{j}^{v}}}=rac{artial y{c_{j}{v}}y}{artial h} rac{artial h}{artial s_{c_{j}^{v}}} =y^{out_{j}}{h}'

那么e_{s_{c_{j}{v}}}(t)=y{out_{j}}{h}'eft  ight (17)

下面计算公式(16)中的第二部分rac{artial s_{c_{j}^{v}}}{artial w_{lm}}

将公式(11)带入公式(16)的第二部分中,可得:
rac{artial s_{c_{j}^{v}}}{artial w_{lm}}=rac{artial s_{c_{j}^{v}}}{artial w_{lm}}y^{arphi {j}} +y^{in {j}} rac{artial g}{artial w{lm}} +grac{artial y^{arphi {j}}}{artial w{lm}} +s{c_{j}^{v}}rac{artial y^{arphi {j}}}{artial w{lm}} (18)

当l=c_{j}^{v},根据公式(4),公式(18)变为了:
rac{artial s_{c_{j}^{v}}}{artial w_{c_{j}^{v}m}}=rac{artial s_{c_{j}^{v}}}{artial w_{c_{j}{v}m}}y{arphi _{j}} + {g}' y{in_{j}}(t)y{m} (19)

当l=in时 ,根据公式(2),公式(18)变为了:
rac{artial s_{c_{j}^{v}}}{artial w_{in_{j}m}}=rac{artial s_{c_{j}^{v}}}{artial w_{in_{j}m}}y^{arphi {j}} + g{f}'{in_{j}}y^{m} (20)

当l=arphi,根据公式(10),公式(18)变为了:
rac{artial s_{c_{j}^{v}}}{artial w_{arphi {j}m}}=rac{artial s{c_{j}^{v}}}{artial w_{arphi _{j}m}}y^{arphi {j}} + h{f}'{arphi _{j}}y^{m} (21)

初始化:rac{artial s_{c_{j}^{v}}}{artial w_{lm}}=0  for  ln {arphi ,in,c_{j}^{v}} (22)

  • 记忆细胞状态权重参数更新: 将公式(17)和(19)代入公式(16)中后,就可以求得记忆细胞状态权重参数的更新公式:
    igtriangleup w_{c_{j}^{v}m}=lpha e_{s_{c_{j}^{v}}}rac{artial s_{c_{j}^{v}}}{artial w_{c_{j}^{v}m}} (23)

  • 输入门和遗忘门权重参数更新 :将公式(17)和公式(20)/公式(21)带入公式(16)中后,就可以求得输入门/遗忘门的权重参数更新公式:
    igtriangleup w_{lm}=lpha um_{v=1}^{S_{j}} e_{s_{c_{j}^{v}}}rac{artial s_{c_{j}^{v}}}{artial w_{lm}} for  ln arphi,in (24)

四、LSTM 正向传播与反向传播伪代码

此部分直接摘取论文中的伪代码实现,是对本文第二部分和第三部分的综合。

全部评论 (0)

还没有任何评论哟~