在深度進修中,為了有效地練習深度神經網絡,有一些值得我們強烈推薦的做法。在本文中,我將先容一些最常用的要領,從高質量練習數據的重要性,到超參數的選擇,再到更快的做出 DNN 原型的通用能力。這些要領的大大都由學術界和家產界的研究驗證過,而且在諸如 Yann LeCun 等人寫的《Efficient BackProp》和 Yoshua Bengio 的《Practical Recommendations for Deep Architectures》中也給出了數學和嘗試證明。
你會留意到,我沒有在這篇文章中提到任何數學證明。在這里發起的所有要點,更多地應該被看作是 DNN 的最佳練習要領中得到的總結。為了更深入地相識,我強烈發起您最后看一遍上面提到的研究論文和后頭提到的參考文獻。
練習數據
很多呆板進修從業者習慣于在任何深度神經網絡(DNN)中利用原始(raw)練習數據。為什么不這樣做呢,任何 DNN(或許)仍會給出好的功效,對吧?可是,說出「給出正確的數據范例,一個十分簡樸的模子會比一個巨大的 DNN 更快地給出更好的功效」(固然,這大概會有破例)并不是很保守派的。因此,無論你是在做計較機視覺,照舊在做自然語言處理懲罰或統計建模等,你都應該實驗預處理懲罰您的原始數據。你可以采納以下幾個要領來得到更好的練習數據:
盡大概大的數據集(DNN 對數據的需求是相當大的:越多越好)
刪除所有具有損壞數據的練習樣本(隨筆本、高失真圖像、虛假輸出標簽、具有大量空值的特征等)
數據加強——建設新樣本(假如是圖像,可以從頭縮放、添加噪聲等)
選擇適當的激活函數
激活函數在任何神經網絡中都是重要構成部門之一。激活將各人很是期望的非線性結果引入到了模子中。多年來,sigmoid 激活函數一直是最好的選擇。可是 sigmoid 函數本質上有兩個缺陷:
1.sigmoid 尾部的飽和(會進一步導致梯度消失問題)
2.sigmoid 不是以 0 為中心的。
一個更好的選擇是 tanh 函數——在數學上,tanh 只是一個從頭縮放和移位的 sigmoid,tanh(x) = 2*sigmoid(x) - 1。固然 tanh 仍然大概蒙受梯度消失問題,但好動靜是 tanh 是以零為中心的。因此,利用 tanh 為激活函數可以更快地收斂。我利用中也發明利用 tanh 作為激活函數凡是比利用 sigmoid 函數好。
你可以按照詳細任務進一步摸索其它選擇,如已經表示出可以改進一些問題的 ReLU,SoftSign 等函數。
隱含單位和隱含層的數量
利用比最佳隱含單位數更多的數量凡是是安詳的。因為,任何正則化要領在必然水平上都可以處理懲罰多余的單位。而另一方面,利用比最佳隱含單位數更少的數量時,產生欠擬合的概率更高一些。
另外,當回收無監視進修預練習的暗示(pre-trained representations,在后頭部門中描寫)時,隱含單位數的最佳數量凡是要更大一些。因為,在各類暗示中(對付特定的監視任務),預練習暗示大概會包括大量的無關信息。通過增加隱含單位的數量,模子將具有足夠支持從預練習暗示中過濾出最符合的信息的機動性。
選擇最佳隱含層數是相對簡樸的。正如 Yoshua Bengio 在 Quora 上提到的:「你只需要繼承添加層,直到測試錯誤不再改進為止」。
權重初始化
始終利用小隨機數(random numbers)初始化權重,以沖破差異單位之間的對稱性。可是權重應該多小呢?推薦的上限是幾多?利用什么概率漫衍來生成隨機數?另外,當利用 sigmoid 激活函數時,假如權重被初始化為很是大的數,則 sigmoid 函數將會飽和(尾部區域),導致滅亡神經元(dead neurons)。假如權重很是小,則梯度也會很小。因此,最虧得中間范疇選擇權重,而且使它們環繞平均值勻稱漫衍。
幸運的是,今朝已經有許多關于初始權重的適當值的研究,這對付有效的收斂長短常重要的。為了初始化獲得勻稱漫衍的權重,uniform distribution 大概是最好的選擇之一。另外,如論文(Glorot and Bengio, 2010)所示,具有更多傳入毗連(fan_in)的單位應具有相對較小的權重。
由于所有這些深入的嘗試,此刻我們有一個丈量公式,可以直接用于權重初始化;譬喻從~ Uniform(-r, r) 范疇得到權重,對付 tanh 作為激活函數的時候,r=sqrt(6/(fan_in+fan_out));而對付 sigmoid 作為激活函數的時候,r=4*(sqrt(6/fan_in+fan_out)),個中 fan_in 是上一層的巨細,fan_out 是下一層的巨細。
練習速率
這大概是最重要的超參數之一,抉擇了整個進修進程。假如配置的進修速率太小,你的模子大概需要幾年才氣收斂;假如進修速率太大,在開始練習幾個樣本之后,你的損失值(loss)大概會迅速增加。一般來說,0.01 的進修速率是安詳的,但這不該被視為一個嚴格的法則;因為最佳進修速率應該按照詳細任務來調解。