【译】深入理解LSTM网络

递归神经网络

人类不会每时每刻都开始思考。 当你阅读这篇文章时,你会根据你对之前单词的理解来理解每个单词。 你不要扔掉所有东西,然后再从头开始思考。 你的想法有持久性。

传统的神经网络无法做到这一点,这似乎是一个主要的缺点。 例如,假设您想要对电影中每个点发生的事件进行分类。 目前尚不清楚传统神经网络如何利用其对电影中先前事件的推理来告知后者。

循环神经网络解决了这个问题。 它们是带有循环的网络,允许信息持续存在。

递归神经网络具有循环。

在上图中,一块神经网络\(A \) ,查看一些输入\(x_t \)并输出一个值\(h_t \) 。 循环允许信息从网络的一个步骤传递到下一个步骤。

这些循环使得循环神经网络看起来有点神秘。 但是,如果你多想一点,事实证明它们与普通的神经网络并没有什么不同。 可以将循环神经网络视为同一网络的多个副本,每个副本都将消息传递给后继者。 考虑如果我们展开循环会发生什么:

展开的递归神经网络。

展开的递归神经网络。

这种类似链的性质表明,递归神经网络与序列和列表密切相关。 它们是用于此类数据的神经网络的自然架构。

他们肯定会被使用! 在过去几年中,将RNN应用于各种问题取得了令人难以置信的成功:语音识别,语言建模,翻译,图像字幕......这个列表还在继续。 我将讨论使用RNNs可以实现的惊人壮举,以及Andrej Karpathy的优秀博客文章,回归神经网络的不合理有效性 。 但他们真的很棒。

这些成功的关键在于使用“LSTM”,这是一种非常特殊的递归神经网络,对于许多任务而言,它比标准版本好得多。 几乎所有基于递归神经网络的令人兴奋的结果都是用它们实现的。 这篇论文将探讨这些LSTM。

长期依赖问题

RNN的一个吸引力是他们可能能够将先前信息连接到当前任务,例如使用先前的视频帧可能通知对当前帧的理解。 如果RNN可以做到这一点,它们将非常有用。 但他们可以吗? 这取决于。

有时,我们只需要查看最近的信息来执行当前任务。 例如,考虑一种语言模型,试图根据之前的单词预测下一个单词。 如果我们试图预测“云在天空中”的最后一个词,我们不需要任何进一步的背景 - 很明显下一个词将是天空。 在这种情况下,如果相关信息与所需信息之间的差距很小,则RNN可以学习使用过去的信息。

但也有一些情况需要更多的背景。 考虑尝试预测文本中的最后一个词“我在法国长大......我说流利的法语 。”最近的信息表明,下一个词可能是一种语言的名称,但如果我们想缩小哪种语言,我们需要从更进一步的背景来看,法国的背景。 相关信息与需要变得非常大的点之间的差距是完全可能的。

不幸的是,随着差距的扩大,RNN无法学习连接信息。

神经网络与长期依赖关系斗争。

理论上,RNN绝对能够处理这种“长期依赖性”。人类可以仔细挑选参数来解决这种形式的玩具问题。 遗憾的是,在实践中,RNN似乎无法学习它们。 Hochreiter(1991)[德国]Bengio等人对该问题进行了深入探讨 (1994) ,他找到了一些非常根本的原因,为什么它可能很难。

值得庆幸的是,LSTM没有这个问题!

LSTM Networks

长短期内存网络 - 通常只称为“LSTM” - 是一种特殊的RNN,能够学习长期依赖性。 它们由Hochreiter&Schmidhuber(1997)介绍 ,并在以下工作中被许多人提炼和推广。 1它们在各种各样的问题上运作得非常好,现在被广泛使用。

LSTM明确旨在避免长期依赖性问题。 长时间记住信息实际上是他们的默认行为,而不是他们难以学习的东西!

所有递归神经网络都具有神经网络重复模块链的形式。 在标准RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。

标准RNN中的重复模块包含单个层。

LSTM也具有这种类似链的结构,但重复模块具有不同的结构。 有四个,而不是一个神经网络层,以一种非常特殊的方式进行交互。

LSTM神经网络。

LSTM中的重复模块包含四个交互层。

