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時刻的內存數據為
設
定義讀取向量為
顯然,
2.2 Writing 操作
寫操作分解為順序運行的兩步:
1.擦除(erase)
2.加入(add)
式中的空心圓圈表示向量按元素逐個相乘(point-wise),顯然,這里的
假設
假設不考慮
假設要全然擦除一個分量。僅僅須要相應的
當
Write Head還須要生成一個長度為
t時刻的內存值將為:
顯然,
3.NTM的尋址策略
有兩種尋址策略,
3.1 Content-base(基於內容的尋址):
產生一個待查詢的值
首先,須要進行尋址操作的Head(Read or Write)生成一個長度為M的key vector:
當中,
類似度函數這里取余弦類似度:
3.2 Location-base(基於位置的尋址):
直接使用內存地址進行尋址,跟傳統的計算機系統類似,controller給出要訪問的內存地址,Head直接定位到該地址所相應的內存位置。
對於一些對內容不敏感的操作,比方乘法函數
基於地址的尋址方式能夠同一時候提升簡單順序訪問和隨機地址訪問的效率。我們通過對移位權值進行旋轉操作來實現優化。
比如。當前權值聚焦在一個位置,旋轉操作1將把焦點移向下一個位置,而一個負的旋轉操作將會把焦點移向上一個位置。
在旋轉操作之前。將進行一個插入改動的操作(interpolation),每一個head將會輸出一個改動因子
顯然,
在上述的interpolation操作結束后,每一個head將會產生一個長度為N的移位權值向量
寫成矩陣的形式例如以下:
原始可改寫為:
由於卷積操作會使權值的分布趨於均勻化,這將導致本來集中於單個位置的焦點出現發散現象。為了解決問題,還須要對結果進行銳化操作。詳細做法是Head產生一個因子
通過上述操作后,權值分布將變得“尖銳”。
我們通過一個簡單的樣例來說明:
假設N=5,當前焦點為1,三個位置-1,0,1相應的權值為0.1,0.8,0.1,
所以有:
取
能夠看出來,經過銳化處理后
整個尋址的步驟例如以下圖:
通過上圖的內存尋址系統。我們能夠實現三種方式的內存訪問:
1.直接通過內容尋址,即前邊提到的Content-base方式;
2.通過對Content-base產生的權值進行選擇和移位而產生新的尋址權值,在這樣的模式下,運行內存操作焦點跳躍到基於Content-base的下一個位置,這將使操作Head能夠讀取位於一系列相鄰的內存塊中的數據;
3.僅僅通過上一時刻的權值來生成新的操作地址權值,而不依賴不論什么當前的Content-base值。這將同意Head進行順序迭代讀取(比方能夠通過多個時刻的連續迭代,讀取內存中一個連續的數組)
3.3 控制器網絡(Controller Network)
NTM的結構中存在非常多的自由參數。比方內存的大小。讀寫頭的數目,內存讀取時的位移的范圍。可是最重要的部分還是控制器的神經網絡結構。比方,是選用遞歸網絡還是前饋網絡。假設選用LSTM,則其自有的隱層狀態能夠作為內存矩陣
假設把Controller與傳統計算機的CPU進行類比,則
單一的Read Head每一個時間步僅僅能操作一個內存向量,而遞歸Controller則可通過內部存儲器同一時候讀取多個內存向量。