今天早上起来一看官网,状态从初试变成了复试
昨晚面试的,时间是2020-10-19 20:30,本来想着这么晚了还面试(虽然今年BBAT都还没开奖,但是笔记十月底了,今年是怎么了…),不会是KPI吧,如果还有HC,那不是部门不太好就是部门要求太高,找不到合适的人选。而且由于腾讯的面试邀请链接只能看到 “基础研究”,看不到被捞的部门,所以面试一开始,我先一通问,他们的部门,架构啥的,做啥方向的。。。(但是还没自我介绍就这么问其实有点不太礼貌)
结合最后提问环节得知大概情况是这样,他们是 TEG-AiLab-机器学习中心,现在这种研究部门也开始对接一些落地项目了,我这个小组所对接的是 农业 这一块,其他另外两个小组还有做能源、医药研发的。(能源这块和阿里云这边的工业大脑相似,主要对接工业、能源这块)但是还在研发阶段,估计距离落地的距离还非常远。而且农业这块的方向其实阿里云我实习的这个大部门之前也搞过,总之方向不太好搞。
其次,之前在和AiLab并立的RoboticX实习过,这类研究性质的部门都挺相似,大多是海归博士,既有业务KPI,还有论文KPI,压力有点大
他们想用强化学习来搞农业方面的落地,具体不是很清楚,应该主要是用DRL来决策。
一、项目介绍
-
介绍阿里云工业大脑的项目
(面试官比较关系这个项目,虽然个人面试比较喜欢讲第二个,这个也跟自己的引导有关,当然从中也说明他们对阿里的项目看重,而且也开始重视落地) -
介绍腾讯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/(1−p),或者在测试的时候 乘以 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. 开放性问题
给你一段代码,如何优化加速(打开思维,各个角度都可以)
答:(面试时候大概说了以下几点,分点的逻辑可能不是最好的)
- 改进算法的时间复杂度,从 O ( N 2 ) O(N^2) O(N2) 降到 O ( l o g N ) O(logN) O(logN) 甚至到 O ( N ) O(N) O(N)
- 改进优化算法,选择收敛阶次高、收敛速度快的优化算法
- 增大学习率(步长),比如Batch Normalization等方法其初衷之一就是为了加入网络以后,可以使用更大的学习率训练,从而使得收敛更快
- GPU 对大量的矩阵运算进行加速(但是强化学习这种问题,其瓶颈主要卡在和环境交互上,GPU加速是很有限的)
- 从 IO 上优化,因为 cpu 速度是很快的,但是 IO 速度很慢。
1)可以在一部分程序卡在 IO 的时候,另一部分进行运算
2)单纯优化IO,分批读写
3)类似堆排序的思想 - 多线程、多进程(比如强化学习用cpu跑的时候)
- 从计算机的底层考虑,比如位运算会比较快;BN的时候batch size 一般设置为 2 N 2^N 2N,以便于最大化利用 GPU 资源
- 代码风格,代码风格好的话,无论自己 Debug,还是交给别人,这个 “运行” 效率都会更快
三、手撕代码
这道题从我2019年11月(找实习到正式工作跨度快一年了)第一次实习面试商汤的时候就遇到过,可见其受面试官的欢迎程度
面试官是发了一个链接,类似于 txt 文本,比较难看,无法 debug