不要担心发生了什么的细节。 我们将逐步介绍LSTM图。 现在,让我们试着对我们将要使用的符号感到满意。

在上图中,每一行都携带一个整个向量,从一个节点的输出到其他节点的输入。 粉色圆圈表示逐点运算,如矢量加法,而黄色框表示神经网络层。 行合并表示连接,而行分叉表示其内容被复制,副本将转移到不同的位置。

LSTM背后的核心理念

LSTM的关键是单元状态,水平线贯穿图的顶部。

电池状态有点像传送带。 它直接沿着整个链运行,只有一些次要的线性交互。 信息很容易沿着它不变地流动。

LSTM确实能够移除或添加信息到细胞状态,由称为门的结构精心调节。

盖茨是一种可选择通过信息的方式。 它们由S形神经网络层和逐点乘法运算组成。

sigmoid层输出0到1之间的数字,描述每个组件应该通过多少。 值为零意味着“不让任何东西通过”,而值为1则意味着“让一切都通过!”

LSTM具有三个这样的门,用于保护和控制电池状态。

一步一步的LSTM走过

我们的LSTM的第一步是确定我们将从细胞状态中丢弃哪些信息。 这个决定是由一个叫做“忘记门层”的sigmoid层决定的。它看着\(h_ {t-1} \)和\(x_t \) ,并在\(0 \)和\(1之间输出一个数字\)对于单元格状态中的每个数字\(C_ {t-1} \) 。 \(1 \)表示“完全保留此”,而\(0 \)表示“完全摆脱这个”。

让我们回到我们的语言模型示例,试图根据以前的所有单词预测下一个单词。 在这样的问题中,细胞状态可能包括当前受试者的性别,因此可以使用正确的代词。 当我们看到一个新主题时,我们想要忘记旧主题的性别。

下一步是确定我们将在单元状态中存储哪些新信息。 这有两个部分。 首先,称为“输入门层”的sigmoid层决定我们将更新哪些值。 接下来,tanh层创建一个新候选值的向量, \(\ tilde {C} _t \) ,可以添加到状态。 在下一步中,我们将结合这两个来创建状态更新。

在我们的语言模型的例子中,我们想要将新主题的性别添加到单元格状态,以替换我们忘记的旧主题。

现在是时候将旧单元状态\(C_ {t-1} \)更新为新单元状态\(C_t \) 。 之前的步骤已经决定要做什么,我们只需要实际做到这一点。

我们将旧状态乘以\(f_t \) ,忘记我们之前决定忘记的事情。 然后我们添加\(i_t * \ tilde {C} _t \) 。 这是新的候选值,根据我们决定更新每个州的值来缩放。

在语言模型的情况下,我们实际上放弃了关于旧主题的性别的信息并添加新信息,正如我们在前面的步骤中所做的那样。

最后,我们需要决定我们要输出的内容。 此输出将基于我们的单元状态,但将是过滤版本。 首先,我们运行一个sigmoid层,它决定我们要输出的单元状态的哪些部分。 然后,我们将单元格状态通过\(\ tanh \) (将值推到\( - 1 \)和\(1 \)之间 )并将其乘以sigmoid门的输出,这样我们只输出我们决定的部分。

对于语言模型示例,由于它只是看到一个主题,它可能想要输出与动词相关的信息,以防接下来会发生什么。 例如,它可能输出主语是单数还是复数,以便我们知道动词应该与什么形式共轭,如果接下来的话。

长期记忆的变种

到目前为止我所描述的是一个非常正常的LSTM。 但并非所有LSTM都与上述相同。 事实上,似乎几乎所有涉及LSTM的论文都使用略有不同的版本。 差异很小,但值得一提的是其中一些。

Gers&Schmidhuber(2000)引入的一种流行的LSTM变体是添加“窥视孔连接”。这意味着我们让栅极层看到单元状态。

上面的图表为所有门增加了窥视孔,但许多论文会给一些窥视孔而不是其他的。

另一种变化是使用耦合的遗忘和输入门。 我们不是单独决定忘记什么以及应该添加新信息,而是共同做出这些决定。 我们只会忘记当我们要在其位置输入内容时。 当我们忘记旧事物时,我们只向州输入新值。

