阿里(1 深度學習)

2021-08-21 03:10:07 字數 4740 閱讀 1572

深度學習的概念由hinton等人於2023年提出,**於人工神經網路的研究,含多隱層的多層感知機就是一種深度學習結構。深度網路通常意味著具有多於 1 個隱藏層的人工神經網路,神經網路模仿大腦的神經元將資訊進行傳遞並解釋資料,主要是影象、聲音和文字,實現人類的學習行為。dl通過組合低層特徵形成更加抽象的高層表示屬性類別或特徵,以發現資料的分布式特徵表示。它屬於機器學習方法的乙個新領域,也有監督學習和無監督學習之分。

按個人理解就是多層神經網路,最流行的卷積神經網路就屬於其中一種,在影象和聲音上效果好。從統計學角度來說,就是**資料的分布,從資料中學得乙個模型然後通過這個模型去**新的資料。模擬人腦的工作機制。定義乙個深度學習模型,通常要解決3個問題:(1)啟用函式。對於輸入神經元的啟用值。(2)損失函式。一般學習過程就是優化過程。(3)優化策略。最簡單的採用梯度下降。

欠擬合、過擬合、正則化、

隨機梯度下降

監督學習、無監督學習

正則化、dropout

卷積神經網路、深度神經網路

蒙特卡洛

softmax回歸、決策樹

knn、svm

生成對抗網路

影象識別

增強學習

caffe

tensorflow

支援語言

c++、python

python

機構bvlc

google

文件數量少多

網路實現難度易難

安裝難易影象問題caffe很方便,訓練只需寫portotxt。產品化最多、靈活性不足。

基於層模型:(1)每個層的計算,固定實現forward/backward。(2)必須手動指定目標gpu卡。

tensorflow是乙個資料流圖進行數值計算的開元軟體庫,較接近低層、靈活性較強。

基於計算模型:(1)首先構造好整個計算鏈路。(2)可以對鏈路進行優化。(3)分布式排程。

1、google

在業界的號召力確實強大,之前也有許多成功的開源專案,以及google強大的人工智慧研發水平,都讓大家對google的深度學習框架充滿信心

2、tensorflow確實在很多方面擁有優異的表現,比如

設計神經網路結構的**的簡潔度,分布式深度學習演算法的執行效率,還有部署的便利性。

3、基本上每星期tensorflow都會有1萬行以上的**更新,多則數萬行。

產品本身優異的質量、快速的迭代更新、活躍的社群和積極的反饋

,形成了良性迴圈,可以想見tensorflow未來將繼續在各種深度學習框架中獨占鰲頭。

tensorflow是相對高階的機器學習庫,使用者可以方便地用它設計神經網路結構,而

不必為了追求高效率的實現親自寫c++或cuda**。

支援自動求導,使用者不需要再通過反向傳播求解梯度

。其核心**和caffe一樣是用c++編寫的,使用c++簡化了線上部署的複雜度。

不過使用python時有乙個影響效率的問題是,每乙個mini-batch要從python中feed到網路中,這個過程在mini-batch的資料量很小或者運算時間很短時,可能會帶來影響比較大的延遲。

tensorflow不只侷限於神經網路,其資料流式圖支援非常自由的演算法表達,當然也可以輕鬆實現深度學習以外的機器學習演算法。事實上,

只要可以將計算表示成計算圖的形式,就可以使用tensorflow

。使用者可以寫內層迴圈**控制計算圖分支的計算,tensorflow會自動將相關的分支轉為子圖並執行迭代運算。tensorflow也可以將計算圖中的各個節點分配到不同的裝置執行,充分利用硬體資源。定義新的節點只需要寫乙個python函式,如果沒有對應的底層運算核,那麼可能需要寫c++或者cuda**實現運算操作。

tensorflow的另外乙個重要特點是它

靈活的移植性

,可以將同乙份**幾乎不經過修改就輕鬆地部署到有任意數量cpu或gpu的pc、伺服器或者移動裝置上。

相比於theano,tensorflow還有乙個優勢就是它

極快的編譯速度

,在定義新網路結構時,theano通常需要長時間的編譯,因此嘗試新模型需要比較大的代價,而tensorflow完全沒有這個問題。

tensorflow還有功能強大的

視覺化元件tensorboard

,能視覺化網路結構和訓練過程,對於觀察複雜的網路結構和監控長時間、大規模的訓練很有幫助。

tensorflow針對生產環境高度優化,它

產品級的高質量**和設計

都可以保證在生產環境中穩定執行,同時一旦tensorflow廣泛地被工業界使用,將產生良性迴圈,成為深度學習領域的事實標準。

caffe全稱為convolutional architecture for fast feature embedding,是乙個被廣泛使用的開源深度學習框架(在

tensorflow出現之前

一直是深度學習領域github star最多的專案)

caffe的主要優勢包括如下幾點。

caffe的核心概念是layer,

每乙個神經網路的模組都是乙個layer

。layer接收輸入資料,同時經過內部計算產生輸出資料。設計網路結構時,

只需要把各個layer拼接在一起構成完整的網路(通過寫protobuf配置檔案定義)。需要為layer寫c++或cuda**。

