上周面完了互娱的三面,今天稍微空闲下来写一写面经,顺便许愿一个意向书。
整体来说互娱面试难度适中,对算法的理解需要较为深刻,并且要求算法代码有自己上过手(看别人源码也行,但必须要看懂实现细节),只要基础比较扎实的话通常是可以有三轮面试机会的,下面我大概总结一下整个流程。
一面
一面主要分为两个部分:询问项目 + 算法基础
项目部分:
因为针对于多智能体和单智能体我自己分别写了两款游戏环境用于验证一些主流的单/多智能体的RL算法,因此这一次面试中面试官在项目部分主要问的是游戏-算法的架构设计:
1. 整个系统的设计模式是什么样的?游戏端和算法端是如何进行数据通信的?游戏端内部如何响应算法的决策行为?算法模块如何接收游戏端发送来的状态数据?
2. 游戏中都涉及到了哪些决策行为,是连续的还是离散的?
3. 这两款游戏为什么就适合验证单/多智能体算法?
4. 如果现在有一个游戏,但它原本设计的时候并不是为了强化学习而设计的,那么想要打通游戏与算法的通信管道应该怎么做?
算法基础部分:
1. 你说你用到了算法库中实现了PG/DQN/PPO,那你分别介绍一下这三个算法吧。(建议:每一个算法从设计初衷开始介绍,算法提出是为了解决什么问题,怎么解决的这些问题,最后讲一讲代码是怎么实现的)
2. 你说PPO中用到的Importance Sampling,但同样作为Off-Policy的DQN为什么不需要做Importance Sampling?(从更新公式和策略模型方向回答)
3. 你说的PPO中的Surrogate Clip具体Clip的是什么,为什么要做Clip?(从Importance Sampling的原理反推出分布差异不能过大的这一局限性)
4. 说一说AC吧。(介绍AC的设计初衷和代码实现)
5. 你说actor的更新是受到critic的指导的,那具体是如何进行指导的?(从variance和baseline这两个方面回答)
二面
二面和一面流程差不多,主要分为两个部分:询问项目 + 算法基础 + 算法题
感觉每一轮面试官都比较关注项目,都会问一些项目相关的问题:
1. 训练的时候你的游戏是分布式部署的还是独立部署的?
2. 游戏端有设计wrapper吗,具体有哪些功能?
3. 支持并行化学习吗?
4. 看到你提到说游戏是支持self-play的,如何支持的?训练效果怎么样?
算法基础部分:
1. 聊一聊GAE吧。(从设计初衷到计算公式最后代码实现讲一讲)
2. 如果我的Replay Buffer中现在只有128个steps,但一直到第128个steps都没有遇到terminal state,此时我应该如何计算GAE?(用伪状态值代替)
3. 你用MADDPG是如何解决离散行为控制的?(连续变量离散化)
4. 游戏中很可能在某些状态下出现某些行为此时不能被采取的情况,这种情况下该怎么办?(QMIX中如何实现和PPO中如何实现)
算法题:
1. 找连续数组中缺失的一个数。
三面
三面是主管面试,主要针对项目进行提问,前面两面项目都问的比较粗略,三面问的会很细节:
1. 单/多智能体的游戏剧本是什么?
2. 游戏中有几类Agent,规模是多大?
3. Agent的行为/观测是什么?
4. 游戏端设计了哪些模块,如何和算法模块进行数据通信的?
5. 介绍一下训练出来的模型效果?
6. 将算法用到游戏中做了哪些工作?(部署流程 + sparse reward情况下如何解决)
7. 在算法训练中有哪些创新点?
8. 单智能体游戏中为什么PPO效果最好?多智能体游戏中为什么QMIX效果最好?
9. Self-Play相关。
10. 你有什么想问我们的问题。
总的来说互娱的面试体验还是很不错的,不管最后能不能拿到意向书都是一次收获很大的经历。从面试中可以看出来面试官很在意你对算法的理解,是否有系统的、连贯的知识体系(比如从PG推到AC再推到PPO再推到COMA),在代码层面会关注你是否有自己亲自去上手算法代码,而不只是git clone,要熟悉游戏和算法之间的工作流程,对游戏环境和算法环境都要有一定的了解。
以上就是本次面经分享的全部内容,希望可以帮到大家,共勉。
全部评论
(8) 回帖