深度学习算法工程师面试知识点总结(一)

发布于 2021-11-24 12:34 ,所属分类:2021面试经验技巧分享

深度学习算法工程师岗位需要具有的技术栈初步总结如下:


这个总结并不是很完整,这个方向所需要的知识体系非常的庞大,例如高等数学基础、线性代数、概率论的基础,这对很多的同学来说是一个比较大的挑战。还需要针对不同的任务有针对性的学习一些知识,例如目标检测、目标分割的领域。

本文分享内容来自面试中常问知识点的总结,读者可以通过如下方式获取整个文档:

添加study428,进入群,有问题可以及时交流沟通;
gongzhong号”计算机视觉与OpenCV“,硬货知识常分享;
加入QQ群”187042448“获取深度学习相关的资料。


本文分享的内容来源于《深度学习计算机视觉实战》一书,该书由刘东研究员和肖铃合作完成,由电子工业出版社出版。




该书从算法导读到模型训练,到模型部署一站式搞定,书中案例注释详细,均已通过运行验证。该书包括4个部分:

第一部分(1~2章)深度学习和计算机视觉的基础和算法讲解;

第二部分(3~6章)传统图像处理算法的案例讲解;

第三部分(7-11章)计算机视觉方向的案例讲解;

第四部分(12~13章)Tensorflow Lite讲解(源码分析、模型优化、模型转换等)以及使用Tensorflow Lite在PC端和移动端的部署案例讲解。

本书可以为计算机视觉入门的读者和想要对模型进行工程部署的读者提供参考与帮助。京东链接:https://u.jd.com/rwk3HPT





笔记内容如下(篇幅所限,这是第一部分):


1、dropout设置:隐含节点 dropout 率等于 0.5 的时候效果最好,原因是 0.5 的时候 dropout 随机生成的网络结构最多。


使用dropout很难检查梯度下降的性能,此时可以关闭dropout,将keep-prob的值设为1,以确保代价函数单调递减,然后打开dropout,确保dropout不会带来问题。

dropout属于深度学习中的算法开发的技巧(tricks),对模型训练性能提升具有帮助,还有一些其他的技巧,在书中有介绍,在案例中有应用。



2、one-hot编码的作用:

编码后的特征互斥,每次只有一个激活。因此,数据会变成稀疏的。

这样做的好处主要有:

(1)解决了分类器不好处理属性数据的问题;

(2)在一定程度上也起到了扩充特征的作用。

如下是在验证码识别的案例中使用到的独热码(即one-hot)


3、将权重初始化为很小的数字是一个普遍的打破网络对称性的解决办法,都初始化为0或者相同的数字会形成对称网络。

偏差一般都初始化为 0。

4、在CNN中,BN应作用在非线性映射前(激活函数)。在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。

BN比较适用的场景是:每个mini-batch比较大,数据分布比较接近。在进行训练之前,要做好充分的shuffle,否则效果会差很多。

5、数据增强方法:

对颜色的数据增强:图像亮度、饱和度、对比度;尺度变换;采用随机图像差值方式,对图像进行裁剪、缩放;尺度和长宽比增强变换;水平/垂直翻转;平移变换;旋转/仿射变换;高斯噪声、模糊处理。

6、经典网络

CNN局部感知、权重共享

LeNet-5:提出卷积神经网络模型

AlexNet:使用ReLU作为非线性,使用dropout技术,使用GPU训练

ZFNet:最大的贡献在于通过使用可视化技术揭示了神经网络各层到底在干什么,起到了什么作用。可视化的实现应该是转置卷积(也称反卷积),反池化是记录了最大池化的位置,其他位置设为0。

VGG:整个网络都使用了同样大小的卷积核尺寸(3 * 3)和最大池化尺寸(2 * 2);使用两个3 * 3的卷积层串联相当于1个5 * 5的卷积层,3个3 * 3的卷积层串联的效果则相当于1个7 * 7的卷积层。

NIN:提出了抽象能力更高的Mlpconv层,利用多层mlp的微型网络,对每个局部感受野的神经元进行更加复杂的运算,而以前的卷积层,局部感受野的运算仅仅只是一个单层的神经网络;提出了Global Average Pooling(全局平均池化)层,传统的CNN最后一层都是全连接层,参数个数非常多,容易引起过拟合,全连接层参数占整个CNN模型的一大部分,NIN提出采用全局平均池化替代全连接层。

GoogLeNet:引入Inception 结构

采用不同大小的卷积核(如1、3、5)意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;卷积核大小采用1、3和5,主要是为了方便对齐,可以设置padding使输出featuremap大小相同,以便拼接;使用5x5的卷积核仍然会带来巨大的计算量,为此,文章借鉴NIN2,在5x5卷积之前采用1x1卷积核来进行降维。

Inception结构的改进就是一些技巧的使用,例如使用两个3x3代替一个5x5,使用1xn接nx1代替nxn,引入stem模块获得更深的网络,引入残差模块设计出了Inception-ResNet网络。

ResNet:解决网络退化问题


7、输入层主要包含对原始图像进行预处理,包括归一化、去均值等等。

卷积运算层主要使用滤波器,通过设定步长、深度等参数,对输入进行不同层次的特征提取。

激活函数层主要是将卷积层的输出做一个非线性映射。

池化层主要是用于参数量压缩,可以减轻过拟合情况。

全连接层所有神经元之间都有权重连接,常用于网络的最后一层,用于计算类别得分。

8、扩张卷积,又称为带孔(atrous)卷积或者空洞(dilated)卷积。在使用扩张卷积时,会引入一个称作扩张率(dilation rate)的参数。该参数定义了卷积核内参数间的行(列)间隔数。一个3×3的卷积核,扩张率为2,它的感受野与5×5卷积核相同,而仅使用9个参数。这样做的好处是,在参数量不变的情况下,可以获得更大的感受野。扩张卷积在实时分割领域应用非常广泛。

在深度网络中为了增加感受野且降低计算量,总要进行降采样池化等,这样虽然可以增加感受野,但空间分辨率降低了。为了能不丢失分辨率,且仍然扩大感受野,可以使用空洞卷积。这在检测时,一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。另外,还可以通过调整扩张率来获得多尺度信息。

所以总的来说,空洞卷积主要作用:不丢失分辨率的情况下扩大感受野;调整扩张率获得多尺度信息。



相关资源