社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

Epoch不仅过时,而且有害?Reddit机器学习板块展开讨论

视学算法 • 2 年前 • 221 次点击  

点击上方视学算法”,选择加"星标"或“置顶

重磅干货,第一时间送达


梦晨 发自 凹非寺
量子位 报道 | 公众号 QbitAI

有一天,一个调参侠在训练一个深度学习模型,要用到的两个数据集损失函数不同,数据集的大小还不是固定的,每天都在增加。

他有点发愁,这该怎么设置Epoch数呢?

在纠结的过程中,他突然想到:干嘛非得定一个Epoch数?只要对每个Batch进行独立同分布抽样 (IID Sampling)不就得了。

为了验证这个想法,调参侠去看了很多论文。发现越来越多的人介绍他们的训练方法时,只说进行了多少个Iteration,而抛弃了Epoch。

他想到,Epoch暗示并强调了数据集是有限的,这不仅麻烦,还有潜在的“危害”。把Epoch去掉,让循环嵌套的层数少一层总是好的。

于是他在Reddit发起了讨论:Epoch是不是过时了,甚至还有危害?

Epoch多余吗?

有人对这个观点表示赞同:

挺有道理,当数据集大小有很大差距,Batch大小相同时,设置一样的Epoch数,岂不是大数据集参数更新的次数多,小数据集参数更新次数少了,这似乎不对劲。

Epoch最大的好处是确保每个样本被定期使用。当使用IID抽样时,你只要能想办法确保所有样本被同样频繁的使用就好了。

但调参侠觉得让每个样本被定期使用就是他怀疑的点,IID抽样已经确保分布相同了,再让他们同频率被使用就是一种误导。

反对者认为:

不能因为你觉得车没开在路的正中间就放开方向盘不管了,虽然大撒把不会改变你正好在路中间的概率,但它增加了方差



调参侠最后总结道,这个争议有点像统计学里的“频率派 VS 贝叶斯派”,即认为数据集到底应该是确定的还是不确定的。

该怎么比较模型?

调参侠还注意到,有人用Batch Loss做损失曲线。他认为这比Epoch Loss更有参考价值。



反对者觉得,你这个方式是挺好的,但Epoch依然有用。

因为即使在相同的硬件上,不同模型的算法效率不同也会带来巨大差异。


像各种Transformer和CNN这种底层代码实现都差不多,但是别的模型就可能有很不一样。比如我们自己的CUDA LSTM实现,至少和CudnnLSTM一样快,比原版TensorFlow实现快4倍左右。

最后,有个网友以CV模型为例对这个话题做出精彩总结,列了4种损失可视化方式,并介绍了什么情况该用哪个。

Loss/Epoch告诉你一个模型要观察同一个图像多少次才能理解它。

Loss/Iteration告诉你需要多少次参数更新。当比较优化器时这很有用,可以帮助你加快训练速度或达到更高的精度。

Loss/Total Image Seen告诉你算法看到了多少图像时的损失。适合比较两种算法使用数据的效率。

如果你的算法在50万张时达到70%、100万张时达到75%,这可能比50万张时达到50%,100万张时达到80%的还要好。

另外,它还消除了Batch Size的影响。这允许在不同GPU上训练的具有不同Batch Size的模型之间进行公平地比较。

Loss/Time也很重要,因为如果一个新模型减少了100个Epoch,但每个Iteration都慢100倍,我就不会选择这个模型。

虽然Loss/Time关系到硬件的具体表现,不够精准,我不会把这个写到论文里。但在自己的机器上这是很好的评估模型的参数。

使用数据增强时呢?

有网友提出,数据增强 (Data Augmentation)时Epoch也有点多余。因为数据集太小,人为给每个样本添加很多只有微小差距的版本,没必要让他们被同频率使用。

反对者认为,数据增强作为正则化的一种形式减少了过拟合,但你引入的实际信息在训练模型时仍然局限于原始数据集。如果你的原始数据集足够小,Epoch表示你向模型展示了整个训练集,仍然是有意义的。

有人问道:

你是想表达“纪元(Epoch)”的纪元结束了吗?

调参侠:

对,现在是“时代(Era)”的时代。


无尽随机增强的首字母缩写ERA意为“时代”

参考链接:

[1]https://www.reddit.com/r/MachineLearning/comments/n61vxw/d_is_the_concept_of_an_epoch_being_phased_out_or/

本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。


点个在看 paper不断!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/114054
 
221 次点击