海康威视电话面

这部分内容的情况有些记不太清了,应该是提前批次,电话面试之后,如果通过会邀请去现场面试(现场面试情况后续给出)。

毕业之前,仅做感恩回馈吧,希望能对有需要的人起到一点帮助。
其中的解答部分,是个人在面试之后整理的一些,有疏漏错误之处,大佬们指出更正,避免误导。

面试岗位:AI算法工程师

对于其中有参考和涉及的内容,基本上注明了来源,若有侵犯与不当,请私聊更正或删除。
感谢网友们的无私分享。

一、电话面(2019730日星期二)

1. 介绍个人项目,用到的方法和框架,创新点及结果

答:略。

2. 解释下C++中类的继承?有没有具体项目或实践?


3.        图像处理中的缩放方法有哪些?

3.1 图像缩放算法小结

3.2 图像插值算法之双三次插值


4.        图像模糊方法有哪些?

4.1 数字图像处理—图像高斯模糊运算直观解释

4.2 图像模糊有什么用


5. SoftMax Loss

5.1 卷积神经网络系列之softmaxsoftmax losscross entropy的讲解

5.2 详解softmax函数以及相关求导过程

5.3 Softmax函数与交叉熵


6. 过拟合原因?怎么解决?

6.1 深度学习—过拟合问题

根本原因特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。过度的拟合了训练数据,而没有考虑到泛化能力。

减少过拟合总结:过拟合主要是有两个原因造成的:数据太少+模型太复杂
(1)获取更多数据 :从数据源头获取更多数据;数据增强(Data Augmentation)
(2)使用合适的模型:减少网络的层数、神经元个数等均可以限制网络的拟合能力;
(3)dropout
(4)正则化,在训练的时候限制权值变大
(5)限制训练时间(提前停止);通过评估测试;
(6)增加噪声 Noise: 输入时+权重上(高斯初始化) ;

(7)BatchNormalization

(8)结合多种模型: Bagging用不同的模型拟合不同部分的训练集;Boosting只使用简单的神经网络;

7. 正则化项的作用?

7.1 深度学习—过拟合问题

正则方法主要有哪些?

(1)L1L2正则:都是针对模型中参数过大的问题引入惩罚项,依据是奥克姆剃刀原理。在深度学习中,L1会趋向于产生少量的特征,而其他的特征都是0增加网络稀疏性;而L2会选择更多的特征,这些特征都会接近于0,防止过拟合。神经网络需要每一层的神经元尽可能的提取出有意义的特征,而这些特征不能是无源之水,因此L2正则用的多一些。

(2)dropout深度学习中最常用的正则化技术是dropout,随机的丢掉一些神经元。

(3)数据增强,比如将原始图像翻转平移拉伸,从而是模型的训练数据集增大。数据增强已经是深度学习的必需步骤了,其对于模型的泛化能力增加普遍有效,但是不必做的太过,将原始数据量通过数据增加增加到2倍可以,但增加十倍百倍就只是增加了训练所需的时间,不会继续增加模型的泛化能力了。

(4)提前停止(early stopping):就是让模型在训练的差不多的时候就停下来,比如继续训练带来提升不大或者连续几轮训练都不带来提升的时候,这样可以避免只是改进了训练集的指标但降低了测试集的指标。

(5)批量正则化(BN):就是将卷积神经网络的每层之间加上将神经元的权重调成标准正态分布的正则化层,这样可以让每一层的训练都从相似的起点出发,而对权重进行拉伸,等价于对特征进行拉伸,在输入层等价于数据增强。注意正则化层是不需要训练。

7.2 深度学习中的正则化方法总结——深度学习第七章

7.3 欠拟合、过拟合与正则化——深度学习花书第五章(二)

欠拟合(underfitting)和就是指模型的训练误差过大,过拟合(overfitting)就是指训练误差和测试误差间距过大。

模型是欠拟合还是过拟合是由模型的容量(capacity)决定的。低容量由于对训练集描述不足造成欠拟合,高容量由于记忆过多训练集信息而不一定对于测试集适用导致过拟合。训练误差,测试误差和模型容量的关系可以由下图表示,在容量较小时我们处在欠拟合区,训练误差和测试误差均较大,随着容量增大,训练误差会逐渐减小,但测试误差与训练误差的间距也会逐渐加大,当模型容量超过最适容量后,测试误差不降反增,进入过拟合区:


7.3 DropOut

1)在神经网络的训练过程中,对于神经单元按一定的概率将其随机从网络中丢弃,从而达到对于每个mini-batch都是在训练不同网络的效果,防止过拟合。

(2)理解dropout


8. 算法题:找出数列中前K个最大的数。

8.1 寻找给定的一个数组中第k大的一个数,或者是寻找前k大个数

思路1这道题是一道常见的面试题,使用二叉堆的思想进行操作。首先取前K个数,构建二叉堆,时间复杂度为K/2 * LogK,并排序(最大/最小堆),时间复杂度为KLogK;

然后依次将剩余的元素,与堆顶进行比较,若符合条件(大于或小于)则采用插值方法进行原地替换,不需要额外开辟空间,最多需要移动比较K次。时间复杂度为K(N-K);

因此总的时间复杂度为K/2 * LogK + KLogK + K(N-K),空间复杂度为K。当N远大于K时,时间复杂度约为O(N);当K接近N时,时间复杂度接近O(N^2);

思路2利用快排的思想,循环找到第k个位置安放正确的元素,此时k的左边是小于k位置元素的元素,右边是大于k位置元素的元素,即前k个元素就是问题答案。时间复杂度O(n)。

——不需要排序

参考链接:

1漫画:什么是堆排序?

2最大K个数问题的Python版解法总结

#海康威视##算法工程师##校招##面经#
全部评论
记录很详细,还有答案,感谢!
1 回复 分享
发布于 2020-05-29 21:56
8.1 那道题我在牛客网上为啥通不过啊
点赞 回复 分享
发布于 2020-05-30 11:18
电话面面了这些问题吗?还是和现场面一起?
点赞 回复 分享
发布于 2020-09-10 21:21

相关推荐

阳光电源 电气硬件工程师 总包25
点赞 评论 收藏
分享
评论
12
99
分享
牛客网
牛客企业服务