Neural Turing Machines-NTM系列(一)简述
NTM是一种使用Neural Network为基础来实现传统图灵机的理论计算模型。利用该模型,可以通过训练的方式让系统“学会”具有时序关联的任务流。
论文:http://arxiv.org/abs/1410.5401
中文翻译:http://www.dengfanxin.cn/?p=60
ppt:http://llcao.net/cu-deeplearning15/presentation/NeuralTuringMachines.pdf
基于Theano的python语言实现1:https://github.com/shawntan/neural-turing-machines
基于Theano的python语言实现2:https://github.com/snipsco/ntm-lasagne
基于Torch的实现:https://github.com/kaishengtai/torch-ntm
基于Tensor Flow的实现:https://github.com/carpedm20/NTM-tensorflow
基于C#的实现:https://github.com/JanTkacik/NTM
基于JS语言的实现:https://github.com/gcgibson/NTM
GO语言实现:https://github.com/fumin/ntm
相关博客1:https://blog.wtf.sg/category/neural-turing-machines/
相关博客2 :https://medium.com/snips-ai/ntm-lasagne-a-library-for-neural-turing-machines-in-lasagne-2cdce6837315#.twrvqnda9
百度贴吧:http://tieba.baidu.com/p/3404779569
知乎中关于强人工智能的一些介绍:http://www.zhihu.com/question/34393952
1.图灵机
首先,我们来复习一下大学的知识,什么是图灵机呢?图灵机并不是一个实体的计算机,而是一个理论的计算模型,由计算机技术先驱Turing在1936年提出(百度知道)
它包含如下基本元素:
TAPE:磁带,即记忆体(Memory)
HEAD:读写头,read or write TAPE上的内容
TABLE:一套控制规则,也叫控制器(Controller),根据机器当前状态和HEAD当前所读取的内容来决定下一步的操作。在NTM中,TABLE其实模拟了大脑的工作记忆
register:状态寄存器,存储机器当前的状态。
如下图:
2. 神经图灵机(NTM)
所谓的NTM,其实就是使用NN来实现图灵机计算模型中的读写操作。其模型中的组件与图灵机相同。那么,NTM中是怎么实现的呢?
2.1 Reading 操作
假设t时刻的内存数据为 Mt , Mt 为一矩阵,大小为 N×M ,其中N为内存地址的数目,M为每个内存地址向量的长度。设 wt 为t时刻加于N个内存地址上的权值, wt 为一N维向量,且每个分量 wt(i) 满足:
∑iwt(i)=1,且∀i,0≤wt(i)≤1
定义读取向量为 rt (即t时刻Read Head读取出来的内容),大小为M,且满足:
rt=∑iwt(i)Mt(i)
显然, rt 是 Mt(i) 的凸组合。
2.2 Writing 操作
写操作分解为顺序执行的两步:
1.擦除(erase)
2.添加(add)
wt 为Write Head发出的权值向量, et 为擦除向量,它们的所有分量值都在0,1之间,前一个时刻的Memory修改量为:
M˜t(i)=Mt−1(i)∘[1−wt(i)et]
式中的空心圆圈表示向量按元素逐个相乘(point-wise),显然,这里的 et 指出了每个分量将被擦除的量。举个简单的例子:
假设 N=2,M=3
Mt−1=(142536)
wt=[0.1,0.3,0.7]T
et=[0.2,0.5,0.6]
M˜t(1)=Mt−1(1)∘[1−wt(1)et]
=[1,2,3]∘(1−0.1∗[0.2,0.5