天天看點

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

1新智元編譯   

來源:ThingsExpo、Medium

作者:Natalia Ponomareva、Gokula Krishnan Santhanam

整理&編譯:劉小芹、李靜怡、胡祥傑

<a href="http://mp.weixin.qq.com/s?__biz=MzI3MTA0MTk1MA==&amp;mid=2651991849&amp;idx=1&amp;sn=eca790688add8b9a3f57b3fea78de892&amp;chksm=f1215bd8c656d2ce9431f70106f6f710eb6885d70b637a38bdea45777a7bdc0225c79ee35d21&amp;scene=21#wechat_redirect" target="_blank">新智元日前宣布,獲6家頂級機構總額達數千萬元的PreA輪融資,藍馳創投領投,紅杉資本中國基金、高瓴智成、藍湖資本 、藍象資本、今日頭條跟投。本輪融資将用于新智元團隊規模擴充并增加新産品服務線,目标打造 To B 的人工智能全産業鍊服務平台。</a>

新智元啟動新一輪大招聘:COO、執行總編、主編、進階編譯、主筆、營運總監、客戶經理、咨詢總監、行政助理等 9 大崗位全面開放。 

履歷投遞:[email protected]

HR 微信:13552313024

新智元為COO和執行總編提供最高超百萬的年薪激勵;為骨幹員工提供最完整的教育訓練體系、高于業界平均水準的工資和獎金。

加盟新智元,與人工智能業界領袖攜手改變世界。

【新智元導讀】在 ThingsExpo 會議上,谷歌軟體工程師 Natalia Ponomareva 作了有關如何在大規模機器學習中取得成功的講座。Natalia 回顧了可用于對大量資料進行機器學習模型訓練的架構,解釋了特征工程和算法選擇,并提供了有關如何避免錯誤的 tips。這是一份非常實用的機器學習指導手冊。本文後半部分談了如何選擇深度學習架構的問題,以及Theano 貢獻者、蘇黎世聯邦理工學院的深度學習研究者 Gokula Krishnan Santhanam 對常用深度學習架構基本構成的分析。

【進入新智元微信公衆号,在對話框輸入“谷歌MLppt”,可下載下傳32頁ppt】

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

谷歌機器學習:實際應用技巧

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)
谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

什麼是機器學習(ML)?

從概念上講:給定(訓練)資料,發現一些潛在的模式并将這個模式應用于新資料。

ML 的類型:監督學習;無監督學習;半監督學習;……

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

監督學習:用于訓練的輸入資料有标記。

分類(學習決策邊界)。 示例:文本/圖像/視訊分類,垃圾郵件檢測等

回歸(學習預測連續值)。 示例:預測房價,預測使用者願意支出的金額等

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

無監督學習:輸入資料沒有标記,嘗試在資料中查找“隐藏的”結構。

聚類

異常值/異常現象檢測

示例:對聚類流服務使用者進行分組,對這些組以及某個視訊在這些組中的受歡迎程度進行分析。

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

ML如何幫助企業業務

個性化服務(為每個使用者提供量身定制的獨特的體驗),可以最大限度地提高參與度和收入

自動化執行一些容易出錯或需花費大量時間的任務(如轉錄,字形識别等)

分析資料,提出更好的決策方案

……

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

從小處着手:資料取樣;初始特征标記;建一個簡單的模型,看看它性能如何

Scale:用完整的資料訓練;改進特征(特征工程);嘗試不同的算法(模型選擇)

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

特征工程(feature engineering)是什麼?

在概念上,特征工程是将原始資料(日志,産品購買的曆史記錄或上網行為等)轉換成可以由學習算法在訓練和預測中使用的矢量(vector)的過程。

它是高度領域特定的。

取決于你試圖從資料中學習什麼。

勞動密集型

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

特征工程:如何做?

進階步驟:

決定你想要獲得的洞察力(例如,我們想訓練一個模型,為使用者聽歌提供推薦)。

決定如何模組化(有許多方法!) .例如,建一個分類模型,給定使用者和歌曲,模型将傳回使用者是否會對這首歌感興趣的結果。或者我們有一個歌曲清單,把它給模型運作,模型将顯示它認為使用者可能會喜歡的歌曲。

考慮你有什麼資料(例如,使用者收聽歌曲的曆史記錄和使用者配置檔案資訊)。

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

