DLL:一個炙手可熱的快速深度神經網路庫

機器之心發表於2018-05-09

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 可獲得與其他框架相似的準確度。

相關文章