如有错误,恳请指出。
很早就开始在b站看李沐大神的视频,有些东西记录了下来却没有反复看,觉得还是直接搬到博客上面看得频率会多一点。
这篇博客主要记录科研学习中的几个问题:我们应该如何去看一篇文章?如何去判断某一项工作的价值?还有如何从茫茫的论文中找到想法做研究?
关于这几个问题的回答,沐神在很早之前就做过相关的视频给予了回答,这里我简要的把内容贴在这里。自用,请勿转载,但欢迎查看。
沐神介绍了一种三部曲读论文的方法。
一般来说,一篇paper一般会有以下几个结构:
文章很多,适合的文章很少,如何正确的阅读论文的方法也很重要,需要快速的找到适合自己的paper然后对其进行精度。下面介绍三遍法阅读论文。
关注标题与摘要,读完摘要之后直接跳到结论部分。
首先了解title是什么,是否和自己的方向相关;然后看一样摘要,摘要会比较简单的介绍了一下论文在做什么;然后跳到结论,结论部分大多数和摘要相识,但是会有一些实际的结论与实际的数字来证明一下。读完这三个部分,其实就大概可以知道这篇论文是在讲什么样的东西。然后,可以调到一些实验的部分,一些关键的图和表;有或者是method中的图和表,来看他是大概干什么的。
这一遍大概花的时间是十来分钟,可以大概的知道这篇文章是在讲什么的,质量怎么样,结果怎么样,方法看上去怎么样,是不是适合自己这个是最重要的。在这一遍中决定要不要继续读下去,还是说把这篇文章放到边上去。可能质量不高,或者是和自己的研究方向没有太多的关系。如果觉得要继续往下读,那么就走第二遍。
第二遍就需要把整篇文章过一遍,然后知道每一部分/结构到底在干什么。
这一遍中可以从标题一直读到最后,但是这其实不需要太在意很多细节,一些公式或者是一些证明,一些很细节的部分可以忽略掉。主要是搞清楚,那些重要的图和表,都要知道他每一个字在干什么。比如方法里面的整个流程图是长什么样子,算法的图是怎么样子,实验里面的每一个x轴在干什么,y轴在干什么,每一个点是什么意思;作者提出的方法和别人的方法是怎么样去对比的,他们之间的差距有多大。
这个时候可能还是没有特别的清楚他在干什么,但是这不要紧,这个思考可以留在之后。在过完这第二遍时,对整篇论文的各个部分都有一个大概的了解。中间可以把一些相关的文献给圈起来,比如这个问题是谁谁谁先提出来的,作者的方法是在谁谁谁的方法上面进行改进的,如果这些引用的重要文献没有读过,可以把他们给圈出来。
这一遍结束后,就要决定要不要继续往下精度。有可能就到此为止了,就是知道了他解决什么样的问题,结果怎么样,大概用了什么样的方法。如果读的文章觉得太难的话,可以读引用的文章,也就是之前的一些工作,门槛可能会低一点。如果想继续往下走,就需要走到第三遍。
第三遍是最后的一遍,也是最详细的一遍。这当然需要知道每一句话在干什么,每一段在说什么。
可以想象说读这个文章的时候,脑子里不断的去重复实现这篇文章。比如作者用一句话说提出了什么样的问题,用什么样的方法来解决这个问题,然后自己就可以去想,如果是我来做这个事情的话怎么办,我应该可以用什么样的方法来实现这个东西;然后作者说在做实验的时候是怎么做的,去思考如果换自己来的话会应该怎么做,能不能比作者做得更好;作者也可能会说这个文章在有些地方没有往下走,留到之后的结果了,那么这同样可以想如果自己来做的话,是不是能够往前走。
这一遍最关键的是,要知道每一句话是干什么的,而且可以从大脑里面脑补一下整个过程是怎么样的,让自己好像做过一遍的体验。看完这一遍,大概是对整篇论文的细节都比较了解了,关上文章,大概也能回忆得出很多的细节部分。然后在之后再基于他做研究,或者是后面提到这篇文章的时候,可以详细的复述一遍。
以上就是三遍来阅读论文,每一遍的花费时长不一样。第一遍花时最少,做海选;第二遍的时候对相关的论文做一步精选;最后一遍就是重点研读一些论文。
怎么判断一个研究工作的意义?以及自己写论文的时候如何去讲好一个故事?
一个好的工作都可以总结成用有新意的方法,有效的解决一个研究的问题。
这句话中有三个关键词:新意,有效和研究
研究这个关键词,主要关注的是技术类的问题,里面主要有两大类,一类是研究问题,一类是工程问题。绝大部分的问题是工程问题。
比如,算法很占内存跑不了代码,那么首先问的第一个问题是说,能不能去买一点内存回来,如果买的内存够用的话,那么也没问题了。然后接着可以说,看一下代码是不是可以优化,是不是可以换一个实现的方式,使得在不改变算法的同时节省内存。
比如另一个问题是,模型的精度不够,是不是可以多标点数据解决这个问题,或者在采样数据的时候,用更好的传感器能不能解决这个问题。
如果对一个问题能提出几个方案,而且这个方案在没有试的时候就知道这个方案一定是能够解决问题的,那么很有可能就是一个工程问题。
对于研究问题来说,一定是比较困难的问题,根本就不知道怎么去解决他,或者是说有一些想法,但是在试之前不知道这个想法行不行,work不work。而且一般的研究问题,前面的几个想法通常是不行的。(真实了…)
有效是一个相对的概念而不是一个绝对的概念,因为对绝大多数的论文来讲,其无法彻底的解决一个研究问题。一般的有效是指,相对于之前的工作,解决这个问题的有效性有所提升
新意在英语里称为Novelty
,也就是创新点,这也是一个相对的概念。这并不是要就自己提的方法之前的人都没有人来提到过,很有可能在很多年前别人已经用过了。但是随着时间的过去,大家已经不记得了。或者说所用的方法在别的领域有研究者在用,而自己所在的研究领域大家并不是对他有所了解。
一般,可以从论文的研究,有效和新意上去看一下这篇论文的研究价值。在写文章的时候,研究工作应该也要总结成这么一句话:用了什么样的方法,怎么样有效的解决了什么研究问题。具体来说,写摘要的时候,会先说我要解决什么样的研究问题,我的方法的新意在哪里,最后我的结果是怎么样的。
一个参考的量化公式为:新意度 x 有效性 x 问题大小 = 价值
可以对问题大小划分为3个粗糙的档次:1 / 10 / 100
当然可以更大,比如要解决通用的人工智能
有效性通常可以给出三个档次: 1 / 10 / 100
但最后还是取决于你的问题不一样,对有效性的定义也不一样。但是对一个技术性问题来说,通常就关心那么三个问题:第一是效果比较好,比如说是精度;第二个是把规模做大,就是成本能降低;第三个能把他做到安全
新意也可以给出三个档次: 1 / 10 / 100
其实新意也是一个相对值,对于技术类工作来讲,很难有一个技术真的之前从来没有被出现过。
对于这个量化公式,其实能做到分数1000就已经不错了,比如对一个100分的问题上,其他两个指标的某一个能否对半达到10,比如方法特别有效或者是方法比较的有新意。也就是说,如果想要发表一流的期刊论文,门槛的分数就是1000。而如果只有两个指标是10,剩余的一个指标是1,其他研究者能继续跟进的可能性较低,但还是可以写一写,如果故事讲得比较好的话,大不了就纯当练习怎么写作吧。(大佬的格局就是大…)
问题:当最新论文出来时怎么在最短时间内判断这篇论文是否是优秀的、可读的?
在评论区也找到了朱导的见解:
bryanyzhu朱导:这个每个人都有自己的看法吧。我一般可能就是 (1)10分钟粗读一遍,不需要了解方法,但看看能不能知道作者在做什么问题,想解决什么痛点。一般优秀的论文写的都不错,读完一遍你就能知道他的motivation是什么,这样你就知道这个问题重不重要或者跟你相不相关了。(2)论文有没有放代码,或者论文的作者之前有没有放代码的习惯。毕竟想吃透一篇论文,光靠看是不行的,看一百遍可能也不如过代码一遍。所以有没有代码很关键。(3)作者团队在这个领域有没有积累,毕竟有积累的团队对这个topic的理解会更深一些,他们也不会为了发论文而水论文,所以质量普遍是不错的。如果这三点都满足,那肯定是值得读的论文,里面一定有值得学习的地方。
如何从paper中发掘研究思路的方法?
打补丁法:以MAE这篇文章举个例子,讲一讲如何去打补丁
一般在读论文的时候,读到的是整个的故事,但是如果是自己想idea的时候,要把原文章里面的东西给蒸馏出来。
首先来反观MAE这篇paper:
基于ViT + BERT
遮住更多的图片块
目的是使得图片没有那么多的冗余,其中还提及到编码时只处理没有遮住的,但是这个只是一个延伸的技巧。
用Transformer来输出(编码)
后来作者认为一个简单的全连接层来输出像素信息跨度比较大,所以用一个Transformer结构来输出最后的这些块像素。
这个想法不完全没有问题,这其实可以认为是一个非常强的数据增强,就是在图片上加很多噪声进去。而图片增强的作用是用来尽量使得模型不那么过拟合,而最后的结果也确实是这样子,在ImageNet上训练到1600轮的时候,效果仍然在提升,但是这坏处也很明显,就是导致训练特别慢。换一个说法就是,训练到了1600轮的时候,还没有收敛,还可以做一点提升。
那么此时就应该可以想到,是不是能做一些别的数据增强,使得训练,不需要花那么大的时间去训练,同时效果也不会差。
其实作者在论文中也有提到,可以用一些新一点的架构,说不定效果更好,那么是不是可以用一些新的模型来替换掉Vit来看一下效果呢。比如在transformer中,那么自注意力也好,mlp也好,其实也是都可以替换的。只要整个架构摆着那里,效果也是不错的,或者干脆换成一个cnn的模型,看看效果好不好。
回归到BERT中,其训练的时候是有两个部分的损失函数的,一个是完形填空,另外一个是句子对的匹配。那么在这个地方,是不是也可以增加额外的一个损失函数。比如说最近比较火的一个contrastive learning,是不是也能够加进来,作为一个额外的损失函数。
以上是三个大致的想法,但是在看论文的时候可以在每一个细节的地方,都去仔细的揣摩揣摩。思考一下,如果是自己来做的话,有没有别的办法来做它,这样子可以得到新的想法。
可能可以会得到很多的想法,但是最后的最后还是靠去验证,要去真的去做实验,去看一下哪一个效果最好。很多时候也是在有一个想法,做一些实验发现其实不是那么回事。但是通过观察实验的结果,得到一些新的想法,然后再开始做实验,再在实验中发现新的想法。
很多时候,可能最后的每个想法对最后的贡献都有那么一点点,然后把这些东西揉起来,也可能成为一篇文章。但是要注意,不要在上面打太多的补丁,补丁如果东一块西一块就会显得比较脏。最后在打补丁的时候,有一个故事能把它给串起来,读起来才没有那么的违和。这个时候就非常考验写作的一个方法,有时为了考虑故事的连续性,考验把一些不那么重要的补丁拿掉也没有关系,甚至可以在实验部分在加上看看效果就可以了。
在最后选择哪篇论文打补丁也是比较讲究的,当然需要选择一些比较新的论文,这样打补丁的空间才会比较大。如果一篇论文已经是一个打补丁的论文了,再在上面打困难就会比较困难。因为作者在一开始的时候就可能已经试过很多很多的东西了,再去试的时候其实很有可能作者已经早就试过了,根本就不work。这时候最后选一些脑洞比较大的论文。
同时需要掂量掂量经费资源,MAE每一次训练都需要使用128个TPU v3的核,训练大概需要1天以上,庞大的实验量可能花费了几十万美金。但是反过来讲,可以去做一些新的模型,或者是一些改进使得整个训练去加速,不是把精度提得更高,而且让训练更快更便宜,这也是一个比较好的想法与方向。
参考资料: