吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深度學習的調參經驗

電子工程師 ? 來源:工程師曾玲 ? 2019-06-08 14:41 ? 次閱讀

對于深度學習本人也是半路出家. 現在的工作內容主要就是使用CNN做CV任務. 干調參這種活也有兩年時間了. 我的回答可能更多的還是側重工業應用, 技術上只限制在CNN這塊.

先說下我的觀點, 調參就是trial-and-error. 沒有其他捷徑可以走. 唯一的區別是有些人盲目的嘗試, 有些人思考后再嘗試.快速嘗試, 快速糾錯這是調參的關鍵.

◆ 首先說下可視化

我個人的理解, 對于可視化, 更多的還是幫助人類以自己熟悉的方式來觀察網絡. 因為, 你是不可能邊觀察網絡, 還邊調參的. 你只是訓練完成后(或者準確率到達一個階段后), 才能可視化. 在這之前, 網絡沒有學習到良好的參數, 你可視化了也沒意義, 網絡達到不錯的準確率了, 你看看其實也就聽個響. 同樣, 你的網絡訓練的一塌糊涂, 你可視化也沒什么意義, 唯一能夠看到的就是中間結果亂七八糟, 或者全黑全白, 這時候你直接看最后準確率就可以知道這網絡沒救了.

◆ 關于權重的可視化[Visualize Layer Weights](現在是否強求smooth其實意義不大, 這個后面說.)

同樣, 你看到一個不滿足平滑結果的圖像, 你知道, 這網絡訓練的不好, 但是為什么呢? 是數據不好? 沒有預處理? 網絡結構問題? Learning Rate太大或者太小? 或者就是差了一個LRN層(之前我就遇到, 加個LRN就能出smooth的weights, 當然這其實和預處理有關)?

Smooth是需要看一下的, 心里有個數. 但是具體調參怎么調是沒轍的. 第一, 你不可能告訴網絡, 這層你得學個邊界檢測的功能出來. 第二, 不同任務下會有不同的weights(雖然底層的特征有很大的通用性), 你覺得你憑什么來指導一個看圖片比你快得多的機器?

再說現在是否需要強求smooth. 現在的趨勢是鼓勵使用小filter, 3x3大小, 多加層次(這樣, 非線性更好點). 換句話說, 3x3的圖片, 總共才9個像素, 你怎么判斷smooth與否呢? 當然如果你使用大的filter, 一般5x5往上, 運氣不差的話, 你是可以看到smooth的結果的.

咱們再說另外一個極端, 一個網絡,運行的完美(滿足應用要求就算完美), 打開一看, 這weights不smooth啊. 你告訴我, 你打算怎么辦? 沒錯, 具有不平滑的權重的網絡同樣可以獲得很好的結果(這種情況我都習以為常了).

◆ 那么可視化網絡就不重要了?

非常重要, 但是不在訓練這塊, 而是幫助理解網絡的原理這塊. 理解網絡原理后, 你才能在設計結構的時候心里有感覺(只是有感覺而已), 網絡出了問題, 或者在某些情況下不滿意, 有更好的直覺去調整.(沒錯, 只是直覺, 雖然有些情況下的調整從網絡原理來看邏輯上應該可以工作, 但是人家就是不工作, 你能咬機器去么?)

◆ 那么怎樣訓練一個不錯的網絡呢?

這是一個很好的鏈接, 說明了如何從零開始不斷的trial-and-error(其實這里面沒遇到什么error):Using convolutional neural nets to detect facial keypoints tutorial

(鏈接網址:http://suo.im/533arJ)

對于調參我自己的經驗,有下面這些:

基本原則:快速試錯

一些大的注意事項:

★ 1. 剛開始,先上小規模數據,模型往大了放, 只要不爆顯存, 能用256個filter你就別用128個. 直接奔著過擬合去. 沒錯, 就是訓練過擬合網絡, 連測試集驗證集這些都可以不用.

為什么?

你要驗證自己的訓練腳本的流程對不對. 這一步小數據量, 生成速度快, 但是所有的腳本都是和未來大規模訓練一致的(除了少跑點循環)

如果小數據量下, 你這么粗暴的大網絡奔著過擬合去都沒效果. 那么, 你要開始反思自己了, 模型的輸入輸出是不是有問題? 要不要檢查自己的代碼(永遠不要懷疑工具庫, 除非你動過代碼)? 模型解決的問題定義是不是有問題? 你對應用場景的理解是不是有錯? 不要懷疑NN的能力, 不要懷疑NN的能力, 不要懷疑NN的能力. 就我們調參狗能遇到的問題, NN沒法擬合的, 這概率是有多小?

你可以不這么做, 但是等你數據準備了兩天, 結果發現有問題要重新生成的時候, 你這周時間就醬油了.

★ 2. Loss設計要合理.

一般來說分類就是Softmax, 回歸就是L2的loss. 但是要注意loss的錯誤范圍(主要是回歸), 你預測一個label是10000的值, 模型輸出0, 你算算這loss多大, 這還是單變量的情況下. 一般結果都是nan. 所以不僅僅輸入要做normalization, 輸出也要這么弄.

多任務情況下, 各loss想法限制在一個量級上, 或者最終限制在一個量級上, 初期可以著重一個任務的loss

★ 3. 觀察loss勝于觀察準確率

準確率雖然是評測指標, 但是訓練過程中還是要注意loss的. 你會發現有些情況下, 準確率是突變的, 原來一直是0, 可能保持上千迭代, 然后突然變1. 要是因為這個你提前中斷訓練了, 只有老天替你惋惜了. 而loss是不會有這么詭異的情況發生的, 畢竟優化目標是loss.

給NN一點時間, 要根據任務留給NN的學習一定空間. 不能說前面一段時間沒起色就不管了. 有些情況下就是前面一段時間看不出起色, 然后開始穩定學習.

★ 4. 確認分類網絡學習充分

分類網絡就是學習類別之間的界限. 你會發現, 網絡就是慢慢的從類別模糊到類別清晰的. 怎么發現? 看Softmax輸出的概率的分布. 如果是二分類, 你會發現, 剛開始的網絡預測都是在0.5上下, 很模糊. 隨著學習過程, 網絡預測會慢慢的移動到0,1這種極值附近. 所以, 如果你的網絡預測分布靠中間, 再學習學習.

★ 5. Learning Rate設置合理

太大: loss爆炸, 或者nan

太小: 半天loss沒反映(但是, LR需要降低的情況也是這樣, 這里可視化網絡中間結果, 不是weights, 有效果, 倆者可視化結果是不一樣的, 太小的話中間結果有點水波紋或者噪點的樣子, 因為filter學習太慢的原因, 試過就會知道很明顯)

需要進一步降低了: loss在當前LR下一路降了下來, 但是半天不再降了.

如果有個復雜點的任務, 剛開始, 是需要人肉盯著調LR的. 后面熟悉這個任務網絡學習的特性后, 可以扔一邊跑去了.

如果上面的Loss設計那塊你沒法合理, 初始情況下容易爆, 先上一個小LR保證不爆, 等loss降下來了, 再慢慢升LR, 之后當然還會慢慢再降LR, 雖然這很蛋疼.

LR在可以工作的最大值下往小收一收, 免得ReLU把神經元弄死了. 當然, 我是個心急的人, 總愛設個大點的.

★ 6. 對比訓練集和驗證集的loss

判斷過擬合, 訓練是否足夠, 是否需要early stop的依據, 這都是中規中矩的原則, 不多說了.

★ 7. 清楚receptive field的大小

CV的任務, context window是很重要的. 所以你對自己模型的receptive field的大小要心中有數. 這個對效果的影響還是很顯著的. 特別是用FCN, 大目標需要很大的receptive field. 不像有fully connection的網絡, 好歹有個fc兜底, 全局信息都有.

★ 簡短的注意事項:

1、預處理: -mean/std zero-center就夠了, PCA, 白化什么的都用不上. 我個人觀點, 反正CNN能學習encoder, PCA用不用其實關系不大, 大不了網絡里面自己學習出來一個.

2、shuffle, shuffle, shuffle.

3、網絡原理的理解最重要, CNN的conv這塊, 你得明白sobel算子的邊界檢測.

4、Dropout, Dropout, Dropout(不僅僅可以防止過擬合, 其實這相當于做人力成本最低的Ensemble, 當然, 訓練起來會比沒有Dropout的要慢一點, 同時網絡參數你最好相應加一點, 對, 這會再慢一點).

5、CNN更加適合訓練回答是否的問題, 如果任務比較復雜, 考慮先用分類任務訓練一個模型再finetune.

6、無腦用ReLU(CV領域).

7、無腦用3x3.

8、無腦用xavier.

9、LRN一類的, 其實可以不用. 不行可以再拿來試試看.

10、filter數量2^n.

11、多尺度的圖片輸入(或者網絡內部利用多尺度下的結果)有很好的提升效果.

12、第一層的filter, 數量不要太少. 否則根本學不出來(底層特征很重要).

13、sgd adam 這些選擇上, 看你個人選擇. 一般對網絡不是決定性的. 反正我無腦用sgd + momentum.

14、batch normalization我一直沒用, 雖然我知道這個很好, 我不用僅僅是因為我懶. 所以要鼓勵使用batch normalization.

15、不要完全相信論文里面的東西. 結構什么的覺得可能有效果, 可以拿去試試.

16、你有95%概率不會使用超過40層的模型.

17、shortcut的聯接是有作用的.

18、暴力調參最可取, 畢竟, 自己的生命最重要. 你調完這個模型說不定過兩天這模型就扔掉了.

19、機器, 機器, 機器.

20、Google的inception論文, 結構要好好看看.

21、一些傳統的方法, 要稍微了解了解. 我自己的程序就用過1x14的手寫filter, 寫過之后你看看inception里面的1x7, 7x1 就會會心一笑...

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 可視化
    +關注

    關注

    1

    文章

    1200

    瀏覽量

    21034
  • 深度學習
    +關注

    關注

    73

    文章

    5515

    瀏覽量

    121551
收藏 人收藏

    評論

    相關推薦

    自制飛控板能用地面站軟件進行刷固件或者調嗎?

    如果是自制飛控板的話,還能用地面站軟件(mission planner)進行刷固件或者調么?有哪位大神可以提供一些入門的學習資料,剛開始,有點懵,不知如何下手。
    發表于 06-27 04:35

    ADRC的使用方法和調大致的方向

    由于串級PID還沒搞定,就轉向了自抗擾控制,用STM32控制無刷電機做了一個ADRC速度閉環,沒靜差是真的,但感覺也沒想象中那么強,就寫篇博文記錄一下ADRC大概的使用方法和調大致的方向。
    發表于 09-07 06:33

    教你怎樣學會PID調

    不會PID調?這篇文章圖文結合帶你學會PID調!讓你成為PID調大神!!!
    發表于 01-06 07:47

    PID調的相關資料分享

    說明:本文章適用于STM32初學者,想完成一個好玩且有深度的項目但不知道從何下手的同學。PID調是平衡車的精髓所在,參數整定的好壞直接影響到平衡車的平衡效果。有的車平衡時來回晃而參數選的好的車就能
    發表于 01-14 09:14

    針對PID調進行詳細的講解

    ??大家好,我是小政。本篇文章我將針對PID調進行詳細的講解,讓每位小伙伴能夠對比例、積分、微分三個參數如何調節有更加清晰的理解。一、調步驟確立機械中值直立環(內環)——Kp極性、
    發表于 01-14 06:26

    WinGUI_2.3調軟件

    英文版軟件,很好的軟件,WinGUI_2.3調軟件
    發表于 12-08 14:28 ?3次下載

    NAZA_驅動調軟件及說明書

    NAZA 驅動調軟件,需要的可以看一看了
    發表于 02-15 15:10 ?0次下載

    CF飛控調說明

    CF飛控調說明
    發表于 10-09 14:56 ?15次下載

    關于如何從零開始構建深度學習項目的詳細教程

    第一部分:啟動一個深度學習項目 第二部分:創建一個深度學習數據集 第三部分:設計深度模型 第四部分:可視化
    的頭像 發表于 04-19 15:21 ?3956次閱讀

    深度學習和機器學習深度的不同之處 淺談深度學習的訓練和調

    近年來,深度學習作為機器學習中比較火的一種方法出現在我們面前,但是和非深度學習的機器學習相比(我
    發表于 05-02 10:30 ?4358次閱讀

    模型調:CANape與Simulink的強強聯手

    CANape推出新功能Simulink XCP Server,針對Simulink模型以及ECU內部數據的參數化和可視化,讓模型調變得簡單。
    的頭像 發表于 08-01 15:00 ?1474次閱讀
    模型<b class='flag-5'>調</b><b class='flag-5'>參</b>:CANape與Simulink的強強聯手

    什么是調 CCP協議的實現原理

    調就是優化或調整控制算法中的某些參數以獲得系統最佳效果的過程。我們通過校準工具(比如網絡接口卡can盒子和canape)訪問 ECU 中的校準變量并進行更改,注意我們要校準的那些參數都被分組到 ECU 內存的一個特殊部分,稱為校準內存。我們通過校準工具來訪問這塊內存。
    發表于 06-21 09:12 ?853次閱讀
    什么是<b class='flag-5'>調</b><b class='flag-5'>參</b> CCP協議的實現原理

    NNI:自動幫你做機器學習調的神器

    NNI 自動機器學習調,是微軟開源的又一個神器,它能幫助你找到最好的神經網絡架構或超參數,支持 各種訓練環境 。 它常用的 使用場景 如下: 想要在自己的代碼、模型中試驗 不同的機器學習
    的頭像 發表于 10-30 10:28 ?2448次閱讀
    NNI:自動幫你做機器<b class='flag-5'>學習</b><b class='flag-5'>調</b><b class='flag-5'>參</b>的神器

    機器學習8大調技巧

    今天給大家一篇關于機器學習調技巧的文章。超參數調優是機器學習例程中的基本步驟之一。該方法也稱為超參數優化,需要搜索超參數的最佳配置以實現最
    的頭像 發表于 03-23 08:26 ?702次閱讀
    機器<b class='flag-5'>學習</b>8大<b class='flag-5'>調</b><b class='flag-5'>參</b>技巧

    LSTM神經網絡的調技巧

    長短時記憶網絡(Long Short-Term Memory, LSTM)是一種特殊的循環神經網絡(RNN),它能夠學習長期依賴信息。在實際應用中,LSTM網絡的調是一個復雜且關鍵的過程,直接影響
    的頭像 發表于 11-13 10:01 ?811次閱讀
    百家乐官网有方式赢钱吗| 百家乐官网玩法既规则| 百家乐官网投注技巧球讯网| 新加坡百家乐官网的玩法技巧和规则| 百家乐技巧娱乐博彩| 威尼斯人娱乐城简介| 砀山县| 德晋百家乐官网的玩法技巧和规则| 百家乐真人斗地主| 皇冠真钱| 百家乐官网博娱乐网赌百家乐官网的玩法技巧和规则 | 游艇会百家乐官网的玩法技巧和规则 | 大家赢百家乐官网投注| 赌百家乐波音备用网| 大发888老l| 百家乐官网澳门色子| 百家乐技巧之微笑心法| 威尼斯人娱乐网注册| 澳门百家乐官网网址| 百家乐赢的秘籍在哪| 德州扑克几副牌| 皇冠百家乐官网在线游戏| 百家乐珠仔路| 皇家金堡娱乐| 真人百家乐官网作| 大发888娱乐场官方| 百家乐官网三跳| 在线玩百家乐的玩法技巧和规则 | 荷规则百家乐官网的玩法技巧和规则 | 星河百家乐官网的玩法技巧和规则 | 威尼斯人娱乐城图| 百家乐官网21点桌| 真人百家乐博弈| 网上玩百家乐官网犯法| 缅甸百家乐赌博有假吗| 泌阳县| 百家乐官网庄89| 威尼斯人娱乐场老品牌| 闲和庄百家乐官网娱乐网| 大发888代充| 木棉百家乐官网的玩法技巧和规则|