05.09 資源|DLL:一個炙手可熱的快速深度神經網絡庫

DLL 是一個旨在提供由 C++實現的受限玻爾茲曼機(RBM)和深度信念網絡(DBN)及其卷積版本的軟件庫,由瑞士 University of Applied Science of Western Switzerland、弗裡堡大學的研究者共同提出。與常用的深度學習框架類似,它還支持更多標準的神經網絡。目前,該工具已開發至 1.1 版本。

項目鏈接:https://github.com/wichtounet/dll

引言

近年來,神經網絡以深度學習之名重獲青睞。所謂的深度即是運用更大更深的網絡,通常 z 指的是使用更大的輸入維度來融合更多的上下文知識,以及增加網絡層數來提取不同粒度級別的信息。

深度學習的成功主要歸因於三個因素。第一,大數據的出現,意味著有大量的訓練數據可用。第二,新的訓練策略,例如無監督的預訓練,它保證了深度網絡會很好的初始化,並且還可以學習大量未標記數據集的高效特徵提取器。

第三,更強勁的硬件有助於加速深度網絡的訓練過程。深度網絡目前正在提高多領域的最新技術。成功的深度學習應用應該在物體識別 [1],圖像標註 [2],上色 [3] 或生成高仿真的圖像 [4] 等領域取得近乎人類的表現。

此外,免費且易用的框架的可用性以及基於公共數據集的詳細實現樣例的可用性也促成了深度學習技術的廣泛運用。

從實際角度出發,理想的深度學習框架應當易於使用,能夠提供高精度的快速訓練,並有多種配置選項。滿足所有要求十分困難,因為有些要求自相矛盾。鑑於此,我們可能會感受到現有框架之間的巨大差異。

在本文中,我們提出並開發了一個專注於高效計算,針對特定的網絡模型和算法配置的深度學習框架。儘管我們意識到這些問題的侷限性,但我們相信,我們在框架中實現的不同優化可能會引起研究社區的興趣。

我們的框架叫做深度學習庫(DLL),它是免費且開源的。開發這一框架的最初原因是其他機器學習框架中缺乏對受限玻爾茲曼機(RBM)[5] 和卷積 RBM(CRBM)[6] 的支持。在本論文截稿前,這一問題仍然存在。隨著我們的不斷開發,該框架擴展了通用的神經網絡操作,現在可以用來訓練標準人工神經網絡(ANNs)和卷積神經網絡(CNNs)[7] 等不同種類。

雖然也有 GPU 加速,但是 DLL 已針對中央處理器(CPU)的進行了速度優化。儘管 GPU 開始成為訓練訓練深層網絡的即成標準,但它們並不總是可用,並且一些發佈程序仍然針對現有的 CPU 實現。而且,一旦網絡訓練完成,通常會在 CPU 上執行推理。

因此,我們認為能夠在合理的時間內訓練神經網絡並實現在 CPU 上的快速推理仍然很重要。在本文中,我們也記錄了對 GPU 的成功優化,但我們必須注意到 GPU 的高級並行化已經充分利用 [8],[9],尤其是卷積網絡 [10]。

除了加速外,本文的特別貢獻是對幾個最新的熱門框架的綜合評估。評估是在四個不同的模型和三個數據集上進行的。最終根據 CPU 和 GPU 上的計算時間以及訓練模型的最終準確度進行比較。

本文的其餘部分如下。第二節詳細介紹 DLL 庫。第三節介紹實驗部分。第四節介紹 MNIST 的實驗結果,第五節介紹 CIFAR-10 的實驗結果,第六節介紹 ImageNet 的實驗結果。最後,第七節給出總結。

DLL:深度學習工具庫

深度學習庫(DLL)是最初專注於支持 RBM 和 CRBM 的機器學習框架。它是在幾項研究工作 [11] - [14] 的背景下開發並使用的。它還支持各種神經網絡層和標準反向傳播算法。它是用 C ++ 編寫的,主接口是 C ++(在論文 II-B 節中有示例)。該框架也可以通過用簡單的描述語言來使用,以使研究人員更容易上手。

該框架完全支持 RBM 模型 [5]。還可以使用對比散度(CD)[15] 進行訓練。該實現是根據 [16] 中的模型設計的。它還支持深度信念網絡(DBN),先逐層預訓練,然後使用梯度下降法進行微調。

RBM 支持大範圍的可見和隱藏單元類型,如二值函數,高斯函數和整流線性單元(ReLU)[17]。同時也按照 [6] 的模型整合對 CRBM 的支持,同時第二版整合最大池化層為池化層。

該框架還支持常規神經網絡。即可以訓練人工神經網絡和 CNN。CNN 也支持最大池化層和平均池化層。這些網絡可以使用小批量梯度下降法進行訓練。同時支持動量和權重衰減等基本學習選項。

