Chapter 4 Long Short-Term Memory

4.1Network Architecture

乘法门允许LSTM存储单元在长时间内存储和访问信息,从而减轻梯度消失的问题。例如,只要输入门保持关闭(即有一个
**接近于0),单元的**状态不会被网络中新的输入所覆盖。并且可以通过打开输出门,把这个信息输出给更后面的序列。(也就是说利用这种方法保持了单元的**信息,给后面的序列用)LSTM对梯度信息的保存时间如图4.4所示。

Figure 4.2: LSTM memory block with one cell.
这三个门是非线性的求和单元,它们收集来自内部和外部的**,通过乘法(小黑圈)控制细胞的**。输入门和输出门与细胞的输入和输出相乘,而遗忘门和细胞的前一个状态相乘。在细胞内没有使用**函数。门的**函数f通常是logistic sigmoid,因此,的**函数的输出在0(gate closed)和1(gate open)之间。细胞的输入和输出**函数(g和h)通常是tanh或logistic sigmoid,不过在某些情况下h是恒等函数。虚线表示从细胞到门的加权的“窥视孔”(细胞可以给门进行加权处理)。其他的连接都是没有权重的(换句话说,可以认为它们的权重都是固定为1)。这个模块给网络中其他部分唯一的输出是输出门的乘法结果。

4.2 Inuence of Preprocessing

这段的大概意思是如果降采样可以减小序列的长度,那么就用降采样以后的数据,这样就可以直接使用隐马尔可夫模型之类的工具来处理了。如果不行,那就要使用LSTM

4.3 Gradient Calculation

就像上一章讨论的网络一样,LSTM是一个可分割的函数,它通常使用梯度下降来训练。
通过时间反向传播(BPTT;Williams and Zipser,1995)。BPTT部分在一个时间后被截断,因为它认为长时间的依赖关系将由记忆块来处理,而不是通过循环连接周围的**(消失的)流来处理。截断梯度的好处是可以让算法完全在线,这样就可以在每一个时间步骤之后进行权重更新。这对于诸如连续控制或时间序列预测之类的任务来说是重要的特性。

4.6 Network Equations

这一节提供了在一个递归神经网络中,LSTM隐藏层的**(向前传递)和BPTT梯度计算(向后传递)的方程。
如前,wij是单元i到单元j的连接的权重,网络中在t时刻给单元j的输入标记为atj,单元j在t时刻的**输出标记为btj. LSTM方程只针对一个记忆块。对于多个块,只需要一任意顺序重复即可。下标ι,ϕ,ω分别表示块中的输入门,遗忘门和输出门。下标c表示C个记忆单元中的一个。从单元c到输入门,遗忘门,输出门的”peephole weight”的权重分别标记为wcι,wcϕ,wcωstc表示单元c在t时刻的**状态(例如线性单元的**输出)。f是门的**函数,g和h分别是单元的输入和输出**函数。
I是输入个数,K是输出个数,H是隐藏层中的细胞数。注意到只有细胞(cell)的输出btc是连接到这层中的其他块的。其他的LSTM的**,如状态,细胞(cell)输入,门的**,都只在块中可见。我们使用索引h来引用隐藏层中其他块的单元输出,就像标准隐藏单元一样。与标准RNNs不同,LSTM层包含的输入比输出更多(因为门和单元都接收来自网络其余部分的输入,但只有细胞(cell)才能生成对网络其余部分可见的输出)。(因为输入很多)因此,我们将G定义为隐藏层(包括细胞和门)的输入总数,当我们不希望区分输入类型时,使用索引g来引用这些输入。对于每个块中有一个记忆细胞的标准的LSTM层来说,每个块G等于4H(每个细胞有4个输入:前面的网络输入、输入门、遗忘门、输出门)。
?? H和C是什么关系? H是整个隐藏层中的细胞个数,而C是一个块中的细胞个数。对于标准LSTM,C应该就是1
和标准RNN一样,前向传输是是通过这个方法来计算的:一个长度为T,从t=1开始的输入序列x,当t增加时,回归地应用更新公式。而用BPTT反向传输时,则是从t=T开始,回归地计算单元的偏导数,直到t=1。把每个时步的偏导数加起来,就得到了最终的权重偏导数。如等式(3.35)描述的,下面我们回忆一下:

δtj=defLatj

这里L是训练用的代价函数。
在向前和向后传播时, 计算方程的顺序是很重要的,应该按照下面的说明进行。与标准RNNs一样,所有状态和**在t = 0时初始化为0(正向传播的初始值),所有δ项在t = T + 1时为0(反向传播的初始值)。

4.6.1 Forward Pass

  • 输入门

    atι=i=1Iwilxti+h=1Hwhlbt1h+c=1Cwclst1cbtι=f(atι)

    atι可以理解成所有输入数据(Ii=1wilxti)和前一个时刻的遗忘门**输出(Hh=1whlbt1h),和细胞**输出(Cc=1wclst1c)之和。

    前一个时刻遗忘门**输出Hh=1whlbt1h里的H是什么呢?在有些网络结构里,可能有不止一个遗忘门,也可能从别的块里连一个输入过来。大牛为了公式通用,就用了一个求和公式来覆盖这种情况。在标准LSTM块里面,只有一个遗忘门,所以H=1。

    前一时刻细胞**输出(Cc=1wclst1c)里的H的含义也是和上面的一样的。在标准块里,只有一个细胞,所以H=1。

-遗忘门

atϕ=i=1Iwiϕxti+h=1Hwhϕbt1h+c=1Cwcϕst1cbtϕ=f(atϕ)

atϕ是所有输入层(Ii=1wiϕxti),前一时刻遗忘门**输出(Hh=1whϕbt1h),前一时刻细胞状态输出(Cc=1wcϕst1c)。H和C的值需要根据网络的具体结构来确定。对于标准的LSTM块,H=1,C=1。

-Cells

atcstc=i=1Iwicxti+h=1Hwhcbt1h=btϕst1c+btιg(atc)

Cell的输入(atc) 是这个时刻的输入和上个时刻的之和。
Cell的状态(stc)是这个时刻的输入(g(atc))和上个时刻的Cell状态(st1c)之和。它们受输入门(btι)和遗忘门(btϕ)的控制。

  • Output Gates

    atωbtω=i=1Iwiωxti+h=1Hwhωbt1h+c=1Cwcωstc=f(atω)

    atω 是这个时刻的输入,细胞输出和上个时刻的输出门输出的加权之和。

  • Cell Outputs

    btc=btωh(stc)

    Supervised Sequence Labelling with Recurrent Neural Networks 笔记 -LSTM

4.6.1 Backward Pass

首先定义了单元c和整个记忆单元输出s的偏导数

ϵtc=defLbtcϵts=defLbts

  • Cell Outputs

ϵtc=k=1Kwckδtk+g=1Gwcgδt+1g

K是输出层的神经元个数。 δtk是输出层传递过来的梯度,在计算LSTM梯度的时候已经知道了。 wck是块到输出层的权重。Kk=1wckδtk是从输出层传过来的梯度之和。
如果输出层使用了softmax函数,而且代价函数是交差熵函数的话,那么δtk=ykzk,这里yk是网络的输出,而zk是目标值。具体的公式推导见这里:http://blog.csdn.net/abeldeng/article/details/79092962

δt+1g是上一轮梯度计算时输入层的梯度值,在本次计算时已经知道了。
wcg是输入层到隐藏层的权重。
g是指输入,是否是指wcwι,wω,wϕ?

  • Output Gate
    δtω=f(atω)c=1Ch(sct)ϵtc
  • States

    ϵtc=btωh(stc)ϵtc+bt+1ϕϵt+1c+wclδt+1ι+wcϕδt+1ϕ+wcωδtω

  • Forget Gates

    δtϕ=f(atϕ)c=1Cst1cϵts

  • Input Gates
    δtι=f(atι)c=1Cg(atc)ϵts

参考:
http://blog.csdn.net/omnispace/article/details/55636762
https://www.csie.ntu.edu.tw/~yvchen/f106-adl/syllabus.html
http://blog.csdn.net/qian99/article/details/78046329

相关文章: