前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何评价深度学习相关顶级期刊论文难复现的问题

如何评价深度学习相关顶级期刊论文难复现的问题

作者头像
墨明棋妙27
发布2022-09-23 11:28:19
9300
发布2022-09-23 11:28:19
举报
文章被收录于专栏:1996

链接:https://www.zhihu.com/question/265953178 编辑:计算机视觉cv 声明:仅做学术分享,侵删

在本人的研究动作识别过程中,曾多次复现该领域顶级期刊的论文,有些提供了部分代码,有些则没有,提供了代码的,发现有很多过程和论文中描述的相差甚远,有一些论文和代码一致了,但是结果也和论文的不一致,请问这在您的研究生涯中是否也曾遇到过?您是如何看待的?怎样采取有效的措施,提前做出判断,不浪费更多时间在这些论文上面?

作者:韦世才https://www.zhihu.com/question/265953178/answer/1621561490

作为一个在复现论文中踩坑无数,好不容易走出来的人,简单说一下我的看法。

例子1:我是活体检测落地的,老师当时跟我说,旷视能做出来,你应该也可以做个差不多的吧(微笑)。然后我就开始的漫长的算法复现道路。后来很久以后发现了两件事。一是腾讯的一篇论文,做了两个测试,一个是用了公司内部的数据,一个是没用公司内部数据的结果,用了公司内部数据的高了10个点。另一个是前不久小视科技开源的活体检测项目,我去看了一下,,效果确实好,一细看怎么做的,好家伙,千万级的训练集......。

例子2:当初我大四四月份的时候来到教研室,做活体检测的项目,看了近几年的会议和arxiv,找到了一篇效果最好的文章,甚至还公开了代码和预训练模型,心想,这不是稳了吗。当时我想的是:讲道理,结合pytorch,或者tensorflow,感觉论文复现不应该难才对啊???。花了两个星期学习tensorflow把它跑通,我去换换其他数据集看看(活体检测不同于其他领域,目前追求的就是跨数据集测试的准确率),结果效果稀烂。我当时在想,不对啊,它跨数据集的测试效果不差,为什么在这上面就是不行?后来数据集申请了下来,在它论文说的那个数据集上面试了一下跨数据集的测试,确实和文章描述差不多。我就更好奇了,那么好像这个论文就是对的啊,可是为什么其他数据集效果就差这么多(应该没人比我这个情况更奇葩了,不做落地基本不会遇到这个问题)。后来机缘巧合之下打印了很多日志之后我发现,它的正类和负类偏向不一样,预测主要偏向负类。但是这样效果应该会很差,为什么还这么好,然后我继续细挖,然后重点来了!!!!!!!我发现它的数据加载里面,正负类的加载就是不对等的,负类是正类的两倍多(正常是对等的),所以偏向负类,但是效果还是很好。我?????。那天我发现论文造假的另一个至高境界,直接修改数据分布(刚刚去看了一下,这篇文章已经被某二区期刊收录)。并不是说这篇文章作者就是故意的,但是谁知道呢,而且后来我师兄也遇到了类似的情况,在dataloader里面对数据进行了修改...他是做图网络分类的,同一个数据集之前的测试准确率只有80出头,后来几篇文章就飙到了接近90,师兄怎么都复现不出来,后来开源了代码一看,好家伙,之前训练测试是二八分,新文章直接变成了三七分,就在dataloader里改的,但是作者文章完全没有提及,而且师兄把分布换成最开始的数据分布之后,那个新方法的效果还比不上原来的baseline…。

例子3:教研室有个同学做剪枝,复现CIFAR10的的baseline。CIFAR10这个数据集都说烂了,我复现一下还不是手到擒来?然后一个月过去了,还是复现不出来那个效果,后来发现原来大家都在用trick。不加余弦衰减,不加mixup,不训练200个epoch,基本就达不到目前大家说的那个SOTA效果,但是这些不会有人和你说的,他们只会说我在resnet50上训练到了多少多少的准确率。

例子4:教研室的师弟,结合GCN做few-shot learning。之前的测试准确率都是百分之五六十,去年AAAI突然出现了一篇准确率直接刷到80%多的文章还开源了代码,师弟惊为天人,感叹难道这个领域就这样做没了?然后拿作者的代码来加上自己之前的想法改了改又涨了几个点,在90%多,实现了大家默认要求的sota,觉得可以写文章了,文章写到一半,发现不对,代码好像有问题,github上有人提问,这个是不是好像过拟合了学习到了标签的顺序,然后师弟一看还真是,我把batch内多个任务之间测试样本顺序打乱,效果就又回到了普通的百分之五六十的水平,然后写完一半的文章就这样被废掉了。

从这些故事中,我发现了以下的结论:

绝大部分刚入门的人,都会迷信SOTA,我要复现就要复现那篇最好的,管它难不难,能不能复现,是不是真的有效。但是做过一年深度学习的人就知道,SOTA?一百篇文章一百个SOTA。

有源码就一定可靠?我被源码坑过不止这一次,刚刚例子是,另一个回答里说到的LBCNN也是一样的,给的源码和文章里面的结构就是两回事。

顶刊顶会大公司就一定可靠?顶会的可复现性问题存在也不是一两天了,那么顶刊也可见一番,每年三大顶会能复现出来的有一半就不错了,之前还有说90%都不能复现的...。

有效的也许不是方法,而是trick---同学复现的那篇论文。有效的也许不是方法,而是数据分布---我遇到的那篇文章的数据分布。有效的也许不是方法,而是数据---活体千万数据集。有效的确实是方法,但是这个方法有问题----师弟的小样本学习的例子。

这还是活体需要做跨数据集的交叉验证这种难的验证指标了,要是单纯刷一个数据集的指标的,能作弊的地方就更多了。

怎么办?

后来我想了很久,说,草,不追SOTA了,去选那些我理解了,而且直觉上我觉得可行的方法。就算是最后真的不行,我也能知道是哪里不行,也是我思维的完善。然后我开始去复现motion-based methods,检测眨眼和张嘴这些动作,确实可行,但是老师要做静默活体,然后又去试了rPPG,发现也可以,但是时间开销太大了,分析发现受采样定律的限制,10s左右的视频才能做出一个比较好的估计结果。然后去试了一下质量估计,也是有用,但是高质量的攻击也确实不能检测出来。于是慢慢又去做模型的分析,寻找其他的特征,我的目标慢慢从最近的18 19年,转向了12,13年那会,做理论分析的文章。虽然效果不好,但是有理有据,而且很多那时候的传统模型,结合现在的深度学习往往能爆发出强大的力量,于是就有了我现在的工作。

不要盲目的去追求SOTA,那些高大上的结构,网络,因为很多时候并不是那些结构有用,而是trick有用,或者是其他的地方有问题。更重要的是看文章的核心思想,你觉得这个思想是不是合理,你接不接受,如果你自己也觉得他这个思想很不错,那么就可以尝试去复现,就算是最后失败了,你也会不会很难受,你知道什地方有问题,而这会是你后面科研的创新来源之一

现在深度学习的问题就是这个不到五岁的一个东西,直接盖过了一个领域过去10年甚至20年进化来的传统的模型和研究。但是它真的消失了吗?不,它不过换了一个方式去应用。我最开始做做活体发现近几年什么多模态,多光谱,深度图,时频分析,这些高大上的名词,觉得强的一批,他们是怎么想出来的,后来追溯到10多年前的文章之后才发现,原来这些东西在过去都研究过了,频率,反照率,3D结构,这些在过去都有分析,只不过过去的特征提取算法和数据没有现在这么多,所以没有很好的解决问题,现在被深度学习重新唤起了生机而已。正本清源,知道一个领域过去的研究你才能知道现在在什么地方,特别是各个领域都被深度学习冲击的今天。

作者:www https://www.zhihu.com/question/265953178/answer/1622872889

深度学习很常见的一个现象是A提出了一个methodA,resultA = methodA + trickA。接着B提出了一个methodB,resultB = methodB + trickB。B在他们的文章中会宣称resultB ~> resultA,从而得出methodB ~> methodA的结论。但其实很有可能只是trickB ~> trickA,或者说trickB对methodB的提升比trickA对methodA的提升大。如果“公平”的比较的话,很有可能会出现下面的几种情况:

methodA ~> methodB (都不加trick);

methodA + trickA ~> methodB + trickA(这不一定说明methodA ~> methodB,可能只是trickA更适用于methodA);

methodA + trickB ~> methodB + trickB (这种情况可能是B最不想见到的)。

为了显示出methodB的solid,B一般不会在文章中提及他们使用的全部trick。

作者:程明明

https://www.zhihu.com/question/265953178/answer/1642971880

说深度学习难复现,那是因为你还没有接触“生化环材”等其他学科。相对而言,以深度学习为代表的信息学科的可复现性在理工科中是相对比较好的。

再说不可复现的问题,大致归结为这么几类: 1. 用了私有数据(很多大公司都有不能对外公开的私有数据),一般人没法访问这些数据,导致结果不可复现。

2. 用了超大公司才有的变态算力,普通研究者连论文中用到的1%的算力都很难达到。

3. 各种没有说清楚的bias导致的结果偏差。例如,某数据集特别小,原始作者没有划分train,val,test,导致不同作者不同的随机划分,对结果影响很大。

4. 故意造假。这里暂不评论为什么会有这种人。

纠结于论文复现难的人,很多是刚入门不久的学生。我很理解经过很多努力没法复现的失落,毕竟我也经历过。想提醒一点的是,相对而言,计算机学科的可复现性是比较好的。而且最近10年开源的风气越来越好。至少主流的问题,几乎都有很好的开源代码,可复现性不存在太大问题。

避免上述坑,我自己的做法就是,有那么多很好的开源项目都看不过来,我轻易不去follow那些很难复现的项目。另外,不同团队的风格不一样,有些团队的工作就非常容易复现。建议多用正能量去看问题。同时学会在不完美的世界中生存的很好的技巧,避开坑,多关注可复现性好的工作。

另外,己所不欲,勿施于人。建议被这个坑坑过的朋友们,自己发论文的时候不要再去坑别人。尽量在论文里说清楚,并且在不违反协议、隐私,规范、和法律的情况下,最大化的共享自己的代码和数据。

作者:吃个小烧饼

https://www.zhihu.com/question/265953178/answer/1645081863

1.感觉cs的论文算是好复现了,生化环材能复现出来算我输。

2.在cs领域,ai的论文也算好复现了,都不说别的,就举个zhihuer最崇拜的领域之一:graphic,都是大厂垄断+绝对不放代码,你搭个架子恐怕要2年。

3.在ai领域,dl的论文也算好复现了,之前我做进化算法,只能感叹这是什么鬼畜来源和脑洞,当然我还是恬不知耻地水了几篇。

4.在dl里,cv的也算好复现了……毕竟算力已经算亲民,pipeline也比较容易,trick也不算太多。

做cv这么久,感觉这个领域真的很友好了,其他的东西你真感觉是天外来物……

下边是我的个人观点

其实我个人认为,trick本身也是宝贵的财富,算法本身就不仅仅是模型,但是从无数个领域得到的结论是,大家普遍喜欢模型,不喜欢策略。和一种模型配合的trick有他自己的意义,和很多模型配合的trick有普适意义,但是,我的意见并不重要。

作者:Timothy-xie

https://www.zhihu.com/question/265953178/answer/1622484513

现在复现真的真的炒鸡难。

(毕竟一年几千篇,也不能全特别受重视地精读…

1、难以获取相同的训练环境。巨型公司如Google,batch size直接给你开到8192,或者搞个TPU,或者GPU限制到V100、A100这种实验室就几块抢都抢不到的,再就是有的环境不给全,模型不给能load的,想重新训试试门都没有。(给学长搬砖中的亲身经历

2、有些工作真的不放出来可以直接load进来的模型and有些工作使用的资源和时间不给我们允许调参到论文的程度的机会。如果给了模型确实好说一些,结合代码至少大概率证明工作是可以做到的,多一些复现的自信。但是即便这样还是存在一些问题,比如在我们复现的时候可能很难有资源和时间将参数调优到论文的级别(毕竟人家是想要数据好看发文章的,咱们是要自己去感受的,这个强度和心态肯定是不一样的。而深度学习你懂的,一点点学习率改变都会差很多

3、再就是开放的代码和论文里面的差了“一点点”细节和tricks。就如果按照论文里面来实现可能会很好,但不会那么好。论文里面的卖点和最终代码的实现总会有一些合理的bias。确能在不同程度上影响效果。(这里面的tricks指原理正确但是没在论文中说明的技术,不包括疏忽)

4、再就是作者和团队存在刻意或无意的错误了,遇到这种情况我们就要见贤思齐,见不贤而内自省也。提醒自己不要出锅影响团队荣誉

所以读文章还是要读思想,如果特别感兴趣(结果足够亮眼,工作足够solid,方法足够普适)再去看代码叭。然后做一些小型的消融对比实验感受一下即可。如果参数很难找到好的的话那确实也没必要一棵树上吊死。各取所需即可(希望paperwithcode的模式一直坚持下去,这点我们组学长带着我们做的还是蛮不错哒。

作者:兔子老大 https://www.zhihu.com/question/265953178/answer/1622665112

分享两个经历吧。

1.曾经被要求复现一篇用GAN做字体生成的论文,论文发在CVPR上,是国内某大厂的。论文里面有一个显著错误和模糊错误,模糊错误是论文里面描述的卷积核的尺寸有问题。显著错误是因为论文里面无论是绘图还是公式,都有一个错误,那就是按照他们描述那样构造loss进行优化,某个重要部件是完全没有被计算梯度的。

然后我汇报了上去,大佬去邮件问了后,得到的答复是对于卷积尺寸的问题,是他们忘了写padding,而对于那个没有计算梯度的方法,对方则大方承认了这是个错误并感谢我们指出。对于那个卷积核尺寸的问题我可以算,我就佩服没有计算梯度这个问题(我觉得算是比较严重的错误)可以这么大大方方的挂在CVPR上。

2.第二个经历是复现一个transformer的模型,其中涉及到weight share,但那个weight share是把weight 给share了,然后不同任务独占一个bias……如果没有后面那个跟task有关的bias……是根本不work的(我觉得),或者说差很多。

而这些细节是没有写在论文上的,是我发现不对劲后一行行对比他的开源代码发现的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机视觉CV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸核身
腾讯云慧眼人脸核身是一组对用户身份信息真实性进行验证审核的服务套件,提供人脸核身、身份信息核验、银行卡要素核验和运营商类要素核验等各类实名信息认证能力,以解决行业内大量对用户身份信息核实的需求,广泛应用于金融、运营商、共享出行等领域。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档