AlphaGo開(kāi)發(fā)者欲通過(guò)深度學(xué)習(xí)挑戰(zhàn)馮·諾依曼體系
掃描二維碼
隨時(shí)隨地手機(jī)看文章
想挑戰(zhàn)馮·諾依曼,就必須從三個(gè)要素入手:基本操作,例如加減乘除;邏輯流程控制,例如if-else-then,for,while;設(shè)存儲(chǔ)器,內(nèi)存和硬盤(pán)的尋址。DeepMind團(tuán)隊(duì)認(rèn)為,馮·諾依曼體系中的邏輯流程控制和外設(shè)存儲(chǔ)器使用,都必須在程序中寫(xiě)死,而不能通過(guò)觀察范例,自動(dòng)生成程序。
2016年10月27日 “Nature” 期刊第538卷,發(fā)表了Google旗下的DeepMind團(tuán)隊(duì)寫(xiě)的人工智能的論文,題目是 “Hybrid compuTIng using a neural network with dynamic external memory” [1],用配置了動(dòng)態(tài)外部存儲(chǔ)的神經(jīng)網(wǎng)絡(luò),實(shí)現(xiàn)雜交計(jì)算。這篇論文介紹了DifferenTIable Neural Computer的實(shí)現(xiàn)細(xì)節(jié)。
DeepMind團(tuán)隊(duì)在倫敦工作,2014年被Google收購(gòu)。DeepMind開(kāi)發(fā)的AlphaGo,2016年年初戰(zhàn)勝了圍棋高手李世乭。
早在2014年12月,DeepMind團(tuán)隊(duì)發(fā)表了一篇論文,“Neural Turing Machines” [2]。后來(lái),他們對(duì)Neural Turing Machines (NTM)的存儲(chǔ)管理方式做了改進(jìn),命名為DifferenTIable Neural Computer(DNC)。DifferenTIable是可訓(xùn)練的意思,尤其是可以用gradient descent的算法來(lái)訓(xùn)練。
馮·諾依曼體系
當(dāng)今世界,所有計(jì)算機(jī)的體系,都源自于馮·諾依曼于1945年設(shè)計(jì)的體系,馮·諾依曼體系有三大要素:
基本操作,例如加減乘除。
邏輯流程控制,例如if-else-then,for,while。
外設(shè)存儲(chǔ)器,內(nèi)存和硬盤(pán)的尋址。
想挑戰(zhàn)馮·諾依曼,就必須從這三個(gè)要素入手。DeepMind團(tuán)隊(duì)認(rèn)為,馮·諾依曼體系中的邏輯流程控制和外設(shè)存儲(chǔ)器使用,都必須在程序中寫(xiě)死,而不能通過(guò)觀察范例,自動(dòng)生成程序。
如果把程序理解為把輸入x轉(zhuǎn)換為輸出y的函數(shù)f(),y = f(x),那么neural network就是模擬任何函數(shù)的通用模型f^()。
但是早期的neural network有兩個(gè)軟肋:
不能實(shí)現(xiàn)variable binding,也就是說(shuō),f() 的內(nèi)部參數(shù),不能隨著輸入x的不同而改變。
不能實(shí)現(xiàn)variable-length structure,也就是說(shuō),輸入x和輸出y的維度都是定長(zhǎng)的,不能改變。
早期neural network的這兩個(gè)軟肋,都不難修補(bǔ)。譬如循環(huán)神經(jīng)網(wǎng)絡(luò)Recurrent Neural Network(RNN),就解決了這兩個(gè)問(wèn)題。換而言之,RNN是Turing-complete的,可以用來(lái)模擬任何函數(shù),當(dāng)然也可以模擬任何程序的功能。
既然馮·諾依曼體系的三大要素中的兩個(gè),基本操作和邏輯流程控制,都能夠被RNN模擬,假如RNN也能夠解決存儲(chǔ)管理的問(wèn)題,那么整個(gè)馮·諾依曼體系,就都能夠被RNN來(lái)實(shí)現(xiàn)了。所以 Differentiable Neural Computer (DNC)的工作重點(diǎn),在于存儲(chǔ)管理。
[3] 深入淺出地解釋了用RNN來(lái)管理存儲(chǔ)的原理。建議先讀 [3],再讀 [2],最后讀 [1]。需要特別注意的,個(gè)人體會(huì)有幾個(gè)方面,1. 存儲(chǔ)的設(shè)置,2. 尋址機(jī)制,3. 需要訓(xùn)練哪些參數(shù),4. 如何把DNC應(yīng)用到Graph操作中。
存儲(chǔ)的設(shè)置
[3] 把NTM/DNC的存儲(chǔ)設(shè)置解釋為the memory is an array of vectors,也就是一個(gè)矩陣,每一行就是一個(gè)vector,每行的vector的長(zhǎng)度一致,所有行集結(jié)起來(lái)就是array。在文中的例子中,[3] 把memory簡(jiǎn)化為an array of scalar, 也就是N行單列的矩陣,每一行只存儲(chǔ)一個(gè)數(shù)值。
什么時(shí)候需要存儲(chǔ)向量呢?如果存儲(chǔ)里存放的是圖像,那么每個(gè)存儲(chǔ)單元上存儲(chǔ)的是一個(gè)像素(r,g,b),像素就是一個(gè)向量,三個(gè)bytes組成的向量。
但是如果需要存儲(chǔ)的是一篇文章,每個(gè)存儲(chǔ)單元上需要存儲(chǔ)一個(gè)詞,而每個(gè)詞的長(zhǎng)度不同,怎么辦?三篇文章都沒(méi)有說(shuō),但是簡(jiǎn)單的辦法有二。
每個(gè)存儲(chǔ)單元上,預(yù)留足夠長(zhǎng)的vector,遇到很短的詞,空著的byte就全部填0。
把每個(gè)詞,無(wú)論長(zhǎng)短,都轉(zhuǎn)換為詞向量,詞向量的長(zhǎng)度定長(zhǎng)。第二個(gè)辦法就是其它論文中說(shuō)的encoding的辦法。
另外要注意的是,存儲(chǔ)矩陣的行數(shù)可能很多。想象一下,把一部長(zhǎng)篇小說(shuō)存放到存儲(chǔ)矩陣?yán)?,每個(gè)詞都占用一行,需要占用存儲(chǔ)矩陣的多少行。
尋址機(jī)制
DNC改進(jìn)了NTM的尋址機(jī)制。NTM的尋址機(jī)制是content-based和location-based的混搭。為什么需要改進(jìn)呢?原因有三。
NTM不能保障多個(gè)存儲(chǔ)單元之間,不相互重疊,不相互干擾。dynamic memory allocation: allocate a free space
NTM不能釋放存儲(chǔ)單元,如果處理很長(zhǎng)的序列時(shí),譬如處理一部超長(zhǎng)的長(zhǎng)篇小說(shuō),搞不好所有存儲(chǔ)都會(huì)被占滿,導(dǎo)致系統(tǒng)崩潰。dynamic memory allocation: free gates
如果連續(xù)做幾個(gè)讀寫(xiě)操作,它們所使用的存儲(chǔ)單元的位置,最好是相鄰的。但是在NTM中,一旦某個(gè)讀寫(xiě)操作,遠(yuǎn)遠(yuǎn)跳到其它存儲(chǔ)區(qū)域,那么后續(xù)操作也跟著去其它區(qū)域,而且失憶,想不起來(lái)原先的存儲(chǔ)區(qū)域在哪里。temporal link matrix
DNC的尋址機(jī)制,把讀操作和寫(xiě)操作分開(kāi)。DNC用content-based和dynamic memory allocation的混搭方式,處理寫(xiě)操作。用content-based和temporal memory linkage的混搭方式,處理讀操作。
1. content-based尋址:
比較需要處理的目標(biāo)vector,與存儲(chǔ)矩陣中每一行的vector,用余弦距離來(lái)計(jì)算兩者相似性。取存儲(chǔ)矩陣中,與目標(biāo)vector距離最短的行。
計(jì)算余弦距離時(shí),需要一個(gè)系數(shù)向量,beta,這個(gè)系數(shù)向量是被訓(xùn)練出來(lái)的。
2. dynamic memory allocation存儲(chǔ)單元分配:
每一個(gè)存儲(chǔ)單元,都是等長(zhǎng)的vector。當(dāng)每一個(gè)存儲(chǔ)單元被free的時(shí)候,整個(gè)vector中的每一個(gè)element,都可以用來(lái)寫(xiě)入新數(shù)據(jù)。但是當(dāng)一個(gè)vector中有若干elements已經(jīng)被占用時(shí),剩下的elements還可以被寫(xiě)入新數(shù)據(jù)。
想象一下,如果每個(gè)vector的長(zhǎng)度是100,又如果某個(gè)vector里,已經(jīng)寫(xiě)入了一個(gè)不長(zhǎng)的詞,但是還有剩余的elements,這些剩余的elements可以用于給這個(gè)詞做詞性標(biāo)注等等。但是如果剩余的elements不多,那么詞性標(biāo)注只好被寫(xiě)到其它行的vector里。
DNC設(shè)計(jì)了一個(gè)存儲(chǔ)單元占用向量u。u(i) = 0時(shí)第i行的vector中,所有element都可以被寫(xiě)入新數(shù)據(jù),而當(dāng)u(i) = 1時(shí)第i行的vector中所有elements都已經(jīng)被占用了。
但是如果存儲(chǔ)矩陣中有兩行,i和j,分別有完全相同的elements可以被寫(xiě)。誰(shuí)先被寫(xiě),取決于權(quán)重向量wt。wt體現(xiàn)了存儲(chǔ)使用的策略,策略既可以是盡可能寫(xiě)入最新釋放的存儲(chǔ)單元,也可以盡可能寫(xiě)入內(nèi)容相似,而且沒(méi)有被完全占用的存儲(chǔ)單元。這個(gè)權(quán)重向量wt,是可以根據(jù)被訓(xùn)練出來(lái)的。
3. Temporal memory linkage讀寫(xiě)時(shí)序的關(guān)聯(lián):
Dynamic memory allocation沒(méi)有記錄歷次寫(xiě)操作時(shí),loc(t) 發(fā)生在哪個(gè)存儲(chǔ)單元,以及l(fā)oc(t+1) 發(fā)生在哪個(gè)存儲(chǔ)單元。而記錄歷次寫(xiě)操作的存儲(chǔ)單元的位置順序,是有用的。
DNC用N^2的方陣,來(lái)記錄temporal link,其中L(i, j) 記錄著t時(shí)寫(xiě)操作發(fā)生在存儲(chǔ)單元j,而t+1時(shí)寫(xiě)操作發(fā)生在存儲(chǔ)單元i的概率。L(i, j) 可以是簡(jiǎn)單的統(tǒng)計(jì)結(jié)果,也可以是加權(quán)的統(tǒng)計(jì)結(jié)果,權(quán)重體現(xiàn)了控制策略。權(quán)重是可以被訓(xùn)練出來(lái)的。
當(dāng)N很大的時(shí),理論上來(lái)說(shuō)L方陣會(huì)占用很多空間。但是鑒于L方陣很稀疏,很多L(i, j) 等于0。根據(jù)DeepMind團(tuán)隊(duì)的估算,L實(shí)際占用空間只有O( N ),計(jì)算成本只有O( N * Log N )。
需要訓(xùn)練哪些參數(shù)?
除了讀寫(xiě)操作、以及尋址操作中的幾個(gè)權(quán)重向量以外,還有作為controller的RNN的參數(shù)。RNN可以選擇結(jié)構(gòu)比較簡(jiǎn)單的neuralnet work,也可以選擇結(jié)構(gòu)更復(fù)雜的LSTM。選用LSTM意味著有更多參數(shù),需要被訓(xùn)練。
訓(xùn)練數(shù)據(jù)通常不包含讀寫(xiě)操作發(fā)生在哪個(gè)存儲(chǔ)空間上的信息。譬如NTM中,Priority Sort實(shí)驗(yàn)的訓(xùn)練數(shù)據(jù),是一連串(輸入,理想輸出)pairs。每個(gè)pair中的輸入,是20個(gè)向量,每個(gè)向量伴隨著priority打分。每個(gè)pair中的理想輸出,是從輸入的20個(gè)向量中,挑選出來(lái)的16個(gè),并且按priority得分排序。
注意,訓(xùn)練數(shù)據(jù)中不包含讀寫(xiě)操作在哪些存儲(chǔ)單元上進(jìn)行的信息。
把DNC應(yīng)用到Graph操作中
文中把DNC用于在倫敦地鐵中,尋找兩站之間最佳路線。坐地鐵本身不重要,重要的是如果RNN學(xué)會(huì)使用Graph以后,能做什么?假如Graph不是地鐵,而是social graph呢?又假如是knowledge graph呢?
參考文獻(xiàn):
[1] Graves, Alex, et al. "Hybrid computing using a neural network with dynamic external memory." Nature 538.7626 (2016): 471-476.
[2] Graves, Alex, Greg Wayne, and Ivo Danihelka. "Neural turing machines." arXiv preprint arXiv:1410.5401 (2014).
[3] Chris Olah & Shan Carter, “Attention and Augmented Recurrent Neural Networks”, Distill, 2016.