作者CharlieL (心平气和)
看板DataScience
标题Re: [问题] Validation set 到底在做什麽?
时间Sun Apr 1 06:29:10 2018
一点浅见提供思考:
其实 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://webptt.com/cn.aspx?n=bbs/DataScience/M.1522535352.A.1BC.html
1F:推 lucien0410: 多谢老师指导! stop in the middle 04/01 06:59
2F:推 lucien0410: 有不靠validation 就能估计middle 在哪里的可能性吗 04/01 07:01
3F:推 TOEFLiBT100: \田神/ 04/01 18:45
4F:推 warex14: 推推! 04/01 20:14
5F:推 EQQD: 拜田神 04/02 08:58
6F:推 kevin1ptt: 推田神! 04/06 16:46