今天我遇到了两个大学时期的朋友,他们目前都在印度最成功的科技公司里担任软件工程师,而且已经自学深度学习一段时间了。
因为着迷于深度学习的发展潜力和市场热度,他们想要寻找到一个进入深度学习领域的专职机会,今天我们就和大家探讨一下,到底什么才是深度学习正确的切入点?
选择在初创公司的工作,还是去攻读一个硕士学位?
几乎每隔一天就有数不清的人来问我这个问题。遗憾的是,在今天之前,我也一直无法给出一个有条理的答案。下文中给出的答案是与我两个天才好友尽可能多地广泛讨论出来的结果。我也很自豪能够得到这样一个相对全面的答案。同时我也想邀请所有读者朋友们,在下面的评论部分表达你的见解,让我们来一起细化这个答案。
在今天的场景下,深度学习领域有两大流派。 这在其他科学研究领域也几乎是一样的。
流派1:在垂直应用中实现最先进的理论。
流派2:推动理论进步。
这两个流派都是同样有价值有意义的,但他们要求两套不同的技能和本领。我们称他们为S1和S2(免责声明:S¹∩S²≠∅)。
接下来,我们对S1和S2进行非穷尽的全面列举。
我们从S1开始。也就是在垂直应用中实现最先进理论的流派。其目标是用最先进的深度学习算法去解决问题。
举个例子,现在的问题是要建立一个对话式的人工智能代理来帮助数百万患有抑郁症和相关心理问题的人。
你通过一个快速的文献调查和专家咨询,找到了发表在最新的NIPS上的一个可以开发这样人工智能的顶尖技术论文,拿着这篇论文,你回想你开发系统的最初构想,比照你的问题陈述来分析这篇论文。
你需提出以下几个问题:
- 这篇论文对于你要解决的问题有多大的帮助?
- 你的系统部署规模是多少?本文提出的解决方案是否足够可扩展?
- 系统的最大允许延迟是多少? 如果你正在处理个人的隐私数据,建议不要将任何数据发送到云端且要在本地设备中做算法的学习和预测。论文中的解决方案是否适合处理这种情况?如果不适合,你能调整以使其适配吗?
类似这样,会得到与应用程序开发和部署相关的N个问题列出。你的工作是专注于实施,优化和调整NIPS算法以最终实现应用程序。
为此,你需要以下的技能(非穷尽),我们统称为S1
- 高超的编程能力,最好是软件工程的背景。
- 对核心算法进行优化的热情。
- 了解不同的硬件平台-如CPU(x86 vs ARM),GPU,FPGA,VPU / ASIC等,以及如何为每个硬件平台编写最优代码。此外,还可以判断给定平台是否适配你的应用程序。
- 高性能计算和大数据处理知识。
- 全栈的软件开发经验。
如果你具有S1的技能,那么你就属于类型1。可以称之为“深度学习工程师”。如果你属于类型1,你应该考虑在初创公司找一份工作,因为在那里你将有机会用最好的深度学习解决方案和你所具备的超级明星级的工程技能来解决迫切亟待解决的问题。
但和一个初创公司签合同之前,请检查以下内容:
- 与负责深度学习的部门主管交谈。如果他认为给予足够的具有标签的数据和计算能力,深度学习可以解决世界上任何问题,那么最好不要为那家公司工作;)
- 检查公司是否有足够的培训数据和(或)可以提供具有标签培训数据的机构有紧密合作。如果不是,拒绝。
- 公司是否与领域专家有已存的合作关系?(在反抑郁症AI的例子中,公司是否邀请了经验丰富的心理学家来做定期咨询?)如果没有,该公司是没用的。
- 公司是否与学术界的人工智能专家有合作关系,或者至少期望合作? 如果不是的话,那么在开发的过程中,你很有可能陷入困境或迷失方向,而且没有人能帮助你或纠正你的错误。
现在让我们来谈谈S2
也就是推动理论进步的一系列技能。你从NIPS 2017中挑选最吸引你的论文,决定超越它,达到更高的标准,并在NIPS 2018(或者也许2028,哈哈)中发布。当然时间是越远越好。考虑到这个一年(或者十年)计划,你可以规划好具体的研究步骤。
你需要以下的技能和本领:
- 享受学习数学的乐趣
- 能够在短时间内阅读和总结大量的文献资料。对手头的问题有全面的了解,并且能够找到阅读过的论文中提出的对该问题的解决方案的确切位置。
- 熟练使用自己喜欢的深度学习库(例如TensorFlow,PyTorch,Caffe等)将算法用代码实现。
- 出色的口头表达和协作能力。你需要能够简洁地向专家和合作者提出你的想法,并与他们进行有效的讨论。
- 优秀的写作技巧。即使是最好的想法也会因为报告展示的不够优秀而被拒绝。你应该能够写出非常好的英语。
- 毅力。准备好应对一系列拒绝,心碎,严重错误,执行失败和一些假性的研究工作。
如果你具备这些特征,你可能属于类型2。这种类型称为“深度学习科学家”。你应该去获得一个硕士学位(或博士学位)。在毕业前,你将被评估依据你在NIPS、ICLR以及ICML等会议论文发表的情况。所以选择适合你的研究实验室。
这里有一些你需要注意的事项:
- 谨慎地选择你的研究领域。记住,你的目标是完成硕士/博士学位,并在3-5年内完全适应市场。因此,确保你选择的主题在3-5年后仍然很火。而不是一些目前很流行的东西,因为这些很可能在你完成学业时失去热度。
- 谨慎选择你的导师——他/她是否鼓励前沿科技研究,与外界开展学术和产业的合作,提供实习机会并能和团队中其他研究人员开展自由互动?如果不是,则寻找其他导师。
- 你是否拥有必要的硬件设备,如GPUs、Xeon Phi/Xeon-scalable处理器、TPU(谷歌云)等。
- 你是否有一个好的工作环境?记住,你每天将在实验室里度过20小时。
- 你的团队是否有雄心?是否有追求在顶级会议和期刊定期发表论文的文化?你的团队是否在解决问题后有完善的记录?
是出国,还是留在自己的国家
在我看来,目前一个成功的研究者在海外的确能有很大的发展空间。但国内几所大学都拥有用于深度学习的最先进的硬件基础设施(其中大部分正在建设中,但都会在1-2年内完成)。这些研究机构拥有一些非常有才华的教授和刚起步但很有前途的深度学习研究小组。
但是,如果你倾向于出国,确保你前往的是一所顶级机构。在一所二等大学/研究所开展AI工作并不值得花费那么多开销,而留在国内,在你就读的大学工作显然是一个更好的选择。所以,如果你即将前往美国,尽可能靠近硅谷,那也不用问我了… :)
以上就是我们总结的结果!请确保你用上述特征恰当地描述了自己,并且要好好想想你是属于第一类还是第二类。然后选择就简单明了了。
- 如果你属于类型一,选择一个初创公司的工作
- 如果你属于类型二,去获得硕士/博士学位吧!
我上问说到的这种分析可能肤浅,所以我需要更多细节和进一步深度的思考。之后我收到了一些讨论,又有了一些补充想法来完善本文,如下。
补充声明:
Edit #1 on 06 Nov 2017
许多人(尤其是Arijit Patra)指出目前大量非计算机科学期刊/会议里的出版物都包含了使用深度学习的方法来解决各自领域的相关问题。尽管这些项目根据上文提出的分类属于流派1,但S1中列举的技都无关紧要。而S2中列举的技能变得更加重要。这也是我为什么强调S¹ ∩ S² ≠ ∅且交集中列举的技能都非穷尽。
人类不太可能同时掌握S1或S2列举的所有特点或技能。Arijit Patra认为我应该为这种项目给出第三种流派,他们被统称为“应用科学家”。但是我还是希望有所不同并维持我原始的分类。我建议那些对这一行感兴趣的人先去初创公司工作而不仅仅是去获得一个硕士学位。因为参与开发一个真正的产品会给予你重要的人生经验,也有助于找到你在项目中最适合扮演的角色(例如读者、作家、程序员、战略家)。你可能早已注意到发表一篇单个作者的论文在深度学习社区已经不流行了。即使你已经拥有硕士或博士学位,你也需要和一个团队共同工作。在深度学习项目的建立中,找到使你更具有生产力的角色是非常重要的。
原文发布时间为:2017-11-30
本文作者:Anirban Santara