「花書」 《深度學習》經驗法則剛剛發布了中文版!

2021-02-18 AI有道

點擊上方「AI有道」,選擇「置頂」公眾號

重磅乾貨,第一時間送達

原文出處:

https://jeffmacaluso.github.io/post/DeepLearningRulesOfThumb/

《深度學習》,又名「花書」。該書由三位大佬 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 撰寫,是深度學習領域奠基性的經典教材,被譽為深度學習「聖經」。

之前紅色石頭介紹過一份來自 Microsoft 計算機軟體工程師 Jeff Macaluso 總結的關於「花書」的 Deep Learning Rules of Thumb。在線閱讀地址為:

https://jeffmacaluso.github.io/post/DeepLearningRulesOfThumb/

然而,這份 Deep Learning Rules of Thumb 是英文版,閱讀起來不是很方便。最近,紅色石頭在網上發現了這份由 Cugtyt 整理的「花書」經驗法則的中文版,經過翻譯作者的允許,特此將這份經驗法則在公眾號分享出來,方便大家嘗鮮!

下面是「花書」經驗法則的翻譯版正文。

儘可能使用遷移學習。否則,對於已經是廣泛研究的問題,先從複製網絡結構開始。

一定要使用 early stopping(早停),兩種方法:

使用 dropout 或許是個好主意。

ReLU 是理想的激活函數。它也有缺陷,因此使用 leaky ReLU 或 noisy ReLU 或許有性能提升,但是會有更多的參數要調。

要得到差不多可以接收的性能,至少需要每個類 5000 個數據(>=10M可以達到人類的水平或更好)

使用 GPU 能做到的最大的 batch size。

帶動量和學習率衰減的隨機梯度下降是個不錯的開始。

學習率是最重要的超參數。如果時間有限,主要花時間來調它。

對於計算機視覺:

對於自然語言處理:

隨機搜索通常比網格搜索更快的收斂到好的超參數設置。

調試策略:

可視化模型:查看模型檢測的圖像樣本,這對確定性能指標是否合理有幫助。

可視化最差的錯誤情況:這可以發現預處理和打標籤中存在的問題。

當訓練誤差太高時先擬合一個小的數據集:這能檢查出是欠擬合問題還是軟體缺陷。

監視激活和梯度的直方圖:完成大概一個 epoch。這能告訴我們神經元是否飽和及其飽和頻率。梯度(值?)應該是參數的 1% 左右。

第一部分 應用數學和機器學習基

1. 介紹

每個類別至少需要大概 5000 個樣本才能得到可接受的性能。大概每類需要 10M 個樣本才能達到人類水平或更好。

4. 數值計算 

在深度學習中,我們通常會陷入局部最優而不是全局最優,這是由於複雜性和非凸優化的問題。

5. 機器學習基礎 

如果模型具有最優的容量,但是在訓練和測試誤差之間仍有較大差距,去收集更多的數據來。

通常使用 20% 的訓練集作為驗證集。

如果數據少於 100000 個樣本,使用k折交叉驗證而不是訓練/測試集劃分的方法。

使用均方誤差時,增加容量會降低偏差但是會增加方差。

貝葉斯方法在訓練數據有限的時候泛化性能更好,但是訓練樣本較多時它的計算開銷很大。

最常使用的損失函數是負對數似然。因此最小化損失函數也就是最大似然估計。

第二部分 深度網絡:現代實踐

6. 深度前饋網絡

ReLU 對於前饋神經網絡而言是一個完美的激活函數。

在基於梯度的優化問題上,由於梯度消失的原因,交叉熵相比 MSE 和 MAE 更好。

ReLU 的優點:減少了梯度消失的概率,稀疏性,減少了計算量。

大的梯度幫助學習更快,但是任意大會導致不穩定。

網絡結構應該通過實驗和監視驗證集誤差來確定。

更深的模型減少了用於表示函數的神經元數量,也降低了泛化誤差。

7. 深度學習的正則項

最好在每層中使用不同的正則係數,但是使用相同的權重衰減。

使用早停 early stopping。這是一個很好調的超參數,而且也減少了計算量。

模型平均(bagging, boosting 等)基本上總會提高預測性能,雖然提高了計算量。