每乙個layer需要定義兩種運算,一種是正向(forward)的運算,即從輸入資料計算輸出結果,也就是模型的**過程;另一種是反向(backward)的運算,從輸出端的gradient求解相對於輸入的gradient(梯度),即反向傳播演算法,這部分也就是模型的訓練過程。

實現新layer時,需要將正向和反向兩種計算過程的函式都實現,這部分計算需要使用者自己寫c++或者cuda(當需要執行在gpu時)**,對普通使用者來說還是非常難上手的。

正如它的名字convolutional architecture for fast feature embedding所描述的,

caffe最開始設計時的目標只針對於影象,沒有考慮文字、語音或者時間序列的資料

,因此caffe對卷積神經網路的支援非常好,但對時間序列rnn、lstm等支援得不是特別充分。同時,基於layer的模式也對rnn不是非常友好,定義rnn結構時比較麻煩。在模型結構非常複雜時,可能需要寫非常冗長的配置檔案才能設計好網路,而且閱讀時也比較費力。

caffe的一大優勢是

擁有大量的訓練好的經典模型

(alexnet、vgg、inception)乃至其他state-of-the-art(resnet等)的模型,收藏在它的model zoo(github.com/bvlc/ caffe/wiki/model-zoo)。

雖然caffe主要是面向學術圈和研究者的,但它的

程式執行非常穩定

,**質量比較高,所以也很適合對穩定性要求嚴格的生產環境,可以算是第乙個主流的工業級深度學習框架。

理論上,caffe的使用者可以完全不寫**,只是定義網路結構就可以完成模型訓練了。caffe完成訓練之後,使用者可以把模型檔案打包製作成簡單易用的介面,比如可以封裝成python或matlab的api。不過在.prototxt檔案內部設計網路節構可能會比較受限,沒有像tensorflow或者keras那樣在python中設計網路結構方便、自由。

caffe在gpu上訓練的效能很好,但是目前僅支援單機多gpu的訓練,沒有原生支援分布式的訓練。慶幸的是,現在有很多第三方的支援,比如雅虎開源的caffeonspark,可以借助spark的分布式框架實現caffe的大規模分布式訓練。

keras是乙個崇尚

極簡、高度模組化

的神經網路庫,使用python實現,並可以同時執行在tensorflow和theano上。它

旨在讓使用者進行最快速的原型實驗

,讓想法變為結果的這個過程最短。

keras比較適合在探索階段快速地嘗試各種網路結構,元件都是可插拔的模組,

只需要將乙個個元件(比如卷積層、啟用函式等)連線起來,但是設計新模組或者新的layer就不太方便了。

theano和

tensorflow的計算圖支援更通用的計算,而keras則專精於深度學習

。它提供了目前為止最方便的api,使用者只需要將高階的模組拼在一起,就可以設計神經網路,它大大

降低了程式設計開銷(code overhead)和閱讀別人**時的理解開銷

(cognitive overhead)。

它同時支援卷積網路和迴圈網路,

支援級聯的模型或任意的圖結構的模型

,從cpu上計算切換到gpu加速無須任何**的改動。底層使用theano或tensorflow,簡化了程式設計的複雜度,節約了嘗試新網路結構的時間。可以說

模型越複雜,使用keras的收益就越大

,尤其是在高度依賴權值共享、多模型組合、多工學習等模型上,keras表現得非常突出。

keras所有的模組都是簡潔、易懂、完全可配置、可隨意插拔的

,並且基本上沒有任何使用限制,神經網路、損失函式、優化器、初始化方法、啟用函式和正則化等

模組都是可以自由組合的

。keras也包括絕大部分state-of-the-art的trick,包括adam、rmsprop、batch normalization、prelu、elu、leakyrelu等。同時,新的模組也很容易新增,這讓

keras非常適合最前沿的研究。

keras中的模型也都是在python中定義的,不像caffe等需要額外的檔案來定義模型

,這樣就可以通過程式設計的方式除錯模型結構和各種超引數。在keras中,只需要幾行**就能實現乙個mlp(多層感知機),或者十幾行**實現乙個alexnet,這在其他深度學習框架中基本是不可能完成的任務。

keras最大的問題可能是目前無法直接使用多gpu,所以對大規模的資料處理速度沒有其他支援多gpu和分布式的框架快。

深度學習 1

基本概念 訓練集,測試集 特徵值 監督學習 非監督學習 半監督徐熙 分類 回歸 概念學習 從某個布林函式的輸入輸出訓練樣例中推斷出該布林函式 例項集合x x 樣例 x 每乙個例項 c x 目標概念 學習目標 f x y 訓練集 training set data 訓練樣例training examp...

深度學習1

幾天無聊,看darknet的原始碼 1.學習率 訓練的時候看到輸出資訊沒有learning rate,進 看看,發現 network.c 裡面的get current rate net 就是獲取學習率的,列印出來的rate就是lr啦 另外,訓練densenet的時候,先burning in 1000...

深度學習1

深度學習概念理解 1.訓練集 一組資料用來訓練模型 2.驗證集 一組資料,用來調整模型引數 交叉驗證 3.測試集 與訓練集保持相同分布的一組分布,用來測試模型的好壞 不參與模型的引數調整 4.batchsize 一次用來訓練的樣本數目。太小,不收斂 太大,訓練速度下降,記憶體也可能支援不住 5.ep...