當前位置:
首頁 > 新聞 > DeepMind 開源內部深度學習框架 Sonnet,研究通過梯度下降學習

DeepMind 開源內部深度學習框架 Sonnet,研究通過梯度下降學習

DeepMind 開源內部深度學習框架 Sonnet,研究通過梯度下降學習

新智元編譯

DeepMind 開源內部深度學習框架 Sonnet,研究通過梯度下降學習

DeepMind 決定把整個研究架構轉為使用 TensorFlow(TF)已經快一年了。這被證明是一個不錯的選擇——我們的許多模型學習速度明顯更快,內置的分布式訓練功能極大地簡化了我們的代碼。

我們發現TF 的靈活性和適應性適合於為特定目的構建更高級別的框架,並且我們已經寫了一個這樣的框架,可以用 TF 快速構建神經網路模塊。我們正在積極開發這個代碼庫,但是迄今為止它是如此契合我們的研究需求,所以我們興奮地宣布,今天我們要將這一框架開源。我們把它稱為 Sonnet 框架。

DeepMind 開源內部深度學習框架 Sonnet,研究通過梯度下降學習

自2015 年11 月首次發布以來,更高級別庫的多樣化生態系統在 TensorFlow 周圍不斷湧現,使得一般性任務能夠更快實現。Sonnet 與其中一些現有的神經網路庫具有許多相似之處,但同時具有一些為我們的研究要求專門設計的特性。在此前的Learning to learn paper(詳見下文)中,我們用了一些代碼,其中就包括了 Sonnet 的初步版本,其他即將發布的代碼版本將建立在我們今天發布的完整庫中。

開源 Sonnet,可以使 DeepMind 創建的其他模型輕鬆地與社區共享,我們同時希望社區能夠使用 Sonnet 進行自己的研究。近幾個月來,我們還開源了我們的 DeepMind Lab 旗艦平台,目前正在與 Blizzard 合作開發支持星際爭霸II 中 AI 研究的開源 API。將來還會推出更多的版本,它們都將在我們的新的開源頁面上共享。

該庫使用面向對象的方法,類似於 Torch / NN,允許定義了一些計算前傳的模塊的創建。模塊被一些 Tensor 輸入「調用」,為 Graph 添加操作並返回 Tensor 輸出。其中一個設計選擇是確保通過在後續調用同一模塊時自動重用變數來透明地處理變數共享。

文中的許多模型當然會很自然地被視為層次結構,例如:可微分神經計算機包含可能是LSTM 的控制器,可被當做包含一個標準線性層植入。我們發現,編寫詳盡表述子模塊的代碼可以實現代碼的更易重複使用及更快應用於實驗 – Sonnet 提倡編寫可以在內部同時表述其他子模塊的模塊或者在構建過程中可被其他模塊傳遞的模塊。

我們發現非常有用的最後一個技術是讓特定模塊在任意嵌套的 Tensor 組中進行操作。 通常一組可微分神經計算機可以對可微分神經計算的狀態進行最佳表述, 而以平行列表的方式表述是容易出錯的。Sonnet 提供實用程序來應對這些任意層次結構,以便將實驗更改為使用不同類型的 RNN 不需要繁瑣的代碼更改。我們也已經對核心 TF 進行了更改以更好地支持這種使用案例。

Sonnet 被專門設計用於與 TensorFlow 協同工作,因此不會阻止訪問底層細節,如 Tensors 和可變範圍等。Sonnet 編寫的模型可以與原始的 TF 代碼以及其他高級庫中的模型自由混合。

這不是一次性發布 - 我們將定期更新 Github repository 以與我們的內部版本吻合。我們對很多新功能還有很多想法,這些功能將在準備就緒時提供。我們對來自社區的貢獻感到非常興奮。要了解更多關於 Sonnet 的信息,請訪問我們的 GitHub repository。

GitHub 庫:https://www.github.com/deepmind/sonnet

再來一個新的 TF 庫意義何在?

在 Sonnet 的Github頁面,研究人員給出了一些常見問題的回答,從中我們能更好的了解 DeepMind 構建並開源 Sonnet 的初心,以及如何更好地利用這個工具。

問:為什麼又搞了個 TF 庫出來?

答:現有的 TF 庫對於 DeepMind 來說使用起來非常不靈活,因為我們有大量的使用案例是需要做權重共享的(weight sharing)。現在,所有的東西用 tf.make_template,從一開始就能支持權重共享,由此帶來的好處顯而易見是超出開發成本的。不僅如此,將配置與連接分離開來的 paradigm 也更方便模塊組合。

問:在同一個build的後續調用中可以訪問不同的變數嗎?

答:不行。tf.make_template 不允許這樣做,它會把後續調用中訪問不同的變數當成錯誤。

問:如果錯誤地把兩個模塊做了同樣的命名會怎麼樣?

答:似乎以相同名稱構造的模塊將具有不同的名稱和可變 scope。在內部,Sonnet 使用tf.make_template,它基本上是與一些 tf.VariableScope 一起包裝了一個python函數,來確保對該函數的每次調用都發生在同一個 scope 內,並且第一個調用之後的所有調用都設置為重用變數。模板的一個特點是,如果已經在同一 scope 內輸入了任何名稱,它將使其唯一化。例如:

DeepMind 開源內部深度學習框架 Sonnet,研究通過梯度下降學習

問:我必須給我的模塊命名嗎?

答:不。模塊有默認名,應該是snake_case中的class name,如果必要的話,它也會被用作唯一化的名稱(見上)。然而,我們推薦大家為模塊起一個包含變數的名稱,因為這一名稱也會成為內部 scope 的名稱,由此也定義了變數的名稱。大多數模塊的名稱帶有「w」(weights)和「b」(bias),來顯示內部權重。大家都喜歡這麼命名:

DeepMind 開源內部深度學習框架 Sonnet,研究通過梯度下降學習

你選的名稱會出現在 TensorBoard 中。

問:我怎麼知道一個模塊 declare 了什麼變數?

答:你可以對一個模塊用 get_variables 的方法,來查詢 scope 內的所有變數。注意如果模塊沒有連到 graph 上,就會顯示錯誤,因為變數此時不存在,所以相關的 scope 是空的。

問:Sonnet中的所有內容都應該作為模塊實現嗎?

答:不,不創建tf.Variables並且不存儲內部配置的計算可以在常規TF Op樣式中實現,即接收輸入張量,關鍵字參數和返回張量輸出的python函數。

如果一個op要創建變數(即在內部的任何地方調用tf.get_variable,包括間接的)它必須被作為snt.AbstractModule的一個子類,這樣才能正確地處理變數共享。

需要注意,如果一個計算沒有創建任何變數,可能仍然需要使用一個Module而不是Op來實現它。

除了可變共享之外,在我們希望將配置參數附加到操作系統的情況下,使用Sonnet模塊可以很方便。一個例子是[content addressing](可微分神經計算機中的模塊),這些模塊接收多個配置參數(內存中的每個單詞的大小,讀寫頭的數量),這些輸入的一些功能定義了有效輸入。我們在這個模塊之前使用正確輸出大小的snt.Linear來提供正確的維度。由於是一個模塊,實現起來很容易——在構建時提供configuration,然後提供一個method.param_size,它給出所需輸入的維數。然後我們就能得到正確的輸入張量大小並進行連接。

DeepMind 開源內部深度學習框架 Sonnet,研究通過梯度下降學習

如果上面的操作是作為op cosine_weights(memory, cos_params, word_size, num_heads) 實現的,那麼指示cos_params所需大小的邏輯必須存儲在一個單獨的函數中。將相關功能封裝到一個模塊中會讓代碼更清晰。

問:可以將其與其他高級TF API(如TF Slim)混合使用嗎?

答:Sonnet模塊一旦構建出來,就遵循Tensor-In-Tensor-Out的原理,因此可以與TF-Slim等的功能混合。不過需要注意的是,這可能會導致意外行為的發生——TF-Slim控制共享是通過傳遞明確的scope =和 reuse = kwargs到層函數中——如果在Sonnet模塊的_build方法中使用TF-Slim層,多次調用的話就不太可能正常工作。

問:使用Sonnet與其他庫與原始TF的開銷(overhead)是多少?

答:沒有。只有在構造計算圖時才會涉及Sonnet。一旦你到了使用Session.run的階段,只需執行Ops就行了,不用考慮將該圖合在一起用了什麼庫。

Hacker News 評論:窺見 DeepMind 內部研究

獲得了最高支持的 HN 用戶 gcr 評論稱:

作為機器學習環境來說,TensorFlow 非常複雜,不同的研究小組必須定義自己的最佳 practice。使用 TF 就像學 C ++一樣,每個人都學習一個稍微不同的,相互不相容的,但是廣泛重疊的語言子集。

Sonnet 開源後,我們看到了DeepMind的專用工具(雖然只有一點點),以及他們在工作中使用的操作的參考實現。

