当前位置: 首页 > >

深度学*知识点训练技巧总结

发布时间:

神经网络的介绍:(2017.11-ICCV)Feed Forward and Backward Run in Deep Convolution Neural Network
常用优化函数的介绍:(2016.09-arXiv)An overview of gradient descent optimization algorithms
常用数据集:MSCOCO简介

持续更新:
最新??2019.10.10



一、知识点总结

?1、卷积层的作用、池化层的作用、全连接层的作用、激活函数的作用
卷积层:是一组*行的特征图(feature map),它通过在输入图像上滑动不同的卷积核并执行一定的运算而组成。作用如下:
    相当于一个特征提取器来提取特征。提供了位置信息减少参数个数。
池化层:指下采样层,它把前层神经元的一个集群的输出与下层单个神经元相结合。池化运算在非线性激活之后执行。(最大池化、*均池化、L2范数池化等)作用如下:
    有助于减少参数的数量并避免过拟合。可作为一种*滑手段消除不想要的噪音。(提取主要特征保持一定程度的旋转和*移不变性最大汇合可以带来非线性
全连接层:全连接层的每一个节点都与上一层每个节点连接,是把前一层的输出特征都综合起来,输出为一个值。所以该层的权值参数是最多的。作用如下:
    起到“分类器”的作用(将学到的“分布式特征表示”映射到样本标记空间);FC可视作模型表示能力的“防火墙”(fine tuning中有FC比较好)
激活函数:定义了给定一组输入后神经元的输出。作用如下:
    将线性网络输入值的加权和传递至激活函数以用于非线性转换。激活函数决定是否应该激活神经元,即是否有参数传递

?2、前向传播和反向传播
前向传播:从输入经过各种网络层,得到输出求得损失函数值的过程。反向传播:通过损失函数值调节网络各层的参数值的过程。求偏导的过程。
?3、常见的激活函数(sigmoid、tanh、ReLU、Leaky ReLU、softmax)

激活函数应保证可微性、单调性。


激活函数输出值有限时,基于梯度的优化方法更加稳定;输出无限的时候,模型的训练更加高效。激活函数接在bn之后,所以激活函数的输入被限制在了 (-1, 1) 之间



sigmoid( 不建议使用):


输出值落在(0, 1)之间,期望均值为 0.5 ,不符合 均值为 0 的理想状态;受现有的梯度下降算法所限(严重依赖逐层的梯度计算值),Sigmoid函数对落入 (-∞,-5) ∪ (5,+∞) 的输入值,梯度 计算为 0,发生 梯度弥散。因此该函数存在一正一负 两块“死区”最大梯度为0.25,容易出现梯度消失;

tanh( 不建议使用):


期望均值 *移到了 0这一理想状态。(相对于sigmoid)本质上依然是Sigmoid函数,依然无法回避一左一右两块 “死区”

? ReLU(目前标配)


He初始化 (对relu网络有利);conv->bn->relu (默认采用relu);彻底 消灭 了 正半轴上 的 死区负半轴上 的 死区直接到 0点 ;计算超简单;有助于使模型参数稀疏

ReLU 6:f(x)=min(max(0,x),6)


正半轴上 的 死区 死灰复燃,从Relu的 (-∞,0) 蚕食至 Relu6的 (-∞,0) ∪ (6,+∞)15年bn出来之后,输入被归一化到了 (-1, 1) 之间。因此,relu6的设计就显得没有必要。

Leaky ReLU


对 Relu 函数 新增一 超参数 λ(0.01或者0.001),以解决负半轴的死区问题;合适的 λ值 较难设定 且较为敏感,导致在实际使用中 性能不稳定将 Leaky Relu 函数 中的 超参数 λ 设置为 和模型一起 被训练到 的 变量,以解决λλ 值 较难设定 的问题。优点:更大自由度。缺点:更大的过拟合风险。

?总结


Sigmoid 和 tanh(x) 不建议使用;Relu最常用;计算简单(反向传播涉及除法)、避免梯度消失(正向无饱和区)、防止过拟合(负向输出为0)为了进一步提高模型精度,Leaky Relu、参数化Relu、随机化Relu 和 ELU 均可尝试(但四者之间无绝对的高下之分);“ conv -> bn -> relu ” 套件目前早已成为了CNN标配module。
?4、常见的优化函数(SGD、Adagrad、Adadelta、RMSprop、Adam、Nadam)

BGD(Batch gradient descent):


每次更新需要计算整个数据集的梯度,(慢!)最后能够保证收敛于极值点(凸函数收敛于全局极值点,非凸函数可能会收敛于局部极值点)

SGD(Stochastic gradient descent):


更新针对每一个样本集x(i) 和y(i),每次则只更新一次。(快!)以高方差进行快速更新,可以让梯度计算跳出局部最优,最终到达一个更好的最优点(目标函数出现会出现抖动);

MBGD(Min-batch gradient descent):


每一次利用一小批样本,n 个样本进行计算(n:50~256)减少了参数更新的变化,这可以带来更加稳定的收敛;可以充分利用矩阵优化,最终计算更加高效。(但是不保证好的收敛性!受学*率影响)

?总结以上三个:


都需要预先设置学*率,整个过程都采用相同的学*率进行计算。选择一个合适的学*率是非常困难的事情预先制定学*率变化规则

Momentum


原理:判断当前梯度方向与上一次方向是否一致,一致则进行加强,反之,减弱;优点:加速SGD算法的收敛速度;降低SGD算法收敛时的震荡新增一阶动量

NAG(Nesterov accelerated gradient):


考虑的是上一时刻的动能和*似下一点的梯度。

Adagrad


自适应优化算法,针对高频特征更新步长较小,而低频特征更新较大(适合应用在特征稀疏的场景)新增二阶动量,使用不同的learning rate
缺点:随着训练的进行,学*率将会变得无限小,此时算法将不能进行参数的迭代更新。

Adadelta、RMSprop


都是adagrad算法的优化版,用于解决adagrad算法学*率消失的问题

Adam(Adaptive Moment Estimation):


另一种自适应参数更新算法,是RMSProp算法和Momentum的结*妫一阶与二阶动量结合

Nadam


Nesterov + Adam

?优化器选择总结


当训练数据特征较为稀疏的时候,采用自适应的优化器(Adagrad, Adadelta, RMSprop, Adam);SGD通常训练时间更长,但是在好的初始化和学*率调度方案的情况下,结果更可靠Adam(Nadam)可能是最佳的选择

?5、常见的归一化(BN、LN、IN、GN、SN)

BN(Batch Normalization,2015.02):


沿着通道计算每个batch的均值和方差,求出归一化,加入缩放和*移变量γ和β(用来学*的),使其符合标准正态分布。针对不同神经元输入计算均值和方差,同一个batch中的输入拥有相同的均值和方差。(???)
缺点:对batchsize的大小敏感,太小的话不能代表整个数据集的分布。适用于DNN、CNN,不适用RNN(因为深度不固定的原因)

?BN的作用:(学*率、激活函数、dropout、L2正则化)


对于初始化要求没那么高,可以使用更高的学*率;(BN之前同层不同层的scale都不一样,而需要使用最小的学*率才能保证梯度有效下降)移除或使用较低的dropout降低L2正则化项权重衰减系数取消Local Response Normalization层可以解决反向传播过程中的梯度问题(它让每一层的输出归一化到了均值为0方差为1的分布,对激活函数友好)

LN(Layer Normalizaiton,2016.07):


同层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差;(???)适用于RNN效果比较明显,但是在CNN上,不如BN。

IN(Instance Normalization,2016.07):


可以加速模型收敛,保持每个图像实例之间的独立,适用于图像风格化

GN(Group Normalization,2018.03):


将channel方向分group,然后每个group内做归一化,算(C//G)HW的均值;与batchsize无关,不受其约束。

SN(Switchable Normalization,2018.06):


使用可微分学*,为一个深度网络中的每一个归一化层确定合适的归一化操作。

?归一化总结


将输入的图像shape记为[N, C, H, W]:


batchNorm是在batch上,对NHW做归一化,对小batchsize效果不好;layerNorm在通道方向上,对CHW归一化,主要对RNN作用明显;instanceNorm在图像像素上,对HW做归一化,用在风格化迁移;GroupNorm将channel分组,然后再做归一化;SwitchableNorm是将BN、LN、IN结合,赋予权重,让网络自己去学*归一化层应该使用什么方法。



?6、防止过拟合(overfit)的方法
正则化:即在对模型的目标函数(objective function)或代价函数(cost function)加上正则项。(L1正则与L2正则)理由:(比如拟合的三次项方程y=4x3 + 3x2 + 2x +5 为过拟合。因为加了正则化,变成了y= 3x2 + 2x +5)提前停止迭代:当迭代过程中准确率不再上升时停止,或者是损失函数停止下降的时候。dropout:在每次训练过程中随机将部分神经元的权重置为0,即让一些神经元失效,这样可以缩减参数量。数据集增广:重采样、加噪音、GAN也可以啊。
?7、正则化的定义(L1正则与L2正则):

为什么需要正则化


结构风险最小化: 在经验风险最小化的基础上(也就是训练误差最小化),尽可能采用简单的模型,以此提高泛化预测精度正则化是结构风险最小化的一种策略实现

正则化


又叫做罚项,是为了限制模型的参数防止模型过拟合而加在损失函数(目标函数)后面的一项。


从左往右:公式、原始目标函数、L1正则化、L2正则化、L1正则化求解过程

L1 正则化(lasso回归):


公式也很简单,直接在原来的损失函数基础上加上权重参数的绝对值之和(L1范数)。L1可以让一部分特征的系数缩小到0,从而间接实现特征选择。所以L1适用于特征之间有关联的情况。

L2 正则化(岭回归):


公式非常简单,直接在原来的损失函数基础上加上权重参数的*方和(L2范数)。L2让所有特征的系数都缩小但是不会减为0,它会使优化求解稳定快速。所以L2适用于特征之间没有关联的情况。

缺点


增大训练误差为代价,来减少测试误差。
?8、二分类的评价指标:(准确率、精准率、召回率、混淆矩阵、AUC)

准确率:算法分类正确的数据个数/输入算法的数据的个数。类别不均衡,缺点:特别是有极偏的数据存在的情况下,不适用。
混淆矩阵:二分类问题的混淆矩阵由 4 个数构成。首先我们将二分类问题中,我们关心的,少数的那一部分数据,我们称之为正例(positive)。第 1 个字母表示算法预测正确或者错误,第 2 个字母表示算法预测的结果。
精准率预测为正例的那些数据里预测正确的数据个数。例如,在预测股票的时候,我们更关心精准率。
召回率真实为正例的那些数据里预测正确的数据个数。在预测病患的场景下,我们更关注召回率。
F1 score:精准率和召回率的兼顾指标:是精确率和召回率的调和*均数,最大为1,最小为0。。
ROC:*面的横坐标是false positive rate(FPR),纵坐标是true positive rate(TPR)。如果得到一个位于此直线下方的分类器的话,一个直观的补救办法就是把所有的预测结果反向,即:分类器输出结果为正类,则最终分类的结果为负类,反之,则为正类。
AUC:定义为ROC曲线下的面积(取值范围在0.5和1之间),AUC值大的分类器效果更好


?9、常见卷积类型(卷积、反卷积、空洞卷积、可形变卷积)


卷积 (左)、反(解)卷积 (中二)、空洞(扩张)卷积(右)

空洞卷积的作用


在不增加计算量的基础上可以增大感受野。感受野计算:3 + 4 x (r-1) (卷积核大小3x3、生在率:r)(正常卷积的r=1)
???可形变卷积(DCN V1:deformable convolution networks,2017.03)【论文原文】【参考】
感受野不再是规则的正方形(图1);给每个采样点一个offset(通过额外的conv层学*得到,图2);将input feature map和offset共同作为deformable conv的输入;ROI pooling通过一个额外的FC层来学*offset




???可形变卷积(DCN V2:deformable convolution networks,2018.11)【论文原文】【参考】

动机:因为V1中的offset不可控导致引入了过多的context,而这些context可能是有害的。
改进:


增加更多的Deformable Convolution让Deformable Conv不仅能学*offset,还能学*每个采样点的权重(modulation)模拟R-CNN的feature(knowledge distillation)
缺点:不支持cudnn,速度慢。
?10、常见的损失函数()

0-1损失函数(0-1 lossfunction)


多适用于分类问题中,预测错误,输出值为1;明预测正确,输出为0。缺点:过于理想,基本不用

感知损失函数(Perceptron Loss)


对0-1损失函数的改进,给一个误差区间,只要在误差区间内,就认为是正确的。

*方损失函数(quadratic loss function):(欧式损失函数-非凸函数)


指预测值与真实值差值的*方,多用于线性回归任务中。

Hinge损失函数(hinge loss function):(合页损失)


通常适用于二分类的场景中,可以用来解决间隔最大化的问题,常应用于著名的SVM算法中。

对数损失函数(Log Loss)


常用于逻辑回归问题中,让概率p(y|x)达到最大值。

交叉熵损失函数(cross-entropy loss function):(凸函数0


本质上也是一种对数损失函数,常用于多分类问题中。常用于当sigmoid函数作为激活函数的情景,因为它可以完美解决*方损失函数(多分类任务中,存在多个局部*缓区域)权重更新过慢的问题。



focal loss


解决类别不*衡问题,调整正负样本的权重(负样本即包括背景);对困难样本的损失分配比较大的权重,控制难易分类样本的权重



?11、NMS非极大值抑制

每一类进行NMS:


先根据score进行降序排序,然后计算最高的score和其他框的iou,去掉iou大于阈值的检测框。
?12、降低模型复杂的方法?
(2015.03)模型蒸馏技术:将复杂网络中的有用信息提取出来迁移到一个更小的网络上。(2018.07)利用AutoML进行网络结构的优化:可将网络计算复杂度作为约束条件之一,得到更优的结构。(2017.04)mobile net :使用深度可分离卷积(depthwise separable convolutions)替代传统卷积(2017.07)shuffle net:逐点分组卷积channel shuffle。模型剪枝:将很多kernel的权重很小的删除,将剩余的权重进行重构。量化:把连续的权值进一步稀疏化、离散化(比如4.01和3.99都用4.0来表示)哈夫曼编码:数据重复越多,熵越低,哈夫曼编码就越能用短的码值来表示更多的数字,编码的效率就越高
?13、Dropout的原理及作用

原理步骤


1)在开始,随机删除掉隐藏层一半(自定义p)的神经元(只是不参与下一步的权重更新,并没有真正删除)(相当于每次训练不同的网络);2)然后,在删除后的剩下一半的神经元上正向和反向更新权重(变为1/p)和偏向;3)再恢复之前删除的神经元,再重新随机删除一半的神经元,进行正向和反向更新w和b;4)重复上述过程

注:


只能在训练中使用,测试和实际使用时不能有 Dropout 操作,只是每个权重参数乘以概率P;数据量小的时候,dropout效果不好,数据量大了,dropout效果好dropout如何选择概率:input 的dropout概率推荐是0.8, hidden layer 推荐是0.5
?14、卷积的参数量和计算量如何计算(以及卷积层输出大小计算)?

卷积层输出大小计算


公式:O = (W - F + 2P) / S+1,输入图片(Input)大小为I=W x W,卷积核(Filter)大小为F x F,步长(stride)为S,填充(Padding)的像素数为P;除不尽的结果都向下取整SAME填充方式:填充像素。conv2d函数常用VALID填充方式:不填充像素,Maxpooling2D函数常用。

1、普通卷积:
参数量


和图像大小无关,是参与计算参数的个数,占用内存空间。(Cin (K x K) + 1 ) x Cout:(Cin:输入通道、核大小:K x K、Cout :输出通道)

MAC(Multiply Accumulate)


和输入图像的大小也有关系
Conv所占的比重通常是最大的
错的(Cin x K x K ) x Hout x Wout x Cout:(Cin:输入通道、核大小:K x K、Cout :输出通道、Hout x Wout:输出大小)


FLOPs(floating point operations)(浮点运算量,指计算量):


(Cin x 2 x K x K ) x Hout x Wout x Cout:乘2是因为有加法
例如下图:Image大小为 5x5,卷积核大小为 3x3,则:


那么(1 x 2 x 3 x 3 -1 ) x 3 x3 x 1= 153 (不带偏置,以上公式皆为带偏置)



2、可分离卷积:








?15、RoIPooling、RoIAlign的原理与区别

RoIPooling:(Faster RCNN中使用)


使生成的候选框region proposal映射产生固定大小的feature map;经过两次量化会产生像*睿╩isalignment)(20 x 20 变成 14 x 14 )

RoIAlign:(在Mask RCNN中使用)


使生成的候选框region proposal映射产生固定大小的feature map;映射过程中保留浮点数,使用双线性内插的方法获得坐标为浮点数的像素点上的图像数值,然后进行最大池化操作;对检测小物体效果更好
?16、

二、训练技巧总结

?1、对卡在局部极小值的处理方法:
1.调节步伐:调节学*速率,使每一次的更新“步伐”不同;2.优化起点:合理初始化权重(weights initialization);常用方法有:
高斯分布初始权重(Gaussiandistribution):满足mean=0,std=1的高斯分布x?N(mean,std2)Xavier 初始权重:满足x?U(?a,+a)的均匀分布, 其中 a = sqrt(3/n)MSRA 初始权重:满足x?N(0,σ2)的高斯分布,其中σ = sqrt(2/n)Uniform 初始权重:满足min=0,max=1的均匀分布,x?U(min,max)He 初始权重:均匀分布初始权重(Uniform distribution):Glorot 初始权重:稀疏矩阵初始权重(sparse matrix): 3.预训练网络(pre-train),使网络获得一个较好的“起始点”,如最右侧的起始点就比最左侧的起始点要好。
?2、多任务学*中标签缺失如何处理?
一般做法是将缺失的标签设置特殊标志,在计算梯度的时候忽略
?3、梯度消失和梯度爆炸的区别以及解决方法

出现原因


深度学*基于梯度学*,前面层的梯度是后面层的乘积,随着层数的增加,就会发生梯度消失或者梯度爆炸。

区别


在求导连续乘积后,一个值特别大、一个值特别小;

解决方法


引入Gradient Clipping(梯度裁剪),将梯度约束在一个范围内,这样不会使得梯度过大。预训练模型+微调正则化L1、L2ReLu、leakyrelu等激活函数(代替sigmoid)BN归一化残差结构
?4、sync BN,multi-scale training/testing,deformable conv,soft-nms???
?5、目标检测不*衡的类型?(类别、尺度、位置、任务损失、类别损失、IoU)【论文原文】
1、类别不*衡:
前景和背景的不*衡、前景中不同类别的输入包围框个数不*衡
2、尺度不*衡:
输入图像和包围框的尺度不*衡,不同特征层对最终结果贡献不*衡;
3、空间不*衡:
不同样本对回归损失的贡献不同正样本IoU分布不*衡目标在图像中的位置不*衡
4、目标函数不*衡:
不同任务(比如回归和分类)对全局损失的贡献不*衡(一般而言分类loss多)
?5、

待续…??2019.8.19



友情链接: