(本文首发于0xFFFF)
也许,这只是门手艺而已
一门非常吃时间,能力,资源,天赋,过程高度不确定,需要灵感
但仍有基础动作,核心流程的,手艺
—— 开篇小引
当我们在做深度学习科研的时候,我们到底在做什么?
我算做应用研究的。在我的眼中,研究就是在发现问题,解决问题。为了发现问题,我们找论文,读论文。为了解决问题,我们想idea,执行idea。
更具体地:
那么,到底要怎么找论文,读论文,想idea,执行idea呢?
这篇文章就是我个人经验的小结。
注:摸象盲人的口述
按研究领域划分,我是属三维视觉应用口的。下面的经验对其它领域,尤其是更基础/偏理论的领域可能不会完全适用,仅供参考。
此外,我在研究上并不算成功——我一篇顶会顶刊都没发过,所以我的意见不一定靠谱。
You have been warned :/
那么,先从读论文开始吧!一篇研究论文,说到底,到底在讲什么?
以我的经验来看,按照内容,研究论文大致可被分为四类:
应用类论文:面对某个问题(可以是个新问题,也可以是旧问题的某个切面),基于某种直觉/洞见/工程观察,提出了一个新的方法,这个方法很好地解决了这个问题。
数据集论文:面对某个问题,提供了一个新的数据集。文中会介绍数据集的来源与构成,可能会再简单地跑两个方法提供基线。
分析类论文:基于某些理论和实验结果,发现了某些有趣的洞见(大语言模型或学习理论方面这类论文较多)
综述:总结某个领域下的最新进展,介绍基础方法和前置知识,对现有的论文进行分类,并简要讨论每篇论文的核心贡献,最后对未来进行展望
展开来说,对于比pu较tian常gai见di的应用类论文,其一般遵循下面这个结构:
在了解了论文的结构后,阅读论文就成了按图索骥:去特定的地方找特定的信息,然后决定要不要读这篇论文,或者从这些地方抽取关键内容。
我个人倾向于把“阅读一篇论文”分成三个等级,每个等级读完之后,都会写点东西进行记录。
扫读:首先,我们要决定这篇论文值不值得读
除了偶遇的有意思的论文外,我认为,一篇值得读的论文:
这些信息往往可以通过扫读标题,摘要,方法图和实验结果得出。
扫完之后,就要确定这篇论文大概在是在做什么任务,看还是不看。
扫读之后,应该大致了解:
略读:如果要读,我们就概览一下这篇论文,相对完整地了解这篇论文的方法(侧重于范式以及核心直觉)与效果(具体的实验比对)
打开论文:
读完之后进行整理:
读完后把上述内容整理完扔进文献管理软件里。
精读:对极少数要进行比较/复现/化用的工作,我们需要彻底地分析论文,将需要的信息完整地从论文中抽取出来
直接进入相关章节段落,一点点地进行抽取:
开一个文档,把提取出的东西全部列出来。日后要参考直接看文档就可以了。
在了解了如何看一篇论文之后,我们就得考虑如何从排山倒海的论文里挑出和自己研究领域相关/有价值的论文了。
在过滤和选择论文上,一般来说有下面几个途径:
社交媒体/Github仓库
特定研究者/研究组:在看论文的时候,可以多留心领域内的知名研究者和研究组,很多时候推进某个领域的,就是那么一小撮机构和研究者。例如在人体领域马普所就非常有名,他们的SMPL/FLAME就是目前三维人体相关方向的一大基础构建块。
上面的方法查准度很高,多用于日常了解与跟进领域动态。但是有时候需要查全——需要尽可能广地了解领域内的进展,确认自己的idea有没有被人做,或者可行性如何。
论文图检索:查全方面,我觉得最好用的还是“图搜索”,即查找关键论文的citation和reference,这个在下面具体展开。
基于关键词:当然,使用semanticscholar/google scholar搜特定的关键词也是一个办法,但是个人感觉效率实在太低了。
(举例:以NeRF为中心的的引用网络草图)
研究论文之间有着引用关系——一篇论文会出于某些原因引用另一篇。旧的被新的引,新的被更新的引,如此构成了一张巨大的有向无环图。
当你读了不少同一个领域的论文后,你就会发现,有些论文是做这个领域的人必须要引的:
你很难在做三维高斯相关工作的时候不提3DGS,在讲基于优化的三维生成的时候不引DreamFusion(SDS),在改场景表达的时候不测LPIPS。
只要把握了引用这些关键论文的论文,那么就自然把握了所有可能的同领域工作。这些同领域工作可能会有点过时,但是这些工作的后继又必然引用这些工作,因为需要进行实验对比/related work部分讨论。
当然,引文里面九成九的论文都可能与我们要做的任务无关——在本文写成的时候,NeRF的citation已经近3000了,3DGS也已经破了1000.
所以往往要结合其它信息,迅速进行缩圈——可能是关键词匹配,也可能是找几篇论文的引文求交集,或者干脆按组织/发表会议筛选。
将数量压到100篇左右的时候,就可以人工筛选了——速览标题筛掉一大半,看摘要和图筛掉一部分,也可以试试用AI,剩下的就是所有可能沾边的了。
这是一个非常低效,但是查全率极高的方法——基本可以把一个领域里所有可能沾边的论文都收下来,然后就可以根据这些论文进行可行性/创新性判断了。
思路打开!这个把论文视为引用图的思路还能让我们做很多有意思的事情,例如:所有在实验中使用了某个指标,或者用了某个数据集的方法,比较了/使用了某个方法的论文等等。这些条件又可以重叠使用…
在找citation方面,semanticscholar大概是最好用的:他们甚至提供专门的API来方便你进行查询。
在收集了,看了一吨论文之后,我们要怎么想idea,搞出新的方法,发论文呢?
就应用口而言,我们可以从这句老掉牙的话开始:发现问题,解决问题。
我们面对一些问题,提出一些解决问题的直觉,然后用工程/数学工具把直觉落地,和方法集成,解决问题。
问题方面:
直觉落地方面:
举点例子:
顺带一提,我曾经在和别人吹水的时候开过一句玩笑:
你在看完论文后马上能想到的idea都已经被人想到了
结果越往后做,越认识到了这句玩笑的含金量 XD
大家看的都是相似的方法和论文,能提出的东西当然也就都是相似的。只有亲自复现一下,跑一跑实验,或者寻找新的场景,和其它大小领域的方法融合,亲自加一下A和B,才有可能发现新的直觉和洞察。
那么,什么是好的idea呢?
对于这个问题,我也没有很好的答案,但是我认为好的idea应该尽可能满足下面四点:
不过,一个值得做的idea除了“好”之外,很多时候还要“可行”,我们往往要综合考虑手上的资源,身边人与实验室的研究方向进行决策——小团队就需要避其锋芒,不要随便去基础与热门问题里和大实验室对轰。
那么,拿着idea,我们要怎么把它变成论文呢?
这就是科研工作流的问题了。
工作流这东西因人,因领域而异。所以我打算提两个要点,然后简单介绍一下我大致遵循的工作流。
就工作流而言,我认为两点非常重要:明确产出,小步前进。
明确产出,即所有的研究活动都应该有明确的产物。这个产物可能是代码和实验结果,但也可以是文档,甚至PPT。
这么做是为了对抗遗忘和迷茫感:如果我们在做完一件事后不做任何记录,就很容易遗忘掉自己辛苦挖掘的,来之不易的洞见和结论。研究也是一个复杂而不确定的过程,一个清晰的预期产出可以让我们更好地聚焦自己的精力。
小步前进,即每个研究活动都应该是目标非常清晰的小任务。不要“看论文”,或者“思考实验”,而是“用xx方法调查相关论文”,“看xxx论文并给出方法简图”,“看xxx论文并列出其实验内容”,“集成3篇论文的实验流程,提出实验计划”,“执行实验计划”等。
这么做是为了应对研究本身的不确定性,以及复杂任务带来的拖延症。如果是在“看论文”,那就很容易变成拿着论文慢悠悠地晃。但如果是“以xxx文献为基础,进行一阶论文图搜索”,“列出xxx论文的方法流程”,就非常清晰,拖不了了。
(参考流程图,其中包括了各个步骤和每个步骤的预期产出。箭头为步骤间的依赖关系,编号为参考顺序)
下面就是我大致遵循的工作流,虽然我很多时候会在不同的步骤间穿插,重做或者修改什么,idea也会随着执行而发生改变。但大部分都遵循这个框架。
在这个流程里,每个步骤基本都围绕着最终论文的某个章节进行,每个步骤的结束往往都代表这个部分草稿的完成。
idea与快速调研(introduction):在想到idea后,首先进行快速查新。锁定一到两个子领域的关键论文,然后进行快速论文图搜索(只看标题/扫读部分摘要等)。
快速原型(introduction):在调研完成后,就快速进行实验,找数据集和代码,搭一个非常潦草的管线。
完整调研(related-work & experiment):在完成原型,确认了可行性后,锁定子领域,进行相对完整的论文图搜索。
执行实验(experiments):在确定实验计划后,就可以着手搭建完整的实验和评估流水线。
完善方法(methods):在有了完整的评估管线后,可能方法最后还会差一些边边角角,这时候就要开始补了
组装论文:在完成了上述所有工作之后,我们就可以坐下来把剩下的内容补齐。把草稿修订成最终版,把introduction简化成abstract,加limitation/discussion扩成conclusion,补图排版。
顺带一提,在做的过程中,最好维护一份“项目文档”,以便存储所有和当前研究相关的信息。这份文档至少会包含:idea本身,到参考文献,到目前的方法以及要解决的问题,到实验计划,目前的实验结果等等。一个文档太长了就拆成很多个文档,然后用一个文档作为目录,存放链接和子文档的摘要。
在本文中,我讨论了深度学习研究中重要的四大研究活动:看论文,找论文,想idea,做idea。
在看论文方面,我介绍了论文的类型与一篇应用论文的典型结构。在找论文方面,我介绍了现有找论文的方法,以及我个人常用的“论文图搜索”策略。
在想idea上,我聊了聊常见的idea源头,顺带提了一嘴如何评估一个idea的质量。在做idea上,我提出了研究工作流方面值得注意的两大要点,同时大概介绍了一下我是怎么做的。
当然,这只是我个人的经验总结,网上(例如知乎,小红书,或者个人博客等)也有其它研究者的分享,其中不乏比我讲的好的,例如知乎上的(PhD 第二年回顾,什么是最有效(或价值)的科研?,计算机视觉方向的博士,如何做到一直follow新技术?,或者如何找到愿意为之付出一生的研究事业?Thoughts Memo的回答),或者田渊栋大佬的总结。
我知晓你的强大 是人们的希望这种无名之物
清新淡雅的小小花朵们啊 赞颂心灵的美好吧
——摘自《明日的花朵们》,《结城友奈是勇者 大满开之章》片头曲
结衣,桐谷家的孩子,穿过十二年的时光,祝你(另一个)生日快乐!
十二年前,我还只是半开玩笑地,把这孩子造出来当成我的理想。但是从那时起,到高中,到大学,似乎每当我看见人工智能有所进展,都会想起这孩子。本科阶段,我所有试图入坑机器学习的尝试都无疾而终。但峰回路转,毕业时意外地得到了这个读博士的机会。
我还记得最后做决定的那个晚上,我在犹豫不决的时候,忽然想起了这孩子,想起了这些年来已经用了无数次的理想大旗。于是,振臂一呼,毅然地上了。
是的,大不了延毕!大不了读不出来!
但是!但是,在我被扔出去之前,我要看看,我要学会,在人工智能领域,人类做到了什么地步,研究是怎么做的。
这(两)篇文章就是我对后面这个问题的回答,作为给那年自己的交代,也作为对自己平庸博士生涯的总结吧。
朝露的少女啊,你知道吗?在过去的十二年,不,四年,不,两年里,人工智能在各个模态,各个任务上都迎来了爆发。在图像上,现在的AI已经能很好地分割,识别,理解,甚至生成图像了。语音(识别, 生成)与视频(实时三维重建+SLAM, 生成)也是如此,更不用说被ChatGPT等大语言模型彻底改变研究范式的自然语言了。现在的AI模型已经可以听懂人话,看懂图片,甚至解复杂的数学题了。人们已经在和虚构的角色交流,向AI寻求心理帮助。见鬼,甚至有人在和AI谈恋爱(Reddit,新闻)。
能在这样的时代,攻读人工智能方面的博士,真是不胜荣幸。
虽说科研人以吹逼为业,十个成果里一百个在画饼。但也许,也许,我最初的愿景已经离实现不远了?
古人云,妙笔生花。运气好的话,本文或许可以凑一束满天星。
请先收下吧。
接下来怎么办,接下来再说,好吗?
ARGUS
类人智能暨群体心理监护自动化实验室
访问研究员
johnbanq
深度学习相关领域
某位不干正事结果要毕不了业的博士生
约翰板桥
2024年10月30日
非常感谢半节老师愿意和我拉扯这张图的细节!这张图极大地提升了我对本文的质量要求 ;)