LSTM

2.LSTM核心内容

LSTM 的关键就是细胞状态(cell),水平线在图上方贯穿运行。细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。 
这里写图片描述

LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。 
这里写图片描述 
Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!

LSTM 拥有三个门,来保护和控制细胞状态。

3.逐步理解LSTM

在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为 忘记门层 完成。该门会读取ht1xtht−1和xt,输出一个在 0 到 1 之间的数值给每个在细胞状态Ct1Ct−1中的数字。1 表示“完全保留”,0 表示“完全舍弃”。

让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前 主语 的类别,因此正确的 代词 可以被选择出来。当我们看到新的 代词 ,我们希望忘记旧的代词 。 
这里写图片描述 
决定丢弃信息 
下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量,C~tC~t,会被加入到状态中。下一步,我们会讲这两个信息来产生对状态的更新。

在我们语言模型的例子中,我们希望增加新的代词的类别到细胞状态中,来替代旧的需要忘记的代词。 
这里写图片描述

确定更新的信息 
现在是更新旧细胞状态的时间了,Ct1CtCt−1更新为Ct。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。

我们把旧状态与ftft相乘,丢弃掉我们确定需要丢弃的信息。接着加上itC~tit∗C~t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。

在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的类别信息并添加新的信息的地方。 
这里写图片描述 
更新细胞状态 
最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

在语言模型的例子中,因为他就看到了一个 代词 ,可能需要输出与一个 动词 相关的信息。例如,可能输出是否代词是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化。 
这里写图片描述 
输出信息

4.总结数学表达式 
Gates: 
这里写图片描述 
输入变换: 
这里写图片描述 
状态更新: 
这里写图片描述 
使用图片描述类似下图: 
这里写图片描述 
此图对应于本文上面LSTM的结构图。


LSTM代码实现

具体可参考这篇文章,利用Torch7实现。以后有机会会更新python实现。



RNN的缺陷和LSTM的应用

     如果把RNN展开,可以看到RNN的结构和普通的网络相似,可以将其看作是若干个相同的网络相连,并将信息在网络中进行传递。由于这种信息传递的存在,RNN的就可以根据之前出现的信息对当前的信息进行推断,特别是在语言处理中,RNN就可以用于根据上文预测下一个将要出现的词。但是RNN只能处理一定间隔的信息,如果上文间隔过远,就有可能出现难以联想的情况。比如:
I grew up in France...此处省略100个字....I speak fluent  French.
    这种提示信息France距离French就间隔过远,RNN处理起来就比较吃力了。理论上RNN是能够通过一些人为的参数设置来实现这种大间隔的处理的,但是RNN似乎不能够去通过学习实现。《Understanding LSTM Networks》还列举了两篇论文来证明这一点。
     因此,1997年有人就提出了LSTM(Long Short Term Memory Network),这是一种特殊的RNN,按照文章的说法,LSTM生来就是能够长时间记忆的网络,不需要刻意学习。
RNN的展开结构
LSTM的展开结构
    LSTM的展开结构中与RNN的不同主要是存在控制存储状态的结构,其结构构成与作用如下所示。我们先将这个重复结构叫做一个单元,把该单元的一次计算作为一拍,那么这个单元存在三组重要的变量:单元输入、单元输出以及单元状态(Cell State),从直观来说,LSTM的作用是:
1. 根据上一拍单元的输出ht-1以及本拍的输入xt,计算出需要单元状态中需要遗忘的元素,这种控制是通过门(Gate,  )实现的;
2. 根据上一拍输出ht-1与本拍输入xt选择需要在单元状态中新记忆的状态;
3. 根据单元状态和本拍输入输出ht。
    通过这样的操作,该单元就将需要记忆的信息通过单元状态的形式记录下来并且在神经元中进行传递,而每一次计算,神经元都可以根据当前的输入对单元状态进行修改。

RNN单元结构
实际上LSTM有很多的变种。
1. Peephole connections - 中文直译:窥视连接
    原始的RNN的控制门(Gate,  )只输入上一拍神经元输出和本拍输入,Peephole connections则将单元状态 引入到输入中。

2. Coupled forget and input gates - 中文直译:耦合遗忘和输入单元
     原始的RNN的遗忘和新记忆的过程是分开的,Coupled forget and input gates则将两个过程进行耦合,即只遗忘那些有新元素来填充的元素。


3. GRU - Gated Recurrent Unit - 中文直译:门控循环单元
    还有一种RNN变种干脆将单元状态去除,直接通过输出存储信息,由于这种结构比LSTM更加简单,因此逐渐变得流行起来。


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值