0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度學(xué)習(xí)的調(diào)參經(jīng)驗(yàn)

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

對(duì)于深度學(xué)習(xí)本人也是半路出家. 現(xiàn)在的工作內(nèi)容主要就是使用CNN做CV任務(wù). 干調(diào)參這種活也有兩年時(shí)間了. 我的回答可能更多的還是側(cè)重工業(yè)應(yīng)用, 技術(shù)上只限制在CNN這塊.

先說下我的觀點(diǎn), 調(diào)參就是trial-and-error. 沒有其他捷徑可以走. 唯一的區(qū)別是有些人盲目的嘗試, 有些人思考后再嘗試.快速嘗試, 快速糾錯(cuò)這是調(diào)參的關(guān)鍵.

◆ 首先說下可視化

我個(gè)人的理解, 對(duì)于可視化, 更多的還是幫助人類以自己熟悉的方式來觀察網(wǎng)絡(luò). 因?yàn)? 你是不可能邊觀察網(wǎng)絡(luò), 還邊調(diào)參的. 你只是訓(xùn)練完成后(或者準(zhǔn)確率到達(dá)一個(gè)階段后), 才能可視化. 在這之前, 網(wǎng)絡(luò)沒有學(xué)習(xí)到良好的參數(shù), 你可視化了也沒意義, 網(wǎng)絡(luò)達(dá)到不錯(cuò)的準(zhǔn)確率了, 你看看其實(shí)也就聽個(gè)響. 同樣, 你的網(wǎng)絡(luò)訓(xùn)練的一塌糊涂, 你可視化也沒什么意義, 唯一能夠看到的就是中間結(jié)果亂七八糟, 或者全黑全白, 這時(shí)候你直接看最后準(zhǔn)確率就可以知道這網(wǎng)絡(luò)沒救了.

◆ 關(guān)于權(quán)重的可視化[Visualize Layer Weights](現(xiàn)在是否強(qiáng)求smooth其實(shí)意義不大, 這個(gè)后面說.)

同樣, 你看到一個(gè)不滿足平滑結(jié)果的圖像, 你知道, 這網(wǎng)絡(luò)訓(xùn)練的不好, 但是為什么呢? 是數(shù)據(jù)不好? 沒有預(yù)處理? 網(wǎng)絡(luò)結(jié)構(gòu)問題? Learning Rate太大或者太小? 或者就是差了一個(gè)LRN層(之前我就遇到, 加個(gè)LRN就能出smooth的weights, 當(dāng)然這其實(shí)和預(yù)處理有關(guān))?

Smooth是需要看一下的, 心里有個(gè)數(shù). 但是具體調(diào)參怎么調(diào)是沒轍的. 第一, 你不可能告訴網(wǎng)絡(luò), 這層你得學(xué)個(gè)邊界檢測(cè)的功能出來. 第二, 不同任務(wù)下會(huì)有不同的weights(雖然底層的特征有很大的通用性), 你覺得你憑什么來指導(dǎo)一個(gè)看圖片比你快得多的機(jī)器?

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

咱們?cè)僬f另外一個(gè)極端, 一個(gè)網(wǎng)絡(luò),運(yùn)行的完美(滿足應(yīng)用要求就算完美), 打開一看, 這weights不smooth啊. 你告訴我, 你打算怎么辦? 沒錯(cuò), 具有不平滑的權(quán)重的網(wǎng)絡(luò)同樣可以獲得很好的結(jié)果(這種情況我都習(xí)以為常了).

◆ 那么可視化網(wǎng)絡(luò)就不重要了?

非常重要, 但是不在訓(xùn)練這塊, 而是幫助理解網(wǎng)絡(luò)的原理這塊. 理解網(wǎng)絡(luò)原理后, 你才能在設(shè)計(jì)結(jié)構(gòu)的時(shí)候心里有感覺(只是有感覺而已), 網(wǎng)絡(luò)出了問題, 或者在某些情況下不滿意, 有更好的直覺去調(diào)整.(沒錯(cuò), 只是直覺, 雖然有些情況下的調(diào)整從網(wǎng)絡(luò)原理來看邏輯上應(yīng)該可以工作, 但是人家就是不工作, 你能咬機(jī)器去么?)

◆ 那么怎樣訓(xùn)練一個(gè)不錯(cuò)的網(wǎng)絡(luò)呢?

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

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

對(duì)于調(diào)參我自己的經(jīng)驗(yàn),有下面這些:

基本原則:快速試錯(cuò)

一些大的注意事項(xiàng):

★ 1. 剛開始,先上小規(guī)模數(shù)據(jù),模型往大了放, 只要不爆顯存, 能用256個(gè)filter你就別用128個(gè). 直接奔著過擬合去. 沒錯(cuò), 就是訓(xùn)練過擬合網(wǎng)絡(luò), 連測(cè)試集驗(yàn)證集這些都可以不用.

為什么?

你要驗(yàn)證自己的訓(xùn)練腳本的流程對(duì)不對(duì). 這一步小數(shù)據(jù)量, 生成速度快, 但是所有的腳本都是和未來大規(guī)模訓(xùn)練一致的(除了少跑點(diǎn)循環(huán))

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

你可以不這么做, 但是等你數(shù)據(jù)準(zhǔn)備了兩天, 結(jié)果發(fā)現(xiàn)有問題要重新生成的時(shí)候, 你這周時(shí)間就醬油了.

★ 2. Loss設(shè)計(jì)要合理.

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

多任務(wù)情況下, 各loss想法限制在一個(gè)量級(jí)上, 或者最終限制在一個(gè)量級(jí)上, 初期可以著重一個(gè)任務(wù)的loss

★ 3. 觀察loss勝于觀察準(zhǔn)確率

準(zhǔn)確率雖然是評(píng)測(cè)指標(biāo), 但是訓(xùn)練過程中還是要注意loss的. 你會(huì)發(fā)現(xiàn)有些情況下, 準(zhǔn)確率是突變的, 原來一直是0, 可能保持上千迭代, 然后突然變1. 要是因?yàn)檫@個(gè)你提前中斷訓(xùn)練了, 只有老天替你惋惜了. 而loss是不會(huì)有這么詭異的情況發(fā)生的, 畢竟優(yōu)化目標(biāo)是loss.

給NN一點(diǎn)時(shí)間, 要根據(jù)任務(wù)留給NN的學(xué)習(xí)一定空間. 不能說前面一段時(shí)間沒起色就不管了. 有些情況下就是前面一段時(shí)間看不出起色, 然后開始穩(wěn)定學(xué)習(xí).

★ 4. 確認(rèn)分類網(wǎng)絡(luò)學(xué)習(xí)充分

分類網(wǎng)絡(luò)就是學(xué)習(xí)類別之間的界限. 你會(huì)發(fā)現(xiàn), 網(wǎng)絡(luò)就是慢慢的從類別模糊到類別清晰的. 怎么發(fā)現(xiàn)? 看Softmax輸出的概率的分布. 如果是二分類, 你會(huì)發(fā)現(xiàn), 剛開始的網(wǎng)絡(luò)預(yù)測(cè)都是在0.5上下, 很模糊. 隨著學(xué)習(xí)過程, 網(wǎng)絡(luò)預(yù)測(cè)會(huì)慢慢的移動(dòng)到0,1這種極值附近. 所以, 如果你的網(wǎng)絡(luò)預(yù)測(cè)分布靠中間, 再學(xué)習(xí)學(xué)習(xí).

★ 5. Learning Rate設(shè)置合理

太大: loss爆炸, 或者nan

太小: 半天loss沒反映(但是, LR需要降低的情況也是這樣, 這里可視化網(wǎng)絡(luò)中間結(jié)果, 不是weights, 有效果, 倆者可視化結(jié)果是不一樣的, 太小的話中間結(jié)果有點(diǎn)水波紋或者噪點(diǎn)的樣子, 因?yàn)閒ilter學(xué)習(xí)太慢的原因, 試過就會(huì)知道很明顯)

需要進(jìn)一步降低了: loss在當(dāng)前LR下一路降了下來, 但是半天不再降了.

如果有個(gè)復(fù)雜點(diǎn)的任務(wù), 剛開始, 是需要人肉盯著調(diào)LR的. 后面熟悉這個(gè)任務(wù)網(wǎng)絡(luò)學(xué)習(xí)的特性后, 可以扔一邊跑去了.

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

LR在可以工作的最大值下往小收一收, 免得ReLU把神經(jīng)元弄死了. 當(dāng)然, 我是個(gè)心急的人, 總愛設(shè)個(gè)大點(diǎn)的.

★ 6. 對(duì)比訓(xùn)練集和驗(yàn)證集的loss

判斷過擬合, 訓(xùn)練是否足夠, 是否需要early stop的依據(jù), 這都是中規(guī)中矩的原則, 不多說了.

★ 7. 清楚receptive field的大小

CV的任務(wù), context window是很重要的. 所以你對(duì)自己模型的receptive field的大小要心中有數(shù). 這個(gè)對(duì)效果的影響還是很顯著的. 特別是用FCN, 大目標(biāo)需要很大的receptive field. 不像有fully connection的網(wǎng)絡(luò), 好歹有個(gè)fc兜底, 全局信息都有.

★ 簡(jiǎn)短的注意事項(xiàng):

1、預(yù)處理: -mean/std zero-center就夠了, PCA, 白化什么的都用不上. 我個(gè)人觀點(diǎn), 反正CNN能學(xué)習(xí)encoder, PCA用不用其實(shí)關(guān)系不大, 大不了網(wǎng)絡(luò)里面自己學(xué)習(xí)出來一個(gè).

2、shuffle, shuffle, shuffle.

3、網(wǎng)絡(luò)原理的理解最重要, CNN的conv這塊, 你得明白sobel算子的邊界檢測(cè).

4、Dropout, Dropout, Dropout(不僅僅可以防止過擬合, 其實(shí)這相當(dāng)于做人力成本最低的Ensemble, 當(dāng)然, 訓(xùn)練起來會(huì)比沒有Dropout的要慢一點(diǎn), 同時(shí)網(wǎng)絡(luò)參數(shù)你最好相應(yīng)加一點(diǎn), 對(duì), 這會(huì)再慢一點(diǎn)).

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

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

7、無腦用3x3.

8、無腦用xavier.

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

10、filter數(shù)量2^n.

11、多尺度的圖片輸入(或者網(wǎng)絡(luò)內(nèi)部利用多尺度下的結(jié)果)有很好的提升效果.

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

13、sgd adam 這些選擇上, 看你個(gè)人選擇. 一般對(duì)網(wǎng)絡(luò)不是決定性的. 反正我無腦用sgd + momentum.

14、batch normalization我一直沒用, 雖然我知道這個(gè)很好, 我不用僅僅是因?yàn)槲覒? 所以要鼓勵(lì)使用batch normalization.

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

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

17、shortcut的聯(lián)接是有作用的.

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

19、機(jī)器, 機(jī)器, 機(jī)器.

20、Google的inception論文, 結(jié)構(gòu)要好好看看.

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 可視化
    +關(guān)注

    關(guān)注

    1

    文章

    1154

    瀏覽量

    20813
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5439

    瀏覽量

    120794
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    自制飛控板能用地面站軟件進(jìn)行刷固件或者調(diào)嗎?

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

    ADRC的使用方法和調(diào)大致的方向

    由于串級(jí)PID還沒搞定,就轉(zhuǎn)向了自抗擾控制,用STM32控制無刷電機(jī)做了一個(gè)ADRC速度閉環(huán),沒靜差是真的,但感覺也沒想象中那么強(qiáng),就寫篇博文記錄一下ADRC大概的使用方法和調(diào)大致的方向。
    發(fā)表于 09-07 06:33

    教你怎樣學(xué)會(huì)PID調(diào)

    不會(huì)PID調(diào)?這篇文章圖文結(jié)合帶你學(xué)會(huì)PID調(diào)!讓你成為PID調(diào)大神?。?!
    發(fā)表于 01-06 07:47

    PID調(diào)的相關(guān)資料分享

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

    針對(duì)PID調(diào)進(jìn)行詳細(xì)的講解

    ??大家好,我是小政。本篇文章我將針對(duì)PID調(diào)進(jìn)行詳細(xì)的講解,讓每位小伙伴能夠?qū)Ρ壤?、積分、微分三個(gè)參數(shù)如何調(diào)節(jié)有更加清晰的理解。一、調(diào)步驟確立機(jī)械中值直立環(huán)(內(nèi)環(huán))——Kp極性、
    發(fā)表于 01-14 06:26

    WinGUI_2.3調(diào)軟件

    英文版軟件,很好的軟件,WinGUI_2.3調(diào)軟件
    發(fā)表于 12-08 14:28 ?3次下載

    NAZA_驅(qū)動(dòng)調(diào)軟件及說明書

    NAZA 驅(qū)動(dòng)調(diào)軟件,需要的可以看一看了
    發(fā)表于 02-15 15:10 ?0次下載

    CF飛控調(diào)說明

    CF飛控調(diào)說明
    發(fā)表于 10-09 14:56 ?15次下載

    關(guān)于如何從零開始構(gòu)建深度學(xué)習(xí)項(xiàng)目的詳細(xì)教程

    第一部分:?jiǎn)?dòng)一個(gè)深度學(xué)習(xí)項(xiàng)目 第二部分:創(chuàng)建一個(gè)深度學(xué)習(xí)數(shù)據(jù)集 第三部分:設(shè)計(jì)深度模型 第四部分:可視化
    的頭像 發(fā)表于 04-19 15:21 ?3849次閱讀

    深度學(xué)習(xí)和機(jī)器學(xué)習(xí)深度的不同之處 淺談深度學(xué)習(xí)的訓(xùn)練和調(diào)

    近年來,深度學(xué)習(xí)作為機(jī)器學(xué)習(xí)中比較火的一種方法出現(xiàn)在我們面前,但是和非深度學(xué)習(xí)的機(jī)器學(xué)習(xí)相比(我
    發(fā)表于 05-02 10:30 ?4295次閱讀

    【連載】深度學(xué)習(xí)筆記4:深度神經(jīng)網(wǎng)絡(luò)的正則化

    原理莫過于如下公式: 該公式可謂是機(jī)器學(xué)習(xí)中最核心最關(guān)鍵最能概述監(jiān)督學(xué)習(xí)的核心思想的公式了:所有的有監(jiān)督機(jī)器學(xué)習(xí),無非就是正則化參數(shù)的同時(shí)最小化經(jīng)驗(yàn)誤差函數(shù)。最小化
    的頭像 發(fā)表于 08-14 11:58 ?3293次閱讀

    模型調(diào):CANape與Simulink的強(qiáng)強(qiáng)聯(lián)手

    CANape推出新功能Simulink XCP Server,針對(duì)Simulink模型以及ECU內(nèi)部數(shù)據(jù)的參數(shù)化和可視化,讓模型調(diào)變得簡(jiǎn)單。
    的頭像 發(fā)表于 08-01 15:00 ?1196次閱讀
    模型<b class='flag-5'>調(diào)</b><b class='flag-5'>參</b>:CANape與Simulink的強(qiáng)強(qiáng)聯(lián)手

    什么是調(diào) CCP協(xié)議的實(shí)現(xiàn)原理

    調(diào)就是優(yōu)化或調(diào)整控制算法中的某些參數(shù)以獲得系統(tǒng)最佳效果的過程。我們通過校準(zhǔn)工具(比如網(wǎng)絡(luò)接口卡can盒子和canape)訪問 ECU 中的校準(zhǔn)變量并進(jìn)行更改,注意我們要校準(zhǔn)的那些參數(shù)都被分組到 ECU 內(nèi)存的一個(gè)特殊部分,稱為校準(zhǔn)內(nèi)存。我們通過校準(zhǔn)工具來訪問這塊內(nèi)存。
    發(fā)表于 06-21 09:12 ?755次閱讀
    什么是<b class='flag-5'>調(diào)</b><b class='flag-5'>參</b> CCP協(xié)議的實(shí)現(xiàn)原理

    NNI:自動(dòng)幫你做機(jī)器學(xué)習(xí)調(diào)的神器

    NNI 自動(dòng)機(jī)器學(xué)習(xí)調(diào),是微軟開源的又一個(gè)神器,它能幫助你找到最好的神經(jīng)網(wǎng)絡(luò)架構(gòu)或超參數(shù),支持 各種訓(xùn)練環(huán)境 。 它常用的 使用場(chǎng)景 如下: 想要在自己的代碼、模型中試驗(yàn) 不同的機(jī)器學(xué)習(xí)
    的頭像 發(fā)表于 10-30 10:28 ?2235次閱讀
    NNI:自動(dòng)幫你做機(jī)器<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>調(diào)</b><b class='flag-5'>參</b>的神器

    機(jī)器學(xué)習(xí)8大調(diào)技巧

    今天給大家一篇關(guān)于機(jī)器學(xué)習(xí)調(diào)技巧的文章。超參數(shù)調(diào)優(yōu)是機(jī)器學(xué)習(xí)例程中的基本步驟之一。該方法也稱為超參數(shù)優(yōu)化,需要搜索超參數(shù)的最佳配置以實(shí)現(xiàn)最
    的頭像 發(fā)表于 03-23 08:26 ?521次閱讀
    機(jī)器<b class='flag-5'>學(xué)習(xí)</b>8大<b class='flag-5'>調(diào)</b><b class='flag-5'>參</b>技巧