dropout 在寬層網絡工作更好,因為它減少了從輸入到輸出的路徑。

通常輸入層 dropout 中的保留概率是 0.8,隱層的概率是 0.5。

使用 dropout 的模型通常要更大,迭代更長。

如果數據集足夠大,dropout 沒有太大幫助。另外,在很小(<5000)的訓練樣本上dropout的作用很有限。

批量標準化同樣也引入了噪聲,這提供了正則的作用,但也可能讓 dropout 沒有太大必要。

模型平均一般都工作得很好,因為不同的模型不太可能犯相同的錯誤。

dropout 通過創建子網絡形成了一個高效的 bagging 方法。

8. 訓練深度模型的優化

mini-batch 的大小(batch size):大的 batch size 會提供更大的梯度,但是通常內存是個限制條件。

讓你的 batch size 在內存允許範圍內儘可能大。

在 GPU 中,從 32 到 256 以 2 的指數級別增長,對於較大的模型可以從 16 開始。

小的 batch size 因為噪聲的原因可能有正則的作用,但是會導致整體運行時間增加。這些情況下需要更小的學習率來提升穩定性。

深度學習模型有多個局部最優,但這沒太大關係,因為它們都有相同的代價。最主要的問題是局部最優的損失比全局最優的損失大得多。

梯度裁剪(clipping)用於解決梯度爆炸的情況。這在 RNN 中是個常見的問題。

繪製出目標函數隨時間的變化曲線來選擇學習率。

最優學習率通常高於前 100 次迭代後產生最佳性能的學習率。監視前幾次迭代,選擇一個比表現最好的學習率更高的學習率,同時注意避免不穩定的情況。

使用高斯和均勻分布來初始看起來沒有太大影響。

沒有一個優化算法明顯由於其他,這主要取決於用戶對超參數調整的熟悉情況。

隨機梯度下降(SGD),帶動量的SGD,RMSProp,帶動量的RMSProp,AdaDelta,Adam都是流行的選擇。注意:RMSProp在訓練初期或許會有很高的偏差。

通常動量的值有0.5,0.9,0.99。這個超參數可以隨時間變化,從一個小值開始增加到大的值。

Adam通常是較為魯棒的選擇。但是學習率通常要根據默認值改動。

對轉化後的值(transformed value)而不是輸入做批量歸一化。在引入可學習的參數 β 下去掉偏置項。對於 CNN 在每個空間位置應用範圍歸一化(range normalization)。

太淺或太深的網絡更難訓練,但是他們有更好的泛化誤差。

相對於一個強大的優化算法,選擇容易優化的模型更重要。

9. 卷積網絡10. 序列模型:循環和遞歸網絡

雙向 RNN 在手寫識別,語音識別和生物信息方面非常成功。

相比較 CNN 而言,RNN 用於圖像通常更困難,但是可以讓相同特徵圖中的特徵進行遠程橫向交互。

無論何時 RNN 要表示長期依賴,長期交互的梯度要指數級別小於短期交互。

在回波狀態網絡中設置權重的技術可用於在完全可訓練的 RNN 中初始化權重。初始光譜半徑為 1.2,稀疏初始化性能良好。

實踐中最有效的序列模型是門控 RNN,包括 LSTM 和 GRU。

設計一個容易優化的模型通常比設計一個強大的算法容易些。

正則參數鼓勵「信息流」,並預防梯度消失,但是同樣需要梯度裁剪來預防梯度爆炸。但是大量的數據例如語言建模對於 LSTM 而言就不是那麼高效了。

11. 實踐方法

在不確定的時候讓模型拒絕決策也是很有幫助的,但是這之間也存在折中。收斂是機器學習算法可以響應的樣本部分,和準確率之間也存在折中。

對於基線模型而言,ReLU 及其變種是理想的激活函數。

帶動量和學習率衰減的 SGD 是基線優化算法中一個不錯的選擇。衰減方法包括:

線性衰減直到一個固定小的學習率。

指數衰減。

每次驗證誤差不變時減少 2 到 10 分之一。

另一個不錯的基線優化算法是 Adam。

如果優化出現了問題,立馬使用批量歸一化。

如果訓練集不足 10M,一開始就採用中等強度的正則項。

