田渊栋:业余做研究的经验

640?wx_fmt=gif


这四个月以来,白天去公司干活,晚上在谷歌吃完晚饭后骑车半小时回来继续做自己的研究,一直到晚上十一二点睡觉为止。做的工作仍然是博士阶段的研究课题。这部分工作最近有幸在今年的 ICCV 拿了马尔荣誉奖,但是里面可供挖掘的东西仍然很多,这几个月把空闲时间拼凑起来,取得了不少令人满意的进展。 


下面说一说这四个月来一下利用业余时间做研究的经验,或者说做“民科”的经验 (笑)。说实话,我不知道自己能坚持这个模式多久,但先总结一下分享给大家,总是好事;另一方面,以后自己懈怠了,再拿出来看看也是不错的。 


在这里,我假定大家是有兴趣做自己喜欢的事情的,不然回家那么累,看个电视呼呼睡倒,还谈什么再做一个课题,更不用说成果。有了兴趣,心里能总是把想要做的事情放在第一位,才能继续。 


有了兴趣之后,研究的思路可以冒出很多来,我经常有这样的体验,看完了涯叔的帖子,突然对赤壁大战有兴趣了,然后就开始 YY 站在曹操的角度看应该如何做选择,如何调兵布将,等等,有时还会为自己的天才想法而沾沾自喜。但这些是否就能东拼西凑出一部有关赤壁大战的专著呢?答案当然是否定的。 


扫描二维码关注公众号,回复: 5459704 查看本文章

天下什么样的观点都有,但有用的思路并不多。做研究是要分析,哪些思路能拧成 一股绳,哪些其实本质上相互矛盾,哪些需要妥协甚至放弃,哪些则是毫不动摇的真理。把这些整理出来变成协调一致的理论,才能算是有了成果。要做到这个,是需要有长久的积累功夫的。思路要系统化理论化,把每天想到的都放在一个大背景和大框架下,时常拿出来反复思量推敲,慢慢地去粗存精,取本舍末,才能见别人所未见。发别人所未发。 


这个就是研究的大概目的。为了这个目标,业余做研究就要解决两个具体问题,一是时间少,二是任务难。解决方案很直接:时间少就要提高效率,任务难就要循序渐进。


以我的经验,做任何工作,全神贯注是最好的选择,做完一件再做另一件。随意在不同任务间切换所需要的代价是非常大的。同时做两件事情所需的时间,是先后或者分别做两件事情所花时间的两倍不止,并且更麻烦的是工作质量不高。试想下花十五分钟的写的破烂程序,却要花几个小时去调试它,还不如花三十分钟精工细作来得有效。我见过有同时做很多任务,也做得很好的人。但我自己觉得不是那块材料,还是老老实实地一件一件做完。 


明白了这个道理,做主业时要全神贯注,做副业时也要全神贯注,这样才有高效率 ,能在八个小时内把主业做得让同事和老板都满意,除去吃喝拉撒睡还有陪老婆的时间,每天余下的三四个小时才属于自己。这三四个小时,大概只能做一件主要和一件次要的事情。主要的事情比如说集中想一个问题,或是看两篇文章,或是整理思路,或是把自己的代码调通,或是把这一篇博客写完;次要的事情包括各种生活琐事,或是回几封长邮件随便聊天,或者给明天的研究起个头。如果想要一下完成太多事情,那一般只会带来挫败感。 


之后,就要解决做研究任务难的问题。世上的大部分任务,按“过程的难易”与“ 得到成就感的速度”这两个维度分类,可以分成四个级别。一级任务过程简单回报快,比如说杀怪升级或者按老虎机;二级任务过程简单但回报慢,比如说日常工作 ;三级任务过程复杂需要反复思考,但回报快,比如完成一个有趣的小程序小想法 ;四级任务,是方法没有现成的,需要自己从已有的工作里总结寻找;进度无法控制,有时就差一步到终点却一无所得,不得不推倒重来——这就是做研究。 


因此,做研究之类的四级任务,常常让人有绝望感,业余做研究,时间又受限制, 更是难上加难。怎么办?找一个办法,把它的级数降下去。 


