入门一年多来的心路历程
2016.11~2017.3
时间倒回到大二上,那会就想做一点跟数学和计算机相关的东西,就入了计算机视觉( CV )的坑。
•最开始是重新学了一遍线代,毕竟 ML 里面,还是以数学为基础的。大一学的线代是皮毛,根本不够看,SVD ,PCA 在干嘛根本不清楚。补课是必须的。
•我也看了吴恩达在 coursera 上面的视频,其实那个视频呢~很简单的基本概念,但是很重要,因为有助于你形成机器学习大概是做些什么东西。
•为了用一些框架,不得不去自学 Linux 。玩了一点点点 OpenCV
•同时我还在刷 CS231n ,写了 CS231n 的 code对于我而言作用很大。至少把Numpy的坑踩得七七八八了。也明白了一个深度学习框架究竟在做什么。
其实看完这些东西,已经基本入了门了。但入门的话,其实大家如果和我做的差不多的话应该都入了。更重要的是要在某一个点上面钻研。
说起大概就是以下几个东西比较主要
•C++ Python Matlab LaTex Linux 这种编程的是必须要会的东西
•Pytorch Tensorflow Caffe MXNet 这些深度学习框架至少要会一个
•数学需要的知识有很多 微积分 线性代数 概率论 实变函数 泛函分析 拓扑学 测度论 凸优化 信息论 等等,虽然数学这些东西你一开始入门不需要掌握,但如果想做很深入很深入的理论研究,总是得花时间慢慢补起来的。(我现在就受限于此,很多特别深入的东西没法搞懂...)
2017.4~2017.5
由于 ML&CV 这种东西吧,其实领域很大,你不可能做到样样精通,涉猎可以,但必须要有自己深入的点,想做学术想做研究更应该是如此。我第一个选定的东西是 GAN ,最开始看的代码是网上开源的 DCGAN 的 tensorflow 代码。强烈建议你们一开始入完门看多几次源代码,收获很大。那段时间我一直在拼命看论文,去知乎/ CSDN 上面找 GAN 的推荐论文,其实论文质量有好有坏,在最开始入门的时候,看那种有人做过的论文笔记的,有助于快速上手。 做研究初期就应该这样子,不是说一上来就去看一大堆高深莫测的最新论文,重要的是找对论文和会看论文。我在这期间看论文的速度其实是越来越快。
看什么论文呢?
我的建议是先看领域里面的经典论文,这些往往是后面论文的基础,而且这种论文特别容易在 CSDN ,知乎等等找得到对应的笔记(别人把关键信息提炼了出来)。当然,不能盲听盲从,你往后会发现这些笔记里面其实有很多错误,但对于一开始的你而言,我觉得这是上手最快的方法。
然后看去年今年的顶会论文,这些论文往往思路比较新颖,而且也是当今的研究方向。如果最开始的你不知道怎么找顶会,那继续去看各种博客,他们一般会有一些比较粗略的总结,再把标题复制出来自己详细读。(顶会列表我在后面给出了)
arxiv.org 上面的论文基本上是最新的,我不赞同刚入门的人去看这个,毕竟很难辨别好坏,但是你在知乎上面看到的那些如何评价 XX 论文,以及 reddit 上面那些讨论,基本上都是arxiv 预印本上面的最新。如果你真的觉得自己可以跟得上最新的论文了,我推荐去看爱可可爱生活这个微博,这是北邮一个老师的,经常会推送一些最新的论文。
怎么看论文呢?
•论文拿到手先看 abstract
•然后看论文里面那些 figure 和 table
•接着 introduction 和 conclusion
•最后再去看implement detail和experiment
•有时候一篇论文在作者的个人主页有一个 project homepage,在里面有一些 demo 和 slides,这些东西是可以能够帮你快速抓住论文的重点节约大量时间的
•可能最开始看论文的速度不够快,不要灰心,慢慢来,多看一点论文你就能抓住重点了。
•我们一篇论文看完摘要和图之后,大概就知道是不是我们想要的东西了。所以如果不喜欢,或者很快就get到作者的点,或者觉得这篇论文没有亮点,那我觉得这篇论文的阅读应该就此打住了。
idea怎么来呢?
•最开始自己是想不出发论文的 idea 的,但在论文看多之后,其义自见,你会对一个问题有着自己独特的深入的理解。
•这个时候你可能会有一些 idea 了,你会发现什么东西别人没做过,什么东西可能可以做一下,什么东西可能可以 work ,这都是个积累的过程。
•不要去随便提出一个 idea ,最好还是深思熟虑以下,你在 purpose 之前最好能够明白为什么这个东西可以 work 。我知道这不是一件十分容易的事,但我们必须要有这种的态度,认真对待自己的每一次尝试。
•其实在这种不断自我否定自我肯定的过程中,你会得到成长。可能会出现你的 idea 被别人抢先发表的情况,可能做研究陷入僵局,可能某一个 BUG 出了半天没解决,可能 idea 一直没有好的实验结果,我都体会过。但重要的是思考 idea 实验 diea 的过程和总结。
2017.11-Present
后面呢准备了一个半月的期末,后面一段时间也在学点英语把。大概是 2017.11 重新回到战场,这段时间内我看论文的速度有了明显提高,一天精读3篇略读5篇,很快就能 follow 上最新的论文(这里不是指顶会,我指的是 arxiv )。产 idea的速度也很快,但是实现出来的速度还是太慢了。 我后面做的东西是 style transfer 和 edge detection 还有 metric learning 的东西,其实这些东西都不简单,paper 阅读量很大。需要足够的 self-motivated 才能够处理得好。
找准自己想要钻研的问题,然后持续的看论文,想idea,实现想法!不断迭代!
一些常见的人工智能领域顶会
机器学习:ICML,NIPS,ECML,AISTATS,UAI 人工智能:AAAI,IJCAI 计算机视觉:CVPR,ICCV,ECCV 数据挖掘:KDD,ICDM 自然语言处理:ACL,ENMLP,NAACL 信息检索:SIGIR
其实我也列不全,分类也不一定正确,在 arxiv.org上面也有很多优秀论文,github 上面也有不少不错的开源项目
总结
•数学和英语都很重要
•机器学习的基础以及你对应的领域的基础也很重要,不然会成为你今后看论文的绊脚石
•要学会选论文,看论文
•开源代码要多看,深度学习框架要会一个
•网上资源很丰富,要会利用,可以节省时间
•做研究一定要有耐心
•有事没事可以做个project玩玩,这种东西可以提高你的综合素质,也可以复现别人的论文
•如果是就业导向的,一般都要求你基础算法扎实而且有很强的工程能力以及调过复杂的系统,最好发过顶会论文或者打比赛有了很好的成绩
我个人的话,因为我是做研究导向的,我其实觉得有一个合适的导师带着十分重要,如果真的有很强的 self-motivated 的能力的话,应该往顶会看齐,不要以为本科生不能投,投了中不了顶会,中的了顶会的大把本科生在。关键在于你有没有这份心,在这个过程中收获了什么。像我自己,我目前也没有投过和中过顶会,但你在准备的过程中,就能有所提高。 还有就是增强工程能力的方法就是复现别人的论文和结果,或者自己做一些小项目,要有针对性的去提高自己。找准了方向就往里钻研,掌握一套分析问题的方法,最经常的做法就是把结果可视化,找准一个合适的 loss function 等等等等。