有趣的是,直到网络读取Y定界符前,A和B的状态信息都是不需要的,但隐藏的状态还是会在所有中间输入中触发。这看起来有点“低效”,但也许是因为这个神经元还承担了计算x数量的任务。 复制任务 最后,我们看看如何让LSTM复制信息。 对于这个训练任务就,我训练了两层的LSTM序列: baaXbaa abcXabc 也就是说,这是一个由a、b、c组成的三个字符的子序列,后接定界符X,最后接一个相同的序列。 我并不确定复制神经元是什么样,所以为了弄清存储最初子序列部分的神经元,我查看了它们在读取定界符X时的隐藏态。因为网络需要对初始子序列进行编码,因此它的状态应该根据所学内容的不同显示不同的格式。 以下面这张图表为例,它绘制了5号神经元在读取定界符X时的隐藏状态。神经元显然能区分序列是不是以“c”开始。 再举一个例子,下图是20号神经元在读取X时的隐藏状态,它好像是把从b开始的序列都挑了出来。 如果观察20号神经元的cell状态,你会发现它几乎可以自己捕捉全部3个字符的子序列。在只有一个维度的情况下能做到这样,非常了不起。 这是20号神经元的cell在整个序列中的隐藏状态。注意它的隐藏状态已经在全部初始子序列中被切断。 然而,如果我们仔细观察会发现,直播,每当下一个字符是b时,神经元就会被触发。因此与其说这个神经元代表的是一个从b开始的序列,不如说是下一个字符是b的预测器。 据我所知,这种模式似乎在整个网络中都保持着——所有的神经元都在预测下一个字符,而不是记住特定位置的字符。例如,5号神经元似乎是“下一个字符是c”的预测器。 我不确定这是否是LSTM在复制信息时学会的默认行为,或者是其他的复制机制也会这样做。 状态和门 为了真正了解不同LSTM中不同的状态和门的作用,我们换个角度重新讲讲上一部分。 cell状态和隐藏状态 我们最初把cell状态描述为一种长期记忆,而隐藏状态是一种提取和聚焦这些记忆的方法。 所以当记忆与当前无关时,我们期望隐藏状态可以关闭——前面讲的序列复制神经元就是这样。 遗忘门 遗忘门(Forget Gate)会丢弃cell状态的信息(0意味着完全忘记,1意味着完全记住),所以我们期望当它需要记住一些确切的东西时,它可以被完全激活;当不再需要这些信息时,它可以被再次关闭。 这就是我们看到的这个A记忆神经元:遗忘门在被触发时记住当它经过x时的A状态,当它准备生成最后的a时将关闭。 输入门(保存门) 输入门(Input Gate,我以前叫它“保存门”)决定了是否从新输入中保存信息。因此它需要在遇到无用信息时关闭。 这也就是选择性计数神经元所做的:计算a和b的值,但忽略不相关的x。 令人惊讶的是,我们的LSTM方程中没有任何地方指定了输入、遗忘和输出门的工作方式,神经网络会自学什么是最好的。 扩展 现在我们探讨一下LSTM是如何出现的。 首先,很多我们要解决的问题都是按时序或者一定顺序排列的,我们可以将过去的经验融合到我们的模型中来。但是我们已经知道神经网络的隐藏层编码着重要的信息,所以我们为何不把这些隐藏层作为从一个时间步传递到另一个时间步的记忆呢?因此,出现了循环神经网络(RNN)。 (责任编辑:本港台直播) |