怎么降?以我这四个月的经验,最重要的一点是要做好笔记。笔记有两个作用,其 一是给自己一个工作进度的表示,想到哪里了,做到哪里了,哪些地方还没有思考过,哪些地方想过了但是还不周密,想过的情况越多,走过的错路越多,说明自己 较之前有所进步,这样人为地将成就感提前,四级任务就变成三级任务。第二个用处,是作为思考的路标,方便自己从之前中断的思路重新开始,节约本就珍贵的时间,集中火力攻克目前的重要问题。不然今天想这个,明天想那个,虽然天天都很辛苦,但是目标不明,攻击力度不够集中,做不到绳锯木断水滴石穿,到最后累死 累活,什么也没有。 


时间久了,笔记会越来越长,细节也会越来越多。因此每隔一阵子要推翻重写一次 ,作为大的思路整理,把细节砍去,重新留一个主干出来。有很多细节在落笔的时候认为非常重要,但是在之后回顾的时候,却发现它其实是可以舍去的。每次出现 这种情况的时候,说明思路又向外扩展了一层,往目标又前进了一步。 


等到觉得这个框架靠谱的时候,就可以动手写代码。写代码本身是一种放松,因为许多部分不需要动脑,这样就能降四级任务为两级,心理压力能小很多。另一方面 ,是能逼着自己把思路具体化,发现光凭思考发现不了的问题。有时候写着写着, 又会回到思考的过程中去,再一次开始迭代的过程。 


做研究犹如逆水行舟,今天顺风顺水奋力向前划了一百米非常高兴,明天一个逆流 出现倒退两百米甚至翻船都是常有的事情。但是不能气馁,有耐心慢慢来,之前说 做项目不能死磕,但做研究就是要死磕,时间长了,摸清了水流的变化趋势,摸清 了所解问题的一般规律,终有一天,任你顺流逆流,都能来去自如。 


那么,如何才能做到全神贯注呢? 


话说某年某月某日,一位绝世大侠在酒楼与众兄弟把酒言欢,好不快活。突然间一声呼喝,仇家披麻戴孝拔刀上楼,众酒楼宾客见了这阵仗,无不体似筛糠,心惊胆战。大侠见了,一口烈酒入肚,神情肃穆,站起身来,厅堂的聒噪浑然不觉,周围的兄弟视若不见,眼里只有对手的一举一动,一招一式。然后对峙,猫腰,冲刺, 拔剑,兔起鹘落间,剑芒暴起,人头落地——接着,小二还六神无主时,大侠早泰然自若,呼喝道:“牛肉两斤,拿酒来!” 


小说家笔法虽然夸张,但所谓全神贯注,确实就是如此。不在乎何时何地,时间长短,但要目标明确,心无旁骛。所要解决的问题在心里不停重复,并赌上所有的脑力资源在短时间内反复思考,不达目的誓不罢休。要推公式?推完前不许聊天不许上厕所,要调程序?调完前不开网页不查邮件。等到看见问题关键所在——或许只 需要十五分钟半小时——之后,微博该刷就刷,论坛该逛就逛,帅哥美女该聊就聊,悉听尊便。因为今天又有进展了,奖励自己有啥不对的嘛。

借通信的术语来说,大脑不擅长频分复用(同时干多件事),但很擅长时分复用( 每次干一件事)。大脑更像激光而不是日光,要么不打开,一打开就在纸上烧洞的。所以牛人们虽然平日里谈笑风生,但都有大脑周期性抽风的症状,这不是病,而是大脑集中力的体现。真要每天工作十几个小时,把战线无限延长,虽说没功劳也有苦劳,但效率如何很难讲,至少我是做不到高效率的。 


那如何训练这种技能呢?这个我觉得不是天赋,而是后天可以培养的,关键在于抽时间做一些需要费脑反复思考的工作。比如说看明白维基百科上一个抽象概念,看懂一个数学定理或者一篇技术文章,完成一个需要比较复杂算法的小程序,认真下一盘棋,看个长贴思考中心思想,或者写一篇思路清晰的长博客,都是可以的。确信做完一件事情之后,休息一下,作为奖励。像这篇博客,本来是没有的,但是早上起来突然有想法了,马上捧起电脑,花了两小时写完改完分享给大家,任务完成 ,我爽,读者也爽,皆大欢喜。