如果當前的問題已經被研究爛了,直接拷貝模型就是個不錯主意,或許可以拷貝訓練過的模型。

如果已知無監督學習對於你的應用很重要(例如 NLP 中的詞嵌入),那麼在基線中就把它包含進來。

決定什麼時候收集更多的數據:

如果無法獲得更多的數據,最後的辦法是嘗試提升學習算法。

使用對數比例的學習曲線來決定還需要多少數據。

如果訓練性能很差,增加模型的大小,調整學習算法。如果還是很差,那是數據質量問題,重新開始收集更乾淨的數據或更多的特徵。

如果訓練性能不錯但是測試性能很差,在可行的情況下收集更多的數據。或者,嘗試降低模型的大小或增加正則強度。如果這些沒有幫助,那你的確需要更多的數據。

學習率是最重要的超參數,因為它以一種複雜的方式控制著模型的有效容量。如果時間有限,就調它。調其他的超參數需要監視訓練和測試誤差來判斷模型是欠擬合還是過擬合。

只要訓練誤差很低,你總是可以通過收集更多數據來減低泛化誤差。

網格搜索:通常在少於四個超參數時使用。

隨即搜索:使用起來很簡單,相比於網格搜索更快收斂到好的超參數。

通常不建議基於超參數來調整模型,因為它很少超過人類並且經常失敗。

調試策略:

可視化模型的行為。例如,查看圖像樣本,和模型檢測情況。這可以看到量化的性能指標是否合理。

可視化最差的錯誤情況:這可以發現預處理和打標籤中存在的問題。

當訓練誤差太高時先擬合一個小的數據集:這能檢查出是欠擬合問題還是軟體缺陷。

監視激活和梯度的直方圖:完成大概一個 epoch。這能告訴我們神經元是否飽和及其飽和頻率。梯度值應該是參數的1%左右。稀疏的數據(如 NLP)有很多參數很少更新,一定要記得這一點。

12. 應用

在分布式系統中,使用異步 SGD。每一步的平均提升是很小的,但是步驟速率加快也導致了整體的加快。

級聯(cascade)分類器是目標檢測中一個高效的方法。一個分類器有高召回率,另一個有高精確率,好的,結果有了。

集成方法中一個減少推理時間的方法是訓練一個控制器來挑選哪個網絡應該來做推理。

標準化像素尺度是計算機視覺中唯一一個強制的預處理步驟。

對比度歸一化通常是一個安全的計算機視覺預處理步驟。

尺度參數或者可以設置為 1,或者讓每個像素在整體樣本上有接近1的標準梯度。

近似剪切的圖像數據集可以安全的設置 λ=0, ϵ=1e−8。

小的隨機剪切的圖像數據集需要更高的正則強度,例如 λ=10, ϵ=0。

全局對比度歸一化(GCN)是其中一個方法,但是它在低對比度的情況下會降低邊緣的檢測。

局部對比度歸一化通常可以用分離卷積計算特徵圖的局部均值/方差來實現,然後在不同的特徵圖上做元素級別減/除。相比於全局對比度歸一化更能凸顯邊緣。

在 NLP 的實踐中,分層 softmax 相比於基於採樣的方法測試結果更差。


第三部分 深度學習研究

13. 線性因子模型14. 自動編碼器15. 表示學習

在深度學習中,一個好的表示可以讓後續的學習任務更加容易。例如監督前饋網絡:每一層都為最後的分類層學習一個更好的表示。

貪心的層間無監督訓練對於分類測試誤差有幫助,但是其他任務上不行。

對於圖像分類沒啥作用,但是對於 NLP 很有幫助(例如詞嵌入),這是因為初始表示非常差。

在標籤樣本很少,或無標籤樣本很大的時候,正則器非常有用。

在要學習的函數極其複雜的時候它最有用。

根據監督階段的驗證集誤差來選擇預訓練階段的超參數。

無監督預訓練基本已經被拋棄了,除了 NLP 領域(例如詞嵌入)。

在有些特徵對於不同的任務設置有幫助的時候,遷移學習,多任務學習和域適應都可以通過表示學習來完成。

當一個很複雜的結構可以用更少的參數緊湊表示時,分布式表示相比於非分布式表示更具有統計優勢。一些傳統的非分布式算法能泛化是由於其平滑的假設,但是會受限於維度詛咒。

16. 深度學習的結構化概率模型

結構化概率模型提供了一個框架,用於對隨機間隔的直接交互進行建模,這使得模型可以使用更少的參數。正因為此,他們可以在更少的數據下可靠地估計,並且減少了存儲模型,執行推理和採樣的計算量。

很多深度學習的生成模型或沒有隱含變量,或這用一層隱含變量。他們在模型中使用深度計算圖來定義條件分布。這和大部分深度學習應用中有比可觀察變量更多的隱含變量形成強烈對比。他們是從非線性交互中學得的。

深度學習中的隱含變量是不受限的,但是很難通過可視化來解釋。

循環信念傳播(loopy belief propagation)基本上在深度學習中從未使用,因為大部分深度學習模型是使用吉布斯採樣或變分推斷算法設計的。

17. Monte Carlo方法

Monte Carlo Markov Chains(MCMC)計算量很大,這是由於在平衡分布「燃燒」需要的時間,以及為了保證樣本間不相關而讓每n個樣本有序。

當在深度學習中從MCMC採樣時,通常需要運行一定數量的並行馬爾科夫鏈,數量與一個minibatch的樣本數一樣,讓後從中採樣。通常使用的數字是100。

馬爾科夫鏈會到達平衡狀態,但我們不知道要多久,除非它已經到達了。我們可以測試它是否混合了啟發式方法,比如手動檢查樣本或測量連續樣本之間的相關性。

雖然 Metropolis-Hastings 算法在其他學科中經常與馬爾可夫鏈一起使用,但 Gibbs 抽樣是深度學習的 de-facto 方法。

19. 近似推斷20. 深度生成模型

玻爾茲曼機的變種早已超過了最初的流行度。玻爾茲曼機對於觀察變量就像一個線性預測器,但是對於未觀察到的變量更加強大。

從一系列受限玻爾茲曼機中初始化一個深度玻爾茲曼機時,稍微修改下參數是很有必要的。

今天很少使用深度信念網絡(DBN),因為其他算法已經超過它了,但是在歷史上有重要地位。由於 DBN 是生成模型,一個訓練過的 DBN 可以用於初始化一個 MLP 的權重來做分類。

【略去玻爾茲曼機的部分內容】

雖然變分自動編碼器(VAE)很簡單,但是它們通常能得到不錯的結果,也是最後的生成模型之一。來自 VAE 的圖像通常模糊,原因未知。

不收斂是 GAN 欠擬合(一個網絡抵達局部最優,另一個抵達局部最大)的一個問題,但是這個問題的長度還不清楚。

雖然 GAN 有穩定性的問題,但是通常在精心選擇的模型和超參數情況下效果很不錯。

GAN 的一個變種 LAPGAN,從低解析度開始不斷加入細節,它的結果經常能騙過人類。

為了保證 GAN 的生成器不會在任意點變成0概率,需要在最後一層給所有圖像加入高斯噪聲。

在 GAN 的判別器中一定要使用 dropout,不這樣做結果很差。

生成矩匹配網絡的視覺樣本令人失望,但可以通過將它們與自動編碼器結合來改進。

在生成圖像時,使用轉置卷積操作通常會產生更真實的圖像,相比於沒有參數共享的全連接層使用更少的參數。

即使在卷積生成網絡中上採樣的假設不真實,但是生成的樣本總體來說還是不錯的。

雖然有很多使用生成模型的方法來生成樣本,MCMC 採樣,ancestral sampling 或把二者結合是比較流行的做法。

當比較生成模型時,預處理的改變(即使很小,很微妙)是完全不能接收的,因為它會改變分布從而根本上改變了任務。

如果通過觀察樣本圖片來衡量生成模型,最好在不知道樣本源的情況下去做實驗。另外,由於一個差的模型也可能產生好的樣本,必須確保模型不是僅僅複製了訓練圖片。使用歐氏距離來進行檢查。

如果計算上可行的化,最好的衡量生成模型樣本的方法是評估模型分配給測試數據的對數似然。這個方法也有缺陷,例如一個固定的簡單圖片(如空白背景)有很高的似然。

生成模型有很多用處,因此根據用途來挑選評估指標。

