理论知识篇面试知识点总结,自问自答,学习、记录、分享和复习。
长期持续更新。。。
归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)
空洞卷积也叫做膨胀卷积、扩张卷积,最初的提出是为了解决图像分割在用下采样(池化、卷积)增加感受野时带来的特征图缩小,后再上采样回去时造成的精度上的损失。空洞卷积通过引入了一个扩张率的超参数,该参数定义了卷积核处理数据时各值的间距。
可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样,通过调整扩张率得到不同的感受野不大小:
可以这么说,普通卷积是空洞卷积的一种特殊情况
吃透空洞卷积
在使用线性回归的时候的基本假设是噪声服从正态分布,当噪声符合正态分布N(0,delta2)时,因变量则符合正态分布N(ax(i)+b,delta2),其中预测函数y=ax(i)+b。这个结论可以由正态分布的概率密度函数得到。也就是说当噪声符合正态分布时,其因变量必然也符合正态分布。因此,我们使用mse的时候实际上是假设y服从正态分布的。
在构建模型的过程中,通常会划分训练集、测试集。
当模型在训练集上精度很高,在测试集上精度很差时,模型过拟合;当模型在训练集和测试集上精度都很差时,模型欠拟合。
预防过拟合策略:
主要有三大类:
从SGD到NadaMax,十种优化算法原理及实现
深度学习调参技巧合集
感受野指的是卷积神经网络每一层输出的特征图上每个像素点映射回输入图像上的区域的大小,神经元感受野的范围越大表示其接触到的原始图像范围就越大,也就意味着它能学习更为全局,语义层次更高的特征信息,相反,范围越小则表示其所包含的特征越趋向局部和细节。因此感受野的范围可以用来大致判断每一层的抽象层次,并且我们可以很明显地知道网络越深,神经元的感受野越大。
卷积层的感受野大小与其之前层的卷积核尺寸和步长有关,与padding无关。
计算公式为:Fj-1 = Kj + (Fj - 1)*Sj(最后一层特征图的感受野大小是其计算卷积核大小)
神经网络的深度决定了网络的表达能力,早期的backbone设计都是直接堆叠卷积层,它的深度指的是神经网络的层数;后来的backbone设计采用了更高效的module(或block)堆叠的方式,每个module是由多个卷积层组成,这时深度指的是module的个数。
神经网络的宽度决定了网络在某一层学习到的信息量,指的是卷积神经网络中最大的通道数,由卷积核数量最多的层决定。通常的结构设计中卷积核的数量随着层数越来越多的,直到最后一层feature map达到最大,这是因为越到深层,feature map的分辨率越小,所包含的信息越高级,所以需要更多的卷积核来进行学习。通道越多效果越好,但带来的计算量也会大大增加,所以具体设定也是一个调参的过程,并且各层通道数会按照8×的倍数来确定,这样有利于GPU的并行计算。
下采样层有两个作用,一是减少计算量,防止过拟合;二是增大感受野,使得后面的卷积核能够学到更加全局的信息。下采样的方式主要有两种:
在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样,它的实现一般有三种方式:
参数量指的是网络中可学习变量的数量,包括卷积核的权重weights,批归一化(BN)的缩放系数γ,偏移系数β,有些没有BN的层可能有偏置bias,这些都是可学习的参数,即在模型训练开始前被赋予初值,在训练过程根据链式法则不断迭代更新,整个模型的参数量主要是由卷积核的权重weights的数量决定,参数量越大,则该结构对平台运行的内存要求越高。
参数量的计算方式:
神经网络的前向推理过程基本上都是乘累加计算,所以它的计算量也是指的前向推理过程中乘加运算的次数,通常用FLOPs来表示,即floating point operations(浮点运算数)。计算量越大,在同一平台上模型运行延时越长,尤其是在移动端/嵌入式这种资源受限的平台上想要达到实时性的要求就必须要求模型的计算量尽可能地低,但这个不是严格成正比关系,也跟具体算子的计算密集程度(即计算时间与IO时间占比)和该算子底层优化的程度有关。
FLOPs的计算方式:
神经网络的计算量和参数量估计总结
深度可分离卷积将传统的卷积分两步进行,分别是depthwise和pointwise。首先按照通道进行计算按位相乘的计算,深度可分离卷积中的卷积核都是单通道的,输出不能改变feature map的通道数,此时通道数不变;然后依然得到将第一步的结果,使用1*1的卷积核进行传统的卷积运算,此时通道数可以进行改变。
计算量的前后对比:
Kh × Kw × Cin × Cout × H × W
变成了 Kh × Kw × Cin × H × W + 1 × 1 × Cin × Cout × H × W
通过深度可分离卷积,当卷积核大小为3时,深度可分离卷积比传统卷积少8到9倍的计算量。
转置卷积又称反卷积(Deconvolution),它和空洞卷积的思路正好相反,是为上采样而生,也应用于语义分割当中,而且他的计算也和空洞卷积正好相反,先对输入的feature map间隔补0,卷积核不变,然后使用标准的卷积进行计算,得到更大尺寸的feature map。
Addition和Concatenate分支操作统称为shortcut,Addition是在ResNet中提出,两个相同维度的feature map相同位置点的值直接相加,得到新的相同维度feature map,这个操作可以融合之前的特征,增加信息的表达,Concatenate操作是在Inception中首次使用,被DenseNet发扬光大,和addition不同的是,它只要求两个feature map的HW相同,通道数可以不同,然后两个feature map在通道上直接拼接,得到一个更大的feature map,它保留了一些原始的特征,增加了特征的数量,使得有效的信息流继续向后传递。
ReLu系列:ReLU、ReLU6和leaky ReLU;ReLU6与ReLU相比也只是在正向部分多了个阈值,大于6的值等于6,而leaky ReLU和ReLU正向部分一样,都是大于0等于原始值,但负向部分却是等于原始值的1/10,浮点运算的话乘个0.1就好了。
ReLU函数的优点:
解决了梯度消失的问题;
计算速度和收敛速度非常快;
ReLU函数的缺点:
低维特征向高维转换时会部分丢失;
均值为非零;
Sigmoid系列:Sigmoid、swish、h-sigmoid、h-swish;sigmoid对低性能的硬件来说非常不友好,因为涉及到大量的exp指数运算和除法运算,于是有研究人员针对此专门设计了近似的硬件友好的函数h-sigmoid和h-swish函数,这里的h指的就是hardware的意思:
Sigmoid函数的优点:
tanh函数的优点:
Tanh 函数的导数比 Sigmoid 函数导数值更大、梯度变化更快,在训练过程中收敛速度更快;
使得输出均值为 0,可以提高训练的效率;
将线性函数转变为非线性函数;
tanh函数的缺点:
幂运算相对来讲比较耗时;
容易出现梯度消失;
卷积神经网络中用11 卷积有什么作用或者好处呢?
卷积神经网络中用 11 卷积有什么作用或者好处呢?
目标检测Anchor是什么?
将一个batch的数据变换到均值为0、方差为1的正态分布上,从而使数据分布一致,每层的梯度不会随着网络结构的加深发生太大变化,从而避免发生梯度消失或者梯度爆炸,能够加快模型收敛,同时还有防止过拟合的效果。
实现过程
计算训练阶段mini_batch数量激活函数前结果的均值和方差,然后对其进行归一化,最后对其进行缩放和平移。
作用
不能,因为初始化权重是0,每次传入的不同数据得到的结果是相同的。网络无法更新
强化学习、K-means 聚类、自编码、受限波尔兹曼机
空洞卷积、池化操作、较大卷积核尺寸的卷积操作
数据增强(镜像对称、随机裁剪、旋转图像、剪切图像、局部弯曲图像、色彩转换)
early stopping(比较训练损失和验证损失曲线,验证损失最小即为最优迭代次数)
L2正则化(权重参数的平方和)
L1正则化(权重参数的绝对值之和)
dropout 正则化(设置keep_pro参数随机让当前层神经元失活)
原因:激活函数的选择。
梯度消失:令bias=0,则神经网络的输出结果等于各层权重参数的积再与输入数据集相乘,若参数值较小时,则权重参数呈指数级减小。
梯度爆炸:令bias=0,则神经网络的输出结果等于各层权重参数的积再与输入数据集相乘,若参数值较大时,则权重参数呈指数级增长。
以目标检测为例,传统的计算机视觉方法需首先基于经验手动设计特征,然后使用分类器分类,这两个过程都是分开的。而深度学习里的卷积网络可实现对局部区域信息的提取,获得更高级的特征,当神经网络层数越多时,提取的特征会更抽象,将更有助于分类,同时神经网路将提取特征和分类融合在一个结构中。
在前向传播和反向传播过程中,ReLU相比于Sigmoid等激活函数计算量小;
在反向传播过程中,Sigmoid函数存在饱和区,若激活值进入饱和区,则其梯度更新值非常小,导致出现梯度消失的现象。而ReLU没有饱和区,可避免此问题;
ReLU可令部分神经元输出为0,造成网络的稀疏性,减少前后层参数对当前层参数的影响,提升了模型的泛化性能;
卷积层是局部连接,所以提取的是局部信息;全连接层是全局连接,所以提取的是全局信息;
当卷积层的局部连接是全局连接时,全连接层是卷积层的特例;
所谓的正则化,就是在原来 Loss Function 的基础上,加了一些正则化项,或者叫做模型复杂度惩罚项,正则化机器学习中一种常用的技术,其主要目的是控制模型复杂度,减小过拟合。
两者的区别:
L1、L2正则化的区别
处理不平衡数据集的7个技巧
知识蒸馏是一种模型压缩常见方法,用于模型压缩指的是在teacher-student框架中,将复杂、学习能力强的网络学到的特征表示“知识蒸馏”出来,传递给参数量小、学习能力弱的网络。从而我们会得到一个速度快,能力强的网络,因此这是一个概念上的模型压缩方案。从另一个角度来说,蒸馏可以使得student学习到teacher中更加软化的知识,这里面包含了类别间的信息,这是传统one-hot label中所没有的。由于蒸馏中软化标签的本质,因此蒸馏也可以被认为是一种正则化的策略。总结来说,知识蒸馏除了能够学习到大模型的特征表征能力,也能学习到one-hot label中不存在的类别间信息。现有的知识蒸馏方法主要侧重于两点:从teacher的什么位置学习 和 用什么方式学习。以下的总结图概述了本文要介绍的蒸馏方法。
知识蒸馏 | 模型压缩利器_良心总结
总结 | 深度学习损失函数大全
22道机器学习常见面试题目
知乎专栏:训练好的深度学习模型是怎么部署的?
老潘的AI部署以及工业落地学习之路
深度学习模型部署的那些事儿
残差神经网络为什么可以缓解梯度消失?