当然,所要解决的问题不能太复杂。今天突然心血来潮,要去弄懂张益唐大牛关于素数间距的证明,或者要写一个比谷歌更牛的搜索引擎,都是注定要失败的,并且这样的失败只会给自己负面的印象,影响继续向前的动力。比较好的办法,是根据自己的情况循序渐进。如果问题一时半会儿解决不了,就自问卡在哪里了,比如说忘记数学公式怎么推了,或者某个概念不太明白,那下一次解决问题的时候,就把目标定得低一点,把公式推完概念弄懂就好。完成了一个目标,再考虑下一个。做研究也是一样,只是对于问题定义和任务分解,需要更高段的技巧,和永不放弃的 耐心。 


时间久了,当思考成了习惯,做事自然就会专注,做事专注加上循序渐进,正反馈就来得快,看见了自己的点滴进步,自信也就渐渐上来了。然后就会明白,别人在做什么,别人如何成功,其实和自己的内心平衡没有关系。各人情况迥异,沉浸在比较的虚荣和痛苦中是没有意义的,把自己的事情做好就行,于是负面情绪就会变 少,人也就会活得更自在一点。这些,是全神贯注对于个人修养的长期效用。 


现在有些人帖子太长就不愿意看,分析事物只愿意付诸情感,时间长了,思考能力是一定会下降的。不去分析做事的哪步出了问题,只感叹自己老了不行了,结果该放弃的放弃,不该放弃的也放弃了,分明学了二三十年,终于有了学识和经验,精力能力还没有退化,却要做退休养老的打算了,岂不是太可惜了么? 


 除了要专心之外,做研究,有两个坎要过,一个平衡要把握。 


其一,读别人文章是坎。读文章初时觉得文献浩如烟海不可胜计,每年又新增几百上千的文章,每篇艰深莫测,看也看不完,更不用说追踪研究领域的最新动态,很有挫败感。但看多了,就发现翻来覆去原来套路就这么些,新文章再出来,大概看个半小时或一小时就能领会其精神,这样,第一个坎就过了。 


这其中的要义,是要多思多想,积极地归纳总结。我见过同学每天熬夜看一箱一箱的文章,但却不善此道,叫他说出这些文章的主线是什么,他却被各种细节所迷惑,说不出个所以然来。这样辛苦是辛苦了,却事倍功半,要是处于这种状态,那就是要糟糕,得停止继续看下去,回头好好想想了。 


其二,做创新研究是坎。做研究一开始随意创新好像天地广阔,各种新思路层出不穷,一会一个想法。但是等到深入下去,就会发现自己做的和前人工作并无太大不同,这里走一步,做过了,那里走一步,也做过了,回头走一步好像没有前人工作,效果却不好,气急败坏之下贸然投文,篇篇被拒,就像是孙悟空自以为神通广大,却怎么样也逃不过如来的五指山。这时才知道自己渺小,同行们个个牛逼,挫败感顿生。借用《棋魂》里近藤光对佐为说的话:“以前看不到你的剑锋在哪,所以下棋时无知无畏;现在看到你的剑锋了,于是畏首畏尾,不敢出招。” 


要过这个坎,首先得做深入研究,看到自己思路的浅薄和渺小;然后得要迎着困难,不停思考不停尝试,在这个过程中一点一点深入总结前人工作,看到它们的本质,分析它们的弱点,寻找改进的方案,最后走出原地踏步的怪圈,磨出一篇好文来一剑封喉。第一个阶段没过的人,往往思路很多却从未实行;第二个阶段没过的人,往往放弃了读博,都是很可惜的。 


明白了这两个坎,心理上会有准备,做事就会有长远打算,耐心也能磨出来。 


接下来,要掌握“细节”和“主题”之间的平衡。 


大家都知道“细节决定成败”或是“一屋不扫,何以扫天下”这样的谚语,也知道“纲举目张”或是“提纲挈领”这样的成语,这两种观点初看起来是完全矛盾的— —到底“大节”或是“细节”哪个重要?其实,这个抽象的哲学命题没有意义,不自己去尝试具体问题,是不知道里面的“度”在哪里的。尝试多了,大脑自然知道哪些细节是可以忽略的,哪些细节是关键,差之毫厘谬以千里。 


