1 前言
今年来,深度强化学习工程师/研究员已经成为腾讯,网易,字节跳动,华为,阿里巴巴,快手等大厂及一些初创公司如启元世界,超参数重要的招聘岗位,主要面向游戏AI,推荐系统等方向的落地,这对深度强化学习的发展是极大的利好。git
在这篇blog中我将以面试官的角度和你们分享一下深度强化学习工程师/研究员面试所需的必备技能,但愿对感兴趣的同窗有所帮助。github
2 深度强化学习工程师/研究员作什么?
以游戏AI为例,深度强化学习工程师/研究员固然是实现某一款游戏AI为目标,或者某一类游戏AI为目标。工程师(Research Engineer)比较强调工程实践能力,可以完成包括环境接口,算法,训练调优,模型部署等等工做,而研究员(Research Scientist) 比较强调理论深度,可以针对问题在理论层面提出解决方案,可以对最前沿的DRL相关问题进行研究创新,固然研究员的工程实践能力也是必不可少的。面试
2 面试考察的核心
首先先声明一下下面的标准是一个比较理想化的solid的社招标准,不是面向校招的标准。对于深度强化学习工程师/研究员,考察的核心包括如下三点:算法
- 对深度强化学习有足够的热情和信仰。只有对一件事情有热情,才有可能真正作好一件事,而且愿意为了达成目标去作其中可能比较枯燥的dirty work。所以,这一条要求会排除掉一些对深度强化学习没有热情,仅仅是由于它比较火就进来的同窗。
- 具备较强的深度强化学习的理论基础,包括深度和广度。广度是指对深度强化学习整个理论框架,最前沿进展的了解程度,包括深度强化学习及相关领域的各个方向。深度则是指深度强化学习某一个子方向的理解深度。
- 具备较强的工程实践能力,包括coding能力及工程经验。
下面咱们来具体分析一下以上3条标准。网络
3 怎么才算对深度强化学习有足够的热情和信仰?
所谓的深度强化学习信仰大概就是指你相信深度强化学习是一条通往AGI的道路。通用人工智能必定是经过神经网络自学习出现的。架构
这种信仰的感受大概就像上世纪70-80年代Hinton,Lecun,Bengio等老一辈深度学习先驱相信神经网络才是人工智能的将来同样。信仰大概就是就算这个方向如今很冷,很不work也照样作。如今咱们的状况实在是好太多。框架
但事实上如今还有不少研究机器人的同窗是不承认深度强化学习的,由于以为离现实状况差很远,没法落地。还有更多的人也是由于以为很差落地就放弃它的。这些都是不承认深度强化学习这个方向的体现。信仰没有对错,只有不一样。dom
想法老是有差别的,也许你的想法是深度强化学习能够变革游戏行业,变革推荐系统,变革机器人,这些都很棒。分布式
对于面试者,你简历上的项目就足够体现了你的信仰值。愿意花多少时间精力在一个事情上是对一个事情热情程度的充分体现。学习
固然,深度强化学习只是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的。只是最后老是要懂深度强化学习才能更好的协做。