訓練神經網絡一般調參步驟

2022-01-09 Imagination Tech
在訓練神經網絡的時候,需要調的參數很多,選一組最適合自己模型的參數。實際訓練的時候如果不按照一定的順序,會很亂。因此正確有序地調參很重要,需要調節的參數大概有如下幾個[1]:

給出自己的建議:

① 建議優先在對數尺度上進行超參數搜索:

比較典型的是學習率和正則化項,我們可以從諸如0.001 0.01 0.1 1 10,以10為階數進行嘗試。因為他們對訓練的影響是相乘的效果。不過有些參數,還是建議在原始尺度上進行搜索,例如dropout值: 0.3 0.5 0.7)。

② 選擇合適的Epoch訓練次數

如果隨著Epoch的次數增加,準確度在一定時間內(比如5到10次)變化很小,就可以停止Epoch。開始時可以把Epoch次數設置的大一些,觀察在哪個地方準確度變化很小,就把Epoch設置成幾。也可以用早停法,防止過擬合。

③ 調節Regularization parameter lambda

實驗lambda,從1.0,10,100…找到一個合適的。注意:lambda的大小是和樣本數成正比關係的,比如現在樣本數、lambda分別是1000、0.4,以後把樣本數擴大到10000時,對應的lambda也要擴大到4。

④ 調節mini-batch size

mini-batch選擇太小:沒有充分利用計算資源;太大:更新權重和偏向比較慢,mini-batch size和其他參數相對獨立,一旦找到一個合適的以後,就不需要再改了。一般就是16,32,64,128,256找一個就行。

詳細見深度機器學習中的batch的大小對學習效果有何影響?——https://www.zhihu.com/question/32673260

⑤ 如何選擇梯度下降算法

adam或者SGD,當然還有其他自適應的梯度下降算法都可以試試。

⑥ 如何選擇激勵函數

如何選擇激勵函數,沒有特別好的方法,只能靠實驗比較。常用的激勵函數有:sigmoid,tanh,relu。

⑦ 如何設置Weights和biases

最簡單的方法:讓W和b服從N(0, 1 / sqrt(n_in) ),n_in:輸入神經元的個數,設置合適的W和b可以加快學習的速率,在極個別的神經網絡中,W和b甚至可以影響最後訓練的準確度。

⑧ 選擇何種Regularization

L1和L2是對cost函數後面增加一項。L1和L2都是為了減少連接對cost影響的權重,但是L1和L2又存在一定的區別。L1減少的是一個常量,L2減少權重的一個固定比例,如果權重本身很大,L1減少的比L2少很多,反之,如果權重本身很小,L1減少的更多。L1傾向於集中在少部分重要的連接上。

注意:對於L1,當W=0時,cost關於W的偏導沒有意義,因為在W=0時不可導,此時就使用un-regulazied表達式,sgn(0)=0,本來regularization的目的就是減少權重,到權重=0時,就沒有必要再減少。

編程的時候發現這個在pytorch裡是用weight decay來實現的,選擇L2範式的係數就行了,但是一般用了dropout再用L2範式性能會下降,這點我沒弄清楚,可能我這裡說的不對,以後補充。

⑨ 是否使用dropout

pytorch裡的dropout方法就是對Tensor進行隨機mask,這樣做可以避免過擬合,一般就是0.2,0.3,0.5,用了效果都挺好的,而且不一定拘泥於神經元,你也可以試試對訓練過程中各種Tensor是用dropout。

⑩ 訓練集多大比較合適

訓練集越大越好,增加訓練集在一定程度上也可以減少過擬合,數據集對模型很重要,有文章說,參數是對應於數據集的,多大的數據集需要數量差不多的參數就夠了。

⑪ Loss函數選擇

一般用交叉熵就能解決,但是具體問題具體對待,每個人都可以定義自己的損失函數。

⑫ 神經元的個數

這個在實驗中其實起到挺大作用的,句子匹配中,一般第一個隱層要和輸入層差不多,最後用於分類的MLP神經元2倍左右,經驗值。具體任務具體對待。

⑬ 自己模型的超參數

這個最小二乘法唄。

以後有新的感悟再更新,參考文獻寫的並不是很好,自己先按照這個順序寫了一下,調參感覺是個玄學,就像神經網絡並不是很好解釋。

References:
[1] https://blog.csdn.net/qoopqpqp/article/details/75271203
[2] https://zhuanlan.zhihu.com/p/24720954

版權聲明:本文為CSDN博主「IndexFziQ」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/sinat_34611224/article/details/84072205

關於 Imagination微信號

權威發布有關Imagination公司GPU、人工智慧以及連接IP、無線IP最新資訊,提供有關物聯網、可穿戴、通信、汽車電子、醫療電子等應用信息,每日更新大量信息,讓你緊跟技術發展,歡迎關注!伸出小手按一下二維碼我們就是好朋友!

相關焦點

  • 調參到頭禿?你需要這份自動超參搜索技術攻略
    在人工智慧領域,算法工程師在訓練神經網絡模型的過程中,在完成網絡構建和訓練數據準備好後
  • Deep Learning(RNN、CNN)調參的經驗
    有哪些deep learning(rnn、cnn)調參的經驗,看看這些小夥伴的回答,說不準你從中會探索出適合自己的方法~~~作者:蕭瑟https://www.zhihu.com/question/41631631/answer/94816420訓練技巧對深度學習來說是非常重要的,作為一門實驗性質很強的科學,同樣的網絡結構使用不同的訓練方法訓練,結果可能會有很大的差異
  • deep learning(rnn、cnn)調參的經驗
    有哪些deep learning(rnn、cnn)調參的經驗,看看這些小夥伴的回答,說不準你從中會探索出適合自己的方法~~~作者:蕭瑟https://www.zhihu.com/question/41631631/answer/94816420訓練技巧對深度學習來說是非常重要的,作為一門實驗性質很強的科學,同樣的網絡結構使用不同的訓練方法訓練,結果可能會有很大的差異
  • 訓練神經網絡的五大算法:技術原理、內存與速度分析
    神經網絡中的學習問題是以損失函數f的最小化界定的。這個函數一般由一個誤差項和一個正則項組成。誤差項評估神經網絡如何擬合數據集,正則項用於通過控制神經網絡的有效複雜性來防止過擬合。 損失函數取決於神經網絡中的自適應參數(偏差和突觸權值)。我們可以簡便地把它們組合成單個n維權值向量w。
  • 知識蒸餾:如何用一個神經網絡訓練另一個神經網絡
    如果你曾經用神經網絡來解決一個複雜的問題,你就會知道它們的尺寸可能非常巨大,包含數百萬個參數。例如著名的BERT模型約有1億1千萬參數。為了說明這一點,參見下圖中的NLP中最常見架構的參數數量。各種模型結構的參數數量在Kaggle競賽中,勝出的模型通常是由幾個模型組成的集合。
  • 百度全功能AI開發平臺BML自動超參搜索技術全面解析
    在人工智慧領域,算法工程師在訓練神經網絡模型的過程中,完成網絡構建和準備好訓練數據後,往往需要對模型進行各種參數優化,以獲得更好的模型效果
  • Python 實現 BP 神經網絡
    多層前向神經網絡由三部分組成:輸出層、隱藏層、輸出層,每層由單元組成;輸入層由訓練集的實例特徵向量傳入,經過連接結點的權重傳入下一層,前一層的輸出是下一層的輸入;隱藏層的個數是任意的,輸入層只有一層,輸出層也只有一層;除去輸入層之外,隱藏層和輸出層的層數和為n,則該神經網絡稱為n層神經網絡,如下圖為2層的神經網絡;一層中加權求和,根據非線性方程進行轉化輸出
  • 【乾貨】Batch Normalization: 如何更快地訓練深度神經網絡
    我們知道,深度神經網絡一般非常複雜,即使是在當前高性能GPU的加持下,要想快速訓練深度神經網絡依然不容易。Batch Normalization 也許是一個不錯的加速方法,本文介紹了它如何幫助解決梯度消失和梯度爆炸問題,並討論了ReLu激活以及其他激活函數對於抵消梯度消失問題的作用。
  • 自動超參搜索帶著免費算力資源拯救你!
    重磅乾貨,第一時間送達在人工智慧領域,算法工程師在訓練神經網絡模型的過程中,在完成網絡構建和訓練數據準備好後,往往需要對模型進行各種參數優化,以獲得更好的模型效果。在目前的腳本調參使用流程中,BML已經預設了模型超參數,但由於用戶數據集內容豐富多樣,預設的超參數很難在所有的數據集上得到很好的訓練效果。用戶可以自行調整超參數,但是手動調參十分耗費人力。
  • 神經網絡在Amesim中的理論介紹
    其具體功能如下:▶Neural Network Builder可以直接通過Simcenter Amesim中創建的物理模型得到仿真數據,進而訓練得到該物理模型所對應的神經網絡,從而用神經網絡來替換物理模型,模擬真實世界物理現象。以此大大提高複雜模型的計算速度,是實現模型簡化與實時化的一種有效途徑。
  • 神經網絡訓練中回調函數的實用教程
    作者 | Andre Ye 編譯 | VK 來源 | Towards Data Science❝回調函數是神經網絡訓練的重要組成部分❞回調操作可以在訓練的各個階段執行回調可以利用許多創造性的方法來改進訓練和性能,節省計算資源,並提供有關神經網絡內部發生的事情的結論。本文將詳細介紹重要回調的基本原理和代碼,以及創建自定義回調的過程。ReduceLROnPlateau是Keras中默認包含的回調。
  • 防止神經網絡模型過擬合的6種方法及keras代碼實現
    這些常見的模型比如卷積神經網絡、循環神經網絡、自編碼器等等。這種在訓練集上表現的好,在測試集上效果差,模型泛化能力弱,則是典型的過擬合問題。下面將結合實際介紹幾種解決過擬合的方法。例如:RNN-->(IndRNN)、LSTM-->GRU;CNN-->fastCNN-->Unet等;3.Dropout3.1 Dropout原理Dropout正則化是最簡單的神經網絡正則化方法。它不改變網絡本身,而是隨機地刪除網絡中的一般隱藏的神經元,並且讓輸入層和輸出層的神經元保持不變。
  • 基於Caret和RandomForest包進行隨機森林分析的一般步驟 (1)
    Caret構建機器學習流程的一般步驟Caret依賴trainControl函數設置交叉驗證參數,train函數具體訓練和評估模型。
  • 用粒子群優化算法訓練神經網絡
    PSO-for-Neural-Nets大家知道,使用反向傳播對神經網絡進行訓練是非常有效的。但如果網絡參數的初始值設得不好時,各位可能也有過訓練十分緩慢的經歷。本篇是一項實驗工作,目的是在訓練神經網絡時不使用反向傳播以及梯度下降算法,而是先使用粒子群優化算法(Particle Swarm Optimization,PSO)對網絡參數進行初始化,之後可以再次使用反向傳播對網絡進行正式訓練。
  • 一文看懂神經網絡初始化!
    來源:deeplearning.ai編輯:大明本文轉載自:新智元(AI_era)【導讀】神經網絡的初始化是訓練流程的重要基礎環節
  • 用 Keras 編寫你的第一個人工神經網絡
    教程將會涵蓋以下步驟:加載數據定義模型編譯模型訓練模型評估模型結合所有步驟在一起這個教程的前置條件:創建一個新的文件,命名為 keras_first_network.py ,然後將教程的代碼一步步複製進去。
  • 在 Ubuntu 16.04 中安裝支持 CPU 和 GPU 的 Google TensorFlow 神經網絡軟體
    TensorFlow 是一個非常強大的工具,專注於一種稱為深層神經網絡deep neural network(DNN)的神經網絡。深層神經網絡被用來執行複雜的機器學習任務,例如圖像識別、手寫識別、自然語言處理、聊天機器人等等。這些神經網絡被訓練學習其所要執行的任務。由於訓練所需的計算是非常巨大的,在大多數情況下需要 GPU 支持,這時 TensorFlow 就派上用場了。
  • 手動調參或將成為歷史!?
    而算法工程師搭完模型後,需要做的只有一件事——調參 :)涵蓋了RNNs、CNNs、mask auto regressive flows、全連接網絡、語言模型、VAE、simple 2D test function、quadratic bowls等...優化器訓練的目標函數我們都知道,通常一個深度學習模型的訓練就需要極大的算力支撐。
  • 遞歸神經網絡不可思議的有效性(上)
    遞歸神經網絡序列。你可能會問:是什麼讓遞歸神經網絡如此特殊?Vanilla神經網絡(卷積網絡也一樣)最大的局限之處就是它們API的局限性:它們將固定大小的向量作為輸入(比如一張圖片),然後輸出一個固定大小的向量(比如不同分類的概率)。還不止這些:這些模型按照固定的計算步驟來(比如模型中層的數量)實現這樣的輸入輸出。
  • ResNet:殘差神經網絡
    深度卷積網絡的瓶頸理論上,增加網絡層數後,網絡可以進行更加複雜的特徵模式的提取,所以當模型更深時可以取得更好的結果。但VGG、GoogLeNet等網絡單純增加層數遇到了一些瓶頸:簡單增加卷積層,訓練誤差不但沒有降低,反而越來越高。