Facebook發表了一篇學術論文和博客,詳細介紹基于Lua的Torchnet項目。這是一個以深度學習為中心的新的開源項目,以之前開源的Torch庫為基礎構建。
在一次采訪中,Facebook人工智能研究實驗室(FAIR)的Laurens van der Maaten指出,它可以用于類似圖像識別、自然語言處理這樣的工作,其方法和面向Theano框架的Blocks和Fuel Python庫類似。他還指出:
舉例來說,它讓完全隱藏I/O[輸入/輸出]開銷變得非常簡單,如果想要訓練一個實際的大規模深度學習系統,那么這是許多人都需要的東西。
據報道,Torchnet提供的抽象不限于Torch,也可以用于Caffe和TensorFlow,因為Torchnet對底層學習框架的限制很少。
據報道,基于Torch-7的Torchnet提供了可重用的抽象和樣板邏輯(圍繞異步數據加載、機器學習多GPU計算等諸如此類的工作)。Torch 7使用Lua構建,用于在CPU上使用OpenMP/SSE以及通過CUDA體系結構在GPU上運行代數運算。據FAIR介紹,Torch 7是深度機器學習的基本框架之一。FAIR打算將Torchnet打造成一個社區驅動的、基于插件的平臺。對于Torchnet項目的動機和愿景,FAIR指出:
開源的Torch庫已經有了一個非常活躍的開發者社區,創建出了用于優化、“流形學習(manifold learning)”、度量學習、神經網絡等的程序包。Torchnet以此為基礎構建,而且被設計成了一個研究社區可以做貢獻的平臺,主要是通過實現機器學習實驗或工具的插件……按照我們的設想,Torchnet會成為一個社區所有的平臺,在Torchnet核心實現完成之后,它會使用和Torch一樣的方式提供一系列的子程序包。
根據FAIR的論文,Torchnet主要運用了5個抽象,以實現高效地重用和優化,否則,就要像許多項目所做的那樣使用客戶化代碼。Dataset抽象提供了數據集中的樣本數量和一個返回樣本的get()函數。DatasetIterator抽象允許遍歷數據集,并管理異步并行。Engine抽象實現了模型、DatasetIterator和損失函數之間的交互以及一個訓練和測試函數。Engine還提供了鉤子,讓用戶可以注入實驗特有的代碼,比如性能Meter。據報道,將鉤子實現為閉包讓Torchnet可以在用于訓練和測試模型的代碼之間共享邏輯。Meter抽象一般會實現兩個函數add(output, target)函數和value()函數。Meter提供了度量如下性能屬性的能力:
一個訓練階段的執行時間,所有示例的損失函數平均值,二元分類器ROC曲線下的面積,多類分類器的分類錯誤,檢索模型的準確率和召回率,或者排序算法的歸一化衰減累積熵。
最后,Log抽象提供了將實驗日志輸出為原始文本或JSON的能力。