對於那些想要搞透 DeepMind 工作的研究院人來說,這次開源非常有用。

不過,Sonnet 並不是徹底全新的神經網路庫。目前還沒有人宣稱這次發布帶來了什麼範式上的改變,作為業內人還是很欣慰的。

研究論文:通過梯度下降學習通過梯度下降學習

下面就是文章在一開始提到的「Learning to learn paper」。這篇論文2016年底上傳到arXiv,當時論文中使用的一些代碼就包括了 Sonnet 的初步版本。

今天,DeepMind 已經更完整的代碼放在了Github上面。

這篇文章的題目非常有意思,叫做《通過梯度下降學習通過梯度下降學習》,將優化演算法作為學習問題,讓演算法學會自動探索需要的結構。作者包括牛津大學教授、DeepMind 研究員 Nando de Feritas。

DeepMind 開源內部深度學習框架 Sonnet,研究通過梯度下降學習

摘要

在機器學習里,從手工設計的特徵到機器學習的特徵這個過程已經非常成功了。但是,優化演算法仍然是手工設計的。在本文中,我們展示了如何將優化演算法的設計轉化為學習問題,讓演算法學會自動探索需要的結構。最終學出來的演算法(由 LSTM 實施),在訓練過的任務上表現超越了通用的手工設計的演算法,並且在具有相似結構的新的任務中表現也很好(泛化能力很高)。我們在許多任務測試了這種新的演算法,包括簡單的凸問題、訓練神經網路和用神經藝術對圖像增加風格(styling images with neural art)。

論文地址:https://arxiv.org/pdf/1606.04474.pdf

原文地址:https://deepmind.com/blog/open-sourcing-sonnet/?from=groupmessage&isappinstalled=1

DeepMind 開源內部深度學習框架 Sonnet,研究通過梯度下降學習

3月27日,新智元開源·生態AI技術峰會暨新智元2017創業大賽頒獎盛典隆重召開,包括「BAT」在內的中國主流 AI 公司、600多名行業精英齊聚,共同為2017中國人工智慧的發展畫上了濃墨重彩的一筆。

點擊閱讀原文,查閱文字版大會實錄

訪問以下鏈接,回顧大會盛況:

  • 阿里雲棲社區:http://yq.aliyun.com/webinar/play/199

  • 愛奇藝:http://www.iqiyi.com/l_19rrfgal1z.html

  • 騰訊科技:http://v.qq.com/live/p/topic/26417/preview.html

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 新智元 的精彩文章:

效果逆天,谷歌最新 BEGAN 刷新計算機生成圖像的質量記錄
林元慶破解小度問鼎最強大腦三大原理,後吳恩達時代百度 AI 突圍
Web 50 年|從 Tim Berners Lee 的圖靈獎說起,到達 Web 5.0 之前我們還要經歷什麼
「重磅」谷歌發布TPU論文,75位聯合作者,GPU迎來最強勁對手
8.3億留不住你,前谷歌工程師獎金凸顯無人車領域熱度

TAG:新智元 |

您可能感興趣

Facebook宣布開源最新的深度學習框架Caffe2
深度學習(Deep Learning)發展史
Python開發者如何系統地學習深度學習與TensorFlow
Intel+Cloudera,用BigDL玩轉深度學習
吳恩達Deeplearning.ai課程學習全體驗:深度學習
Spring boot學習
「深度學習測顏值」基於TensorFlow的開源項目FaceRank
牛津大學聯合DeepMind發布LipNet:用深度學習讀懂你的唇語
Apache ZooKeeper進一步學習
資深演算法工程師眼中的深度學習:Ian Goodfellow 和Yoshua Bengio的「Deep Learning」讀書分享
Slow Down,向Gentlewoman學習穿衣哲學
百度開源新一代深度學習硬體測試工具:覆蓋Titan Xp到iPhone7
Geoffrey Hinton 機器學習第四課
Spring+SpringMVC+MyBatis深入學習及搭建——MyBatis查詢緩存
Elastic機器學習Steve Dodson:機器學習的潛能
文本直送科技新聞:Google IO 2017:讓行動終端也具備強大的深度學習能力,Google 推出 TensorFlow Lite 學習框架
TensorFlow Agents日前開源,輕鬆在TensorFlow中構建並行強化學習演算法
全球計算機H-index TOP 10華人Philip S. Yu】從深度學習到廣度學習
Facebook 開源新一代機器學習 GPU 伺服器 Big Basin;谷歌召開 Google Cloud Next 雲技術大會等