LSTM稍微有点戏剧性的变化是由Cho等人引入的门控循环单元(GRU) (2014年) 。 它将遗忘和输入门组合成一个“更新门”。它还合并了单元状态和隐藏状态,并进行了一些其他更改。 由此产生的模型比标准LSTM模型简单,并且越来越受欢迎。

门控递归单元神经网络。

这些只是最着名的LSTM变种中的一小部分。 还有很多其他的东西,比如Yao等人的 Depth Gated RNNs (2015年) 。 还有一些完全不同的解决长期依赖关系的方法,如Koutnik等人的 Clockwork RNNs (2014年)

哪种变体最好? 差异是否重要? 格雷夫等人。 (2015)对流行的变种做了很好的比较,发现它们都差不多。 Jozefowicz,et al。 (2015)测试了超过一万个RNN架构,找到了一些在某些任务上比LSTM更好的架构。

结论

早些时候,我提到了人们使用RNN取得的显着成果。 基本上所有这些都是使用LSTM实现的。 对于大多数任务来说,它们确实工作得更好!

写下来作为一组方程式,LSTM看起来非常令人生畏。 希望在这篇文章中逐步走过它们,使它们更加平易近人。

LSTM是我们通过RNN实现的重要一步。 很自然地想知道:还有另一个重要的步骤吗? 研究人员的共同观点是:“是的! 下一步是它的注意力!“我们的想法是让RNN的每一步都从一些更大的信息集中选择信息。 例如,如果您使用RNN创建描述图像的标题,则可能会选择图像的一部分来查看其输出的每个单词。 实际上, 等人。 (2015)做到这一点 - 如果你想探索注意力,它可能是一个有趣的起点! 使用注意力已经取得了许多非常令人兴奋的结果,而且似乎还有很多事情即将来临......

注意力不是RNN研究中唯一激动人心的线索。 例如, Kalchbrenner 等人的 Grid LSTMs (2015)似乎非常有希望。 在生成模型中使用RNN的工作 - 例如Gregor, et al。 (2015)Chung, et al。 (2015年) ,或Bayer&Osendorfer(2015年) - 似乎也很有趣。 过去几年对于递归神经网络来说是一个激动人心的时刻,即将到来的神经网络承诺只会更加激动人心!

致谢

我很感谢很多人帮助我更好地理解LSTM,评论可视化,并对这篇文章提供反馈。

我非常感谢Google的同事提供的有用反馈,尤其是Oriol VinyalsGreg CorradoJon ShlensLuke VilnisIlya Sutskever 。 我也很感谢许多其他朋友和同事花时间帮助我,包括Dario AmodeiJacob Steinhardt 。 我特别感谢Kyunghyun Cho关于我的图表的非常周到的信件。

在这篇文章之前,我在神经网络教授的两个研讨会系列中练习解释LSTM。 感谢所有参与这些活动的人,感谢他们对我的耐心和反馈。


  1. 除了原作者之外,很多人都对现代LSTM做出了贡献。 一个非全面的名单是:Felix Gers,Fred Cummins,Santiago Fernandez,Justin Bayer,Daan Wierstra,Julian Togelius,Faustino Gomez,Matteo Gagliolo和Alex Graves


 

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

