这些模型能解决的任务并没有太复杂,比如数字的相加,传统的程序就能轻而易举地解决。但神经网络模型不仅局限于此,例如神经图灵机器在能力上有了深远的突破。
代码
这些模型有许多开源的实现版本。神经图灵机器的开源实现版本有 Taehoon Kim’s(TensorFlow), Shawn Tan’s (Theano), Fumin’s (Go), Kai Sheng Tai’s (Torch), and Snip’s (Lasagne)。神经GPU论文的代码已经开源,合并到了 TensorFlow模型代码库。记忆网络的开源实现有 Facebook’s (Torch/Matlab), YerevaNN’s (Theano), and Taehoon Kim’s (TensorFlow)。
聚焦的接口(Attention Interface)
在翻译句子时,我们会尤其关注当前正在翻译的词语。在转换语音记录时,我们会集中注意认真聆听正在书写的片段。如果你让我描述我所在的屋子,我肯定会瞥一眼正在描述的屋内物品。
神经网络模型可以使用 聚焦 来实现同样的动作,专注于所提供信息的某一部分。例如,一个RNN模型可以输入另一个RNN模型的输出。它在每一步都会关注另一个RNN模型的不同位置。
我们希望聚焦点是可区分的,从而能学会需要关注哪些位置。因此,我们借用了神经图灵机器的技巧:关注所有位置,只是程度不一样。
聚焦分布通常是由基于内容的聚焦产生。RNN模型生成一个搜索词描述其希望关注的位置。然后计算每条内容与搜索词的点乘得分,表示其与搜索词的匹配程度。这些分数经过softmax函数的运算产生聚焦的分布。
聚焦机制在RNN模型的使用场景之一是语言翻译( Bahdanau, et al. 2014 )。若用传统的序列到序列模型做翻译,需要把整个输入词汇串缩简为单个向量,然后再展开恢复为序列目标语言的词汇串。聚焦机制则可以避免上述操作,RNN模型逐个处理输入词语的信息,随即生成相对应的词语。
RNN模型之间的这类聚焦还有许多其它的应用。它可以用于语音识别( Chan, et al. 2015 ),其中一个RNN模型处理语音信号,另一个RNN模型则滑动处理其输出,然后关注相关的区域生成文本内容。
图片来自于 Chan, et al. 2015
聚焦机制的其它用途还包括文本解析( Vinyals, et al., 2014 )生成一棵解析树,以及
用于会话模型( Vinyals & Le, 2015 ),模型可以根据之前的会话内容生成回复。
聚焦机制还能用作卷积神经网络CNN和RNN模型的接口。这使得RNN模型每一步都在关注图片的不同区域。这种方法的用途之一就是给图片添加描述。首先,用卷积神经网络处理图像,提取高层次的特征。然后运行RNN模型,生成图像的描述。随着RNN模型在图像的卷积网络特征的关注部位不同,生成相对于的描述文字。我们来将这个过程可视化:
图片来自 Xu, et al., 2015
推而广之,若某个神经网络的输出具有重复性的结构,就能使用聚焦接口(attentional interfaces)与这个神经网络相衔接。
聚焦接口被认为是一项非常普及和有效的技术,受到了越来越多的应用。
适应性计算时间(Adaptive Computation Time)
标准的RNN模型每一步所消耗的计算时间都相同。这似乎与我们的直觉不符。我们在思考难题的时候难道不需要更多的时间吗?
适应性计算时间(Adaptive Computation Time Graves, 2016 )是解决RNN每一步消耗不同计算量的方法。笼统地说:就是让RNN模型可以在每个时间片段内进行不同次数的计算步骤。
为了让网络模型学会需要计算多少步,我们希望步数有区别性。因此我们采用了之前提到过的技巧:我们给需要计算的步数设了聚焦分布,而不是指定具体的数值。输出的是每一步的带权重结合。