如何找研究想法 1【论文精读】

如何从论文中发掘研究思路
打补丁法
以 MAE 为例讲解如何打补丁,在读论文的时候读到的是整个故事,但是如果要自己想 idea 的时候,需要将原文章中的东西蒸馏出来,因此,MAE 其实讲的是一个非常简单的故事----基于 ViT + BERT
首先是基于 ViT ,MAE 论文中最后一小段讲的是如何将 ViT 与 BERT 进行结合,但是效果不如直接在标号上训练比较好,基于此 MAE 做了两个改进
1、做掩码的时候遮住了更多的图片块,这样能够尽量使得图片之间没那么融合,使得任务更具有挑战性(在编码的时候只处理那些没有遮住的块用来加速,但这个东西只是这个想法延申而来的一个加速技巧)
2、作者认为用一个简单的全连接来输出像素信息跨越度比较大,因此作者用的是一个 transformer 块来输出最后所要的像素
基于以上改进,提出三个想法:
1、针对第一个改进,看上去是一个比较自然的想法,可以认为是一个非常强的数据增强,就是在图片中加入很多的噪音,图片增强的目的是用来尽量使得模型不至于过拟合,最后的结果也确实是如此:作者在 ImageNet 训练到1600 轮的时候仍然在提升
- 但是反过来讲,坏处是导致模型的训练特别慢,可以认为是训练到 1600 轮的时候仍然没有收敛,依然还能够提升,那么在更大是数据集上,使用更大的 ViT 架构时应该怎么办?所以这时候的第一个想法是能不能做一些别的数据增强,从而缩短训练的时间,同时效果又不至于太差
2、针对第二点改进,作者所使用的主干网络 ViT ,作者在论文中说其实可以用一些新一点的架构,可能会有更好的效果。所以第二个想法是能不能用一些新的模型来替换掉 ViT 看一下效果
- 其实在 transformer 中,自注意力也好,MLP 也好,其实都是可以替换的,只要整体的架构不变,其实效果也是不错的
- 甚至可以干脆换成一个 CNN 的模型,看效果如何
3、再回到 BERT ,BERT 在做损失的时候其实有两个损失函数:一个是完形填空;另一个是句子对的匹配。那么在这个地方是否可以考虑增加额外的损失函数,比如说最近比较火的 contrastive learning 是否可以加进来作为一个额外的损失函数
想法从何而来
在看论文的时候可以在每一个细节仔细揣摩,如果换成自己来做的话有没有别的方法来实现,由此可以得到很多的想法,但是最后还是需要进行验证,通过实验对比看哪个想法的效果最好
- 有的时候,某些想法在进行实现的时候可能得不到比较好的效果,但是通过观察实验的结果,能够得到一些新的想法,然后继续进行实验验证
- 最终其实每个想法对最后的结果都能够提供一点点的贡献,将这些东西进行糅合也可能形成一篇文章(MAE 其实也是糅合了两个东西,拿掉任何一个东西效果都会打折)
注意事项
不要打太多的补丁,这些补丁如果东一块西一块的话会显得比较脏,最好是在打补丁的时候能够有一个故事将这些补丁串联起来
- MAE 论文中的这两个补丁虽然是比较远的,但是多多少少还是在 Intro 中,通过一个故事串联起来了,所以读起来没有太强的违和感,因此这是一个非常考验写作的方法(有时候为了故事的连续性,可以把一些不那么重要的补丁拿掉也是可以的)
打补丁论文的选择
选择哪篇论文打补丁也是比较讲究的,需要选择一些比较新的论文,而且空间比较大
- 如果一篇论文已经是一个打补丁的论文了,如果继续在上面打补丁的话,很可能比较困难,因为作者在一开始的时候,可能已经试过很多东西了,所以再取进行尝试的时候,很有可能已经是作者早就尝试过了的东西了,有些时候根本就不起作用
- 这个时候最好是选一些脑洞比较大的论文,比如 ViT 刚一出来就有大量的作者进行跟进,也就是因为大家认为这一块比较新,可能里面还有很多没有被实现过的想法
- 另外需要结合自己的实际情况,因为这是一个比较烧钱的工作,MAE 已经算是一个比较便宜的工作了,但是它每次训练都需要使用 128 个 GPUv3 的核,训练时间大概在一天以上,换算过来大概是几千美金,整个论文作者应该是做了几十个甚至上百个实验,所以整个过程的花费大概在几十万美金,如果没有一定的财力支持的话,就不要选择这一类的文章
- 反过来讲,可以做一些新的模型或者一些改进来加速整个训练过程,使得整个训练更快更便宜,而不是说去提高精度,这也是一个非常好的想法