美文网首页工作面经
Deecamp面试准备

Deecamp面试准备

作者: PolarBearWYY | 来源:发表于2019-05-14 14:06 被阅读0次
    非常幸运的收到了DC的面试通知

    搜集了一些资料,好好准备一下!

    (0)如何将counting网络中加入分割?

    再加一层prediction,原来的prediction用来预测热力图,新增加的prediction用来预测mask,但是我们的标注是框,把框当成 mask,使其能够分割(它竟然可以分出来,到底哪个是夫)照葫芦画瓢,是我能做到的;它却能照着框,画瓢!厉害了!

    (1)counting网络中,对于网络做了什么简化,去掉了什么层?

    答:去掉了bn和relu。效果仍然很好。

    resnet gmn 论文中relation 部分,除了卷积,后面还有bn和relu,但是我这里省略了

    我为啥去掉了,还效果不错呢,因为去掉的只是一层bn和relu,所以影响不大。

    原因是什么呢?

    https://blog.csdn.net/loseinvain/article/details/86476010

    (2)讲一下LBP和HOG特征:

    局部二值模式 我在《基于视觉的烟雾识别》项目中,用的就是单纯的LBP 单纯LBP不具备旋转不变性 按位旋转,取最小值,具备旋转不变性 LBP用途

    HOG:

    方向梯度直方图 图像局部目标的表象和形状能够被梯度或边缘的方向密度分布描述。 进行对比度归一化,可以提高算法性能,对光照和阴影获得更好效果。

    (3)虚警率怎么计算:

    顺便附上其他“率”

    ❤正确率:所有被正确分类的样本,占总样本数的比例;❤精确率:原本为正类的样本,在所有正类样本中的比例 ❤召回率:原本为正类的样本,被正确分类为正类的比例;❤虚警率:负类样本被分为正类样本,在所有负类样本中的比例;❤漏警率:正类样本被分为负类样本,在所有正类样本中的比例

    (4)MobileNet:

    自 2012 年 AlexNet 以来,卷积神经网络(简称 CNN)在图像分类、图像分割、目标检测等领域获得广泛应用。随着性能要求越来越高,AlexNet 已经无法满足大家的需求,于是乎各路大牛纷纷提出性能更优越的 CNN 网络,如 VGG、GoogLeNet、ResNet、DenseNet 等。由于神经网络的性质,为了获得更好的性能,网络层数不断增加,从 7 层 AlexNet 到 16 层 VGG,再从 16 层 VGG 到 GoogLeNet 的 22 层,再到 152 层 ResNet,更有上千层的 ResNet 和 DenseNet。虽然网络性能得到了提高,但随之而来的就是效率问题。 不采用模型压缩,而采用轻量化模型 MobileNet是Google团队提出的 depth-wise convolution 卷积:1.减少参数数量2.提升运算速度 d-p s c会涉及两个超参数:width multipler 和resolution multipler depth wise convolution :逐通道卷积,一个卷积负责一个通道;pointwise convolution:将上述得到的feature map串起来 因为输入的每一个feature map 要包含输入层所有feature map信息 Deecamp面试准备 M个Dk*Dk 标准卷积 计算量减少 将depth-wise convolution步长设置为2,下采样 参数一个量级,但是计算量却比GoogLenet小一个量级

    (5)神经网络如何优化?

    答:有一篇博客写的特别好:https://blog.csdn.net/autocyz/article/details/83114245

    大家耳熟能详的优化方法有梯度下降法(Gradient Descent)、随机梯度下降法(Stochastic Gradient Descent)、Adam方法等等。虽然很多听过甚至用过这些方法,但是却未必能够说出他们的区别,已经什么时候改用什么样的优化算法。这篇文章将会从原理、区别和使用场景等角度详细介绍神经网络中的各种优化算法。

    优化算法:最大化/最小化目标函数(损失函数) 一阶:梯度下降(雅克比矩阵);二阶:Hessian矩阵 梯度下降:整个数据集上进行 随机梯度下降:每次更新只用一对样本 mini batch梯度下降:每次更新取一个batch的样本 鞍点问题不好解决 动量梯度下降:更稳更快收敛 NAG提高稳定性,避免越过极值 Adagrad:每个参数有自己的学习率 Adadelta解决Adagrad后期学习率很小,收敛速度低的问题。 Adam:每个参数不仅有自己的学习率,还有自己的动量(使每个参数更新更加具有独立性,提升了模型训练速度和训练稳定性) 数据稀疏:使用Adaptive(自适应)方法好一些。

    了解一下数据稀疏:

    数据缺失或为零 摸一鹅 ——咩

    (6)反向传播(误差逆传播算法):

          这个算法曾经推导过,由于这是一个非常重要的算法,此处我再做一遍详细的推导(主要参照西瓜书上面p101-p104上面的内容):

    (7)交叉熵:

    公式如下:

    如果只有plogp,那么p为0的地方,loss为0,那这些地方就能瞎预测,这样就加入(1-p),就防止瞎学

    (8)高斯分布:

    (9)压缩网络:

    VALSE大会上,关于神经网络压缩、加速、优化的报告:

    原文链接:https://blog.csdn.net/electech6/article/details/72822009

    1.原微软亚洲研究院首席研究员、旷世科技研究院院长孙剑,介绍了旷视科技在网络模型加速和压缩方面的工作。

    孙剑:简化网络设计方法

    (1)旷世科技研究院院长孙剑的报告中介绍了模型压缩优化。他举了个例子,比如在对图像分类的时候,随着层级的增加,应该把图像的空间分辨率慢慢缩小,但这同时也需要增加每一层中的filter 数。另外实践中发现用小的filter 是更经济的,还有用Low-rank分解逼近的方法也比较有效。

    ❤Low-rank分解:如果X是一个m行n列的数值矩阵,rank(X)是X的秩,假如rank (X)远小于m和n,则我们称X是低秩矩阵。低秩矩阵每行或每列都可以用其他的行或列线性表出,可见它包含大量的冗余信息。利用这种冗余信息,可以对缺失数据进行恢复,也可以对数据进行特征提取

    (2)在简化网络方面,主要考虑结构剪枝。还有一个概念是结构化剪枝。虽然仅有一字之差,但是结构剪枝和结构化剪枝是两个不同的概念。结构剪枝是指对网络结构进行修剪,而结构化剪枝是属于结构剪枝的一种具体方法,指按照特定的结构(相对于随机)进行剪枝。结构剪枝如下图所示一共有3种方法。

    第一种方法是稀疏连接,本来一个网络里有很多连接的,其基本思想是去除不重要的连接,让这个连接变稀疏。虽然它可以减少网络的模型大小,但是不一定能够减少网络的运行时间。

    第二种就是张量分解的方法,就是把一个卷积网络参数矩阵通过张量分解,用它的低秩特性做逼近。

    第三种是channel 剪枝,就是训练好一个网络后,简单粗暴的把一些channel 去掉

    还有一种方法就是Low-bit表达。如下图输入一个三维的feature map,feature map标准的话都是float表示的,卷积核其实也是一个三维的矩阵,它也是float表示的。Low-bit表达就是用低精度的表达来代替这些高精度的float,比如用8位或者更加极端的两位来表示。 有两篇比较著名的工作。一个是Binary connect,他的思想是把这个weight都变成01,这也是很夸张的一个想法。下面是更进一步的工作,它是将feature和weight全变成01,叫XNOR-Net,好处是卷积神经网络里的矩阵层,可以变成一个bitcount的指令,就可以完成它想要完成的计算,这个是在硬件中很有效的一个方法,也是Low-bit网络非常吸引人的地方。优点在于:1.内存可以降得非常多;2.潜在的加速比非常大。

    Low-bit表达除了能量化weightfeature,还可以量化gridient,因为gridient其实也是float的。他们团队使用的设置是weight用01表示,activation用两位表示,gridient用4位表示,他们将这个网络取名为DOReFa-Net。该网络结构在并行训练或者FPGA/ASIC上训练时可以提高不少效率。

    2.中科院自动化研究所模式识别国家重点实验室研究员、人工智能与先进计算联合实验室主任程健,作了“深度神经网络快速计算方法”的tutorial。

    程健:深度神经网络优化计算

    程健研究员的报告主要针对嵌入式平台的深度学习优化方法。他列举了近年来在深度神经网络模型加速和压缩方面的几个有效方法:

    1、剪枝与稀疏

    研究表明网络中很多连接都是接近0或者冗余的,如何对这些参数进行稀疏就变的很有意义。如下图所示是SVD分解的算法性能对比。SVD分解可以从模型压缩和提高运算速度两个方面进行优化。

    但是并不是只要剪枝就一定会提高运算速度。原因是如果剪枝过于随机,并不能有效提升运算速度。所以需要结构化剪枝(structured pruning)。

    剪枝一般需要如下图左的三个步骤:先在原始的网络结构下训练网络,然后通过设置一个阈值,把一些权值较小的连接进行剪枝重新训练权重,对训练好的模型再剪枝,再重新训练,直到满足设定条件为止。

    2、低秩分解

    有很多种分解方法,比如奇异值分解、tucker分解、块分解。

    3、权值量化

    通常神经网络中的权值一般用单精度的浮点数表示,需要占用大量的存储空间。而用码书对权值进行量化可以共享权值,从而减轻存储负担。

    利用哈希编码对权重进行编码,从而达到压缩权重的目的。也是一种有效的方法,如下所示。

    另外就是定点和二值化(fixed point / binary)的方法。量化方式有二值量化(0,1)

    也有三值量化:

    4、用定点来代替浮点数计算

    3.新加坡国立大学教授、360人工智能研究院院长颜水成教授作了“深度学习的三个维度:Compactness,Speed, and Accuracy”的特邀报告。

    颜水成:深度学习的三个维度

    新加坡国立大学颜水成教授介绍了深度学习的三个维度:Compactness, Speed, and Accuracy。也就是小模型、速度快、预测准。

    小模型可以考虑network in network。如下所示。

    Network in Network:小卷积层,滑到了以后,经过一个复杂的过程,再记下来这个值。(把“滑”和“记”之间加入一个网络):网中网

    极端化一点,是否可以考虑设计全部由1x1的卷积层组成小模型?如下图所示就是使用1x1的卷积,它的基本结构包括以下三个部分:

    经过研究统计发现,网络在经过ReLU后,有平均超过40%的输出都是0,这些其实是无用信息,而且这些输出0值在经过ReLU前的操作也是没有意义的。可以想办法找到这些位置进行优化。

    提高模型预测精度的一个有效方法是共享跨层信息,例如ResNet的跨层连接设计

    (10)BN层消耗时间,如何把BN层去掉,又不影响效果?

    原文链接:https://blog.csdn.net/wfei101/article/details/78635557

    1.bn合并的必要性:

       bn层即batch-norm层,一般是深度学习中用于加速训练速度和一种方法,一般放置在卷积层(conv层)或者全连接层之后,将数据归一化加速了训练拟合速度。但是bn层虽然在深度学习模型训练时起到了一定的积极作用,但是在预测时因为凭空多了一些层,影响了整体的计算速度并占用了更多内存或者显存空间。所以我们设想如果能将bn层合并到相邻的卷积层或者全连接层之后就好了,于是就有了这篇文章所提到的工作。

    2.bn合并本身的数学原理:

    bn层一般在神经网络中‘所处的位置如下图所示:

    如上图可以看到,bn层的位置一般在conv(or Fc)层的后面,也有一些情况bn在conv(or Fc)层的前面。我们先来两种情况分别来考虑。

    2.1 bn层在conv层之后的情形

    bn合并的原理,可以由下两张图所示:

    其实,CNN的本质,是,乘以一个数,再加一个数,bn的本质是,减一个数,再除以一个数,所以,具体过程如上图所示,也就是,将其,转变为乘以另一个系数,再加上别的系数

    这张图的表示,将一个数据X,进行bn层的操作和计算得到的结果。

    这张图表示,第一部分代表bn层处理之后接着卷基层的操作结果,第二部分表示将bn层合并到卷积层之后,卷积层w和b的变化。

    2.2  bn在前,卷积在后的合并方式

          这种情况下,FC层的合并方式和之前2.1的结果类似,但是bn在前,conv在后的情形,因为conv存在pad的情形,所以无法合并。

    (11)最小二乘法求导:

    关于最小二乘问题的求解,之前已有梯度下降法,还有比较快速的牛顿迭代。今天来介绍一种方法,是基于矩阵求导来计算的,它的计算方式更加简洁高效,不需要大量迭代,只需解一个正规方程组。在开始之前,首先来认识一个概念和一些用到的定理。矩阵的迹定义如下

    其实就是在,对loss求导。

    相关文章

      网友评论

        本文标题:Deecamp面试准备

        本文链接:https://www.haomeiwen.com/subject/npesaqtx.html