天天看點

deepmind dnc 是幹什麼的 下面是轉載的介紹文章

本文首發于微信公衆号:新智元。

deepmind dnc 是幹什麼的 下面是轉載的介紹文章
下載下傳APP 閱讀本文更深度報道

   1 新智元報道1

  作者:聞菲胡祥傑 劉小芹 零夏

  【新智元導讀】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 開源,公布代碼,提供訓練教程,名震一時的“可微分神經計算機”的内部細節終于曝光。

deepmind dnc 是幹什麼的 下面是轉載的介紹文章

開源位址:http://github.com/deepmind/dnc

  DNC 内部架構解密

  據介紹,DeepMind 在設計 DNC 時,想建造的是一種能夠自動學習并且利用複雜資料結構的機器。

  DNC 的核心是一個被稱為“controller”控制器的神經網絡,就好比計算機裡的處理器。Controller 負責接收輸入的資訊,對其進行處理并将處理後的資料存儲在存儲器中,最後生成輸出。

  根據 DeepMind 在 Github 公開的結構圖,存儲器分布在神經網絡的各個部分,每個都能存儲一個向量。

deepmind dnc 是幹什麼的 下面是轉載的介紹文章

  控制器可以對存儲器執行多個操作。在每個時間步長,它可以選擇是否将資料寫入記憶體(memory)。如果是的話,可以将資訊存儲在還沒有使用的新位置/記憶體,也可以将資訊存儲在已經包含了控制器正在搜尋的資訊的位置。換句話說,每個記憶體都能被更新。如果記憶體中空間用盡,控制器可以決定釋放空間,整個過程跟計算機如何重新配置設定不再需要的記憶體非常相似。

  當控制器寫入時,它将資訊向量發送到存儲器中的所選位置。每次寫入資訊時,這些位置第一會通過關聯連接配接起來,表示資訊被存儲的順序。

  除了存儲(寫入),控制器還能從多個記憶體中讀取資訊。通過為被存儲内容的位置,或者說根據此前資訊在存儲時形成的連接配接關系,控制器能夠搜尋并找到想要擷取的内容。而這些讀出的資訊則被用于解答問題——在論文的實驗中,也就是在陌生環境中采取什麼樣的行動。

  換句話說,上述功能使 DNC 能夠選擇如何配置設定記憶體、将資訊存儲在記憶體中,并輕松找到記憶體裡的資料。

deepmind 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 執行如下:

deepmind dnc 是幹什麼的 下面是轉載的介紹文章

通過 flags 可以指定訓練選項,包括模型和優化器的參數:

deepmind dnc 是幹什麼的 下面是轉載的介紹文章

  模型過一段時間自動儲存,或者說 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 還能在沒有先驗知識的情況下規劃在倫敦地鐵上的最佳路線,解決涉及用符号語言描述目标的移動拼圖謎題。

deepmind dnc 是幹什麼的 下面是轉載的介紹文章

  解決結構化資料任務。a. 随機生成的訓練用圖,也就是說 DNC 是使用随機圖進行訓練的。b. 倫敦地鐵圖線路中轉站,用作周遊和最短路徑任務的泛化測試。随機七步周遊(其示例在中間左邊欄)得到 98.8% 的平均精度。對所有可能的四步最短路徑(中間右欄)測試平均精度為 55.3%。c. 用作泛化推理任務測試的家譜;測試了四步關系(從 Freya 到 Fergus,藍色虛線表示),平均精度為 81.8%。下圖灰色欄中列出了測試期間網絡處理的符号序列。

  了解家譜,“學以緻用”

  在了解家譜的任務中,論文展示了 DNC 可以回答需要進行複雜推理的問題。例如,研究人員在家譜結構圖中隻标注了父母、孩子和兄弟姐妹的關系,DNC 可以回答誰是誰的舅母的叔叔這樣的問題。

  比較以前學到的資訊并将其推廣到用于新問題的推理,這是傳統神經網絡不能做到的。

deepmind dnc 是幹什麼的 下面是轉載的介紹文章

使用強化學習解決拼圖遊戲

  DeepMind 論文中還展示了通過強化學習訓練 DNC。在完成這個任務時,DNC 給出每一步怎麼走,研究人員會對這個“答案”評分,具體是讓 DNC 根據指令完成一個拼圖遊戲。研究人員會發出指令:将淺藍色塊放在綠色的下面,将橙色放在紅色左邊,将紫色放在橙色下面;淺藍色放在深藍色右邊……

deepmind 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 展示了一種不同與傳統數字計算機的“認知神經計算機”,以及對認知和神經科學的啟示:現在有一台機器,在不需要事先程式設計的情況下,能夠自己組織資訊,解決問題。

    文章來源:微信公衆号新智元

繼續閱讀