面经 | 深度学习算法工程师面经,拿下微软、华为、商汤等7家公司offer
- 2020 年 8 月 13 日
- AI
作者:一言难尽
链接://zhuanlan.zhihu.com/p/148246487
来源:知乎
2020届应届渣硕,基于实习和秋招的面试,拿到了微软、阿里、商汤、滴滴、华为、海康、平安、陌陌等offer,下面总结一些经验,希望对大家有所帮助,有问题之处也可以随时指出。如果侵犯公司隐私,烦请告知,此文仅做分享之用。
最开始是以公司为单位进行总结,实习经验可以参考这里。
//github.com/espectre/Algorithms_Engineer_Interview
后面我发现,各公司面试问题存在较多重复,于是按照题目类型分门别类,而不是按照公司机械划分。简单分为深度学习、机器学习基础、图像处理基础、数学基础、算法基础、程序设计语言、模型部署、HR面试以及与我本人简历相关的目标检测、属性识别、Kaggle及天池的比赛、创新想法等几个部分介绍。可能开始会有重叠或者分类不恰当,后面会逐渐更新完善。其中第一篇先介绍到HR面试,第二篇介绍个人相关的项目和比赛部分。
一、深度学习
1.模型类
1.1 resnet和densenet及其不同
-
相同层数,densenet和resnet哪个好,为什么?
-
那么ResNet解决了什么问题呢?
训练深层的神经网络,会遇到梯度消失和梯度爆炸(vanishing/exploding gradients)的问题,影响了网络的收敛,但是这很大程度已经被标准初始化(normalized initialization)和BN(Batch Normalization)所处理。
当深层网络能够开始收敛,会引起网络退化(degradation problem)问题,即随着网络深度增加,准确率会饱和,甚至下降。这种退化不是由过拟合引起的,因为在适当的深度模型中增加更多的层反而会导致更高的训练误差。
ResNet就通过引入深度残差连接来解决网络退化的问题,从而解决深度CNN模型难训练的问题。
1.2 resnet两种结构具体怎么实现,bottleneck的作用,为什么可以降低计算量,resnet参数量和模型大小
1.3 Inception系列的演化
1.4 知道哪些移动端/轻量化模型
mobilenet,shufflenet,pelee等
1.5 GAN
2.卷积类
2.1 卷积神经网络结构特点
局部连接,权值共享
2.2 知道哪些卷积
以及卷积过程计算
2.3 深度可分离卷积
原理,为什么降低计算量,口述计算,减少了多少
2.4 deformable conv怎么做
具体怎么学的,对偏移有没有什么限制
2.5 1×1卷积作用
(1)变换channel
(2)通道融合
3.深度学习基础
3.1 BN的原理、作用和实现细节
其中均值和标准差的计算,以及训练和测试时分别怎么用
如果数据不是高斯分布,bn后怎么恢复
3.2 激活函数
有哪些,为什么使用激活函数
sigmoid
tanh
relu
leaky relu
3.3 损失函数/分类的loss函数
0-1
mse
bce/交叉熵
l1/l2
smooth l1(为什么用这个)
hinge(svm)
3.4 过拟合/欠拟合,预防方法
正则化具体怎么做,为什么有效
3.5 梯度消失/梯度爆炸
现象、原因和解决方法 梯度爆炸/消失
(详解://blog.csdn.net/qq_25737169/article/details/78847691)
3.6 网络退化
现象、原因和解决方法
3.7 各种优化器
介绍各种优化器
adam的特点和公式
3.8 调参技巧
关于神经网络的调参顺序? – Miracle的回答 – 知乎//www.zhihu.com/question/29641737/answer/243982984
3.9 神经网络组件
卷积/池化/全连接层/BN/IN/GN等组件
3.10 深度神经网络和深度学习区别
机器学习是很多种方法和模型的总称。
神经网络是一种机器学习模型,可以说是目前最火的一种。
深度神经网络就是层数比较多的神经网络。
深度学习就是使用了深度神经网络的机器学习。
3.11 深度学习为什么比机器学习好
3.12 train,val,test相关
3.13 如果训练集不平衡,测试集平衡,直接训练和过采样欠采样处理,哪个更好
3.14 softmax原理
softmax得出的结果是排序的么,为什么分类用交叉熵
3.15 F1score是α=1,那么α什么时候取其他值
3.16 梯度物理意义,小球下滚,如果坡很陡,会怎么样,梯度的大小和方向
3.17 pooling层的作用
(详解://blog.csdn.net/sunflower_sara/article/details/81322048)
3.18 监督学习和非监督学习举例
3.19 假设空间与归纳偏好
周志华机器学习绪论1.3
(详解://blog.csdn.net/u013698770/article/details/53208589)
3.20 感受野相关
3x3conv,2x2pool,3x3conv后感受野计算
3.21 如果模型不收敛,怎么调节
3.22 l1/l2正则,怎么选择
weight_decay作用,和l1/l2比较
3.23 解释梯度下降
3.24 链式法则
二、机器学习基础
可能因为简历上可问的东西比较多,面试时间有限,机器学习相关问的不是很多,推荐看一下李航那本统计学习方法。
1.logistic回归
2.svm
3.选择传统机器学习还是深度学习的标准是什么
4.随机森林
bagging和随机森林的区别
5.决策树
三、图像处理基础
1.数字图像处理,各种滤波
2.进行过哪些数据预处理
空图,坏图,单通道图,多通道图等一些情况会怎么处理
3. 图形学知道哪些
四、数学基础
其实主要就是概率与统计相关
1.概率:圆上任意三个点组成的三角形,包含圆心的概率
2.概率:x,y,z都是(0,1)均匀分布,x+y+z<1的概率
(详解://www.matrix67.com/blog/archives/3507)
3.抛硬币直到连续若干次正面的概率
(详解://www.cnblogs.com/avril/p/3161669.html)
4.先验概率,后验概率,怎么转换
5.坐标0开始,依次走1,2,3,。。。,n步,可以左或者右,问有没有到不了的位置
加问,到指定位置m,至少需要多少步 (1)没有到不了的,因为左x右x+1,每次走一步,可以到达所有位置 (2)先求最接近m的连续和,然后从里面选两个数作差。
6.n个门,1个后门是车,其余n-1个后门是羊,你先选一个,如果面试官告诉你其余n-1个中某个是羊,你会重新选择么?
你先选一个,概率1/n 面试官告诉你某个不是,你在剩余中选的概率为两部分 (1)你选的那个是,则概率0 (2)你选的不是,(n-1)/n * 1/(n-2),即你第一次选的不是的情况下剩余n-2中选的是的概率 所以,n=3为2/3,重新选更优
7.三个盒子,一个盒子两个红球,一个盒子一红一蓝,第三个盒子两个蓝球。一人随机选了一个盒子,并摸出一个红球,请问这个盒子里另外一个也是红球的概率是多少
2/3
2/3概率选了第一个盒子
五、算法基础
该部分主要是手撕代码,也是面试的重要组成部分
可能因为我本科非计算机,题目大都相对简单,不过一次0 bug完成还是需要练习。
1.x的n次方(x任意,n自然数)
2.链表排序(然后不能动指针)
3.螺旋打印二维数组
4.删除字符
改:大数组删掉指定个数,怎么最方便。
5.螺旋三角形
6.二叉树深度及最长路径
7.排序
知道哪些排序算法,快排时间复杂度,时间复杂度推导,O(n)的排序方法
时间复杂度O(n)的排序算法
快排,归并,堆排序
8.二叉树路径和为给定值
9.一个数组,其他数出现两次,另一个出现一次,找出
改进:另外两个数出现一次
10.链表中倒数第k个结点
11.判断链表对称/链表回文
12.链表反转
13.逆序对
14.算法:爬楼梯
剑指offer(八)
15.算法:连续子数组的最大和
剑指offer(三十)
16.算法:最长不重复子串
leetcode(3)/剑指offer第二版(48)
典型题.求一个数组中只包含0,1使得其中0,1个数相等的最大子数组
17.算法:给定一个数组A,求max(Ai – Aj)。其中 i < j 。
18.算法:扎气球
leetcode 452
(详解://blog.csdn.net/yysave/article/details/84403875)
19 n个文件(海量文件),查找和排序,二分查找时间复杂度
归并排序,二分查找
20 一个数组里面是股票值,求什么时候购买和卖出,收益最大。
一个数记录最大差,一个记录最小元素,遍历一次即可
21. 最长连续公共子串
dp 注意不是非连续
22.实现卷积计算
23.实现IoU和NMS
IoU
NMS
23.link
(详解://blog.csdn.net/u013074465/article/details/47663769)
A是一个排序好的数组,升序排列;B是一个排序好的数组,升序排序;给定c,找到a,b,满足 a属于A b属于B a+b=c
24.一维数组最大和
25.二维数组求最大和矩阵
26.二维数组有多少个子数组
包含一行的,第一行为例,一个的n个,两个的n-1个,。。。,n个的一个,一共n+(n-1)+。。。+1,n行就是n*。而包含两行,三行就依次是(n-1)*, (n-2) *, 所以就是n+(n-1)+。。。+1的平方
27.二维矩阵左上角到右下角最大和
leetcode 64
(详解://leetcode.com/problems/minimum-path-sum/)
28.1-n数字里少一个,找出来
少两个呢
29.写VGG、resnet
30.输入D和I组成的字符串,输出数字数组,D表示Decrease,I代表Incre。
31.Leetcode670 Maximum Swap
(详解://leetcode.com/problems/maximum-swap/)
32.判断两线段是否相交
33.回文子串Leetcode 647. Palindromic Substrings
(详解://leetcode.com/problems/palindromic-substrings/)
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
34.对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。
给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。
power(2,n-1)-1<len<=power(2,n)-1
35. 寻找两个元素异或的最大值。
36.工作方案
(详解://www.nowcoder.com/questionTerminal/fa4cbee074714c9d813c8c73f75eb5bc?orderByHotValue=1&questionTypes=111110&page=1&onlyReference=false)
37.Valid Permutations for DI Sequence
Leetcode 903
(详解://leetcode.com/problemset/all/?search=903)
38.atoi
Leetcode 8
(详解://leetcode.com/problems/string-to-integer-atoi/)
39.根据顶点坐标,判断两个四边形/三角形是否相交
40.球队至少需要多少分可以出线,最多有多少分未出线
(详解://blog.csdn.net/xueyingxue001/article/details/52885415)
m支两队伍两比赛,赢了得3分,平局各得一分,输了不得分,求n个晋级名额中的最少得分。
41.leetcode股票
42.给定一个不等概率生成器,随机生成 0 和1 的概率分别为 p 和1-p, p 不等于0.5,要求设计如下等概率生成器:
(1) 随机生成0 和1 的概率为0.5
可以构建一个二维表 00,01 10,11 对应的概率 p*p,(1-p)*p (1-p)*p,(1-p)*(1-p) 我们可以发现,01和10出现的概率相等,都是(1-p)*p 所以如果连续两次出现01,认为出现0;如果出现10,认为出现1,出现其他重新掷即可实现等概率0.5
(2)随机生成0,1 和2 的概率为1/3
连续掷三次出现001,010,100三种等概率,都是1/3
(3) 随机生成0,1,2,…n-1 的概率为1/n
连续掷n次 出现0000…001对应0, 出现0000…010对应1, … … … 出现1000…000对应n
43. 给定n个数的数组,找到所有长度大于等于k的连续子数组中平均值最大的那个。返回那个最大的平均值。
44.在一个 m*n 整数矩阵中找到指定值 target, 这个整数矩阵有如下性质:
(1) 每行从左到右数值递增
(2)每列从上到下数值递增
45.给定一个无向图,这个图是在一棵树的基础上加上一条边构成的。问哪条边可以删掉使图重新变成一棵树?如果有多个答案那么输出输入的边中最后出现的那条
46.输入四个点的坐标,求证四个点是不是一个矩形
先计算中点坐标,然后计算其到四个顶点的距离是否相等
1. Python
1.1 深拷贝和浅拷贝
1.2 list和tuple区别
1.3 is和==异同
(详解://juejin.im/entry/6844903538737299464)
1.4 list参数传递
如果list在函数里改变,原来的list是否改变
2. C++
2.1 指针与引用的区别
(详解://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html)
(1)指针是一个变量,存储的是一个地址,指向 内存的一个存储单元,它的内容是内存中的地址
(2)引用跟原来的变量实质上是同一个东西,只 不过是原变量的一个别名而已。
2.2 继承与多态
2.3 数组和链表
2.4 内存泄漏和溢出
七、模型部署
1. tensorrt内部机制
tensorrt怎么量化,float32怎么变int8,怎么变回来
2. 分布式,多卡使用
(1)数据并行
每个机器都有一个相同的完整的模型,然后分别处理不同的数据,最后server汇总结果;
(2)模型并行
把一个模型进行拆分,每个机器上是模型的一部分,然后每一部分模型在不同的机器处理,处理结果移交给下一个机器的部分继续处理。
(3)现在以数据并行为常用方式,模型并行主要难点在模型拆分上,二者通信量都很大。
(4)分布式的模型更新方式主要是两种 中心化(parameter server)和去中心化(ring all-reduce etc.)
中心化参见TF和MXNet 去中心化参见NCCL的处理方式
3.剪枝怎么做,剪多少,效果变化多少
4.量化怎么做,效果变化多少