<think>嗯,用户让我介绍一下LSTM模型的学习。首先,我需要回忆LSTM的基本概念和结构,确保自己理解正确。LSTM是循环神经网络的变种,主要用于解决长序列训练中的梯度消失爆炸问题。这一点很重要,得先点明。 然后,用户可能对普通RNN的不足有所了解,但可能需要简要对比一下,说明为什么LSTM更好。我应该解释LSTM关键组件:遗忘门、输入门、输出门以及细胞状态。这些部分需要逐一拆解,用简单的中文描述每个门的作用。 接下来,数学公式的处理。根据系统指令,行内公式用$...$,独立公式用$$...$$。比如遗忘门的公式是$\sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$,这里需要确保LaTeX语法正确,同时用中文解释每个符号的意义。要注意门控机制如何通过sigmoid函数输出0到1之间的值,控制信息通过。 然后是各个门的详细说明。遗忘门决定保留多少旧记忆,输入门决定新信息的更新,细胞状态如何结合新旧信息,输出门决定最终输出。这部分需要用清晰的步骤,可能结合流程示意,但文字描述要足够清楚。 另外,用户可能关心LSTM如何缓解梯度问题。需要解释细胞状态的线性循环和门控机制如何帮助梯度流动,避免普通RNN中的相乘导数导致的问题。这部分可能需要稍微深入一点,但保持简洁。 还要考虑应用场景,比如机器翻、语音识别等,让用户知道LSTM的实际用途。可能用户是刚开始学习深度学习,所以举例说明应用会有帮助。 最后,总结LSTM的优势和可能的变体,比如GRU,但不需要展开,点到为止。确保整个回答结构清晰,分点分步骤,逻辑连贯。同时检查是否所有数学公式都正确使用了规定的格式,避免语法错误。 可能需要用一些类比,比如门控机制像水龙头控制水流,帮助用户直观理解。确保语言口语化,避免过于学术化的术语,但关键术语还是要正确使用。整个思考过程要自然,逐步引导用户理解LSTM的工作原理和学习机制。</think>### LSTM模型的学习机制分步解析 LSTM(**长短期记忆网络**)是一种改进的循环神经网络RNN),专为解决**长序列依赖问题**设计。以下是其核心机制和学习过程的逐步说明: --- #### 一、LSTM的核心结构 LSTM通过**细胞状态Cell State)**和三个门控机制(遗忘门、输入门、输出门)控制信息流动,公式均用LaTeX标注: 1. **细胞状态(长期记忆)** $$ C_t = \text{存储长期信息的核心通道} $$ - 特点:线性更新,梯度不易消失 2. **遗忘门(Forget Gate)** $$ f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) $$ - 作用:决定从上一状态$C_{t-1}$中保留多少信息 - $\sigma$:Sigmoid函数,输出值在$[0,1]$,0表示完全丢弃,1表示完全保留 3. **输入门(Input Gate)** - **候选值生成**:$$ \tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C) $$ - **输入控制**:$$ i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) $$ - 作用:决定将多少新信息$\tilde{C}_t$存入细胞状态 4. **细胞状态更新** $$ C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t $$ - $\odot$:按元素相乘(Hadamard积) 5. **输出门(Output Gate)** - **输出控制**:$$ o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) $$ - **最终输出**:$$ h_t = o_t \odot \tanh(C_t) $$ --- #### 二、LSTM如何缓解梯度问题 1. **细胞状态的线性更新** - 梯度通过$C_t$反向传播时,避免普通RNN中连乘激活函数导数的问题 - 公式推导示例:$$ \frac{\partial C_t}{\partial C_{t-1}} = f_t + \text{低幅值项} $$ 2. **门控机制的作用** - 通过门控参数动态调节信息流,抑制无关信息的干扰 --- #### 三、LSTM的学习过程 1. **前向传播** - 按时间步依次计算门控值和状态更新 - 示例步骤: ``` t=1时: 计算f₁, i₁, o₁ → 更新C₁ → 输出h₁ t=2时: 使用h₁和x₂计算f₂, i₂, o₂ → 更新C₂ → 输出h₂ ``` 2. **反向传播(BPTT算法)** - 通过链式法则计算梯度 - 参数更新:$$ W_{new} = W_{old} - \eta \cdot \frac{\partial \mathcal{L}}{\partial W} $$ - 优势:梯度沿时间步和细胞状态两条路径传播,稳定性更强 --- #### 四、典型应用场景 1. **序列建模** - 机器翻(如英中) - 语音识别(音频信号序列→文本) 2. **时间序列预测** - 股票价格预测 - 气象数据建模 --- #### 五、LSTM的变体与改进 1. **双向LSTM**:同时考虑过去和未来信息 2. **Peephole LSTM**:门控单元可直接观察细胞状态 3. **GRU(门控循环单元)**:合并门控数量,参数更少 --- ### 总结 LSTM通过门控机制和细胞状态设计,有效解决了长序列训练中的梯度问题。其核心思想是**选择性记忆**:在每一步决定保留什么旧信息添加什么新信息。这种结构使其在自然语言处理、时间序列分析等领域表现卓越。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值