专栏名称: 机器之心
专业的人工智能媒体和产业服务平台
目录
相关文章推荐
新机器视觉  ·  从YOLOv5到YOLO11!改进有多大? ·  13 小时前  
爱可可-爱生活  ·  《爱可可微博热门分享(6.17)》 ... ·  昨天  
爱可可-爱生活  ·  #用音频给生活转个场# #音频充电站# ... ·  昨天  
爱可可-爱生活  ·  【[530星]Roo ... ·  2 天前  
51好读  ›  专栏  ›  机器之心

LSTM入门必读:从基础知识到工作方式详解

机器之心  · 公众号  · AI  · 2017-07-24 13:57

正文

请到「今天看啥」查看全文





通过 LSTM 来实现更长时间的记忆


让我们来思考一下模型是如何更新关于这个世界的知识的。到目前为止,我们还没有给这种更新施加任何限制,所以它的知识可能变得非常混乱:在一帧图像里面它会认为人物在美国,在下一帧它看到人在吃寿司,就会认为人是在日本,在其后的一帧它看到了北极熊,就会认为他们是在伊兹拉岛。或者也许它有大量的信息表明 Alice 是一名投资分析师,但是在它看到了她的厨艺之后它就会认定她是一名职业杀手。


这种混乱意味着信息在快速地转移和消失,模型难以保持长期的记忆。所以我们想要的是让网络学会如何让它以一种更加温和的方式来进化自己关于这个世界的知识,从而更新自己的信念(没有 Bob 的场景不应该改变关于 Bob 的信息包含 Alice 的场景应该聚焦于收集关于她的一些细节信息)。


下面是我们如何做这件事的 4 种方式:


  1. 添加一个遗忘机制(forgetting mechanism):如果一个场景结束了,模型应该忘记当前场景中的位置,一天的时间并且重置任何与场景相关的信息;然而,如果场景中的一个人死掉了,那么模型应该一直记住那个死去的人已经不再活着了。因此,我们想要模型学会一种有区分的遗忘/记忆机制:当新的输入到来时,它需要知道记住哪些信念,以及丢弃哪些信念。

  2. 添加一个保存机制(saving mechanism):当模型看到一副新的图片时,它需要学习关于这张图片的信息是否值得使用和保存。或许你妈妈给了你一片关于凯莉·詹娜的文章,但是谁会在乎呢?

  3. 所以当新的输入来临时,模型首先要忘掉任何它认为不再需要的长期记忆信息。然后学习新输入的哪些部分是值得利用的,并将它们保存在自己的长期记忆中。

  4. 将长期记忆聚焦在工作记忆中:最后,模型需要学习长期记忆中的哪些部分是即刻有用的。例如,Bob 的年龄可能是一条需要长期保持的信息(儿童很可能正在玩耍,而成年人很可能正在工作),但是如果他不在当前的场景中,那么这条信息很可能就不是特别相关。所以,模型学习去聚焦哪一部分,而不总是使用完全的长期记忆。


这就是一个长短期记忆网络(long short-term memory network)。LSTM 会以一种非常精确的方式来传递记忆——使用了一种特定的学习机制:哪些部分的信息需要被记住,哪些部分的信息需要被更新,哪些部分的信息需要被注意。与之相反,循环神经网络会以一种不可控制的方式在每一个时间步骤都重写记忆。这有助于在更长的时间内追踪信息。


数学描述


让我们来对 LSTM 做一下数学描述。


在时间 t,我们收到了新的输入 xt。我们也有自己的从之前的时间步中传递下来的长期记忆和工作记忆,ltm(t−1)以及 wm(t−1)(两者都是 n 维向量),这就是我们想要更新的东西。


我们将要开始我们的长期记忆。首先,我们需要知道哪些长期记忆需要保持,哪些需要丢弃,所以我们想要使用新的输入和我们的工作记忆来学习一个由 n 个介于 0 和 1 之间的数字组成的记忆门,每一个数字都决定一个长期记忆的元素被保持多少。(1 意味着完全保持,0 意味着完全丢弃。)


自然地我们可以使用一个小型神经网络来学习这个记忆门:



(注意与我们之前的神经网络方程的相似性;这只是一个浅层的神经网络。并且,我们使用了 sigmoid 激活函数,因为我们需要的数字是介于 0 和 1 之间的。)


接下来,我们需要计算我们能够从 xt 中学习到的信息,也就是我们长期记忆中的候选者:



其中ϕ是一个激活函数,通常选择双曲正切函数。


然而,在我们将这个候选者加进我们的记忆之前,我们想要学到哪些部分是实际上值得使用和保存的:



(思考一下当你在网页上读到某些内容的时候会发生什么。当一条新闻文章可能包含希拉里的信息时,如果消息来源是 Breitbart,那你就应该忽略它。)


现在让我们把所有这些步骤结合起来。在忘掉我们认为将来不会再次用到的信息以及保存有用的新来的信息之后,我们就有了更新的长期记忆:



接下来,来更新我们的工作记忆:我们想要学习如何将我们的长期记忆专注于那些将会即刻有用的信息上。(换句话说,我们想要学习将哪些信息从外部硬盘移动到正在工作的笔记本内存上。)所以我们会学习一个聚焦/注意向量(focus/attention vector):



然后我们的工作记忆就成为了:




换言之,我们将全部注意集中在 focus 为 1 的元素上,并且忽略那些 focus 是 0 的元素。


然后我们对长期记忆的工作就完成了!也希望这能够称为你的长期记忆。


总结:一个普通的 RNN 用一个方程来更新隐藏状态/记忆:




而 LSTM 使用数个方程:



其中每一个记忆/注意子机制只是 LSTM 的一个迷你形式:



(注意:我在这里使用的术语和变量的名字和通常文献中是有所不同的。以下是一些标准名称,以后我将会交换使用:


  • 长期记忆 ltm(t), 通常被称为**cell state**, 简写 c(t).

  • 工作记忆 wm(t) 通常被称为**hidden state**, 简写 h(t)。这个和普通 RNN 中的隐藏状态是类似的。

  • 记忆向量 remember(t),通常被称为**forget gate** (尽管遗忘门中,1 仍旧意味着完全保持记忆 0 意味着完全忘记),简称 f(t)。

  • 保存向量 save(t),通常被称为 input gate,(因为它决定输入中有多少被允许进入 cell state),简称 i(t)。

  • 注意向量 focus(t),通常被称为 output gate,简称 o(t)。


卡比兽


写这篇博文的时间我本可以抓一百只 Pidgeys,请看下面的漫画。


神经网络


神经网络会以 0.6 的概率判定输入图片中的卡比兽正在淋浴,以 0.3 的概率判定卡比兽正在喝水,以 0.1 的概率判定卡比兽正在遭遇袭击。


循环神经网络








请到「今天看啥」查看全文