閱讀852 返回首頁    go 支付寶


一份不可多得的深度學習技巧指南

https://yq.aliyun.com/cloud

常言道,師傅領進門,修行靠個人,相信很多人或多或少是在別人的建議或帶領下步入深度學習這個大坑,然後師傅說深度學習是個玄學,後麵就靠個人修行,瞬間就懵了對不對?可能後麵經過自己的磨盤滾打,不斷實驗積累相關經驗,會有一些自己的學習心得。本文可謂是深度學習中的一份秘籍,幫助你少走一些彎路。在本文中,列舉了一些常用的機器學習的訓練技巧,目的是對這些技巧進行簡單的介紹並說明它們的工作原理。另外一些建議是斯坦福的CS231n課程及之前總結的網絡結構

  • 數據預處理
  • 初始化
  • 訓練
  • 正則化
  • 網絡結構
  • 自然語言處理
  • 增強學習
  • 網絡壓縮

What:輸入神經網絡數據的好壞直接關係著網絡訓練結果,一般需要對數據進行預處理,常用的數據預處理方式有:

  • 去均值:每個原始數據減去全部數據的均值,即把輸入數據各個維度的數據都中心化到0
  • 歸一化:一種方式是使用去均值後的數據除以標準差,另外一種方式是全部數據都除以數據絕對值的最大值;
  • PCA/白化:這是另外一種形式的數據預處理方式,一種方式是降維處理,另外一種是進行方差處理;

Why:通過對數據進行預處理能夠使得它們對模型的影響具有同樣的尺度或其他的一些目的。

RefCS231n Convolutional Neural Networks for Visual Recognition.

What:權重若初始化合理能夠提升性能並加快訓練速度,偏置一般設置為0,對於權重而言,建議統一到一定區間內:

  • 對於線性層[1]:區間為[-v,v],v = 1/sqrt(輸入尺寸),sqrt表示開根號;
  • 對於卷積層[2]:區間為[-v,v],v = 1/sqrt(卷積核的寬度x卷積核的高度x輸入深度);
  • 批量標準化[3]在某些方麵的應用降低了調整權值初始化的需要,一些研究結果頁提出了相應的替代公式。

Why:使用默認的初始化,每個神經元會隨著輸入數量的增多而存在一個方差,通過求根號縮放每個權重能確保神經元有近似的輸出分布。

Ref

What:對於長短期記憶網絡(LSTM),遺忘偏置一般設置為1,可以加快訓練過程。

Why:直覺是訓練開始時,想要信息在細胞之間傳播,故不希望細胞忘記它的狀態。

RefAn Empirical Exploration of Recurrent Network Architectures, Rafal Jozefowicz et al.


What:對於t-分布領域嵌入算法(t-SNE),原作者建議對於大小為5000~10000之間的數據集,將困惑度設置為5和50之間[1],對於更大的數據集,相應的困惑度也會增。

Why:困惑度決定了每個點的高斯分布的方差大小,更小的困惑度將獲得更多的集群,大的困惑度與之相反,太大的困惑度沒有任何意義;另外需要考慮的是畫出的聚類不能保留原有的規模,聚類之間的距離不一定代表原始的空間幾何,不同的困惑度能在數據結構上提供互補的信息,每次運行都會產生不同的結果[2]

Ref

What:除了使用真值硬化目標外,同樣可以使用軟化目標(softmax輸出)訓練網絡。

RefDistilling the Knowledge in a Neural Network / Dark knowledge, G. Hinton et al.

What:學習率可能是需要調參中最重要的一個參數,一種策略是選擇一些參數均有隨機化學習率,並觀察幾次迭代後的測試誤差。

Ref:Some advice for tuning the hyperparameters. Ref: Goodfellow et al 2016 Book

What:在RNN中使用Dropout,它僅僅應用於非循環連接[1],但是一些最近的文章提出了一些技巧使得Dropout能應用於循環連接[2]

Ref

What:批量標準化(Batch Normalization, BN),增添了一個新的層,作者給出一些額外的技巧加速BN層的工作:

  • 增大學習率;
  • 移除/減少dropout:在不增加過擬合發生的條件下加快訓練;
  • 移除/減少L2範數權值歸一化;
  • 加快學習率衰減速度:使得網絡訓練更快;
  • 移除局部響應歸一化;
  • 將訓練樣本打亂地更徹底:防止相同的樣本總出現在小批量中(驗證集上提高了1%);
  • 減少光度失真;

Why一些好的解釋在此

Ref

What:使用跳躍式連接,直接將中間層連接到輸入/輸出層。

Why:作者的觀點是通過減少神經網絡的底端與頂端之間的處理步驟使得訓練深層網絡更加簡單,並減輕梯度消失問題。

When:在一些CNN結構中或RNN中一些重要的層。

RefGenerating Sequences With Recurrent Neural Networks, Alex Grave et al.

fc518429cfb9edeff85f23342ace082dbbad7747

What:為LSTM增加窺視孔連接(連接之前輸出到門的輸入),根據作者的觀點,這個操作對長時間依賴關係有用。

RefLearning Precise Timing with LSTM Recurrent Networks, Felix A. Gers et al.

What:大多數的深度學習框架提供了一個結合SoftMax和Log的函數或者是在損失函數中計算SoftMax(在Tensorflow中是softmax_cross_entropy_with_logits,在Torch中是nn.LogSoftMax),這些應該被更好地使用。

Why:Log(SoftMax)在數值上不穩定是小概率,從而導致溢出等不良結果。另外一種流行的方法是在Log中加入一些小數避免不穩定。

What:對於RNN和seq2seq模型的一些技巧:

  • 嵌入尺寸:1024620。更小的維度比如256也能導致很好的表現,但是更高的維度不一定導致更好的表現;
  • 對於譯碼器而言:LSTM>GRU>Vanilla-RNN
  • 2-4層似乎普遍足夠,但帶有殘差的更深網絡看起來很難收斂,更多去挖掘更多的技巧;
  • Resd(密集的殘差連接)>Res(近連接先前層)>無殘差連接;
  • 對於編碼器而言:雙向>單向(反向輸入)>單向;
  • 注意力(加法)>注意力(乘法)>無注意力;
  • 使用光束會導致更好的結果;

RefMassive Exploration of Neural Machine Translation Architectures, Denny Britz, Anna Goldie et al.

What:對於seq2seq而言,翻轉輸入序列的順序,保持目標序列的完整。

Why:根據作者的觀點,這種簡單的數據變換極大提升了LSTM的性能。

RefSequence to Sequence Learning with Neural Networks, Ilya Sutskever et al.

What:對於seq2seq而言,為編碼器和譯碼器網絡使用不同的權值。

RefSequence to Sequence Learning with Neural Networks, Ilya Sutskever et al.


What:當訓練時,強製更正譯碼器的輸入;在測試時,使用先前的步驟,這使得訓練在開始時非常高效,Samy等人提出了一種基於模型轉變的改進方法[1]

Ref1.Scheduled Sampling for Sequence Prediction with Recurrent Neural Networks, Samy Bengio et al.

What:以無監督的方式訓練一個網絡去預測文本的下一個字符(char-RNN),該網絡將學習一種能用來監督任務的表示(比如情感分析)。

RefLearning to Generate Reviews and Discovering Sentiment, Ilya Sutskever et al.

What異步:以不同的勘探政策同時訓練多個代理,提升了魯棒性

RefAsynchronous Methods for Deep Reinforcement Learning, V. Mnih.

What跳幀:每隔4幀計算一次動作,而不是每幀都計算,對於其它幀,重複這個動作

Why:在Atari遊戲中工作得很好,並且使用這個技巧以大約4倍的速度加快了訓練過程。

RefPlaying Atari with Deep Reinforcement Learning, V. Mnih. 

What曆史:不是僅僅將當前幀作為輸入,而是將最後的幀與輸入疊加,結合間隔為4的跳幀,這意味著我們有一個含t、t-4、t-8及t-12的幀棧

Why:這允許網絡有一些動量信息。

RefDeep Reinforcement Learning with Double Q-learning, V. Mnih.

What經驗回放:為了避免幀間的相關性,作為一個代理不是更新每一幀,最好是在過渡時期的曆史中采樣一些樣本,該思想類似於有監督學習中訓練前打亂數據集。

RefPrioritized Experience Replay, Tom Schaul et al.

WhatParallel Advantage Actor Critic(PAAC):通過代理的經驗以及使用一個單一的同步更新模型使得簡化A3C算法成為可能。

RefEfficient Parallel Methods for Deep Reinforcement Learning, Alfredo V. Clemente et al.

What在推理中,為了減少層數,通過批量歸一化(BN)層能夠吸收其它的權值。這是因為在測試時批量歸一化進行地是一個簡單的線性縮放。

a67b1090a54a85d5d624502673057b78b6c23cf5

 Conchylicultor穀歌大腦參與者,專注於機器學習和軟件開發

Linkedin:https://www.linkedin.com/in/potetienne/

本文由北郵@愛可可-愛生活老師推薦,阿裏雲雲棲社區組織翻譯。

文章原標題《Deep Learning Tricks》,作者:Conchylicultor,譯者:海棠,審閱:

文章為簡譯,更為詳細的內容,請查看原文

最後更新:2017-10-02 08:40:01

  上一篇:go  projecteuler_problem1
  下一篇:go  關於數據科學的那些事