读别人的文章,首先读到的是它的思路它的贡献,细节往往放在最后讲,这样显得条理清晰,逻辑清楚,论证有据。但真实做研究则截然不同,往往是先找到正确的细节,然后推广而成理论;先有乱七八糟但管用的方法,然后回头整理,扮一副堂皇的样子出来见人。事实上,就如同哲学理论不能解决任何具体问题一样,一个不为特定问题量身定做的理论,直接拿过来管用的概率是很小的。若是它真的管用( 比如说深度学习),那么一定是有未被发现的深刻逻辑隐藏其中。因此,读的时候,不要被文章中的各种卖点迷惑住,通过思考,通过重复别人的实验,想方设法找出其中真正重要的东西,才是明路。 


那自己做研究的时候要怎么办呢?作为贴着码工的标牌,其实骨子里是做数学证明的我,现在实践下来行之有效的办法,是主题和细节交替来,前者告诉自己“我想要达到的目标是什么”,而后者告诉自己“我现在能做到什么”,一边是文章满意度的上界,一边是下界,两边碰了头,文章就有了。具体来说,从正确的细节出发,可以为文章的主题定调,这样得到的往往是引理定理满天飞却不知所云的文章;另一方面,从自己想做的框架出发,可以确定什么样的细节是需要证明的,为将来的努力把准方向,许多小定理小结论虽然本身漂亮,但是于大节毫无关联,只好忍 痛放弃。如此往复,直到最后大部分细节都思考过了,再从一个合理有趣的框架开始,从头到尾地理一遍,终于把所有的部件都组装起来,成一个细节上正确无误,大节上又有出彩贡献的理论,这样就功德圆满。 


为此,需要写,不停地推倒重写,每次看似重复的劳动,其实都有新发现。或者只是某个符号错了,或者某个定义需要修改,或者突然发现其实整个逻辑都有漏洞,需要推倒重来。单纯的思考(表现为托腮发呆)往往又耗时,得到的结论还是错的,在单纯思考下很多问题粗想一想好像理所当然,不值得下笔,但真一下笔就发现问题所在,或是有隐含假设,或是有概念滥用。特别对刚开始做 PhD的同学而言, 往往有雄心没技术,经常思路发飘,一思考就容易陷入混乱,为了让思路更精确,把所思所想写下来组织好是很重要的,时间长了,套路领会了,思考的效率就会提高,才能很快找到要点。 


实验科学要怎么办呢?以我这半年在谷歌的经验,虽然要解决的问题截然不同,但同样要遵循上述原则。一方面在已有解法上小修小补,找到能让效果更好的管用小设计,让自己至少出点活有绩效,这时,细节决定成败;另一方面则要推翻现在的解法,从大方向出发,思考现在手头做的是不是有长远意义,能否解决长远问题,如果答案是否定的,那么就应该尽早开始做正确的事情。后者传统上来说是项目经理要负责的,但是若是自己能提前想到,那效率会高很多。 


最后,如何检验自己的成果呢,如何证明自己已经跨过难关了?很多人觉得博士生或是研究员们神秘莫测,但其实文章真正接收发表的时候,至少是我,对自己不懈努力苦心经营,每一点都思考到想呕吐的模型往往是非常鄙夷的—— 不过如此嘛,这么简单的东西居然想了好久才弄出来,啊啊啊,我实在是太笨了! 


有这样的想法,那发表出来的东西,基本靠谱。

————

编辑 ∑ Gemini

来源:田渊栋

微信公众号“算法数学之美”,由算法与数学之美团队打造的另一个公众号,欢迎大家扫码关注!

640?wx_fmt=jpeg


更多精彩:

如何向5岁小孩解释什么是支持向量机(SVM)?

自然底数e的意义是什么?

费马大定理,集惊险与武侠于一体

简单的解释,让你秒懂“最优化” 问题

一分钟看懂一维空间到十维空间

☞ 本科、硕士和博士到底有什么区别?

小波变换通俗解释

微积分必背公式

影响计算机算法世界的十位大师

数据挖掘之七种常用的方法


算法数学之美微信公众号欢迎赐稿

稿件涉及数学、物理、算法、计算机、编程等相关领域,经采用我们将奉上稿酬。

投稿邮箱:[email protected]

猜你喜欢

转载自blog.csdn.net/FnqTyr45/article/details/88096993
今日推荐