考慮可能相關的要素:使用者年齡(可能相關?); 使用者名和電子郵件位址(完全無關); 使用者位置(可能相關?);使用者收聽歌曲的曆史記錄(相關)。使用者之前聽過的歌曲的類型(鄉村,搖滾,流行等)(非常相關)

把相關資訊用數字表示(找到特征): 描述使用者的特征;描述歌曲的特征

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

準備最終的訓練資料

給定使用者u(u1,u2,u3 ... un)的特征

歌曲的特征s1(s11,s12,s13,...,s1k),s2(s21,s22 ,... s2k)... 

為使用者建立訓練執行個體,u(u,si)(1 - 收聽)和(u,sj)(0 - 沒有收聽)

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

特征标準化(Feature normalization )

你的特征很有可能比例不同:

使用者年齡:0到100

使用者收入:從0到數百萬

有些機器學習模型可能無法很好地處理這樣的範圍各異的特征。

正則化将對特征的懲罰不一緻

距離将受到範圍最大的特征的控制

一些優化算法可以更快地收斂(梯度下降)

解決方案: 标準化特征,使特征的範圍大緻相同

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

怎樣評估模型?

你最關心的是什麼?是“沒有假正(false positives)”嗎?還是整體的預測準确度?

将你關心的問題表達為一個可計算的名額,確定該名額與你關心的内容直接相關。

此名額可用于:選擇模型;在部署之前測試模型;對模型或資料進行細化(例如添加更多特征)。

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

模型選擇:

用簡單的模型入手。 例如,嘗試線性模型。

這些模型通常有效:

    分類:邏輯回歸,感覺器算法,AdaBoost,SVM(線性核心為大量資料,RBF為小資料),随機森林

    回歸:線性回歸,随機森林

嘗試幾個不同的模型

基于模型在資料集上的性能選擇模型

確定在對不同資料集進行模型選擇之後評估最終性能名額(例如,不要使用相同的資料集來選擇模型)

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

考慮深度學習

 如果你有大量的有标記資料

如果你很難找到特征或特征之間的連接配接非常複雜(例如:對象檢測)

能夠忍受更長的訓練/細化時間

如果你對深度學習有基本的了解:什麼是架構選擇?(多少層?完全連接配接還是不完全連結?等等); 如何防止過拟合?

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

超參數調優(Hyperparameter tuning)

ML模型具有超參數:這些是在訓練開始之前就已經固定并且影響訓練過程和複雜性的參數。

例如:學習率,正則化常數等

預設值隻是讓它們得到平均的性能;

為了得到最好的ML模型,需要調優超參數

過程:設定值,訓練模型, 評估,(基于評估)細化值

方法:Grid;算法輔助超參數調優(貝葉斯等)

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

有監督 ML pipelines

需要為以下内容設定 pipeline:

訓練:擷取資料(可能還需要存儲資料);特征提取和資料标記; 拟合模型; 測試模型/選擇模型;存儲模型

預測:擷取實時資料;從中提取特征;檢索模型;在新資料上使用模型進行預測;根據預測執行

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)
谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

選擇工具/架構前需要考慮的事

訓練資料存儲在哪裡?資料庫? 雲?需要存儲特征和标記嗎?還是在訓練時再提取特征和标記?

怎樣訓練?在雲上訓練?還是離線?資料變化的頻率如何?

怎樣使模型可用于預測?使用架構工具?還是從頭開始編寫pipeline?

你希望架構具有監控功能嗎?出現問題時能夠 fallback 嗎?

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

初步的分析是有必要的,那麼下一步該做什麼?

驗證是否需要用大量資料訓練(模型在增加訓練規模時能表現得更好)

如果是,請考慮用完整的資料進行訓練

考慮其他要求: 

      - 在有新資料時更新模型,還是根據情況進行再訓練?

      - 訓練資料是否都适合記憶體?

      - 是否有資源在雲中設定一個完整的ML雲 pipeline(DIY方法)?

      - 還是利用“ML即服務” (ML as a service)?

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

ML生産工具:實踐方法

動手實踐:選擇存儲工具(如 Google Cloud,Amazon 等);為存儲資料、訓練和預測編碼;可以使用開源架構(liblinear,Weka,Tensorflow 等)或自己的實作模型;

優點:可能成本更低(隻需為聚類使用/資料存儲付費);非常靈活;流行的架構有強大的社群支援

缺點:人力投入多(需要一個開發者/資料科學家的團隊)

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

資料處理架構:

Map / Reduce + Hadoop——分布式存儲和處理系統

