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

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

?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;
  • 经过两次量化会产生像素偏差(misalignment)(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、L2
  • ReLu、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

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值