1 前言
今年来,深度强化学习工程师/研究员已经成为腾讯,网易,字节跳动,华为,阿里巴巴,快手等大厂及一些初创公司如启元世界,超参数重要的招聘岗位,主要面向游戏AI,推荐系统等方向的落地,这对深度强化学习的发展是极大的利好。
在这篇blog中我将以面试官的角度和大家分享一下深度强化学习工程师/研究员面试所需的必备技能,希望对感兴趣的同学有所帮助。
2 深度强化学习工程师/研究员做什么?
以游戏AI为例,深度强化学习工程师/研究员当然是实现某一款游戏AI为目标,或者某一类游戏AI为目标。工程师(Research Engineer)比较强调工程实践能力,能够完成包括环境接口,算法,训练调优,模型部署等等工作,而研究员(Research Scientist) 比较强调理论深度,能够针对问题在理论层面提出解决方案,能够对最前沿的DRL相关问题进行研究创新,当然研究员的工程实践能力也是必不可少的。
2 面试考察的核心
首先先声明一下下面的标准是一个比较理想化的solid的社招标准,不是面向校招的标准。对于深度强化学习工程师/研究员,考察的核心包括以下三点:
- 对深度强化学习有足够的热情和信仰。只有对一件事情有热情,才有可能真正做好一件事,并且愿意为了达成目标去做其中可能比较枯燥的dirty work。因此,这一条要求会排除掉一些对深度强化学习没有热情,仅仅是因为它比较火就进来的同学。
- 具有较强的深度强化学习的理论基础,包括深度和广度。广度是指对深度强化学习整个理论框架,最前沿进展的了解程度,包括深度强化学习及相关领域的各个方向。深度则是指深度强化学习某一个子方向的理解深度。
- 具有较强的工程实践能力,包括coding能力及工程经验。
下面我们来具体分析一下以上3条标准。
3 怎么才算对深度强化学习有足够的热情和信仰?
所谓的深度强化学习信仰大概就是指你相信深度强化学习是一条通往AGI的道路。通用人工智能一定是通过神经网络自学习出现的。
这种信仰的感觉大概就像上世纪70-80年代Hinton,Lecun,Bengio等老一辈深度学习先驱相信神经网络才是人工智能的未来一样。信仰大概就是就算这个方向现在很冷,很不work也照样做。现在我们的情况实在是好太多。
但事实上现在还有很多研究机器人的同学是不认可深度强化学习的,因为觉得离现实情况差很远,无法落地。还有更多的人也是因为觉得不好落地就放弃它的。这些都是不认可深度强化学习这个方向的体现。信仰没有对错,只有不同。
想法总是有差异的,也许你的想法是深度强化学习可以变革游戏行业,变革推荐系统,变革机器人,这些都很棒。
对于面试者,你简历上的项目就足够体现了你的信仰值。愿意花多少时间精力在一个事情上是对一个事情热情程度的充分体现。
当然,深度强化学习只是AI的一个分支,还有很多很多的模块去支撑深度强化学习的发展,比如模仿学习Imitation Learning,元学习Meta Learning等等。对这里面的某一块有深入的研究都是非常好的。
参考面试问题:
- 你为什么会选择深度强化学习?
- 你从什么时候开始学习深度强化学习?学习的方法是什么?
- 你最希望研究或应用深度强化学习的方向是什么?
- 你对深度强化学习目前最前沿的进展了解哪些?
- 如果你不能做深度强化学习方向的工作,你会选择什么方向?
4 深度强化学习的理论基础考核什么?
只有热情肯定是不够的,更重要的是在这个领域已经有了一定的探索,形成了较solid的理论基础。
4.1 广度
Flood Sung:最前沿:深度强化学习的强者之路 zhuanlan.zhihu.com在这篇文章中,我们已经提到了深度强化学习会涉及到的方方面面,涉猎多少完全取决于paper阅读量。
https://github.com/junhyukoh/deep-reinforcement-learning-papers github.com这一份paper list 16年就停更了,但仍然有参考价值,作者也已经去了Deepmind。未来,我们也会分享深度强化学习相关的核心paper list(敬请期待)。
paper阅读是无止境的,阅读越多,积累越多自然而然对于一个具体的问题,是可以较快的打开思路,给出一些想法的。
以下是一些估计面试者深度强化学习相关知识广度的面试题:
- 你是否了解Model Based Learning?有什么新的进展?比如World Model?Dream?MuZero?
- 你是否了解Meta Reinforcement Learning? 为什么Reptile应用的效果并不好?Meta RL不好应用的原因有哪些?你觉得Meta Gradient Reinforcement Learning怎么样?
- 你是否了解Imitation Learning?GAIL? Deepminic?
- 你是否了解DRL的一些最新改进?R2D3?LASER?
- 你是否了解Multi-Agent Reinforcement Learning? 比如MADDPG比较早的,思想是什么?和一般的DRL有什么区别?
- 你是否了解seed rl? 对于大规模分布式强化学习,还有更好的提高throughput的方法吗?
- 你是否了解AI-GAs? 你对这个理论有什么看法?
- 你是否了解Out-of-Distributon Generalization? Modularity? DRL要实现足够的泛化Generalization有哪些做法?Randomization?
- 你是否了解Neural-Symbolic Learning的方法?怎么看待?
- 你是否了解unsupervised reinforcement learning?Diversity is all you need?
- 你是否了解offline reinforcement learning?
- 你是否了解Multi-Task Reinforcement Learning? Policy Distillation?
- 你是否了解sim2real? 有哪些方法?对于drl在机器人上的应用怎么看?
- 你是否了解go-explore? 对于hard exploration的问题,要怎么处理?
- 你觉得目前的DRL最值得研究的方向是什么?为什么?
- 现在来了一个游戏AI项目,比如NBA 2k21,你会考虑怎么去做它?技术路线是什么?大概需要多久?多少人?如何分工?(这个问题考察宏观思维)
这里并不要求对每一个方向都能知道,但显然知道的越多越好。
4.2 深度
深度则考察面试者在某一个具体方向上的理解和掌握程度。由于目前应用最广的就是PPO和IMPALA了,所以,深度掌握PPO或IMPALA的具体理论和细节是考察的核心之一。如果面试者在某一个方向有深入的研究,有顶会paper,那么会按照paper来考察。与此同时,一般面试官还会考察和神经网络结构相关的问题
参考面试问题:
- 你是否了解Transformer?能否具体介绍一下实现方法?
- 你是否了解Pointer Network?和一般的Attention有什么不同?
- 什么是Importance Sampling? 为什么PPO和IMPALA要使用?两者在使用方式上有何不同?能否结合?
- PPO在实现上是怎么采样的?为什么使用Gumbel-max? 能否解释一下Gumbel-max 及Gumbel Softmax?
- 是否了解SAC? SAC的Policy是什么形式?SAC的Policy能实现Multi-Modal吗?
- 是否了解IMPALA?能否解释一下V-Trace?rho和c的作用是什么?
- PPO里使用的GAE是怎么实现的?能否写出计算过程?
- 是否理解Entropy,KL divergence和Mutual Information的含义?
- 你是否了解AlphaStar的scatter connection?怎么实现的?
- 对于多个entity的observation,你会怎么预处理?神经网络要怎么构建?
- 你是否了解AlphaStar的League,能否解释一下?如何让agent足够diverse?
- 。。。
上面的问题就比较细节了,一般也不要求什么都懂,毕竟没有也不需要懂得所有,但是至少面试者在某一方面展现了对问题理解的深度 。
5 工程实践能力考察方式
这个比较直接了,首先是Leetcode,虽然说Leetcode上面的题和真正工程实践上的问题差别很大,但Leetcode是一个标准化的可以体现面试者coding水平的方式,所以被广泛采纳。Leetcode不仅仅考察coding水平,也同时考察面试者短时分析问题的能力。
除此之外,如果面试者有一些DRL项目,那么面试官一般也会根据项目来问问题。项目越多,工程实践能力往往越强,对于前面深度强化学习的一些理论问题自然就很容易回答。比如面试者就从0实现过PPO,那么必然对PPO的细节非常清楚。
6 小结
总的来说,深度强化学习工程师/研究员的面试要求还是很高的,需要在这个领域有足够的积累才行。但想想成为深度强化学习工程师/研究员之后,就有机会接触到真正的大项目,进行大规模的深度强化学习训练,去培养一堆的智能体,去创造智能,去观察智能的涌现,是不是就会很兴奋呢?
PS:由于作者能力有限,仅是一家之言,每个面试官的喜好都不一样,仅供参考。但相信,如果上面的要求都能满足,一定offer拿到手软。
PS 2:并不一定要完全懂深度强化学习才能参与这方面的项目,比如环境接口对接,仅需要很强的工程能力,比如懂的弄gRPc,Protobuf,比如模型部署,懂的把Tensorflow,Pytorch的模型部署到手机上,服务端,还有大规模分布式强化学习的底层,需要懂系统,架构的同学。所以,如果你有做这个方向项目的热情,但是拥有上面举例的能力,也是OK的。只是最后总是要懂深度强化学习才能更好的协作。
来源:oschina
链接:https://my.oschina.net/u/4339481/blog/4498611