Re: [問題] Validation set 到底在做什麼?

看板DataScience作者 (心平氣和)時間6年前 (2018/04/01 06:29), 編輯推噓6(600)
留言6則, 5人參與, 6年前最新討論串8/8 (看更多)
一點淺見提供思考: 其實 epoch number 也可以想成是另一個要選擇的「超參數」 而這個超參數對於模型複雜度的影響,可以看這個投影片的第二十一頁 https://www.csie.ntu.edu.tw/~htlin/mooc/doc/212_handout.pdf ※ 引述《lucien0410 (lucein)》之銘言: : ot大的建議讓我弄懂了neural net訓練時 : 為什麼都要附上一組validation set : (如果我又錯了 再請g大幫我validate一下!) : 是的 我們就假設 如果沒有validation set會發生什麼事 : 另外我們再來假設 我們有無窮無盡的時間或是運算資源 : 沒有validation set 我們可以訓練neural net嗎? : 答案是可以的 YES! : 訓練到底需要什麼: : (1) 訓練資料 : (2)預先設好的超參數 (e.g. layer size, layer type, mini batch size 等等; : 特別注意 我沒有設定epoch size; 或者我們把epoch size設為無限大(反正我們有無限 : 的時間和運算資源); : (1)(2) 弄好就可以開始epoch by epoch 的訓練了; : 每次搞定一個epoch 我們就會得到一個模組 : 我們讓它訓練到天荒地老; 產生無數個模組; : 用數學集合的方式來表示的話,我們就會得到下面的集合. : trained_models= : {<epoch_i, train_preplexity_i, train_accuracy_i, Same_HyperParameter> |for i : in N } : 這個時候問題就來了!!! : trained_models 是一個無限大的集合 我們想要從中挑一個最好成員 那該怎麼挑呢? : 這些成員的超參數都一樣 所以超參數不能用來作為挑選的依據 : 那有哪些特徵是可能有用的呢? : train_preplexity, train_accuracy 可能有用 但很可能不準 因為我們會有overfitting : 的問題; epoch number也不能用, 因為也不一定高的epoch越好, 一樣是overfitting的問 : 題. : 每個epoch的模組都一模一樣!!! : 這樣就像唐伯虎點秋香 每個都戴上面具 那個才是我們的秋香呢? : 隨便選一個 大家拼人品嗎? 挑到石榴姊怎麼辦? : 唐伯虎就大喊了 "別人笑我太瘋癲 我笑他人看不川 ..." : 看誰抖了一下 : 我們可以用類似的方式 : 預先準備好一個validation set,每個epoch訓練好,就要它預測validation set看看 : 現在加進了validation set, 我們的模組集合就會變成這樣 : {<epoch_i, train_preplexity_i, train_accuracy_i, validation_preplexity_i, : validation_accuracy_i, Same_HyperParameter> |for i in N } : 現在我們就可以從validation preplexity 和 accuracy 來判斷要挑那個好. : 注意這裡,我們依然*不是*挑超參數,因為這組模組集合的成員的超參數還是依然一模一樣 : 現在我的理解就變成跟著一起訓練的validation set的作用就是用來挑ephoch number了 : 還有 這裡的validation 跟 cross validation 沒有關聯; 因為我們沒有*cross* : 用的一直是同一份的validation dataset : 這個就僅僅算是*hold-out validation* : 以上是算是澄清事實吧 : 要是講錯了 再麻煩大家指點! : ###################################### : 以下我再來提問 兩個問題 : (a)用偷偷把validation set塞回去 這樣好嗎? 會有什麼問題? : 如果這個validation set就是拿來挑 那個ephoch好, : 那我們現在可以作弊一下 : 我們先使用validation set 找到最佳的ephoch number : 記住這個黃金數字 : 現在把validation set放到training set 兩個合在一起 : (這樣我們就有更多樣本了) : 再把這個新的較大的training set再重新一次 : 反正我們已經*預先*知道那個epoch最好了 : 用偷偷把validation set塞回去 這樣好嗎? 會有什麼問題? : 實作上 這是慣用手法嗎? : (b)用了validation set 就*一定*能挑到最好的了嗎? : 我認為覺得不是 這跟我們的validation set挑的好不好非常有關 : 要是人品不好 正好挑到不具代表性的樣本來做validation : 那我們的validation preplexity 和 accuracy 也就不可靠了 : (以後我要罵人都要罵 "祝你的validation set都挑到壞樣本!" : 推文就說 "希望你的validation set挑的特別好!") : 這個也呼應了pipidog大前文說的 validation set 怎麼挑是個大學問 : validation成績最好 應該也不是一定最好的模組吧 : 要避免挑到極端樣本的機會 還是得來弄一下n-fold cross-validation : 但是弄了n folds 之後訓練時間就增加了n倍 : 除了增加時間成本外 這樣的作法可能會有什麼問題呢? : 實作上 這是慣用手法嗎? : ※ 引述《outrunner (ot)》之銘言: : : 不如你來回答問題, 你怎麼知道模型要訓練到什麼時候(epoch size)? : : 這樣做當然很好, 但代價也很昂貴. : : 回到上面的問題, 你需要驗證多少次? 每個epoch驗證一次? : : 更別提很多時候是沒辦法這樣做的. : : (ex. B沒有答案. 有的話我會拿來做訓練) : : 他就是邊訓練邊測試啊, 不然你怎麼知道訓練得如何了? : : 其實就是把你想手動做的事情自動化啦. : : 如果你有看他的說明書: : : Validation files are required and used to evaluate : : the convergence of the training. : : It usually contains no more than 5000 sentences. : : 第一句就是前面講的. : : 第二句的意思是做這個很浪費時間. (別誤會, 是學問很大的意思) : : 然後"找尋最佳的hyperparameter"也不是很重要, : : 想太多不如先train下去, train久了就有fu了. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.171.48.158 ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1522535352.A.1BC.html

04/01 06:59, 6年前 , 1F
多謝老師指導! stop in the middle
04/01 06:59, 1F

04/01 07:01, 6年前 , 2F
有不靠validation 就能估計middle 在哪裡的可能性嗎
04/01 07:01, 2F

04/01 18:45, 6年前 , 3F
\田神/
04/01 18:45, 3F

04/01 20:14, 6年前 , 4F
推推!
04/01 20:14, 4F

04/02 08:58, 6年前 , 5F
拜田神
04/02 08:58, 5F

04/06 16:46, 6年前 , 6F
推田神!
04/06 16:46, 6F
文章代碼(AID): #1Qm0ku6y (DataScience)
討論串 (同標題文章)
文章代碼(AID): #1Qm0ku6y (DataScience)