M / R——處理大量資料的範式

Pig,Hive,Cascalog——在Map / Reduce 上的架構

Spark——資料處理和訓練的全棧解決方案(full stack solution)

Google Cloud Dataflow

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

ML 工具:ML 即服務

ML即服務(ML as a service):預建構全棧解決方案(使用堆棧輕松訓練和部署模型)

特點:較少參與;不同元件無縫工作(存儲,聚類,訓練和預測等);可能不是很靈活

其他選擇:Amazon ML;Microsoft Azure;IBM Watson;Google Cloud ML

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

Google 雲服務:

雲存儲(Cloud Storage)

BigQuery

Cloud DataLab

Cloud DataFlow

TensorFlow

Google Cloud Machine Learning (alpha)

預訓練模型(圖像識别、語言檢測和翻譯、語音識别)

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)
谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)
谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

開源計算引擎,專為神經網絡設計,同時也可相容其他非神經網絡訓練

将你需要做的計算表示為資料流圖(包括節點、邊和張量)

非常靈活:使用預定義的、建構神經網絡常用的元件;可以根據特定的計算需求寫你自己所需的圖

在 CPU 和GPU上都能運作,在桌面端、伺服器和移動端平台都能運作

使用 Python 和 C++,還有互動的iPython 使用教程

開發者社群非常活躍

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

谷歌雲機器學習(alpha)

大規模機器學習最好的雲上運作,這樣開發起來更簡單,運作速度也更快。

谷歌雲機器學習的深度學習架構也用于驅動 Gmail、Google Photos 等産品

易于管理的 no-ops 基礎設施

能訓練任何大小資料集的模型

使用 TensorFlow 原生深度學習算法

有互動的 Datalab 模型開發設計教程

适用于多種不同類型的資料,與谷歌雲平台産品整合

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

預訓練的模型

如果你的模型屬于以下幾種,可以考慮使用預訓練模型,按照使用次數收費。所有這些模型建構起來都有相當大的難度,需要深厚的研究和程式設計基礎,這種工作還是留給專家來做更放心

圖像識别

語言檢測和翻譯

語音識别

如何選擇深度學習架構

上面說完了谷歌機器學習的實用技巧,也正好說到了 TensorFlow——代表谷歌深度學習的開源架構。現在,開源深度學習架構越來越多,除了 TensorFlow,目前可選的就有 Theano + Lasagne / Keras,Torch,PyTorch,Mxnet / minpy,Chainer,Neon,CNTK,Caffe 和 dynet。

