【面经】腾讯 AiLab 机器学习算法工程师 一面

今天早上起来一看官网,状态从初试变成了复试

昨晚面试的,时间是2020-10-19 20:30,本来想着这么晚了还面试(虽然今年BBAT都还没开奖,但是笔记十月底了,今年是怎么了…),不会是KPI吧,如果还有HC,那不是部门不太好就是部门要求太高,找不到合适的人选。而且由于腾讯的面试邀请链接只能看到 “基础研究”,看不到被捞的部门,所以面试一开始,我先一通问,他们的部门,架构啥的,做啥方向的。。。(但是还没自我介绍就这么问其实有点不太礼貌)

结合最后提问环节得知大概情况是这样,他们是 TEG-AiLab-机器学习中心,现在这种研究部门也开始对接一些落地项目了,我这个小组所对接的是 农业 这一块,其他另外两个小组还有做能源、医药研发的。(能源这块和阿里云这边的工业大脑相似,主要对接工业、能源这块)但是还在研发阶段,估计距离落地的距离还非常远。而且农业这块的方向其实阿里云我实习的这个大部门之前也搞过,总之方向不太好搞。

其次,之前在和AiLab并立的RoboticX实习过,这类研究性质的部门都挺相似,大多是海归博士,既有业务KPI,还有论文KPI,压力有点大

他们想用强化学习来搞农业方面的落地,具体不是很清楚,应该主要是用DRL来决策。

一、项目介绍

  1. 介绍阿里云工业大脑的项目
    (面试官比较关系这个项目,虽然个人面试比较喜欢讲第二个,这个也跟自己的引导有关,当然从中也说明他们对阿里的项目看重,而且也开始重视落地)

  2. 介绍腾讯RoboticX的项目

二、比较泛的一些问题

2.1. 机器学习相关

0. Resnet

要点
1)设计思路、目的、优点
2)对比 DenseNet等,其区别何在(虽然都有 Shortcut,但是 DenceNet是串联,ResNet是相加)

1. Batch Normalization

要点
1)设计初衷,优点(数据分布角度)
2)paper 的公式,细节(比如分母加了 ϵ \epsilon ϵ,scale and shift)
3)BN的训练和测试的区别
4)BN的缺点,Batch_size与学习率的关系
5)BN的使用顺序,为啥在 ReLU等非线性激活函数之前(如果放在 激活函数之后,那么激活函数就起不到非线性的作用了)

2. Dropout

要点
1)Dense 层参数太多,防止过拟合用的
2)训练和测试的区别(训练的时候,需要对神经元的值进行缩放,即 乘以 1 / ( 1 − p ) 1/(1-p) 1/(1p),或者在测试的时候 乘以 p p p

3. 强化学习如何提高样本的利用效率,使用尽量少的样本就能学习。

要点
1)从 on-policy ⇒ off-policy,使用 缓存池(memory),使得样本可以重复使用

4. 真实的工业场景的数据量很少,如何解决

要点
1)从基础建设角度。安装大量传感器,增加数据源
2)算法角度。采用无监督方法(自编码器系列)、异常检测方法、基于先验概率的模型等

5. 介绍你最熟悉的一种强化学习算法

Proximal Policy Optimization(PPO)算法原理及实现!
要点:
1)importance sampling,使用KL散度衡量分布 p 和 q 的差距
2)PPO1 和 PPO2

2.2. Python语言相关

  1. 可变对象、不可变对象与浅拷贝、深拷贝的关系
1. 开放性问题

给你一段代码,如何优化加速(打开思维,各个角度都可以)

:(面试时候大概说了以下几点,分点的逻辑可能不是最好的)

  1. 改进算法的时间复杂度,从 O ( N 2 ) O(N^2) O(N2) 降到 O ( l o g N ) O(logN) O(logN) 甚至到 O ( N ) O(N) O(N)
  2. 改进优化算法,选择收敛阶次高、收敛速度快的优化算法
  3. 增大学习率(步长),比如Batch Normalization等方法其初衷之一就是为了加入网络以后,可以使用更大的学习率训练,从而使得收敛更快
  4. GPU 对大量的矩阵运算进行加速(但是强化学习这种问题,其瓶颈主要卡在和环境交互上,GPU加速是很有限的)
  5. 从 IO 上优化,因为 cpu 速度是很快的,但是 IO 速度很慢。
    1)可以在一部分程序卡在 IO 的时候,另一部分进行运算
    2)单纯优化IO,分批读写
    3)类似堆排序的思想
  6. 多线程、多进程(比如强化学习用cpu跑的时候)
  7. 从计算机的底层考虑,比如位运算会比较快;BN的时候batch size 一般设置为 2 N 2^N 2N,以便于最大化利用 GPU 资源
  8. 代码风格,代码风格好的话,无论自己 Debug,还是交给别人,这个 “运行” 效率都会更快

三、手撕代码

  1. 【LeetCode】200. 岛屿数量

这道题从我2019年11月(找实习到正式工作跨度快一年了)第一次实习面试商汤的时候就遇到过,可见其受面试官的欢迎程度

面试官是发了一个链接,类似于 txt 文本,比较难看,无法 debug

全部评论
哈咯 想问问拿到offer了嘛 这个给开条件怎么样啊~
点赞 回复 分享
发布于 2024-04-18 03:45 美国

相关推荐

断电再接线:1. 简历排版方面,你这内容比较少,一页放完。各模块之间建议用明显的分隔线分开,现在一眼看上去非常乱。教育经历留白太多。项目经历格式不统一。 2. 第一个项目,硬件设计太笼统,硬件架构规划是指板级电路设计还是FPGA逻辑设计?FPGA时序逻辑设计具体指的什么?实现的三个低速协议以及使用协议进行控制时序,是指什么? 3. 第二个项目,我觉得你可以和第一个项目整合一下,合并为一个项目。第二个项目说实话随便买个zynq开发板都有一直petalinux的教程,作为一个独立的项目不合适的,更像是一个小作业。 4. 第三个项目,项目内容这里,其实和环境搭建之类的东西提一嘴就好了,环境准备和编译安装工具链这种东西没多大必要写,实在要写的话可以 说 使用docker 独立sdk环境之类的。你说的这个工具我没用过,我用的比较多的是busybox和buildroot,是基于menuconfig进行配置的,如果scratch也是类似的模式的话,那我觉得这个项目也经不起细推。你可以往内核裁剪那方向靠,我说的这两个工具你也可以看看。 5. 你熟悉这些接口时序的话,你可以进一步去看一下驱动开发,然后面试的时候突出这个作为重点。第三个项目也可以将驱动开发给补充进去。因为单编内核和构建文件系统,其实很多时候是体力劳动。 6. 特长这里,独立成一个荣誉奖项的模块,把你获得的奖学金和竞赛奖项放一起。数模的话,写了国赛,美赛就不用写了。 7. 总的来说可以了,你简历上写的东西你只要都熟悉,找个实习还是没问题的。 8. 嵌入式分为硬件,底层软件和应用软件,看你的经历我建议你往底层靠,多去熟悉常用的通信接口,去看内核和驱动,网络编程这块也可以去了解一下。然后去**刷刷hot100
点赞 评论 收藏
分享
01-17 08:34
门头沟学院 Java
想找对象的单身狗在努力存钱:这工资不低了,再高点人家要招博士硕士的
点赞 评论 收藏
分享
评论
1
20
分享

创作者周榜

更多
牛客网
牛客企业服务