深度學習引數怎麼調優,這12個trick告訴你
1:優化器。機器學習訓練的目的在於更新引數,優化目標函式,常見優化器有SGD,Adagrad,Adadelta,Adam,Adamax,Nadam。其中SGD和Adam優化器是最為常用的兩種優化器,SGD根據每個batch的資料計算一次區域性的估計,最小化代價函式。
學習速率決定了每次步進的大小,因此我們需要選擇一個合適的學習速率進行調優。學習速率太大會導致不收斂,速率太小收斂速度慢。因此SGD通常訓練時間更長,但是在好的初始化和學習率排程方案的情況下,結果更可靠。
Adam優化器結合了Adagrad善於處理稀疏梯度和RMSprop善於處理非平穩目標的優點,能夠自動調整學習速率,收斂速度更快,在複雜網路中表現更優。
2:學習速率。學習速率的設定第一次可以設定大一點的學習率加快收斂,後續慢慢調整;也可以採用動態變化學習速率的方式(比如,每一輪乘以一個衰減係數或者根據損失的變化動態調整學習速率)。
3:dropout。資料第一次跑模型的時候可以不加dropout,後期調優的時候dropout用於防止過擬合有比較明顯的效果,特別是資料量相對較小的時候。
4:變數初始化。常見的變數初始化有零值初始化、隨機初始化、均勻分佈初始值、正態分佈初始值和正交分佈初始值。一般採用正態分佈或均勻分佈的初始化值,有的論文說正交分佈的初始值能帶來更好的效果。實驗的時候可以才正態分佈和正交分佈初始值做一個嘗試。
5:訓練輪數。模型收斂即可停止迭代,一般可採用驗證集作為停止迭代的條件。如果連續幾輪模型損失都沒有相應減少,則停止迭代。
6:正則化。為了防止過擬合,可通過加入l1、l2正則化。從公式可以看出,加入l1正則化的目的是為了加強權值的稀疏性,讓更多值接近於零。而l2正則化則是為了減小每次權重的調整幅度,避免模型訓練過程中出現較大抖動。
7:預訓練。對需要訓練的語料進行預訓練可以加快訓練速度,並且對於模型最終的效果會有少量的提升,常用的預訓練工具有word2vec和glove。
8:啟用函式。常用的啟用函式為sigmoid、tanh、relu、leaky relu、elu。採用sigmoid啟用函式計算量較大,而且sigmoid飽和區變換緩慢,求導趨近於0,導致梯度消失。sigmoid函式的輸出值恆大於0,這會導致模型訓練的收斂速度變慢。
tanh它解決了zero-centered的輸出問題,然而,gradient vanishing的問題和冪運算的問題仍然存在。
relu從公式上可以看出,解決了gradient vanishing問題並且計算簡單更容易優化,但是某些神經元可能永遠不會被啟用,導致相應的引數永遠不能被更新(Dead ReLU Problem);leaky relu有relu的所有優點,外加不會有Dead ReLU問題,但是在實際操作當中,並沒有完全證明leaky relu總是好於relu。
elu也是為解決relu存在的問題而提出,elu有relu的基本所有優點,但計算量稍大,並且沒有完全證明elu總是好於relu。
9:特徵學習函式。常用的特徵學習函式有cnn、rnn、lstm、gru。cnn注重詞位置上的特徵,而具有時序關係的詞采用rnn、lstm、gru抽取特徵會更有效。gru是簡化版的lstm,具有更少的引數,訓練速度更快。但是對於足夠的訓練資料,為了追求更好的效能可以採用lstm模型。
10:特徵抽取。max-pooling、avg-pooling是深度學習中最常用的特徵抽取方式。max-pooling是抽取最大的資訊向量,然而當存在多個有用的資訊向量時,這樣的操作會丟失大量有用的資訊。
avg-pooling是對所有資訊向量求平均,當僅僅部分向量相關而大部分向量無關時,會導致有用資訊向量被噪聲淹沒。針對這樣的情況,在有多個有用向量的情形下儘量在最終的代表向量中保留這些有用的向量資訊,又想在只有一個顯著相關向量的情形下直接提取該向量做代表向量,避免其被噪聲淹沒。那麼解決方案只有:加權平均,即Attention。
11:每輪訓練資料亂序。每輪資料迭代保持不同的順序,避免模型每輪都對相同的資料進行計算。
12:batch_size選擇。對於小資料量的模型,可以全量訓練,這樣能更準確的朝著極值所在的方向更新。但是對於大資料,全量訓練將會導致記憶體溢位,因此需要選擇一個較小的batch_size。
如果這時選擇batch_size為1,則此時為線上學習,每次修正方向為各自樣本的梯度方向修正,難以達到收斂。batch_size增大,處理相同資料量的時間減少,但是達到相同精度的輪數增多。實際中可以逐步增大batch_size,隨著batch_size增大,模型達到收斂,並且訓練時間最為合適。
原文釋出時間為:2018-11-27
本文來自雲棲社群合作伙伴“機器學習演算法與Python學習”,瞭解相關資訊可以關注“機器學習演算法與Python學習”。
相關文章
- 大師告訴你,學習數學有什麼用
- 為什麼那麼多人要學Java?這三個原因告訴你Java
- 【深度學習篇】--神經網路中的調優一,超引數調優和Early_Stopping深度學習神經網路
- 機器學習中特徵選擇怎麼做?這篇文章告訴你機器學習特徵
- 深度學習 | 訓練網路trick——mixup深度學習
- 用半勵志的方式告訴你,怎麼學習Python開發Python
- 為什麼要學習自動化測試?這篇文章告訴你答案
- 大資料學習—Kafka的核心調優引數大資料Kafka
- 調優引數
- 5個理由告訴你為什麼要學習使用Python裝飾器Python
- 圖解|12張圖告訴你MySQL的主鍵查詢為什麼這麼快圖解MySql
- 12.MyBatis學習--對映檔案_引數處理_單個引數&多個引數&命名引數MyBatis
- 一個故事告訴你,學習程式設計是否需要天賦?程式設計
- 深度學習方法(六):神經網路weight引數怎麼初始化深度學習神經網路
- MQTT 協議是個啥?這篇文章告訴你!MQQT協議
- 數倉調優實戰:GUC引數調優
- mysql 引數調優MySql
- 什麼是智慧數字經營系統?這三點告訴你答案
- 深度學習(模型引數直方圖)深度學習模型直方圖
- 告訴你MySQL主鍵查詢為什麼這麼快MySql
- 深度學習模型調優方法(Deep Learning學習記錄)深度學習模型
- 一個詞告訴你什麼是翻譯
- 碼教授告訴你大資料該怎麼用大資料
- 程式猿,讓我來告訴你怎麼追女生!!!
- 年計劃,技術兒告訴你怎麼做?
- 告訴你怎麼選SurfacePro3迎戰MacBookMac
- 深度學習並非萬能:你需要避免這三個坑深度學習
- python程式設計師告訴你,python怎麼學?13個特性帶你快速瞭解pythonPython程式設計師
- JVM 引數調優(qbit)JVM
- 1,Spark引數調優Spark
- JVM常用調優引數JVM
- Hadoop引數調優Hadoop
- asp.net Core開啟全新的時代,用視訊來告訴你,學習就是這麼SO easy。ASP.NET
- Xcode重構功能怎麼用我全告訴你XCode
- 印度IT 為何這麼發達?《全球“獵身”》告訴你答案
- 面試中圖論都考什麼?這篇文章告訴你!面試圖論
- Kafka_2.12-2.5.1叢集搭建與引數調優Kafka
- 如何看懂DOE分析報告?這篇文章告訴你