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的。只是最後老是要懂深度強化學習才能更好的協做。