虽然我们还不知道大脑是如何运作的,但我们觉得它必须有一个逻辑单元和一个记忆单元。就像计算机有逻辑单元CPU和GPU,也有RAM、ROM存储器。进而我们通过推理和经验做出决策。
但是当你看一个神经网络时,它的功能就像一个黑盒子。从一侧输入一些输入,从另一侧接收一些输出。它做出的决定主要基于当前的输入。
如果神经网络没有记忆是不合乎现实的。毕竟,那些学到的权重是对训练数据的某种记忆。但这种记忆更加静态。有时我们想要记住输入以供以后使用。这种情况有很多例子,例如股票市场。为了做出良好的投资判断,我们必须至少从时间窗口查看股票数据。让神经网络接受时间序列数据的非常直觉的方法,是将几个神经网络连接在一起。每个神经网络处理一个时间步长。你可以在窗口或上下文中的所有时间步骤向神经网络提供数据,而不是在每个单独的时间步骤中提供数据。
很多时候,需要处理具有周期性模式的数据。举一个很简单的例子,假设你想要预测圣诞树销售量。这是一个非常受季节性影响的事情,每年只有一次。因此,预测圣诞树销售的一个好策略是查看前一年的数据。对于这类问题,需要有一个大的上下文来包含历史数据点,或者要有一个良好的记忆。知道哪些数据值得记住以供以后使用,哪些数据在无用时需要忘记。
从理论上讲,递归神经网络,可以工作。但在实践中,它遇到两个问题:梯度消失和梯度爆炸,使其无法使用。
后来,人们发明了LSTM(长期短期记忆),通过明确地将一个称为细胞的记忆单元引入网络来解决这个问题。下图是LSTM架构图。
乍一看,这看起来令人生畏。让我们忽略内部结构,只看一下单元的输入和输出。网络需要三个输入。X_t是当前时间步的输入。h_t-1是前一个LSTM单元的输出,C_t-1是前一个单元的"存储器",我认为这是最重要的输入。至于输出,h_t是当前网络的输出。C_t是当前单位的内存(记忆)。
因此,该单个单元通过考虑当前输入,先前输出和先前存储器来做出决定。它会生成一个新输出并改变其记忆。
它的内部记忆C_t改变的方式非常类似于通过管道输送水。假设记忆是水,它会流入管道。我们希望沿途更改此内存流量,此更改由两个阀门控制。
第一个阀叫做忘记阀。如果你关闭它,将不会保留旧的记忆。如果你完全打开这个阀门,所有旧的记忆都会通过。
第二个阀门是新的记忆阀。新记忆将通过如上所述的T形关节进入管道并与旧记忆合并。管道需要控制多少新记忆应该由第二个阀门控制。
关于记忆的两个步骤:1、忘记阀。
在LSTM图上,顶部的"管道"是内存管道。输入是旧记忆(向量)。它通过的第一个十字阀门是忘记阀。它实际上是一个元素乘法运算。因此,如果将旧内存C_t-1与接近0的向量相乘,则意味着要忘记大部分旧内存。如果你的忘记阀等于1,你就让旧的记忆通过。2、汇合阀(本文新创的词)
然后,内存流将经历的第二个操作是+运算符。该运算符表示求和。它类似于T形连接管。此操作将合并新记忆和旧記。应该向旧记忆添加多少新记忆由另一个阀门控制。
在这两个操作之后,将旧记忆C_t-1更改为新记忆C_t。
现在来看忘记阀是怎么实现的。它由简单的单层神经网络控制。
X_t是当前LSTM单元新的输入
当前单元接受前一个LSTM单元的输出h_t-1,
C_t-1,前一个单元的记忆
C_t,当前单元的记忆
最后是偏置矢量b_0。忘记阀的关键是sigmoid函数,我们知道这个函数的取值0-1范围内,所以可以充当控制阀,0不让通过;1,全部放行。用这个向量与旧记忆向量进行点乘,实现控制。
汇合阀,同样,它是一个单层简单的神经网络,它与忘记阀门具有相同的输入。
该阀门控制新记忆应该汇入旧记忆的程度。
这是怎么实现的呢,注意与忘记阀的区别!
1、汇合阀与忘记阀的位置;
2、汇合阀与忘记阀的表示不同,一个是X号,一个是+号;
3、汇合阀由于要对当前的输入进行流量控制,所以也要引入sigmoid激活函数作为控制阀,也就是让输入与sigmoid函数的输出进行点乘,这个点乘的结果就是控制后量;
4、汇合阀中的输入使用tanh作为激活功能,防止梯度消失。
图中标出的红色是忘记阀,紫色是汇合阀(新的记忆阀)。
输出阀,我们需要为此LSTM单元生成输出。其由新记忆、先前输出h_t-1,、输入X_t和偏置矢量控制。对于前文所述经过忘记阀和汇合阀,已经得到新记忆,那么当前单元的输出由什么组成的呢?我们的回答由当前的新记忆!但并不是全部记忆,这记忆应该由一个输出阀来控制,既然又是一个阀,那么必须有标配sigmoid!该阀控制输出到下一个LSTM单元作为旧的输入。
我们用一个图来形象的表达其输入、输出关系:
在这里,使用第一个图表中相同的符号和颜色来重绘上面的图表:
忘记阀:
汇合阀:
经过忘记阀和汇合阀后得到新的记忆:
输出阀:
留言与评论(共有 0 条评论) |