前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

LSTMs

作者头像
哒呵呵
发布2018-08-06 17:32:51
6020
发布2018-08-06 17:32:51
举报
文章被收录于专栏:鸿的学习笔记

--使用LSTMs加强RNN模型

由于使用权重矩阵的方式,会对典型RNN可以学习的模式类型存在一些显着的限制。因此,对于称为长短期存储器网络(Long Short-Term Memory networks)的RNN的变型充满了兴趣。 正如我将在下面描述的,LSTMs比典型的RNN具有更多的控制,这使得LSTMs允许学习更复杂的模式。

让我们开始一个“典型”的RNN。 在RNN的文章中,我提到了计算图中的三种基本类型的操作:1)来自节点(其可以在网络中更早或者更晚)的输出可以被连接成更高维的向量,例如混合当前输入矢量与上一步中计算的矢量。 2)可以将向量乘以权重矩阵,以组合和变换级联的向量。 3)可以将固定的非线性变换应用于计算图中的每个节点的输出。

由这三个操作定义的RNN的限制源于这样的事实:虽然权重矩阵在训练阶段期间被更新,但是它们在每个输入序列被处理时是固定的。因此,每次以相同的方式将输入序列中的每个步骤与从先前步骤存储的信息组合。在某种意义上,网络被迫记住每个序列中的每个步骤的相同的事情,即使一些步骤可能比其他步骤更重要,或包含不同类型的信息。

另一方面,LSTM被设计为能够控制它记住关于每个输入的内容,并且学习如何在训练阶段决定记住什么。 LSTM的关键附加操作是4)来自计算图中的节点的输出向量可以通过分量乘法。换句话说,将每个向量的第一维中的值相乘,以获得新向量的第一维。然后将两个向量的第二维相乘,等等。

这不是一个线性变换,在这种意义上,你不能通过连接两个向量获得相同的结果,然后乘以权重矩阵。相反,这更像是将一个输入向量视为一个权重矩阵,您将乘以另一个输出向量。但是与典型RNN中的权重矩阵不同,该“权重矩阵”向量由网络中的其他地方的计算确定,因此应确定何时处理新数据,而不是在整个评估阶段固定。

该“权重矩阵”向量在许多方面不如典型RNN中的内置权重矩阵令人印象深刻。它等价于一个向量的值沿着对角线,其余的项等于零的矩阵。所以它不能做任何操作变成另一个向量。相反,你应该认为它是一种过滤器,决定其他向量的哪些部分是重要的。特别地,如果“权重矩阵”向量在给定维度中为零,则在该维度中乘法的结果将为零,而不管该维度在另一向量中的值是什么。如果它接近1,输出值正好等于该维中的另一个向量的值。(并且通常应用非线性变换以确保“权重矩阵”值非常接近0或1.)因此,“权重矩阵”向量选择第二向量的哪些部分被传递到下一步。因此,“权重矩阵”向量乘以数据向量的计算图中的节点通常称为门。

LSTM使用第四个操作来创建三个门,如下图所示。这显示了LSTM中单个单元格的内部,我们将进一步看到这个单元格如何在外部连接。

LSTM单元有两个输入和两个输出。顶部的输出(标记为输出)是实际的RNN输出,即您将用于评估和训练网络的输出向量。右边的输出(标记为mem)是“存储器”输出,LSTM想要为下一步记录的向量。类似地,底部上的输入(标记为)与标准RNN的输入相同,即序列中的下一个输入向量。右边的输入(也标记为mem)是在序列的上一步骤期间从LSTM单元输出的“存储器”向量。您应该将LSTM视为使用新输入来更新内存向量的值,然后将其传递到下一步,然后使用新的内存值为该步骤生成实际输出。

当新的输入向量通过LSTM的底部进入时,它将乘以权重矩阵,使它与存储器向量具有相同的形式。我们想要使用如上所述的门来将其与存储器向量组合。因此,输入向量也与前一周期的存储器向量连接,并且乘以三个不同的权重矩阵:控制单元“记住”输入的什么,控制单元“忘记”来自存储器的什么部分,并控制什么部分当前存储器在顶部输出。每个乘法的结果通过没有包括在图中的非线性变换。

然后这些向量被反馈到由新的网络操作(由带有点的圆圈指示)定义的门中,如图所示。中间门滤波来自前一步骤的存储器向量,底部门滤波变换的输入向量。然后将这两个门控载体加在一起以产生用于该步骤的存储器载体。除了成为发送到LSTM中的下一步骤的存储器矢量,存储器矢量也被顶栅滤波以产生来自LSTM的实际输出。

在该过程中的关键步骤是如何将存储器向量和变换的输入向量相加之前独立地门控。在最简单的设置中,每个“权重矩阵”向量将具有值0或1,并且将在两个门之间互补,使得每个维度从其中一个或另一个维度获得值。从当前输入和当前存储器向量计算的值将因此确定存储器向量中的哪个维度应当被传递到下一步骤,并且应当被来自经变换的输入的对应值替换向量。但在实践中,网络会“学习”到任何对于产生期望的输出模式最有效的行为,因此它可能更复杂。

说到这一点,让我们快速看看如何训练LSTM,并使用展开的想法。正如你可能从上面的讨论中得出的,我们通过从正确的内存中添加一个来此从右边的存储器边缘,并从外部连接一个LSTM。如下图左边所示。这个边缘有点难以绘制,缠绕在细胞后面。但是一旦你展开了网络,如图所示,它形成了一个漂亮,整齐的水平边缘。

与标准RNN一样,您可以使用展开来了解训练过程,将整个输入序列一次性提供给网络,并使用反向传播基于所需的输出序列更新权重矩阵。注意,LSTM相当“浅”,没有那么多的神经元层。事实上,如果你忽略门,在输入向量和输出向量之间有一个单独的权重矩阵。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档