作者clothg34569 (提拉)
看板graduate
标题Re: [讨论] 跑实验数据要跑多次取平均吗
时间Mon Sep 19 21:08:12 2022
路过看到这篇 自己刚好有参与过几篇ML相关PAPER 来随手回一下
想到啥就打啥可能有点乱 另外有错也麻烦推文讲一下我再修改
以下只讲正规作法 先不讨论一些偷鸡做法
首先 实验的目的就是为了证明自己的架构/做法比别人更好
那实验重点就是要用严谨的方式来证明这一点
以下先把资料来源分成三种
1. 公开Dataset
2. 自己产生Dataset (假资料)
3. 自己收集的Dataset (真实资料)
然後看文中似乎没有很熟所以这边稍微讲一次
Training Dataset : 丢下去训练的Dataset
Validation Dataset : 训练"时"验证的Dataset
Testing Dataset : 训练"完"验证Model成效的Dataset
其中Train Val选择上都比较自由
而Testing则是要固定 才能在不同Model间有统一比较标准
再来"通常"来说 Train Val Testing 应该彼此独立
不该有重叠资料
但某些做法Train Val可以在特殊情况下重叠 例如要观察某个Data是否无法学习之类的
而Test则是完全不该重叠
Test有重叠基本上就等於作弊了
----
以下讨论不同种类资料来源时的分割法
1:
如果是1的话 那就比较简单了
Training Validation 使用公开Dataset中Trainning data
数量比例任意
而Testing则是跑完公开Dataset中"所有" Testing data
结果一般而言是选自己Train出来Model中最好的那个
2:
由於是自己产生的假资料
所以可以先假设资料本身算是均匀的
再来因为是自己产生 所以数量理论上可以看自己心情要加多少就多少
那这时候通常是Train Val任意
Test则是参考相关Paper中 他们最後Testset使用的Data数量 再自己稍微加多一点
例如别人通常用2000~4000张来Test的话 自己可以抓个4000张~5000张之类的
选好之後Testing应该要固定
*注意A
由於是自己产的Data 所以跟别人做比较时 会有Model使用不同Data Train所造成的差异
如果要证明自己架构比较好 那应该要将别人的Model使用自己的Data Train过之後
再跑同一组Test data做比较
3:
自己收集的真资料
这时候可以假设资料是真实性高 并且不均匀的
如果想要验证自己Model不会因为Data本身的Bias而造成结果差异过大
可以跑推文中所提到的K-Fold 来证明
选择Testing的部分 由於你资料是不均匀的
所以选择通常来说
是均匀选择资料本身的分布
例如以人的年龄来说 可能以5岁唯一级距
然後从0~80岁分成16个Group
每1个Group中随机选择n张 以保证最後Testdata的年龄分布是平均的
选择完Test data之後 一样Train Val自己任意分
Test data数量可以参考相关Paper中Real world Data的数量
以及自己收集难度去估计
例如别人Test Real World 300张 自己只收集了600张 那可能就拿其中200张当Test
另外 验证别人Model时同样需要注意前面的注意A
最後 通常来说
Train : Val 大约都是8:2
Test越多越好 实务上通常是参考别人的数量自己做差不多数字
---
Model选择上
标准做法是选择自己Validation最好的去跑Test
实际发Paper做法通常是把所有Model都拿去跑Test然後选最好的那组当结果...
至於时间上就自己看能负担到哪吧
更偷鸡的做法就不提了
多看多跑多比较 就知道....
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.231.64.172 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/graduate/M.1663592894.A.8D0.html
1F:推 qazStarStar: 推 09/19 21:37
2F:推 whatzup1124: 推 09/19 22:25
3F:推 zxp9505007: 写的很好 建议学生不要偷鸡 务实严谨 现在抓抄袭 难保 09/20 00:38
4F:→ zxp9505007: 以後不会抓无法重现 09/20 00:38
5F:推 devilkool: 推 09/20 02:07
6F:推 as81349507: 所以存下每个epoch看testing最好是可以的吗? 09/20 02:24
7F:→ zxp9505007: 回楼上 可以 但更严谨的做法是 存最好的Val去测test 09/20 03:10
8F:→ zxp9505007: 当作结果 09/20 03:10
9F:→ zxp9505007: 或是结合kflod还有你的作法也可以 09/20 03:12
10F:推 wyatt0819: 推 09/20 04:24
11F:推 Qooriver570: 所以跑100个epoch,假设在第80个epoch 的Val accurac 09/20 08:22
12F:→ Qooriver570: y是最高的,就把那次的model 跑Test吗? 那假设发现t 09/20 08:22
13F:→ Qooriver570: est accuracy比Val烂很多怎麽办? 09/20 08:22
14F:推 pk790127: 推 09/20 09:58
15F:推 ChengFu: 推 09/20 10:13
16F:→ harryron9: 回楼上上上 这就是你要去研究的问题(老板调 09/20 10:16
17F:推 akira30: 推 09/20 10:50
18F:推 paul51110: 16F 真的XD 09/20 11:15
19F:推 NTUmaki: 顶会也一堆没办法reproduce 的source code,老实说他声称 09/21 03:38
20F:→ NTUmaki: 有做什麽实验设置的也无从验证 09/21 03:39
21F:推 tommytyc: 确实,楼上说到重点= = 09/21 15:53
22F:推 Chang870829: 推 09/21 16:24
23F:→ chang1248w: test的结果输valid太多最大的可能就是valid泄漏进 09/21 19:30
24F:→ chang1248w: training data 09/21 19:30
25F:→ chang1248w: cross validation 算最可靠的指标了 09/21 19:31
26F:推 zqAI3yGOAT: 推 09/22 00:47
27F:推 shuo19971203: 同意楼上上 基本上交叉验证的话就 09/22 12:09
28F:→ shuo19971203: 很有参考性了 09/22 12:09
29F:推 tenpoinyuki: 推 09/29 20:03