1. 程式人生 > >2017深度學習最新報告及8大主流深度學習框架超詳細對比(內含PPT)

2017深度學習最新報告及8大主流深度學習框架超詳細對比(內含PPT)

​ 深度學習領軍人物 Yoshua Bengio 主導的蒙特利爾大學深度學習暑期學校目前“深度學習”部分的報告已經全部結束。 本年度作報告的學術和行業領袖包括有來自DeepMind、谷歌大腦、蒙特利爾大學、牛津大學、麥吉爾大學、多倫多大學等等。覆蓋的主題包括:時間遞迴神經網路、自然語言處理、生成模型、大腦中的深度學習等等。現在全部PPT已經公開,是瞭解深度學習發展和趨勢不可多得的新鮮材料。

蒙特利爾大學的深度學習暑期學校久負盛名,在深度學習領軍人物Yoshua Bengio 號召下,每年都聚集了頂尖的深度學習和人工智慧方面的學者進行授課。今年的暑期學校更是首次增加了強化學習課程。

深度神經網路,即學習在多層抽象中表示資料的神經網路,已經極大地提升了語音識別、物件識別、物件檢測、預測藥物分子活性以及其他許多技術。深度學習通過構建分散式表示(監督學習、無監督學習、強化學習)在大型資料集中發現複雜結構。

今年的 DLSS 由 Graham Taylor,Aaron Courville 和 Yoshua Bengio 組織。

強化學習暑期學校

這是第一屆的蒙特利爾大學強化學習暑期學校(RLSS),與 DLSS 是相輔相成的。RLSS 將涵蓋強化學習的基礎知識,並展示最新的研究趨勢和成果,為研究生和該領域的高階研究人員提供互動的機會。

今年的 RLSS 由 Joelle Pineau 和 Doina Precup 組織。

目前,深度學習部分的課程已經結束,官方公開了全部的講義PPT,今年的深度學習部分的課程內容包括:

  • 蒙特利爾大學 Yoshua Bengio 主講《迴圈神經網路》  。

  • 谷歌的Phil Blunsom 主講自然語言處理相關內容,分為兩部分《自然語言處理、語言建模和機器翻譯》和《自然語言的結構和基礎》。

  • 蒙特利爾大學的Aaron Courville 主講《生成模型》。

  • 谷歌大腦的Hugo Larocelle 主講《 神經網路》。

  • 麥吉爾大學的Doina Precup 主講 《機器學習導論》。

  • 牛津大學的 Mike Osborne主講《深度學習中的概率數字》。

  • 多倫多大學的 Blake Aaron Richards 主講《大腦中的深度學習》。

Yoshua Bengio 主講《時間遞迴神經網路》  :RNN 的 7個小貼士

Bengio 今年主講的主題是《時間遞迴神經網路》。在神經網路中,時間遞迴神經網路模型通過一個遞迴的更新,從一個固定大小狀態的向量中有選擇性地對一個輸入序列進行提煉。時間遞迴神經網路能在每一個時間點上產生一個輸出。

一個RNN能表徵一個全連線的定向生成模型,即,每一個變數都能從根據前序變數進行預測。

他在演講中介紹了多種型別的RNN:雙向RNN、遞迴網路,多維RNN 等等,根據演講PPT,用梯度下降學習長依存性是非常困難的。1991年,Bengio在MIT時,所做的研究中的樣本實驗,只能做到2個型別的序列。

基於梯度的學習為什麼很困難?Bengio認為,與短依存相比,長依存所獲得的權重過小,指數級的小。由此,從RNN的例子可以看到,梯度消失在深度網路是非常困難的。所以,為了穩定的儲存資訊,動態性必須進行收縮。

關於 RNN的 7個小貼士:

  1. 剪裁梯度(避免梯度的過載)

  2. 漏洞融合(推動長期的依存性)

  3. 動能(便宜的第二等級)

  4. 初始化(在正確的範圍開始,以避免過載/消失)

  5. 稀疏梯度(對稱性破壞)

  6. 梯度傳播的正則化(避免梯度消失)

  7. 門自迴圈(LSTM&GRU,減少梯度消失)

他在演講中著重介紹了注意力機制:快速進步的20年:用於記憶許可權的注意力機制

神經網路圖靈機

記憶網路

使用基於內容的注意力機制來控制記憶的讀寫許可權

注意力機制會輸出一個超越記憶位置的Softmax

深度學習中的注意力機制示意圖

注意力機制現在在端到端的機器翻譯中得到應用,並且獲得巨大成功。

設計RNN架構

