【面试】商汤研究院-游戏AI见习算法研究员面试总结

2023-10-28 09:40

本文主要是介绍【面试】商汤研究院-游戏AI见习算法研究员面试总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 岗位介绍
    • 一面,技术面,1h,8.10
    • 二面,技术面,40min,8.16
    • 总结

岗位介绍

直接贴JD吧。
在这里插入图片描述
面试用的是“小鱼易连”。这算是我硕士阶段第一次正式的面试。

面试前都有电话、短信通知,很贴心,反应也很快。

HR告诉我这是一个偏科研的岗位,但是一面二面的面试官告诉我,可能更多做的是技术落地。

一面,技术面,1h,8.10

问的很广(相比二面)。
首先自我介绍+聊项目。项目聊了一个最相关的,聊得非常非常细致。

聊到卷积,计算40 * 60的矩阵,经过kernel=5*5,padding=1,stride=2的卷积后的参数数量。
然后叫我用pytorch手写代码来验证我计算结果的正确性。

问我优化算子,我直接说Adam,然后给他讲了SGD等其它我知道的算子和特点。

然后聊到了BatchNormal,我说了一下作用,以及为什么强化学习用这个效果不好。
答完以后面试官嘴漂了,似乎说漏嘴,说我深度学习这块掌握的不错。

“看起来你深度学习这块学得不错,再来看看线性代数这方面”

然后是矩阵,求解3*3实对称矩阵的100次。
这个用特征值分解就行。
“如果实矩阵不对称呢?”
这个我不记得了。面试官告知用约当标准型后,我回忆起来了。
顺带一提,面试官还说用计算机的快速幂算法也是一种做法。

接下来是概率论。说实话我感觉这个甚至算不上概率题。
如何在单位圆内均匀采样1000个点。这个题目的“均匀”其实有点歧义。
我一开始理解成均匀采样是指采样成一个均匀的点阵,说了半天方法,结果面试官说我这个不是概率意义上的均匀。
后来才明白面试官的意思是,random(0,1),然后重复运行1000次。
那就有两种方法了,一种是拒绝法,在框住圆的正方形内采样,如果点不在圆内就将其抛弃;一种是将圆转化为(r,θ)的极坐标形式,θ使用均匀采样,而r则是在(0,1)内均匀采样后开根号(要开根号原因是rdr采样其实等价1/2dr2采样,具体为什么这么做就不证明了)。

算法题很简单,简单得不可思议。写代码求解x=cos(x)的数值解,精度小于0.001。第一反应是要考察我牛顿迭代。说实话这个牛顿迭代法就五年前用c语言写过一次,真没有把握能一次写对。
突然灵机一动说可以用中值定理+二分查找解决。
代码我没有保存。用递归的话不难。
我没有答好的地方在于我没有看出这个方程只有一个实数根(因为它单调)。所以我说我算法的缺点是找不出所有的实数根……

反问环节:
我如果顺利入职,工作内容偏科研还是偏落地。

偏应用落地。如果想发文章的话需要自己课外再做一些努力,计算资源很足。

介绍一下组里最近的项目。
面试官说了一些项目内容及大致完成的工作。

请吐槽一下在商汤工作的感受。

工作任务完成就行,对时长没有硬性要求,整体组间学习氛围还不错。

二面,技术面,40min,8.16

我本来以为会问一些强化学习的内容,结果完全没有提到。从我为什么选择做强化学习开始,就像闲聊一样。
甚至问我喜不喜欢打游戏,水平怎么样。(因为是游戏AI这个方向的嘛)
算法题做完后,直接问我能实习多久,为什么不再多实习一会儿……
感觉就像是关系户走流程一样……

算法题还是问了的,不难,4个状态的马尔可夫随机游走。
初始在中间两个状态,左右转移概率都是1/2。到最左边节点终止且reawrd为0,最右边节点终止且reward为1,其他情况则继续游走,
叫我说一下怎么求。
强化学习的话就是值迭代、MC算法,数学的话就是二元一次方程组。答案是1/3,2/3.
如果节点变成5个怎样快速求解……(1/4,2/4,3/4。面试官的意思好像是根据对称性,中间节点的价值一定是1/2,从而快速确定。)

算法题就是用蒙特卡洛算法,写一个agent和env来验证结果的正确性。


# 假设env,agent给定
# env.step(action) 
# 返回值 state'(下一个状态),reward(回报函数),done(是否结束)
# agent.step(state) 
# 返回值 action (agent内置策略生成动作)def solve(node_num = 3):result = np.zeros(node_num)result[node_num-1] = 1for episode in range(10000):state = env.reset()index = statedone = Falsesum = 0while not done:action = agent.step(state)state,reward,done = env.step(action)result[index] += reward/10000return result

这里面的思想就是随机玩10000场,然后各个位置的回报取均值。我这里面其实是有bug的,在最后reward/10000那里,被除的应该是该状态被随机到的次数而不是10000,不过面试官没有指出就放我过了。

反问环节:
上个环节问了项目,这个环节就问那些项目用到什么技术。

在强化学习算法层面,用的都是PPO、SAC这些老算法,工作中更多要思考的内容是reward的表征、游戏信息特征的提取等功能。

做侵入式AI比较多还是非侵入式AI比较多?

侵入式比较多。非侵入式也尝试过,不过后来就不做了。

怎么看待上述两者?

侵入式的AI特征提取困难,算力需求大。是未来的方向,但是现阶段不准备尝试。

总结

商汤面试到此为止了。之前本来是想等三面或者HR面之后再发,结果过了一个多月还没有结果。因为手头有了新的事情,还听说被拒会有感谢信,我也没去找HR确认。现在时间过了那么久,想起这茬事,就默认凉了。

总体来说面试官水平还是很不错的,在面试过程中我也学到了不少知识。今天偶然看到这篇文章堆在我的草稿箱,加上这最后一段总结,我也就发出来了。希望可以作为大家的参考。

这篇关于【面试】商汤研究院-游戏AI见习算法研究员面试总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/292336

相关文章

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife