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

岗位介绍

直接贴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] = 1
	
	for episode in range(10000):
		state = env.reset()
		index = state
		done = False
		sum = 0
		while not done:
			action = agent.step(state)
			state,reward,done = env.step(action)
		result[index] += reward/10000
			
	return result

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

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

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

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

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

怎么看待上述两者?

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

总结

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

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邵政道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值