作者:知乎 CVer
原文連結:請點選
本文僅作為學術分享,如果侵權,會刪文處理
Qustion 深度學習調參有哪些技巧?
深度學習的效果很大程度上取決於參數調節的好壞,那麽怎麽才能最快最好的調到合適的參數呢?求解
Answer 1 作者:Jarvix
只想說一句:初始化
一次慘痛的教訓是用normal初始化cnn的參數,最後acc只能到70%多,僅僅改成xavier,acc可以到98%。
還有一次給word embedding初始化,最開始使用了TensorFlow中預設的initializer(即glorot_uniform_initializer,也就是大家經常說的無腦使用xavier),訓練速度慢不說,結果也不好。改為uniform,訓練速度飆升,結果也飆升。
所以,初始化就跟黑科技一樣,用對了超參都不用調;沒用對,跑出來的結果就跟模型有bug一樣不忍直視。
Answer 2 作者:BBuf
大概調了快一年CNN(2019年1月到今天),看到這個話題挺感興趣的,以下是我的總結
做比賽
VGG16
提取出的特征向量維度是
[N,c1]
,
ResNet50
提取的特征向量維度是
[N,c2]
,
Xception
提取的特征向量維度是
[N, c3]
,那麽我們可以使用三個系數
a、b、c
將其組合為形狀為
[N, a*c1+b*c2+c*c3]
,其中
a、b、c
三個參數的取值代表我們使用哪個模型的特征多一些,如果是分類回歸比賽,我們在後面接特征處理網路就可以了。可以取不同的
a、b、c
得到不同的特征,然後對結果做
voting
,
soft-voting
等多種處理,一般結果不會太差啦。
batch_size
,最佳化器)訓練出不同模型,然後做ensemble。
因為我就做了一點點入門級比賽,上面介紹的方法取得了還不錯的結果,所以我就在這裏獻醜啦,方法確實挺無腦的,大家笑一笑就好啦。繼續想了下,我好像除了這些有接觸或者使用到,暫時沒有什麽其它的了,如果想起其他的了,之後補充下。
Answer 3 作者:Captain Jack
我和@楊軍類似, 也是半路出家. 現在的工作內容主要就是使用CNN做CV任務. 幹調參這種活也有兩年時間了. 我的回答可能更多的還是側重工業套用, 技術上只限制在CNN這塊.
先說下我的觀點, 調參就是trial-and-error. 沒有其他捷徑可以走. 唯一的區別是有些人盲目的嘗試, 有些人思考後再嘗試. 快速嘗試, 快速糾錯 這是調參的關鍵.
看了楊軍的回答. 對於這個回答, 下面的評論裏面@紀秋佳說的很對. 這個回答主要內容更多的是側重理解網路. 而非訓練網路.
我要再強調下, 楊軍的回答更多的涉及是理解網路而非訓練網路 . 是的, 沒錯. 你看完回答中的所有內容, 對不起, 你還是不知道怎麽實際訓練一個網路, 尤其是復雜任務下的網路(因為簡單任務根本不需要, 直接上來效果就會很好, 除非你要刷簡單任務的排行榜).
我個人的理解, 對於視覺化, 更多的還是幫助人類以自己熟悉的方式來觀察網路. 因為, 你是不可能邊觀察網路, 還邊調參的. 你只是訓練完成後(或者準確率到達一個階段後), 才能視覺化. 在這之前, 網路沒有學習到良好的參數, 你視覺化了也沒意義, 網路達到不錯的準確率了, 你看看其實也就聽個響. 同樣, 你的網路訓練的一塌糊塗, 你視覺化也沒什麽意義, 唯一能夠看到的就是中間結果亂七八糟, 或者全黑全白, 這時候你直接看最後準確率就可以知