該框架還支持一些高級特性,如 Dropout [18] 和 批歸一化 [19]。最後,該框架也整合了 Adagrad [20],Adadelta [21] 和 Adam [22] 等自適應優化器。並支持自動編碼器 [23] 和卷積自動編碼器 [24]。他們可以接受有噪聲的輸入數據來訓練以增強泛化性能,這種技術被稱為去噪自動編碼器 [25]。

DLL 庫遵從 MIT 開源許可條款,免費使用。該項目的詳細信息以及部分教程可參考主頁。

實驗評估

我們通過一些實驗將 DLL 與目前流行的深度學習框架進行了比較。每種模型在每個框架上的訓練時間都會進行比較,無論是在 CPU 上還是在 GPU 上。所有實驗都計算了在每個框架上測試的準確度。結果表明,所有測試框架在使用相同參數進行訓練時都準確率都不相上下。

我們在這裡指出,這些實驗的目標不是針對測試數據集取得最優性能。事實上,這些模型之所以簡單,是為了與大量的框架進行比較。此外,如果我們的目的是取得高準確率,網絡不應該總是像實驗那樣訓練多個 epochs。

最後,重要的是:我們不知道所有框架的全部細節。我們盡最大努力保持網絡架構和訓練參數的同一性,但可能框架本身的一些實現細節導致訓練方法,解釋執行時間的差異略有不同。

本研究介紹的所有實驗都運行在頻率為 3.4 GHz Intel R CoreTM i7-2600,12 GB RAM 的 Gentoo Linux 機器上(針對這些測試而禁用 CPU 調頻)。機器開啟了 SSE 和 AVX 矢量化擴展。BLAS 通過 Intel R Math Kernel Library(MKL)以並行模式執行。基準 GPU 是 NVIDIA Geforce R GTX 960 顯卡,配以 CUDA 8.0.4.4 和 CUDNN 5.0.5。為了確保實驗可重現,用於這些實驗的源代碼已開源。

項目地址: https://github.com/wichtounet/frameworks

以下是研究人員選取的對比框架:

1)Caffe [30]:Caffe 是一個高級機器學習框架,專注於速度和表達。它是用 C++ 開發的,可通過文本描述性語言使用。Caffe 1.0 可通過源碼安裝並支持 GPU 和 MKL。

2)TensorFlow [31]:一個允許構建數據流圖來執行數值計算的通用的低級框架。該框架的核心用 C ++ 編寫,但這些功能大多可通過 Python 接口調用。Tensorflow 1.3.1 可通過源碼安裝並支持 CUDA,CUDNN 和 MKL。

3)Keras [32]:一個高級機器學習庫,為 Tensorflow 或 Theano 提供前端接口。用 Python 編寫。提供了大量的高級模型,簡化了機器學習模型的開發。可使用 Tensorflow 1.3.1 的官方軟件包來安裝 Keras 2.0.8。

4)Torch [33]:Torch 是最早於 2002 年出現的一個低級機器學習框架。通過 Lua 前端接口調用。雖然它是一個低級框架,但包含了用於機器學習的高級模塊。它可以通過 Git commit 3e9e141 進行源碼安裝並支持 CUDA 和 MKL。

5)DeepLearning4J [34]:DeepLearning4J 是用 Java,C 和 C ++ 編寫的 Java 深度學習框架。它具有非常多的功能,且專注於分佈式計算。可從 Maven 獲取 0.9.1 版本。

這些框架是根據它們的流行程度來選擇的,也是也為了編程語言的多樣性。DLL 可直接從源代碼調用,截稿時可用的最新版本是(Git commit 2f3c62c)。

資源|DLL:一個炙手可熱的快速深度神經網絡庫

圖 2:各框架基於 MNIST 數據集的全連接神經網絡實驗在 CPU 和 GPU 上的訓練時間性能的比較。

資源|DLL:一個炙手可熱的快速深度神經網絡庫

圖 3:各框架在 CNN,MNIST,CPU 和 GPU 上的訓練時間性能比較。

論文:DLL: A Blazing Fast Deep Neural Network Library

資源|DLL:一個炙手可熱的快速深度神經網絡庫

鏈接:https://arxiv.org/pdf/1804.04512.pdf

深度學習庫(DLL)是一個全新的機器學習庫,它專注於速度。DLL 支持前饋神經網絡,如全連接的人工神經網絡(ANN)和卷積神經網絡(CNN)。它還對受限玻爾茲曼機器(RBM)和卷積 RBM 提供非常全面的支持。

我們這項工作的主要動機是提出與評估有潛力加速訓練和推理時間的創新的軟件工程策略。這些策略大多獨立於深度學習算法。我們在三個數據集和四個不同的神經網絡模型上對 DLL 與其它五個流行的深度學習框架進行了比較。實驗表明,所提出的框架在 CPU 和 GPU 上均有大幅提升。在分類性能方面,DLL 可獲得與其他框架相似的準確度。


分享到:


相關文章: