答案是肯定的,这也和我们期望的完全一样。因为长期记忆被双曲正切激活函数限制了输出内容。下面是10个cell状态节点】的总览,我们可以看到很多代表接近0值的浅色cell。 相比之下,这10个工作记忆的神经元看起来更专注,1号、3号、5号和7号在序列的前半部分看起来都是0。 那我们再看看2号神经元,这里给大家展示一些备用记忆和输入门(Input Gate)。它们在神经元的每半部分都是稳定的——就像神经元在每个步骤都在计算a+=1或b+=1一样。 最终,我们得到了所有神经元的内部结构:
如果你也想为不同的神经元计数,可以看看这个可视化工具。 可视化工具链接: #/network?file=counter 伯爵 还记得美国公共广播协会(PBS)制作播出的儿童教育电视节目《芝麻街》,里面有一个魔方吸血鬼样子设计的玩偶,叫伯爵。他喜欢数数,对计算机的兴趣没有边界。我就把这一部分的标题命名为伯爵好了。 △《芝麻街》里的计算机爱好者“数数伯爵” 现在我们看一个稍微复杂一点的计数器,这一次我生成了序列化的表单是: aaXaXaaYbbbbb 上面这串序列的特点是N个a和X任意交叉排列,再加入一个定界符Y,开奖,最后加入N个b。LSTM仍需计数a的数目,这次也同样需要忽略X。 完整的LSTM链接: #/network?file=selective_counter 我们希望得到遇到X时输入门是0的计数神经元。 上面就是20号神经元的cell状态。在还没有到达定界符Y时它会一直增大,之后一直递减直到序列的末尾——就像它计算的是num_bs_left_to_print变量,根据a的增量和b的递减不断变化。 它的输入门确实忽略了X: 有趣的是,备用存储器完全激活了不相关的定界符X,所以我们还是需要一个输入门。(如果输入门不是架构的一部分,想必神经网络将学会用其他方式学会忽略X) 那我们继续看10号神经元。 这个神经元很有意思,因为它只有在读取定界符Y时才可以激活,但它仍然试图编码目前在序列中看到的a。这很难从图中看出,但当读取到Y属于有相同数量的a的序列时,所有的元胞状态都是几乎相同的。可以看到,序列中a越少,Y的颜色越浅。 记住状态 接下来,我想看看LSTM是如何记住元胞状态的。我在再次生成一些序列: AxxxxxxYa BxxxxxxYb 在这个序列中,A或B后面可以接1-10个x,之后接入定界符Y,最后以开头字母的小写结尾。这种神经网络需要记住序列是否为一个A或B序列状态。 我们希望找到一个神经元,当记住这个序列以A开始时触发,另一个神经元会在记住它以B开始时触发。我们也确实找到了。 例如,这里有一个神经元A,当它读到一个A时,它会激活,并记住它,直到需要生成最终的字符为止。注意,输入门忽略了中间所有的x字符。
这里还有一个副本B: (责任编辑:本港台直播) |