Bengio 課程全部PPT地址:

https://drive.google.com/file/d/0ByUKRdiCDK7-LXZkM3hVSzFGTkE/view

 谷歌Phil Blunsom 主講自然語言處理 

自然語言成為本期蒙特利爾大學深度學習暑期學校的一個重點。

來自谷歌的 Phil Blunsom 在兩個報告中分別介紹了《自然語言處理、語言建模和機器翻譯》和《自然語言的結構和基礎》

本報告中,講者介紹了語言建模的三種渠道:

  • 通過計算基於 n-gram 的模型,我們用前面的 n 詞近似觀察詞的歷史。

  • 在連續的空間中,神經網路的n-gram模型嵌入相同的固定n-gram歷史中,進而更好地捕捉不同歷史之間的關係。

  • 使用時間遞迴神經網路,我們終止了固定的n-gram歷史,並且將整個歷史壓縮到固定的長度向量,使得長距離的關聯能夠被捕捉。

蒙特利爾大學Aaron Courville 主講:生成模型

CIFAR Fellow、蒙特利爾大學的 Aaron Courville 在這堂課中講授了生成模型的一些重點。Aaron Courville 不是別人,正是人工智慧領域的又一本“聖經級教材”《深度學習》(Deep Learning)一書的第三位作者——剩下兩位是 Ian Goodfellow 和 Yoshua Bengio。

我們知道,從模型角度講,無監督學習分為概率模型和非概率模型。稀疏編碼、自編碼器和 K-means 都屬於非概率模型,而在概率模型中衍生出了兩條分支:顯式密度模型(Explicitly Density Model)和隱性密度模型(Implicit Density Model),生成對抗網路(GAN)就屬於後者。

顯式密度模型又分為易解模型(Tractable Model)和難解模型(Non-Tractable Model)。NADE、PixelRNN 都屬於可解模型,而玻爾茲曼機(BMV)、變分自編碼器(VAE)則屬於難解模型。

Courvill 的這堂課內容分成兩部分,以PixelCNN 為例講自迴歸模型,以及 VAE 和 GAN(包括 WGAN)講潛變數模型。

谷歌大腦的Hugo Larocelle 主講神經網路 

《神經網路》課程的形式是線上視訊講座,將非常細緻地講解人工神經網路相關知識,內容涵蓋:①神經網路是如何從輸入x得到預測的f(x),需要了解前向傳播、神經元的型別;②怎樣基於資料訓練一個神經網路(分類器),需要了解損失函式、反向傳播、梯度下降演算法、訓練的一些技巧等;③深度學習:無監督預訓練、dropout、批標準化等。

 麥吉爾大學的 Doina Precup 主講機器學習導論

本講介紹了機器學習的一些問題型別,以及線性逼近器、誤差函式/目標函式機器優化方法、偏差方差折衷,過擬合和欠擬合、線性估計器的L2和L1正則化、正則化的貝葉斯解釋,以及邏輯迴歸。機器學習問題的型別包括監督學習,強化學習和無監督學習,本講課程以人臉檢測和識別、TD-Gammon、腫瘤檢測等作為例項分別講解,並介紹解決這些問題型別的步驟和可用方法。

 牛津大學的 Mike Osborne主講深度學習中的概率數字 

多倫多大學的 Blake Aaron Richards 主講大腦中的深度學習 

我們的感知、動作和記憶從何而來?從我們神經系統中神經元的活動而來。人腦裡有著幾十億大腦神經元,這些神經元彼此之間的突觸連線,還有這些連線強度的精確調諧,使這個地球上最複雜神祕的生理學功能成為可能。

但是,這些連線並不是由人類基因組所決定的。無論是昆蟲還是人類,神經元的連線都是後天形成的,動物會使用從感官和運動經驗中得到的資訊來塑造神經元之間的突觸連線。

CIFAR Associate Fellow,Blake Richards 的研究領域是神經生理學、系統神經科學和計算神經科學。計算神經科學通過在對神經系統建模和分析的過程中應用計算的方法和觀念,整合各種對神經系統進行模擬的嘗試性工作。這當中,會使用機器學習方法和應用數學解答神經科學問題。

Richards 在深度學習暑期學校講的課題很有意思——《大腦裡的深度學習》。人工神經網路本來就模仿了很多人類神經網路的概念,Deep learning本身就是做計算神經學的的人發明的。因此大腦裡也會用到深度學習並不奇怪。Richards 介紹了當前的深度學習研究在真實大腦裡的潛在應用。具體說,主要是反向傳播(Backpropagation)。

