本文首發於微信公眾號:新智元。文章內容屬作者個人觀點,不代表和訊網立場。投資者據此操作,風險請自擔。
作者:聞菲胡祥傑 劉小芹 零夏
【新智元導讀】DeepMind昨夜宣布,將其 Nature 論文研究成果、2016 年引起熱議的可微分神經計算機 DNC 開源,相關代碼和部署細節已經在 Github 公開。DNC 結合了神經網絡自動學習和傳統計算機可讀寫存儲數據的能力,被認為是目前最接近數字計算機的神經計算系統。此次正式開源,想必會吸引眾多開發人員和研究者參與改進。DeepMind 不久前將內部深度學習框架 Sonnet 也進行了開源,而 DNC 需要使用 TensorFlow 和 Sonnet 一起進行訓練。DeepMind 的雙重開源,相信會加速神經網絡「記憶」相關的發展。一旦獲得突破,在加強神經網絡推理能力等方面將會產生較大影響。
神經網絡在模式識別、快速決策方面有著優異的表現,然而現在的神經網絡還遠遠談不上能夠「思考」——思考需要在過去的知識經驗基礎上進行推理,而過去的知識和經驗也就是所謂的「記憶」。
在去年10月,DeepMind 發表於 Nature 的一篇論文中,他們提出了一種叫做「可微分神經計算機」(DNC)的混合計算系統,將神經網絡和一個外部存儲器相結合。這個混合的計算系統既擁有神經網絡可以從數據中學習的優勢,也能夠存儲學到的知識——複雜的結構化數據。通過這個外部存儲器,DeepMind 對神經網絡進行了「記憶」增強,克服了神經網絡無法長時間保存數據的缺點。
論文展示了 DNC 可以理解圖形結構,回答關於複雜的結構化數據的問題,包括在沒有先驗知識的情況下,在倫敦地鐵的地圖上找到兩個站點之間距離最短的路線。此外,DeepMind 還在論文中展示了,DNC 使用強化學習可以解決拼圖遊戲。
作為 DeepMind 在 Nature 的第三篇論文,DNC 發布後引起了熱議,但是,由於不知道內部具體結構,外界對 DNC 帶來的「突破」也存在有一定猜測。現在,DeepMind 將 DNC 開源,公布代碼,提供訓練教程,名震一時的「可微分神經計算機」的內部細節終於曝光。
開源地址:http://github.com/deepmind/dnc
DNC 內部架構解密
據介紹,DeepMind 在設計 DNC 時,想建造的是一種能夠自動學習並且利用複雜數據結構的機器。
DNC 的核心是一個被稱為「controller」控制器的神經網絡,就好比計算機裡的處理器。Controller 負責接收輸入的信息,對其進行處理並將處理後的數據存儲在存儲器中,最後生成輸出。
根據 DeepMind 在 Github 公開的結構圖,存儲器分布在神經網絡的各個部分,每個都能存儲一個向量。
控制器可以對存儲器執行多個操作。在每個時間步長,它可以選擇是否將數據寫入內存(memory)。如果是的話,可以將信息存儲在還沒有使用的新位置/內存,也可以將信息存儲在已經包含了控制器正在搜索的信息的位置。換句話說,每個內存都能被更新。如果內存中空間用盡,控制器可以決定釋放空間,整個過程跟計算機如何重新分配不再需要的內存非常相似。
當控制器寫入時,它將信息向量發送到存儲器中的所選位置。每次寫入信息時,這些位置第一會通過關聯連接起來,表示信息被存儲的順序。
除了存儲(寫入),控制器還能從多個內存中讀取信息。通過為被存儲內容的位置,或者說根據此前信息在存儲時形成的連接關係,控制器能夠搜索並找到想要獲取的內容。而這些讀出的信息則被用於解答問題——在論文的實驗中,也就是在陌生環境中採取什麼樣的行動。
換句話說,上述功能使 DNC 能夠選擇如何分配內存、將信息存儲在內存中,並輕鬆找到內存裡的數據。
DNC架構示意圖。神經網絡控制器(Controller,a 部分)接收外部輸入,並利用「讀寫頭」(Read and write head,b 部分)與存儲器(Memory,c 部分)交互,進行信息的讀取和寫入操作。d 部分是內存使用和臨時連結,跟蹤信息被寫入的順序,並記錄每個存儲器位置當前的使用級別,幫助控制器快速、準確找到想要的信息。
將上面那段話用更專業的表達說,DNC 是一個遞歸神經網絡。在每個時間步長,它具有由當前存儲的內容(以及諸如內存使用等輔助信息)組成的狀態,並將在時間 t 的輸入映射到時間 t 的輸出。它的實現是一組 RNNCore 模塊的集合,這能使不同模塊一起試驗架構的不同變體。
讀取(access)模塊是主要的 DNC 邏輯發生的地方;因為這是內存寫入和讀取的地方。在每個時間步長,access 模塊的輸入是從 controller 傳遞的向量,輸出是從內存讀取的內容。它使用另外兩個 RNNCore:跟蹤內存寫入順序的 TemporalLinkage ,以及跟蹤哪些內存位置已經被寫入,而且隨後還沒被「freed」的 Freeness。這些都在 addresses.py 上定義。
Controller 模塊「控制」存儲內容的訪問。通常情況下,它是一個前饋網絡或(可能很深的)LSTM 網絡,它的輸入是當前的整個遞歸網絡的輸入,與來自前一個時間步長的 access 模塊的讀取內存輸出相連接。
DNC 簡單地包裝 access 模塊和 controller 模塊,並形成整個架構的基本 RNNCore 單元。這在 dnc.py 上定義。
能夠朝著目標不斷「進化」的計算機
DNC 的優勢在於,其「中央處理器」Controller 是神經網絡,神經網絡系統不需要、也不能預先編程,它是通過不斷試錯、學習逐漸改變內部的神經連接,讓整個神經網絡的反應逐漸接近正確的解決方案。
利物浦大學計算機軟體研究生張嘉偉對新智元介紹:DNC 最核心的理念是可微分圖靈機,也就意味著像現在的計算機架構一樣可以實現很多的算法甚至軟體。
不過不同的是,只要有一定的目標它們可以向著目標不斷「進化」,換句話說,就像你的計算機會不斷根據你的習慣和任務要求不斷改變自己。當然,這個需要很多的強化學習的介入,僅靠監督學習很困難,應該是 hybrid learning system,雖然目前只是開始,但這是打開了一扇大門,意義深遠。很有趣的是,如果能基於此實現學習閉環,也就是結合強化學習之後實現自主目標規劃,這樣的系統能不能從零學習人類語言?這將是令人激動但肯定也充滿困難的領域。剖開表象,裡面還是知識表徵-數學登上舞臺的地方。
開原始碼,教你訓練自己的 DNC
DeepMind 將 DNC 開源,必定吸引大量開發人員和研究者都來參與訓練。DNC 作為一個能夠朝著目標不斷「進化」的原型計算機,其改進的速度也必將加快,甚至還會出現更多新的思路。
安裝 DNC 需要用到 TensorFlow 和 Sonnet。正好此前 DeepMind 將其內部深度學習框架 Sonnet 開源,開發人員和研究者可以更好地訓練 DNC。
DeepMind 在GitHub 頁面提供了一個樣例訓練腳本,用於不斷複製輸入給定字符串的算法任務,Python 執行如下:
通過 flags 可以指定訓練選項,包括模型和優化器的參數:
模型過一段時間自動保存,或者說 checkpointing 是默認關閉的。要開啟這項功能,使用 the checkpoint_interval flag。例如 checkpoint_interval=10000,將確保系統運行每 10000 步自動存檔。模型默認的自動存檔是 /tmp/tf/dnc/ ,由此訓練可以繼續。
如果要指定另外的存檔庫(checkpoint directory),使用 checkpoint_dir flag。不過要注意:在使用不同的模型參數重新訓練之前,要先將 /tmp/tf/dnc/ 刪除,避免出錯。
在 dnc.py 中的 DNC class 可以用作標準的 TensorFlow rnn core,並用 TensorFlow rnn ops 在任何序列任務上展開 ,例如 tf.nn.dynamic_rnn。
DNC 可用在哪?圖形推理、理解家譜、符號分析和更多
DeepMind 公開了當時的論文,DNC 完成三項任務的原理也終於揭曉。首先,DeepMind 想測試 DNC 構建數據結構並使用這些數據結構解決問題的能力。圖形數據結構應用廣泛,可以表示關係(連接)、路徑和周期。DeepMind 在論文中展示了 DNC 可以成功地理解圖形結構,比如家譜或傳輸網絡。
在沒有先驗知識的情況下,在倫敦地鐵地鐵導航
此外,DNC 還能在沒有先驗知識的情況下規劃在倫敦地鐵上的最佳路線,解決涉及用符號語言描述目標的移動拼圖謎題。
解決結構化數據任務。a. 隨機生成的訓練用圖,也就是說 DNC 是使用隨機圖進行訓練的。b. 倫敦地鐵圖線路中轉站,用作遍歷和最短路徑任務的泛化測試。隨機七步遍歷(其示例在中間左邊欄)得到 98.8% 的平均精度。對所有可能的四步最短路徑(中間右欄)測試平均精度為 55.3%。c. 用作泛化推理任務測試的家譜;測試了四步關係(從 Freya 到 Fergus,藍色虛線表示),平均精度為 81.8%。下圖灰色欄中列出了測試期間網絡處理的符號序列。
理解家譜,「學以致用」
在理解家譜的任務中,論文展示了 DNC 可以回答需要進行複雜推理的問題。例如,研究人員在家譜結構圖中只標註了父母、孩子和兄弟姐妹的關係,DNC 可以回答誰是誰的舅母的叔叔這樣的問題。
比較以前學到的信息並將其推廣到用於新問題的推理,這是傳統神經網絡不能做到的。
使用強化學習解決拼圖遊戲
DeepMind 論文中還展示了通過強化學習訓練 DNC。在完成這個任務時,DNC 給出每一步怎麼走,研究人員會對這個「答案」評分,具體是讓 DNC 根據指令完成一個拼圖遊戲。研究人員會發出指令:將淺藍色塊放在綠色的下面,將橙色放在紅色左邊,將紫色放在橙色下面;淺藍色放在深藍色右邊……
在新智元去年的對 DNC 的報導中,由於信息有限,我們只提到了 DNC 能夠 「解決涉及用符號語言描述目標的移動拼圖謎題」。現在,我們知道了這項任務的全貌。
當時,德國雅各布大學研究者 Herbert Jaeger 在同一期的 Nature 刊登評論文章《深度神經推理》,稱 Graves 等人證明了人工神經網絡系統能夠學會符號推理的某些重要(non-trivial)、核心內容。
Graves 等人使用機器學習中的深度學習方法,在一個人工神經系統中,得到了一些關鍵的符號推理機制。他們的系統能通過從樣本中學習符號推理規則解決複雜問題。這一成就被認為有潛力解決神經符號(neural-symbolic)的集成難題。」
Jaeger 認為,眼下單憑 DNC 無法在邏輯數據挖掘中與最先進的數字計算方法匹敵。但是,一種靈活的、根據 DNC 拓展出來的工作記憶,或許會讓深度學習應用拓展到與需要理性推理的大數據領域,比如生成視頻評論,或者進行文本語義分析。
內部升級 DNC,可擴展到更大任務上面
DNC 發布後不久,DeepMind 就在 DNC 的基礎上做了改善,在 arXiv 上發表了論文 「Scaling Memory-Augmented Neural Networks with Sparse Reads and Writes」,在 DNC 基礎上提出了新架構 SMA。其中,DNC 的第一作者 Alex Graves 及其他幾位主要作者 Greg Wayne、Tim Harley 也是這篇論文作者。
SMA 比 DNC 強的地方在於「可擴展」,作者提出了一種端到端的可微分儲存器讀寫機制,在差不多規模的數據集執行小數據(one-shot)Omniglot 字符識別等任務效率與 DNC 可比,還能擴展到更大的任務上面。
可以說,這是 DeepMind 內部對 DNC 升級和改進。具體內容參見新智元此前的報導:DeepMind 發布 DNC 升級版,擁有稀疏讀寫頭的可擴展記憶增強神經網絡。
業界熱議還有很長的路要走,DNC 展示神經計算全新可能性
還記得當 DNC 的論文發出不久,Facebook 人工智慧研究中心(FAIR)研究員、深度學習開源框架 Torch 作者田淵棟評論認為,「DNC是革命性突破」言過其實。這篇文章模型複雜,【手工設計太多】,比如說組合各種不同的 Attention 模型,手工「動態」分配內存而不是學習得到。實驗相對簡單,沒有在大規模數據集上測試性能。總的來說不及前兩篇Nature,宣傳還是一貫地好。技術上來說,田淵棟認為這一模型隱含地學到了搜索的啟發式函數(heuristic /span>
Facebook 人工智慧研究中心(FAIR)研究員、深度學習開源框架 Caffe 作者賈揚清認為,這是從手動調 feature 變成了手動調網絡結構。頗有戲謔意味。對於這一說法,田淵棟表示以後不可能一直這樣,目前主要還是因為我們不懂原理是什麼。
現在,DeepMind 將 DNC 開源,還配合開源了能夠更好訓練 DNC 的框架 Sonnet。DNC 的原理也全部公開。
DeepMind 研究員在博客中介紹,類解根據符號語言描述移動拼圖的任務,研究人員和開發者可以建立大量這樣的目標,然後請求 DNC 網絡在一個操作的基礎上,執行另一個目標操作。在這種情況下,DNC 可以同時存儲幾個子程序,有一個可能的目標,並且據此決定如何執行。
推理的一個關鍵前提是記憶,在傳統計算機中,記憶的角色由隨機訪問內存(RAM)承擔。大部分神經網絡存在的問題是,假設智能體 A 在玩遊戲 A' 時表現很好乃至超越人類專家水平,但讓這個智能體 A 去玩遊戲 B 表現就不行了。
DNC 包含了若干個模塊,所有的這些模塊都完全不是符號化的,彼此之間通過純粹的模擬激活模型來交換信息流(streams),正如從生物大腦中記錄的那樣。雖然在人類的推理和電腦程式運行之間存在明顯的相似之處。但是,我們在理解如何把它們中的任何一個部署於生物或者人工神經網絡時,依然缺乏足夠知識。
無論是讓神經網絡擁有「記憶」,還是人類記憶本身這個問題,目前都還沒有得到很好的解答。DeepMind 的 DNC 展示了一種不同與傳統數字計算機的「認知神經計算機」,以及對認知和神經科學的啟示:現在有一臺機器,在不需要事先編程的情況下,能夠自己組織信息,解決問題。
文章來源:微信公眾號新智元
(責任編輯:季麗亞 HN003)