Neural Turing Machines-NTM系列(一)简述

NTM是一种使用Neural Network为基础来实现传统图灵机的理论计算模型。利用该模型。能够通过训练的方式让系统“学会”具有时序关联的任务流。

论文:http://arxiv.org/abs/1410.5401

中文翻译:

p=60" target="_blank">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,0.6])=[1,2,3]∘[0.98,0.95,0.94]=[0.98,1.9,1.88]

假设不考虑wt的影响,我们能够简单的觉得et的值代表将擦除的量,比方上例中的[0.2,0.5,0.6],能够觉得内存中每一个分量将分别被擦去原值的0.2,0.5,0.6,而wt相当于每一个分量将要被改动的权重。

假设要全然擦除一个分量。仅仅须要相应的wt(i)和et都为1。

当et为0时,将不进行不论什么改动。

Write Head还须要生成一个长度为M的add向量at。在erase操作运行完之后,它将被“加”到相应的内存地址中。

t时刻的内存值将为:

Mt(i)=M˜t(i)+wt(i)at

显然,erase和add操作都是可微的,它们的组合操作writing也同样是可微的。writing能够对随意地址的元素值进行随意精度的改动。

3.NTM的寻址策略

有两种寻址策略,

3.1 Content-base(基于内容的寻址):

产生一个待查询的值kt,将该与Mt中的全部N个地址的值进行比較,最相近的那个Mt(i)即为待查询的值。

首先,须要进行寻址操作的Head(Read or Write)生成一个长度为M的key vector:kt,然后将kt与每一个Mt(i)进行类似度比較(类似度计算函数为K[u,v])。最后将生成一个归一化的权重向量wct,计算公式例如以下:

wct(i)=eβtK[kt,Mt(i)]∑jeβtK[kt,Mt(j)]

当中,βt满足βt>0是一个调节因子。用以调节寻址焦点的范围。βt越大。函数的曲线变得越发陡峭,焦点的范围也就越小。

类似度函数这里取余弦类似度:K[u,v]=u⋅v||u||⋅||v||

3.2 Location-base(基于位置的寻址):

直接使用内存地址进行寻址,跟传统的计算机系统类似,controller给出要訪问的内存地址,Head直接定位到该地址所相应的内存位置。

对于一些对内容不敏感的操作,比方乘法函数f(x,y)=xy,显然该操作并不局限于x,y的详细值。x,y的值是易变的。重要的是能够从指定的地址中把它们读出来。这类问题更适合採用Location-base的寻址方式。

基于地址的寻址方式能够同一时候提升简单顺序訪问和随机地址訪问的效率。我们通过对移位权值进行旋转操作来实现优化。

比如。当前权值聚焦在一个位置,旋转操作1将把焦点移向下一个位置,而一个负的旋转操作将会把焦点移向上一个位置。

在旋转操作之前。将进行一个插入改动的操作(interpolation),每一个head将会输出一个改动因子gt且gt∈[0,1],该值用来混合上一个时刻的wt−1和当前时刻由内容寻址模块产生的wct,最后产生门限权值wgt:

wgt=gtwct+(1−gt)wt−1

显然,gt的大小决定了wct所占的分量,gt越大,系统就越倾向于使用Content-base Addressing。当gt=1时。将全然依照Content-base方式进行寻址。

在上述的interpolation操作结束后,每一个head将会产生一个长度为N的移位权值向量st,st是定义在全部可能的整形移位上的一个归一化分布。比如。假设移位的范围在-1到1之间(即最多能够前后移动一个位置),则移位值将有3种可能:-1,0,1,相应这3个值。st也将有3个权值。那该怎么求出这些权值呢?比較常见的做法是,把这个问题看做一个多分类问题。在Controller中使用一个softmax层来产生相应位移的权重值。在论文中还实验了一种方法:在Controller中产生一个缩放因子,该因子为移位位置上均匀分布的下界。比方,假设该缩放因子值为6.7。那么st(6)=0.3,st(7)=0.7。st的其余分量为0(仅仅取整数索引)。



st生成之后,接下来就要使用st对wgt进行

url=vyrKDC_0O7DrD2xOD6JEOClHsNpLqx5yWgF4cddV7ve40zP0Ffy8XFBUdwEQuGebngIo0wB42G2jGvXhlVcoIrYT_wNxrlygeCGjhATojmUYr8_H0u2lnWjaoSeWqOgf" target="_blank">循环卷积操作。详细例如以下式:

w˜t(i)=∑j=0N−1wgt(j)st(i−j)

写成矩阵的形式例如以下:



原始可改写为:w˜t=Stwgt

由于卷积操作会使权值的分布趋于均匀化,这将导致本来集中于单个位置的焦点出现发散现象。为了解决问题,还须要对结果进行锐化操作。详细做法是Head产生一个因子γt≥1,并通过例如以下操作来进行锐化:

wt(i)=w˜t(i)γt∑jw˜t(j)γt

通过上述操作后,权值分布将变得“尖锐”。

我们通过一个简单的样例来说明:

假设N=5,当前焦点为1,三个位置-1,0,1相应的权值为0.1,0.8,0.1,wgt=⎡⎣⎢⎢⎢⎢⎢0.060.10.650.150.04⎤⎦⎥⎥⎥⎥⎥则

St=⎡⎣⎢⎢⎢⎢⎢st(0)st(1)st(2)st(3)st(4)st(4)st(0)st(1)st(2)st(3)st(3)st(4)st(0)st(1)st(2)st(2)st(3)st(4)st(0)st(1)st(1)st(2)st(3)st(4)st(0)⎤⎦⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢0.10.80.10000.10.80.10000.10.80.10.1000.10.80.80.1000.1⎤⎦⎥⎥⎥⎥⎥

所以有:

w˜t=Stwgt=⎡⎣⎢⎢⎢⎢⎢0.10.80.10000.10.80.10000.10.80.10.1000.10.80.80.1000.1⎤⎦⎥⎥⎥⎥⎥×⎡⎣⎢⎢⎢⎢⎢0.060.10.650.150.04⎤⎦⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢0.0530.0620.1510.5450.189⎤⎦⎥⎥⎥⎥⎥

取γt=2,

wt=w˜γtt∑jw˜t(j)γt=⎡⎣⎢⎢⎢⎢⎢0.00780.01060.06300.82010.0986⎤⎦⎥⎥⎥⎥⎥

能够看出来,经过锐化处理后wt不同元素直接的差异变得更明显了(即变得“尖锐”了)。内存操作焦点将更加突出。

整个寻址的步骤例如以下图:

通过上图的内存寻址系统。我们能够实现三种方式的内存訪问:

1.直接通过内容寻址,即前边提到的Content-base方式;

2.通过对Content-base产生的权值进行选择和移位而产生新的寻址权值,在这样的模式下,运行内存操作焦点跳跃到基于Content-base的下一个位置,这将使操作Head能够读取位于一系列相邻的内存块中的数据;

3.仅仅通过上一时刻的权值来生成新的操作地址权值,而不依赖不论什么当前的Content-base值。这将同意Head进行顺序迭代读取(比方能够通过多个时刻的连续迭代,读取内存中一个连续的数组)

3.3 控制器网络(Controller Network)

NTM的结构中存在非常多的自由參数。比方内存的大小。读写头的数目,内存读取时的位移的范围。可是最重要的部分还是控制器的神经网络结构。比方,是选用递归网络还是前馈网络。假设选用LSTM,则其自有的隐层状态能够作为内存矩阵Mt的补充。

假设把Controller与传统计算机的CPU进行类比,则Mt就相当于传统计算机的内存(RAM),递归网络中的隐层状态就相当于寄存器(Registers),同意Controller混合跨越多个时间步的信息。还有一方面,前馈网络能够通过在不同的时刻读取内存中同样的位置来模拟递归网络的特性。此外。基于前馈网络的Controller网络操作更为透明。由于此时的读写操作相比RNN的内部状态更easy解释。当然前馈网络的局限性主要在于同一时候存在的读写头数目有限。

单一的Read Head每一个时间步仅仅能操作一个内存向量,而递归Controller则可通过内部存储器同一时候读取多个内存向量。

Neural Turing Machines-NTM系列(一)简述的更多相关文章

  1. 神经网络图灵机(Neural Turing Machines, NTM)

    近期,Google Deep Mind团队提出了一个机器学习模型,并起了一个特别高大上的名字:神经网络图灵机,我为大家翻译了这篇文章,翻译得不是特别好,有些语句没读明白,欢迎大家批评指正  原论文出处 ...

  2. Neural Turing Machine - 神经图灵机

    Neural Turing Machine - 神经图灵机 论文原文地址: http://arxiv.org/pdf/1410.5401.pdf 一般的神经网络不具有记忆功能,输出的结果只基于当前的输 ...

  3. DeepCTR专题:Neural Factorization Machines 论文学习和实现及感悟

    papers地址:https://arxiv.org/pdf/1708.05027.pdf 借用论文开头,目前很多的算法任务都是需要使用category feature,而一般对于category f ...

  4. (转)The Neural Network Zoo

    转自:http://www.asimovinstitute.org/neural-network-zoo/ THE NEURAL NETWORK ZOO POSTED ON SEPTEMBER 14, ...

  5. (转)Understanding Memory in Deep Learning Systems: The Neuroscience, Psychology and Technology Perspectives

    Understanding Memory in Deep Learning Systems: The Neuroscience, Psychology and Technology Perspecti ...

  6. Attention and Augmented Recurrent Neural Networks

    Attention and Augmented Recurrent Neural Networks CHRIS OLAHGoogle Brain SHAN CARTERGoogle Brain Sep ...

  7. Recurrent Neural Network[Content]

    下面的RNN,LSTM,GRU模型图来自这里 简单的综述 1. RNN 图1.1 标准RNN模型的结构 2. BiRNN 3. LSTM 图3.1 LSTM模型的结构 4. Clockwork RNN ...

  8. The Unreasonable Effectiveness of Recurrent Neural Networks (RNN)

    http://karpathy.github.io/2015/05/21/rnn-effectiveness/ There’s something magical about Recurrent Ne ...

  9. 【机器学习Machine Learning】资料大全

    昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...

随机推荐

  1. 简单Dp----最长公共子序列,DAG最长路,简单区间DP等

    /* uva 111 * 题意: * 顺序有变化的最长公共子序列: * 模板: */ #include<iostream> #include<cstdio> #include& ...

  2. [TC_SRM_466]DrawingBlackCrosses

    [TC_SRM_466]DrawingBlackCrosses 试题描述 \(n \times m\)(\(n, m \le 20\))的棋盘 其中至多有 \(8\) 个格子为黑色,其他格子为白色 每 ...

  3. 设置pycharm的python版本

    http://blog.csdn.net/github_35160620/article/details/52486986

  4. git repo gerrit 的关系

    Git作为一个版本控制工具,功能很强大,新建分支,切换分支都很快,小团队用Git就能很好地管理好了,但如果是Android系统如此庞大的工程呢,我们知道全套Android源码是很大很大的,目录结构也很 ...

  5. 【02】 Vue 之 数据绑定

    2.1. 什么是双向绑定? Vue框架很核心的功能就是双向的数据绑定. 双向是指:HTML标签数据 绑定到 Vue对象,另外反方向数据也是绑定的.通俗点说就是,Vue对象的改变会直接影响到HTML的标 ...

  6. HTML 上标和下标

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 洛谷 [P2577] 午餐

    DP + 贪心 我们发现,如果只有一个窗口,贪心即可解决,吃饭时间长的人一定要先打饭 有两个窗口的时候,这条性质依然满足,但是两个窗口如何分配,需要 01 背包 #include <iostre ...

  8. Mongoose 表实例

    /********** 用户表 BY Jaysir 2015.6.21 *********** *********** 可搜索以下关键词来查看未实现功能 *********** *********** ...

  9. SQL:某个字段重复的时候只查询出最后插入的那条

    原文发布时间为:2009-04-11 -- 来源于本人的百度文章 [由搬家工具导入] 数据库com中有下列数据 id,userid,tupian,time 1 3 3 2006.3.5 2 4 4 2 ...

  10. Manjaro Linux下使用powerline

    作为linux的重度使用者,vim和bash的使用也非常平凡,总想有点不同,感觉千篇一律的提示符已经看的厌倦了.作为广大网友的推荐的powerline可以为bash和vim的提示符美化增色不少.下面请 ...