在演算法和數學公式推導中,體會大腦裡的深度學習。

全部講義下載

Bengio - Recurrent Neural Networks(下載:http://t.cn/RoD3NZY)

Phil Blunsom - Natural Language Processing, Language Modelling and Machine Translation (下載:http://t.cn/RoD3R3Y)

Blunsom - Structure and Grounding in Natural Language(下載:http://t.cn/RoD3dLy)

Courville - Generative Models II(下載:http://t.cn/RoD1hiV)

Larochelle - Neural Networks 1(下載:http://t.cn/RoD1LR2)

Larochelle - Neural Networks 2(下載:http://t.cn/RoD15cy)

Osborne - Future_of_Work_DLSS(下載:http://t.cn/RoD1Mpq)

Osborne - PN_BO_DLSS(下載:http://t.cn/RoD1a8C)

Precup - dlss-intro-2017(下載:http://t.cn/RoD1pfi)

Richards - Deep_Learning_in_the_Brain(下載:http://t.cn/RoD1QaZ)

AAAI 2017講座:8大主流深度學習框架超詳細對比(90PPT)

AI復始,永珍更新 !

導讀這一講座介紹了深度學習框架設計原則的基本知識,其目標是為希望在自己的工作任務中利用深度學習的研究者 和 AI 實踐者提供關於選擇合適框架的指導。講座分為三部分:1. 神經網路基礎知識;2. 神經網路部署的常見設計;3.各種常見深度學習框架的優缺點比較。

全部PPT下載地址:https://sites.google.com/site/dliftutorial/

2017年2月5日的 AAAI 大會上,來自日本的Seiya Tokui 、Kenta Oono 和 Atsunori Kanemura三位AI研究員帶來了《Deep Learning Implementations and Frameworks》的課程(Tutorial )介紹。

這一講座介紹了深度學習框架設計原則的基本知識,其目標是為希望在自己的工作任務中利用深度學習的研究者 和AI 實踐者提供關於選擇合適框架的指導。

當下,深度學習中的一些軟體框架,比如 TensorFlow 和 Caffe,已經被許多深度學習系統採納,以加速研究和發展速度。深度學習在 AI 的核心技術中扮演基礎性的作用,其中包括影象和語音識別、計劃和自然語言處理。在AI 系統的搭建上,深度學習也起到了基礎材料的作用,比如,在機器人、遊戲、問答和藥物診斷中都是。

深度學習模型的設計從本質上看,是元件和靈感的結合。深度學習的技術要素通常都是通用的。比如,對於影象識別來說,一個典型的深度學習架構就是一個多層的卷積棧(stack)和池化操作。許多行為,包括 dropout 和 batch 正則化通常都會被用於提升泛華能力。一個超大量級的部署可以簡化為:好的元件(比如卷積網路和池化)以及靈感(比如dropout 和 batch 正則化)的結合。這是為什麼深度學習能讓程式設計更加有效的原因。

選擇一個合適的深度學習框架要求對框架設計的基本原則有一定的知識儲備。當下,深度學習中有各種各樣的框架,這讓使用者在選擇最合適的框架上存在不少困惑。除了重複利用性以外,競爭所需要的速度、可擴充套件性、程式碼簡潔性、去bug的簡便性以及社群的大小等等都為此添加了難度。選擇一個次優的框架可能會使得研究和發展的效率降低,損害工作的實用性,降低聲望。

基於深度學習在簡單的模式識別任務之外的最新進展,這一講座將提供一些面向一般性的AI應用的有用技術資訊。

目標受眾

講座面向的是希望利用深度學習來開發AI 系統或者在具體任務中運用AI 的系統的研究者和相關從業者,講座專門用於幫助他們從多個候選選項中為自己的應用選擇最合適的軟體框架。

改講座提供了關於不同框架的設計和優化原則,以為選擇合適的框架提供指導。聽眾從講座將能學到,為什麼一些框架會比另一些快,為什麼一些框架中bug的去除很困難以及為什麼一些框架對於動態的模型變化是無效的。講座還提供了 TensorFlow、 Keras 和 Chainer 上的程式碼案例,不僅展示了這些框架的可用性,還對它們的內部機制進行了深度的介紹。整個講座的視角是通用性的,對於講座中提到的主題的理解,將有利於在評估目前還沒有釋出的一些框架。

講者

Seiya Tokui ,東京大學博士、Preferred Networks研究員。深度學習框架Chainer 的主要開發者。

Kenta Oono ,Preferred Networks 工程師。深度學習框架Chainer 的主要開發者。

Atsunori Kanemura,日本國家高階工業科學技術研究所研究員。

第一部分 簡介

講座名稱:深度學習部署和框架

主要內容概覽:

Session 1:簡介、神經網路基礎、神經網路部署的常見設計

Session 2:不同的深度學習框架,框架的程式碼示例、結論

如此多的深度學習框架:Tensorflow、Caffe、CNTK、Theano、Torch、MXNet、Chainer、Keras等等。哪一個才是最適合你的?

講座目標:

  • 介紹深度學習框架背後的設計原則

  • 提供選擇合適框架的要領

  1. 瞭解大多數深度學習框架中常見的技術棧的組成部分

  2. 瞭解不同的部署之間的差別

標準受眾:希望開發包含神經網路系統的人

背景準備:

  • 一般的機器學習術語,特別是關於監督式學習的

  • 基本的神經網路知識或者實踐(推薦)

  • 基本的 Python 程式語言(推薦)

介紹到(或者不會介紹到)的框架

附帶編碼示例進行深度解釋的有:

  • Chainer-Python

  • Keras-Python

  • TensorFlow-Python

也對比了以下幾個框架:

  • Torch-Lua

  • Theano-Python

  • Caffe-C++& Python & Matlab

  • MXnet-Many

  • PyTorch-Python

其他沒有介紹的:

  • 雲端計算、Matlab toolboxes、DL4J、H2O、CNTK

  • TensorBoard,DIGITS

神經網路基礎

人工神經網路從生物學獲得啟發,但是,生物學上的實現不等於好的效能。

前向和反向傳播

  • 前向:(神經網路層)處理線性資訊(比如,矩陣乘法)+非線性信操作(比如,啟用函式)得到的輸出

  • 反向:對引數進行優化,以更適應資料(反向傳播)

神經網路的靈活性使得多個應用成為可能:

  • 影象識別,ImageNet LSVR 挑戰中,超越人類表現

  • 玩遊戲,AlphaGo,擊敗人類專家

  • 連線多種形式的內容,比如,影象和文字。用中間的表徵(嵌入)從影象中生成文字。

  • 生成模型:生成對抗模型

  • 翻譯、語音識別等等……

例子:分類

D代表維度輸入向量(特徵),比如,一張100X100的照片

K代表分類目標,比如,物件型別,貓、桌子、椅子等等

N代表資料集大小

目標:給神經網路一個新的輸入向量,預測其型別

一個神經元的數學模型

計算輸入x 和引數 w,通過一個非線性的啟用函式 f 轉化

一般的線性判別式

  • 一層神經網路的例子

  • 一般線性判別式

在損失最小化下進行學習

  • 從多個樣本中進行學習

  • 雙輸出

  • 定義損失函式

  • 把定義函式最小化,以學習(評估)引數

梯度下降

  • 一層神經網路中的損失梯度的公式表示

  • 升級的規則

其他型別的損失函式:Cross entropy,Exponential,Zero-one,Kullback-Leiber

多層神經網路中的,損失函式最小化

兩層神經網路的例子

反向傳播:

  • 使用鏈規則來獲得梯度

  • 反向傳播:從頂層到底層,計算梯度的迴歸

自動差分:

不需要考慮鏈規則

反向傳播的計算是手動的,而且枯燥的

在定義了神經網路架構後,梯度能夠自動地被計算

這被稱為自動差分(這是利用鏈規則的一般概念)

  • 在演算法上的定義

  • 區分了象徵的差分和數字的差分

引數升級的訣竅

  • 梯度下降

  • 動態梯度下降

  • vanilla SGD 的更快變化

常見的錯誤和過擬合

學習的目標是減少常見錯誤,以及此前沒見過的資料中的錯誤。

但是,當前使用的資料中的錯誤太少(過擬合)也不是好事(甚至是有害的)。

如何檢查過擬合?

把資料分成兩個部分:訓練資料集、測試資料集。

實踐上的考慮

架構:有多少層/單元? 卷積、迴圈、殘差連線

權重初始化:隨機、預訓練、從另一個已經訓練好的網路進行遷移

避免過擬合的技巧:Dropout,Batch正則化

視覺化

第二部分 神經網路部署的常見設計

目標

深度學習框架如何表徵和執行神經網路。

各種深度學習框架中常見的技術堆疊。

對技術堆疊的例子的檢驗:Chainer、TensorFlow、Theano、Keras

深度學習框架中技術堆疊的列表

作為一種圖計算的神經網路

在絕大多數的框架中,神經網路被當成一種影象計算。

最簡單的圖計算形式是雙邊的DAG(直線非迴圈圖),由數字節點和操作節點組成。

例子:多層感知機

例子:迴圈神經網路

控制流動節點的迴圈神經網路

例子:對抗生成網路

對抗生成網路由生成器和辨別器組成

生成器和辨別器可以是任意的圖計算

自動差分

計算特殊數字節點(比如損失)的梯度

操作器節點有反向操作

在API上,反向操作的不同會造成框架的不一樣

框架在圖計算上也有差別。正如以下兩張PPT中展示的那樣

圖計算中的反向傳播

延展圖計算中的反向傳播

例子:Theano

計算的優化器

將圖計算變成簡單和高效的:刪除冗餘節點、用內建的操作器,以減少記憶足跡。

以Theano為例

數字優化器

DL框架中的技術堆疊

訓練神經網路的工作流程:

準備資料集--對神經網路引數進行初始化--不斷重複知道得到一些標準的東西--準備好進行下一次小的batch--定義如何計算損失--計算損失(前向)--計算梯度(反向)--升級神經網路引數--儲存神經網路引數。

訓練的精華內容:把典型的訓練程式作為API,使用者不需要手動寫程式。

資料載入

支援從大型的資料庫中載入預先定義的資料,比如,MNIST、CIFAR、PenTreeBank等等。

訓練過程的序列化

什麼是序列化:訓練過的模型(也就是神經網路的架構和引數)、訓練過程的狀態。

序列化可以提高模型的可移植性

預訓練模型的釋出:

使用者可以在自己的任務總使用與訓練的模型

許多框架,包括Caffe、MXNet 和 TensorFlow 都推出了大的模型(比如,VGG, AlexNet 和ResNet)

雖然分享預訓練模型的大型網站很少,比如說 Model Zoo,但是,許多作者還是會私下分享他們的模型。

從其他框架中引入預訓練模型:比如,Chainer 支援Caffe 的 BVLC-official 參考模型

平行計算:模型的並行和資料的並行

在每一種模式中,深度學習框架應該有不同的表現。

在模型的衡量和推理中,不需要反向傳播

一些操作,比如Dropout和Batch 正則化,在訓練和衡量或者推理中,是不同的。

圖計算的替代依賴於模式的不同

深度學習框架中的技術堆疊

圖的視覺化:幫助使用者用更加簡便的工具來開發模型。

設計、監測和分析都可以使用。

深度學習框架中的技術堆疊

GPU 支援:絕大多數深度學習中的計算包含了大型的矩陣乘法和函式應用,GPU可以加速這些計算。(在大多數的情況下)。

DL 框架可以在CPU 和 GPU 間無縫切換。一般來說,框架會通過隱藏的CUDA來支援GPU。

多維陣列庫(CPU/GPU)

負責資料節點中的具體計算

嚴重依賴於BLAS(CPU)或CUDA 工具(GPU)

第三方庫:Tensorflow(CPU/GPU)、 NumPy (CPU)、PyCUDA(GPU)、 gpuarray (GPU)。

Scratch:ND4J,mshadow(MXNet),Torch,Cupy (Chainer)

大多數的GPU 陣列庫希望能在CPU和GPU中進行切換。

例子:Chainer/CuPy

使用哪一個裝置?

GPU是第一選擇,但是,GPU 不是一個永遠正確的選擇。

Chainer 中的技術堆疊

TensorFlow 中的技術堆疊

Theano 中的技術堆疊

Keras中的技術堆疊

總結

絕大多數的深度學習框架的元件都有共通之處,由類似的技術堆疊組成。

在更層的堆疊中,框架被設計用於支援使用者完成典型的機器學習流程。在中間層,對圖計算的操作是自動化的。在最更底層,經過優化的向量被採納。

對這些元件的不同實現,會造成框架的不一樣,正如我們在下面這部分會看到的。

第三部分 各種深度學習框架的不同

這一部分的目標

列舉神經網路框架設計的選擇

介紹既有的框架在這些選擇上的客觀區別

  • 每個主題都有兩個或者更多的選擇

  • 每個選擇的好處和壞處

  • 在Chainer中實踐的例子

大綱

回憶訓練神經網路的步驟

對既有的框架進行快速地對比

設計選擇的細節

神經網路的訓練步驟(上文已經提到過)

使用者典型的工作流

從編碼到執行再到提升

寫程式碼—計算反向傳播—升級引數—執行使用者的程式碼—優化圖計算和擴充套件訓練

框架設計選擇

神經網路中最關鍵的部分

  • 如何定義要優化的引數