作者lucien0410 (lucein)
看板DataScience
標題Re: [問題] Validation set 到底在做什麼?
時間Tue Mar 27 15:31:55 2018
感謝pipidog前輩的回文
深入淺出的概念教育!
你的回文有大量的訊息
真的學了不少
抽象的訊息最難學 但你教的方式特別好
可是可是我的問題沒有回答到 (是我一開始沒問對問題)
我做的是機器翻譯 seq2seq + attention
(Bahdanau, Dzmitry, Kyunghyun Cho, and Yoshua Bengio (2014), “Neural ma-
chine translation by jointly learning to align and translate.” arXiv preprint
arXiv:1409.0473.
Cho, Kyunghyun, Bart Van Merri nboer, Dzmitry Bahdanau, and Yoshua Ben-
gio (2014a), “On the properties of neural machine translation: Encoder-
decoder approaches.” arXiv preprint arXiv:1409.1259.
Cho, Kyunghyun, Bart Van Merri nboer, Caglar Gulcehre, Dzmitry Bah-
danau, Fethi Bougares, Holger Schwenk, and Yoshua Bengio (2014b), “Learn-
ing phrase representations using rnn encoder-decoder for statistical machine
translation.” arXiv preprint arXiv:1406.1078.)
OpenNMT是把上述演算法實踐的library之一
OpenNMT建立模組的時候validation set就是必需的了
開始訓練前 必需先設定hyperparameter
ephoch size; learning rate ... 這些hyperparameter 都要預先設定
除此之外 **還要再給** val set
這樣才能開始訓練
所以這樣的 validation set 對 OpenNMT 不是用來挑選hyperparameter的
###############################
換個方式講
假設我有兩份已知資料(AB兩份資料)
A拿來訓練
B拿來測試
B的測試結果告訴我們成果到底怎樣 公平的驗證
B就是終極測試
但其實訓練A之前 可以調整很多hyperparameter
所以就先把A切成 a b
拿a 訓練 b 測試 找尋最佳的hyperparameter
找到後 再依這樣的設定訓練A (期待B的測試會最好)
但是OpenNMT要求在訓練小寫a時也必須提供val set
這就是我的問題了
※ 引述《pipidog (如果狗狗飛上天)》之銘言:
: 你有三個資料集,train, validation, test
: train沒啥好說的,餵給機器,讓機器學,生成潛在參數用的
: 練好之後,怎麼知道表現好不好?拿validation來測試。
: 如果不好,調整超參數後重新訓練一次,再驗證一次。反覆這個流程
: 直到在validation的表現滿意為止。但故事至此尚未結束,是的,validation
: 沒有被機器讀過,所以確實給出的表現可以看作模型對未知資料的表現,
: 但問題是我們不停在做的事情,就是找出一組超參數,使得模型對於
: validation的表現最好,換言之,這個模型是有bias的,它的一切都在
: 迎合validation,但如果你的validation取得不具代表性怎麼辦?這模型
: 的泛化能力就不能透過validation來證明。
: 所以你最終的模型必須要在test上測試才算數。
: 簡單說,train是拿來訓練潛在參數的,validation是拿來挑選超參數的,
: 這兩個資料集機器都去迎合過它們,換言之,都"髒掉了",所以我們才需要
: test set,它既與潛在參數無關,也與超參數無關,是理想上真正獨立超然的
: 模型判官。這樣說,你明白了嗎?
: 至於cross validation,那是另一個很長的故事,我想你應該,也必須花時間
: 了解,這是機器學習裡面,模型選擇的重要觀念。
: -----
: Sent from JPTT on my Asus P00C.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 68.230.60.98
※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1522135917.A.895.html
※ 編輯: lucien0410 (68.230.60.98), 03/27/2018 15:36:59
※ 編輯: lucien0410 (68.230.60.98), 03/27/2018 16:17:38
推 goldflower: 為啥要你丟validation set=不用來挑超參數啊 03/27 16:12
→ goldflower: 如果今天你用tensorflow等等 他fit的時候規定你一定 03/27 16:13
→ goldflower: 要放validation set 那就會產生跟你現在一樣的問題 03/27 16:13
→ goldflower: 不知道你有沒有發現你卡在哪裡了 重點在於validation 03/27 16:14
→ goldflower: set沒有混進去train R 03/27 16:14
→ goldflower: 簡單說就是openNMT很好心 他拜託你看一眼validation 03/27 16:15
→ goldflower: 的結果確定結果好不好這樣 03/27 16:15
推 tay2510: 不用懷疑 val 就是p大講的那樣 你的問題是你的認知有誤 03/27 23:44
推 tay2510: 你舉的例子 a就是training set, b就是val set 然後B是tes 03/27 23:49
→ tay2510: t set 03/27 23:49
推 tay2510: a,b 綁在一起餵給training 是很多deep learning framewor 03/28 00:00
→ tay2510: k都有的設計 建議你盡量不要從api去回推machine learning 03/28 00:00
→ tay2510: 的本質 有點本末倒置 03/28 00:00
推 EGsux: p大沒錯。。 03/28 00:02