以上就是關於「花書」經驗法則的中文翻譯版!之前紅色石頭頁收集過「花書」的相關資源,連結如下:

19 頁花書精髓筆記!你可能正需要這份知識清單

深度學習聖經「花書」核心筆記、代碼發布

【推薦閱讀】

乾貨 | 公眾號歷史文章精選(附資源)

我的深度學習入門路線

我的機器學習入門路線圖

👆歡迎加入

相關焦點

  • 深度學習聖經 花書 中文版pdf
    這本由三位深度學習領域專家共同撰寫的《深度學習》是深度學習領域的經典教材,被譽為深度學習聖經。全書分為3大部分:1、基本的數據工具和深度學習概念。2、系統地講解當前成熟的深度學習方法和技術。3、前瞻性地討論深度學習未來的發展方向和想法。
  • AI聖經《深度學習》中文版震撼上市
    近日,由深度學習領域三位前沿、權威的專家Ian Goodfellow、Yoshua Bengio和Aaron Courville合著的人工智慧領域的聖經、長期位居美國亞馬遜人工智慧類圖書榜首的《深度學習》中文版震撼上市。最近十年,深度學習成為了風靡全球的人工智慧新技術。
  • 《TensorFlow 2.0 深度學習算法實戰》中文版教材電子版 pdf
    今天大家分享一份 11 月剛剛出爐的《TensorFlow 2.0 深度學習算法實戰》中文版教材。
  • 資源 | 300頁Python深度學習pdf-中文版
    又一本中文版的書籍來了,之前的那本沒領的可以點擊下面這個連結:乾貨|520頁中文版《動手學深度學習》視頻+pdf+github獲取。這次免費給大家的pdf是Deep Learning with Python,中文就是Python深度學習。挺全面的,就300頁左右,說多不多,列印出來也就10+塊。
  • 資料| 《 神經網絡與深度學習 中文版 PDF 》
    資料 | 《 神經網絡與深度學習 中文版 PDF 》
  • 入門深度學習,讀對書很重要
    在過去的一年多時間裡,研究人員奮筆疾書,競相出版專著,以滿足讀者對深度學習知識的渴求。第一本關於深度學習的書已經上架,更多的將會在夏天或者明年年初陸續上架。我有幸提前拜讀了若干專著的初稿,這些書的最終出版讓人期待萬分。接下來給大家推薦一些深度學習書籍,這些書可以引導大家如何學習人工智慧,對深度學習的快速理解有很大幫助。
  • 吳恩達剛剛註冊了一個微信公眾號,發布新書與課程中文版
    4月5號,吳恩達老師在推特上宣布:自己正在著手完成一本關於機器學習 戰略思維的新書 。吳恩達希望通過自己多年的從業經驗幫你縮短這個過程。他希望在這本新書,總結自己多年從業經驗,幫AI團隊領導者解決這些戰略難題,讓更多項目更好地構建AI系統。
  • 火爆網絡的《神經網絡與深度學習》,有人把它翻譯成了中文版!
    ,就是《Neural Network and Deep Learning》,中文譯為《神經網絡與深度學習》。非常適合用來入門神經網絡和深度學習!:深度神經網絡為何很難訓練第六章:深度學習《Neural Network and Deep Learning》這本書的⽬的是幫助讀者掌握神經⽹絡的核⼼概念,包括現代技術的深度學習。
  • PyTorch版《動手學深度學習》開源了,最美DL書遇上最贊DL框架
    李沐等人的開源中文書《動手學深度學習》現在有 PyTorch 版實現了。不論是原書中的示例代碼,還是實戰項目,原來的 MXNet 都可以無縫轉化到 PyTorch 代碼。項目作者在保持原書內容基本不變的情況下,將 MXNet 代碼都轉換為了 PyTorch,想要學習 DL 和 PyTorch 的小夥伴們可以試試啊。
  • Python深度學習(Deep Learning with Python) 中文版+英文版+原始碼免費分享
    今天分享Deep Learning with Python的英文原文和中文版,至於原始碼在書中首頁都提供了Github 連結,可直接下載。2.資料介紹本書由Keras之父、現任Google人工智慧研究員的François Chollet執筆,詳盡展示了用Python、Keras、TensorFlow進行深度學習的探索實踐
  • 【資源】2020最新版《神經網絡與深度學習》中文版pdf下載
    僅做學術分享,如有侵權,聯繫刪除1 前言當前,機器學習十分火熱,人工智慧、AI、深度學習等早已是大家耳熟能詳的詞語。今天,StrongerTang 繼續給大家分享一下《神經網絡與深度學習》,分享給有需要的小夥伴,也希望有更多的朋友能在 StrongerTang 相遇。《神經網絡和深度學習》是一本免費的在線書,對讀者數學知識需求適度,兼顧理論和動手實踐。
  • 2019年度最佳書單:深度學習/機器學習/強化學習(附部分電子書下載)
    關於機器學習和深度學習的書,你都看全了嗎?別慌,這裡有一位機器學習創業者經過自己的挖掘和整理,為大家獻上的一份機器學習和深度學習的最佳書單,陪你度過2019剩下的3/4。深度學習大神Ian Goodfellow, Yoshua Bengio, Aaron Courville合著的經典著作,花書的大名也是家喻戶曉了,這本書被譽為深度學習聖經。
  • 周志華推薦 | 李沐《動手學深度學習》中文版上線!(免費贈書)
    新智元報導 編輯:金磊【新智元導讀】李沐大神《動手學深度學習》中文版發布了!與當前其它深度學習教科書相比,本教科書更加注重交互式的學習體驗。新智元值此之際,與人民郵電出版社合作開展免費贈書活動!深度學習在短短幾年之內便讓世界大吃一驚。
  • 《深度學習》聖經花書的數學推導、原理與Python代碼實現
    》花書被奉為AI聖經。MingchaoZhu同學基於數學推導和產生原理重新描述了書中的概念,並用Python (numpy 庫為主) 復現了書本內容,在Github上開放,歡迎大家查看學習。最後,深度學習全書還提供了一些研究方向,涵蓋的理論主題包括線性因子模型、自編碼器、表示學習、結構化概率模型、蒙特卡羅方法、配分函數、近似推斷以及深度生成模型,適用於相關專業的大學生或研究生使用。《深度學習》可以說是深度學習與人工智慧的入門寶典,許多算法愛好者、機器學習培訓班、網際網路企業的面試,很多都參考這本書。但本書晦澀,加上官方沒有提供代碼實現,因此某些地方較難理解。
  • 入門深度學習與機器學習的經驗和學習路徑
    作者:Caliber(清華大學 應用數學博士在讀)連結:https://zhuanlan.zhihu.com/p/150507220最近接觸深度學習與機器學習已經有一段時間了
  • 106本Python學習系列中文版電子書PDF百度網盤資源合集(持續收集……)
    106本Python學習系列中文版電子書PDF百度網盤資源合集(持續收集
  • 花書看花眼?教你如何正確入門深度學習
    這段時間,很多人都在自我充電,我也經常在後臺給讀者解答很多深度學習相關問題,發現大家都是剛入門且問的更多的都是一些非常基礎的問題。如果你也還迷失在我該怎麼學深度學習,或者想轉行AI,那麼可以看看下面這門課,花9.9學些理論和實踐我想還是值得的!
  • 基於TensorFlow2.0的中文深度學習開源書來了!GitHub趨勢日榜第一
    十三 發自 凹非寺 量子位 報導 | 公眾號 QbitAITensorFlow 2.0 發布已有一個半月之久,你會用了嗎?近日,一個叫做深度學習開源書的項目在火了。因為這是一本基於TensorFlow 2.0 正式版的中文深度學習開源書。還包含電子書和配套原始碼。話不多說,一起來看看這本爆款書籍吧!
  • 最熱門的深度學習框架TensorFlow入門必備書籍
    但進入機器學習和人工智慧領域並不是一件簡單的事情,目前市場上有許多大量的學習資源,許多開發者和想要進入的愛好者往往很難找到適合自己的發展路徑。其實,早在 2015 年底,谷歌就開源了內部使用的深度學習框架 TensorFlow 。眾多研究表明,Tensorflow 是研究深度學習的首選平臺。
  • 《Matlab Deep learning》中文版、中英對照版本及隨書代碼發布!!!
    本次發布的內容包括: 《Matlab Deep learning》中文版; 《Matlab Deep