公众号关注 “ML_NLP
设为 “星标”,重磅干货,第一时间送达!
来自 | 知乎
作者 | Woolsey
地址 | https://zhuanlan.zhihu.com/p/99381665
编辑 | 机器学习算法与自然语言处理公众号
本文仅作学术分享,若侵权,请联系后台删文处理
年末老师组织几个课题组进行了2019年的总结,总结了一下科研过程中的经验与习惯,这里做一个整理。

关于创新点寻找

1. 通过多看论文寻找idea
通过多看论文,看相关领域和不相关领域的论文,了解一些流行的研究热点,将这些论文热点应用到自己的领域上,完成创新。很多论文,虽然在不同领域,但用的机制其实是差不多的,attention/self-attention/co-attention之类的。并且在自己领域吭哧吭哧对着问题去想解决方法,最后发现本质上其实还是一些其他论文用过的东西。所以了解其他领域的创新方法、移植、分析,是一种可行的创新方法。
也有学长说,Tpami的reviewer会提出论文的创新在其他领域出现过,认为创新度不够的情况。这个如果投tpami的时候需要注意一下。但就我的观察而言,cvpr和iccv很多文章都是这个套路。
为了提升速度,和其他人多交流是一个比较好的方式,可以快速了解大量论文。
2.通过传统方法启示创新idea
从传统方法启示deeplearning的方法创新也是一种可行的创新方法。这会让我们所做的创新在论文写作的时候可解释性更强,更容易让人接受。 但我自己的经验是,一种更高效的方法还是用刚才说的1方法来提升效果,然后用传统方法来解释创新进行写作。
3.领域比较大的任务的创新方法
有的领域可能是综合性任务,比如全景分割、实例分割,涉及detection、segmentation等等。对于这种任务还是以小点入手进行创新比较好。(我觉得是废话)
4.通过纵向阅读学习别人如何做创新
看论文的时候可以前后看,看看这篇论文follow了什么论文,被什么论文follow了,看看人家是怎么做创新的。
我个人觉得...这种方法可以帮助你知道怎么写论文,但很难帮助你做创新。论文里写的创新story和真正的做的经常出现不一致的情况,所谓挂羊头卖狗肉。

关于论文阅读

1. 了解新领域时要把握脉络
在了解新领域时,会阅读很多的论文。这个时候一件很重要的事是梳理出这个领域发展的脉络,哪些是重要的论文,划分出一个新的方法代际,哪些是基于这些论文做出的一点小创新的论文。领域的发展是树状的,一些重要的论文划分了代际,另一些论文做了一些小创新。
2.找出什么是真正起作用的部分
如我上文所说,论文经常出现挂羊头卖狗肉的情况。论文着力鼓吹的创新可能不是真正提升效果的部分,一笔带过的方法才是真正提升效果的部分。此外,论文写作一般都讲究一个包装,要把平凡无奇、或是雷同的方法包装出高级的感觉。所以在阅读论文的过程中要进行逆向还原。(我认为直接读公式是一种比较快速还原方法破除包装的方式
3.用不同颜色标记文章,关注文章的表达
为写作做准备,看论文的时候去关注其他论文的表达。可以用不同的颜色对表达、生词、文章重要内容、错误内容进行标注。

关于实验部分

1.不要执着某一方法
都说deeplearning要调参,所以有时候做实验验证方法的时候,实验效果很差,有的时候我们会希望通过调整参数来纠正实验。但很多经验告诉我们,调参带来的改变可能不会特别大,像一个方法如果实验出来性能只有百分之六七十就不要调了,调十天半个月往往以失败为告终。所以不要执着于某一个方法。
2.设置对照组
做算法设计的时候可能会把一整套方法都设计好,然后直接做实验,这样容易失败。比较好的方式是设置明确的对照组,一点一点做改变,证明每一个小点的改进是否起作用,最后完成整个方法的实验。
这种方法也可以避免实现过程中的一些小bug对实验结论产生影响。有时候一个dataloader写的不够好,多了个bn,这种时候很难得出state-of-the-art效果,如果不设置对照组的话会错误地认为实验失败了。如果设置一个base对照组,即使这些小问题没注意到,也不影响方法有效性的验证。
3.不要预设实验结果会work,尊重实验客观规律
我们做实验的时候往往功利心比较重,希望验证方法有效性的时候实验效果很好。这种心态和方法都是不对的。一方面是由于实验失败率客观上比较高,这样去期待不切实际,之会引起过大的情绪波动。另一方面是不应该只做一些性能验证实验,而是要做更多的探究实验。去探究问题,利用实验去了解问题的客观性质等等,而不是单一的去验证自己的方法有没有效果。了解了问题的性质,自然能做出创新。
4.充分利用开源代码
一套pipeline会有很多的细节,比如数据预处理、dataloader怎么写,bn层的处理,等等。自己写的话容易在一些细节出错,而这种细节往往对性能复现是有很重要的影响的。利用开源代码会很好的避免这些问题。
5.注意论文的implementation detail,注意超参
超参还是很重要的。虽然自己做实验不一定和其他人的超参一致,但还是能提供比较好的参考作用。
6.利用Git进行版本控制和团队协作
7.基础细节的注意
有的基础知识,看起来挺简单,大家也总觉得自己懂了,但在实践过程中会出很多岔子。大家纷纷说起了bn的故事...贴几个大家提到的点:
Batch-normalized 应该放在非线性激活层的前面还是后面? - 论智的回答 - 知乎
fine-tune 的时候对于bn的处理:固定用的backbone的bn
RNN 中为什么要采用 tanh,而不是 ReLU 作为激活函数? - 何之源的回答 - 知乎

关于合作

1.带团队的时候大家一起制定计划
不要机械地分配任务,大家的积极性会不高,无法一起开动脑筋。不过这也看团队配置情况了。

关于rebuttal

1.挖掘reviewer真正的意图
reviewer可能会问很多细节问题,但可能真正的concern不是这个,是某一个方面不了解或者不赞同。不要直接去东回答一下西回答一下reviewer的问题,切忌一直说“正文的xxx处写了”。
2.会议强调novelty、期刊强调完备性
会议要快速引起reviewer的兴趣,期刊要把工作做的完整。
3.会议的rebuttal成功机会小
会议投稿多,reviewer如果不喜欢你的工作就是找理由拒你,这个时候rebuttal机会不大。但期刊的reviewer是利用rebuttal来跟你交流,所以rebuttal的机会比较大一些。
4.写作的时候先预估reviewer会怎么问,甚至引导reviewer问我们准备好的问题
下载1:四件套
在机器学习算法与自然语言处理公众号后台回复“四件套”
即可获取学习TensorFlow,Pytorch,机器学习,深度学习四件套!
下载2:仓库地址共享
在机器学习算法与自然语言处理公众号后台回复“代码”
即可获取195篇NAACL+295篇ACL2019有代码开源的论文。开源地址如下:https://github.com/yizhen20133868/NLP-Conferences-Code
重磅!机器学习算法与自然语言处理交流群已正式成立
群内有大量资源,欢迎大家进群学习!
额外赠送福利资源!深度学习与神经网络,pytorch官方中文教程,利用Python进行数据分析,机器学习学习笔记,pandas官方文档中文版,effective java(中文版)等20项福利资源
获取方式:进入群后点开群公告即可领取下载链接
注意:请大家添加时修改备注为 [学校/公司 + 姓名 + 方向]
例如 —— 哈工大+张三+对话系统。
号主,微商请自觉绕道。谢谢!
继续阅读
阅读原文