每個架構都有各自的優勢,使得選擇哪個架構變得越來越難以權衡。此前 Soumith 的 convnet-benchmarks (https://github.com/soumith/convnet-benchmarks)是很不錯的架構間的比較基準,但也已經很久沒有更新了。

為此,前不久 Reddit 使用者 m_ke 在 Reddit 機器學習闆塊發起了讨論:2017 年常用深度學習開源架構的狀況會是怎樣?

m_ke 對這個讨論還做了補充說明:

1.你現在使用哪個架構?

2.你使用該架構做什麼任務(CV / NLP / RL)?

3.你喜歡該架構的哪些地方?

4.你是否考慮換個架構?

5.你現在遇到的最大的瓶頸是什麼:記憶體,計算,還是資料?

這些問題引起了一些有意思的讨論,以下是摘選:

使用者 sbt_:

這個問題就像在 emacs 和 vim 之間進行選擇。目前的架構在性能方面都沒有什麼太大的不同,沒有哪個能好到你能說它比其他的都好。

如果你想知道這些庫/架構之間有何差別,可以在典型的使用案例(硬體和模型架構)上自己做基準比較。我偏好的可能仍然是 Theano,但我發現 TensorFlow 對我的任務也表現得同樣好——選擇 Theano 隻是因為我對它更熟悉。此外,我兩三天前看了下 PyTorch,看起來也非常好。

使用者 feedtheaimbot:

我個人使用 Lasagne 和 Theano 做研究。它的功能完整,設計良好。我的研究領域包括 RL,CV,貝葉斯推理,Memnets 等,它對所有這些工作都表現良好,哪怕我試圖實作一些非常不标準化的想法。

我唯一的不滿是 Theano 的編譯時間長的令人生厭。這點能夠部分得到解決,至少對合理性檢查方面,通過添加一些标志例如 device = cpu。

我也對 Pytorch 和 minPy 挺感興趣,特别是我覺得 numpy 很好,有助于加快我的疊代速度。

使用者 miketout:

對我來說,在 Ubuntu 上安裝和使用最簡單的是 Neon。我是做模型的,程式設計和數學都是初學者。不久我寫了自己的可組合容器和更進階的模型。我在示例中遇到一些bug,修複了其中一些,并且可能會在某些點送出一些 pull 請求。Neon 有一些非常好的示例,涵蓋了最新的一些研究的實作。在嘗試 Neon 之前,我安裝過 Theano,Tensoflow 和 Keras / Tensorflow,但幾乎沒有使用過。我認為不考慮設定的話,在易用性上 Keras 和 Neon 差不多。

當我開始考慮為大規模分布式訓練寫一點東西,我在打造自己的解決方案之前再次檢視,并開始設定 mxnet。Mxnet 支援分布式訓練和基于 ZMQ 的分布式KV存儲,這正是我想要的。乍看之下它也像 Neon 一樣可以直接使用。但在 Windows 和 Ubuntu 16.04 上設定 mxnet 簡直就是噩夢,我隻能放棄了對本地機器的 CUDA 支援。Amazon 上有一些預安裝的示例。

我的經驗是,Neon 最容易設定,在設定模型的難度上可能類似于 Keras,并且完全适應各種任務,包括圖像處理、DL 以及其他不需要分布式訓練的任務。就目前來說,好像也是 Neon 的性能最好。

使用者 congerous:

與 Torch 和 Neon 相比,Tensorflow 是最慢的。雖然 Neon 也不是很有吸引力,很像 Chainer 和 Lasagne。Caffe 和 Neon 在圖像任務上都很快,但他們不是真正意義上通用目的的架構。隻說持久力的話,Theano,Torch / PyTorch,MxNet,TensorFlow / Keras 和 CNTK 應該都會繼續增長。

深度學習架構的基本構成:五大基本要素

很多人都會遇到該如何選擇架構的問題,了解這些架構的基礎構造有助于你更好地做出選擇。

常用的架構包括 Theano、TensorFlow、Torch 和 Keras。它們各有千秋,蘇黎世聯邦理工學院計算機科學系碩士研究所學生,同時也是 Theano 貢獻者(contributor)的 Gokula Krishnan Santhanam 日前撰文詳細剖析了這些架構共通的基礎構成。

首先,一個深度學習架構含有以下五個核心元件:

張量對象(A Tensor Object)

對該張量對象進行的各種運算(Operations on the Tensor Object)

計算圖和優化(A Computation Graph and Optimizations)

自動微分工具(Auto-differentiation tools)

BLAS、cuDNN 擴充元件(BLAS / cuBLAS and cuDNN extensions)

為了向開發者提供盡量簡單的接口,大部分深度學習架構通常都會将普通的概念抽象化,這可能是造成許多使用者感覺不到上述五點核心元件的重要原因。

下面,我們就來一一看一下這五大組成。

1. 張量(Tensor Object)

用張量表示的對象是一個深度學習架構中的核心元件,因為後續的所有運算和優化算法都是基于張量進行的。幾何代數中定義的張量是基于向量和矩陣的推廣,通俗一點了解的話,我們可以将标量視為零階張量,矢量視為一階張量,那麼矩陣就是二階張量。

舉例來說,可以将任意一張RGB彩色圖檔表示成一個三階張量,三個次元分别是圖檔的高度、寬度和色彩資料。下圖如果按照RGB三原色表示,就可以拆分為三張紅色、綠色和藍色的灰階圖檔(見下圖中間的三張不同突破),再将這張圖用張量表示出來,就是最下方的那張表格。

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)
谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)
谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

圖中隻顯示了前5行、320列的資料,每個方格代表一個像素點,其中的資料[1.0, 1.0, 1.0]即為顔色。假設用[1.0, 0, 0]表示紅色,[0, 1.0, 0]表示綠色,[0, 0, 1.0]表示藍色,那麼如圖所示,前面5行的資料則全是白色。

将這一定義進行擴充,我們也可以用四階張量表示一個包含多張圖檔的資料集,其中的四個次元分别是:圖檔在資料集中的編号,圖檔高度、寬度,以及色彩資料。

将各種各樣的資料抽象成張量表示,然後再輸入神經網絡模型進行後續處理是一種非常必要且高效的政策,這樣做能夠統一不同類型的資料,将它們用标準的方式表現出來。此外,當資料處理完成後,還可以将張量轉換為其他想要的格式。

2. 運算

接下來是對張量對象的數學運算和處理。

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

我們可以将神經網絡視為對輸入張量進行一系列運算進而實作某個目的的過程。這些運算包括簡單的矩陣乘法,也可以是卷積、池化和LSTM等稍複雜的運算。而且各架構支援的張量操作通常也不盡相同,詳細情況可以檢視其官方文檔(如下為NumPy、Theano和TensorFlow的說明文檔)。

NumPy: http://www.scipy-lectures.org/intro/numpy/operations.html

Theano: http://deeplearning.net/software/theano/library/tensor/basic.html

TensorFlow: https://www.tensorflow.org/api_docs/python/math_ops/

需要指出的是,大部分的張量操作都是基于類實作的(而且是抽象類),而并不是函數(這一點可能要歸功于大部分的深度學習架構都是用面向對象的程式設計語言實作的)。這種實作思路一方面允許開發者将各種類似的操作彙總在一起,友善組織管理。另一方面也保證了整個代碼的複用性、擴充性和對外接口的統一。總體上讓整個架構更靈活和易于擴充,為将來的發展預留了空間。

3. 計算圖和優化

有了張量和基于張量的各種操作之後,下一步就是将各種操作整合起來,輸出需要的結果。

但很可惜,随着操作種類和數量的增多,有可能引發各種意想不到的問題,包括多個操作之間應該并行還是順次執行,如何協同各種不同的底層裝置,以及如何避免各種類型的備援操作等等。這些問題有可能拉低整個深度學習網絡的運作效率或者引入不必要的Bug,而計算圖正是為解決這一問題産生的。

它包含到各種Ops執行個體的連結,以及操作需要輸出哪個操作以及附加資訊的關系。不同的架構有不同的方式實作。

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

将計算圖作為前後端之間的中間表可以帶來良好的互動性,開發者可以将Tensor對象作為資料結構,函數/方法作為操作類型,将特定的操作類型應用于特定的資料結構,進而定義出類似MATLAB的強大模組化語言。

需要注意的是,通常情況下開發者不會将用于中間表示得到的計算圖直接用于模型構造,因為這樣的計算圖通常包含了大量的備援求解目标,也沒有提取共享變量,因而通常都會經過依賴性剪枝、符号融合、記憶體共享等方法對計算圖進行優化。

目前,各個架構對于計算圖的實作機制和側重點各不相同。例如Theano和MXNet都是以隐式處理的方式在編譯中由表達式向計算圖過渡。而Caffe則比較直接,可以建立一個Graph對象,然後以類似Graph.Operator(xxx)的方式顯示調用。

因為計算圖的引入,開發者得以從宏觀上俯瞰整個神經網絡的内部結構,就好像編譯器可以從整個代碼的角度決定如何配置設定寄存器那樣,計算圖也可以從宏觀上決定代碼運作時的GPU記憶體配置設定,以及分布式環境中不同底層裝置間的互相協作方式。除此之外,現在也有許多深度學習架構将計算圖應用于模型調試,可以實時輸出目前某一操作類型的文本描述。

4. 自動微分工具

擁有計算圖(computational graph)的另一個好處是,學習階段的計算梯度變得子產品化,簡單明了,便于計算。這要歸功于chain rule,它們能讓你以系統的方式計算函數組成的導數(derivatives)。正如我們所見,神經網絡能夠被認為是簡單的非線性組合,進而産生更加綜合性的函數。區分這些函數隻是簡單地将圖形從輸出傳回到輸入。符号微分或自動微分是一種可以在計算圖中計算梯度的程式化方法。

符号微分指的是分析性地計算導數。例如,你能得到關于梯度是什麼的表示。為了使用符号微分,你隻需要把Value 嵌入到導數中,然後直接使用。不幸的是,一些非線性,比如ReLU (Rectified Linear Units)在一些點是不能微分的。是以,我們以疊代方式計算梯度。由于第二種方法可以普遍使用,大多數計算圖包,如計算圖工具包(http://rll.berkeley.edu/cgt/) 來實作自動微分。

推出自己的梯度計算子產品通常不是一個好主意,因為由工具包來提供顯然更容易,更快速地。是以,要麼有自己的計算圖工具包和自動分化子產品或使用外部包。

由于每個節點處的導數必須僅相對于其相鄰節點計算,是以可以将計算梯度的方法添加到類中并且可以由微分子產品調用。

5. BLAS / cuBLAS和cuDNN擴充

使用所有上述元件,你可以擁有一個功能齊全的深度學習架構。它将能夠将資料作為輸入并轉換為張量,以有效的方式對它們執行操作、計算梯度以學習并傳回測試資料集的結果。然而,問題在于,因為你最有可能在進階語言(Java / Python / Lua)中實作它,是以你可以得到的加速 是有上限的。這是因為即使在進階語言中最簡單的操作也比在低級語言中完成時花費更多的時間(CPU周期)。

在這些情況下,我們可以采取兩種不同的方法。

第一個是來自編譯器的另一個類推。編譯過程的最後一步是 Assembly中生成的特定的硬體代碼。類似地,不是運作以進階語言編寫的圖,而是在C中生成用于網絡的相應代碼,并且其被編譯和執行。它的代碼存儲在每個Ops中,并且可以在編譯階段合并在一起。通過包裝器 (wrappers)(如pyCUDA和Cython)實作從低級到進階代碼資料傳輸。

第二種方法是使用像C ++這樣的低級語言實作後端,這意味着低級語言 - 進階語言互動内部架構是與前面的方法不同的,并且可以更快,因為我們不需要每次都編譯整個圖。相反,我們可以使用适當的參數調用編譯的方法。

非最優行為的另一個來源來自低級語言的緩慢實作。編寫高效的代碼十分困難,我們更好優化了這些方法實作的庫。 BLAS或基本線性代數子程式是優化矩陣運算的集合,最初用Fortran 編寫。這些可以用于做非常快的矩陣(張量)操作,并且可以提供顯著的加速。還有許多其他軟體包,如英特爾MKL,ATLAS也執行類似的功能。你可以根據自己的偏好進行選擇。

BLAS包通常是已經優化的,其前提假設是指令将在CPU上運作。在深度學習中,情況并非如此,BLAS可能無法充分利用GPU提供的并行性。為了解決這個問題,NVIDIA釋出了針對GPU優化的cuBLAS,現在包括在CUDA工具包中。最後,cuDNN是一個基于cuBLAS的功能集的庫,并提供優化的神經網絡特定操作,如Winograd卷積和RNN。

是以,通過使用這些軟體包就可以架構中獲得顯著的加速。加速在DL中十分要,這是你訓練神經網絡隻花費四個小時而不是四天的原因。在快速變化的AI創業公司中,速度就是你能成為領跑的還是追趕别人的關鍵。

總結

現在,你已經了解了不同架構之間的相似的特性,可以更好地認識和使用一個深度學習架構。對于不僅對學會使用深度學習架構感興趣,了解各個常用架構的内部組成和共性特征,還有助于你自己動手搭建深度架構。

優秀的工程師/研究員不僅要知道自己該使用哪種工具,還應該知道為什麼這個工具才是最好的選擇。 

深度學習架構基本要素編譯自:https://medium.com/@gokul_uf/the-anatomy-of-deep-learning-frameworks-46e2a7af5e47#.x8ilbhdqv

【進入新智元公衆号,在對話框輸入“谷歌MLppt”下載下傳文檔】

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

【尋找AI獨角獸】新智元聯手10大資本

啟動2017創業大賽

AI 創業大賽由新智元與10 家主流 AI 創投機構:藍馳創投、紅杉資本中國基金、高瓴智成人工智能基金、藍湖資本、藍象資本、IDG資本、高榕資本、中信建投證券、明勢資本、松禾遠望基金攜手發起,由新智元主辦,北京市中關村科技園區管理委員會、中關村科技園區海澱園管理委員會支援,是一場聚合了 AI 技術領袖和投資領袖的盛會。新智元向滿懷雄心的未來AI獨角獸提供強大的創投資源對接機會,頂級風投 TS 等你來拿。http://form.mikecrm.com/gthejw

點選文章下方閱讀原文,線上填寫報名申請報名表。該報名表為參與評選必填資料。

如有更多介紹資料(例如BP等),可發送至 [email protected],郵件标題請注明公司名稱。如有任何咨詢問題,也歡迎向該郵箱發信聯系。

大賽咨詢,請添加新智元微信号:

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

<a href="http://mp.weixin.qq.com/s/Xe3g2OSkE3BpIC2wdt5J-A#%23">閱讀原文</a>

谷歌大規模機器學習:模型訓練、特征工程和算法選擇 (32PPT下載下傳)

微信掃一掃

關注該公衆号

繼續閱讀