【面试】商汤研究院-游戏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

相关文章

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA