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


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,0wt(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)=Mt1(i)[1wt(i)et]
式中的空心圓圈表示向量按元素逐個相乘(point-wise),顯然,這里的 et 指出了每一個分量將被擦除的量。舉個簡單的樣例:
假設 N=2,M=3
Mt1=(142536)
wt=[0.1,0.3,0.7]T
et=[0.2,0.5,0.6]
M˜t(1)=Mt1(1)[1wt(1)et]
=[1,2,3](10.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]=uv||u||||v||

3.2 Location-base(基於位置的尋址):

直接使用內存地址進行尋址,跟傳統的計算機系統類似,controller給出要訪問的內存地址,Head直接定位到該地址所相應的內存位置。

對於一些對內容不敏感的操作,比方乘法函數 f(x,y)=xy ,顯然該操作並不局限於x,y的詳細值。x,y的值是易變的。重要的是能夠從指定的地址中把它們讀出來。這類問題更適合採用Location-base的尋址方式。


基於地址的尋址方式能夠同一時候提升簡單順序訪問和隨機地址訪問的效率。我們通過對移位權值進行旋轉操作來實現優化。

比如。當前權值聚焦在一個位置,旋轉操作1將把焦點移向下一個位置,而一個負的旋轉操作將會把焦點移向上一個位置。


在旋轉操作之前。將進行一個插入改動的操作(interpolation),每一個head將會輸出一個改動因子 gtgt[0,1] ,該值用來混合上一個時刻的 wt1 和當前時刻由內容尋址模塊產生的 wct ,最后產生門限權值 wgt :
wgt=gtwct+(1gt)wt1
顯然, 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 進行循環卷積操作。詳細例如以下式:
w˜t(i)=j=0N1wgt(j)st(ij)
寫成矩陣的形式例如以下:
這里寫圖片描寫敘述
原始可改寫為: w˜t=Stwgt
由於卷積操作會使權值的分布趨於均勻化,這將導致本來集中於單個位置的焦點出現發散現象。為了解決問題,還須要對結果進行銳化操作。詳細做法是Head產生一個因子 γt1 ,並通過例如以下操作來進行銳化:
wt(i)=w˜t(i)γtjw˜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˜γttjw˜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則可通過內部存儲器同一時候讀取多個內存向量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM