深度学习总结

1. BN层的作用

(1)BN使得网络中每层输入数据的分布相对稳定,加速模型学习速度
(2)BN使得模型对网络中的参数不那么敏感,简化调参过程,使得网络学习更加稳定
(3)BN允许网络使用饱和性激活函数(例如sigmoid,tanh等),缓解梯度消失问题
(4)BN具有一定的正则化效果

详细了解

2. 空洞卷积

空洞卷积(dilated convolution)是针对图像语义分割问题中下采样会降低图像分辨率、丢失信息而提出的一种卷积思路。利用添加空洞扩大感受野,让原本3%5Ctimes%203的卷积核,在相同参数量的情况下,用于5%20%5Ctimes%205%28dilated%20rate%3D2%29或者更大的感受野,无须下采样。

这儿存在一个问题:

  • 局部信息的损失:由于atrous卷积的计算方式类似于棋盘格格式,某一层得到的卷积结果与上一层是独立的集合,不存在相互依赖,所以卷积之间不存在相关性这一层的结果。 ,即局部信息丢失。
  • 远距离获取的信息没有相关性:由于空洞卷积对输入信号的采样稀疏,用于获取远距离信息。但是这些信息之间并没有相关性,同时在对大物体进行分割的时候,会有一定的效果,但是对于小物体来说,有缺点没有优点。

详细了解

3. 图像插值方法

  1. 最近邻法。最近邻像素是替换像素的方法
  2. 二次插值
    已知(x1, y1, f (x1, y1)),(x1, y2, f (x1, y2)),(x2, y1, f (x2, y1)),(x2, y2, f (x2, y2))
    用双线性插值估计 f(x, y):
    先对 x 进行插值去求 f(x,y1) 和 f(x,y2):f%5Cleft%28x%2C%20y_%7B1%7D%5Cright%29%3Df%5Cleft%28x_%7B1%7D%2C%20y_%7B1%7D%5Cright%29%20%5Ccdot%20%5Cfrac%7Bx_%7B2%7D-x%7D%7Bx_%7B2%7D-x_%7B1%7D%7D%2Bf%5Cleft%28x_%7B2%7D%2C%20y_%7B1%7D%5Cright%29%20%5Ccdot%20%5Cfrac%7Bx-x_%7B1%7D%7D%7Bx_%7B2%7D-x_%7B1%7D%7D

f%5Cleft%28x%2C%20y_%7B2%7D%5Cright%29%3Df%5Cleft%28x_%7B1%7D%2C%20y_%7B2%7D%5Cright%29%20%5Ccdot%20%5Cfrac%7Bx_%7B2%7D-x%7D%7Bx_%7B2%7D-x_%7B1%7D%7D%2Bf%5Cleft%28x_%7B2%7D%2C%20y_%7B2%7D%5Cright%29%20%5Ccdot%20%5Cfrac%7Bx-x_%7B1%7D%7D%7Bx_%7B2%7D-x_%7B1%7D%7D
然后去问f%28x%2C%20y%29
f%28x%2C%20y%29%3Df%5Cleft%28x%2C%20y_%7B1%7D%5Cright%29%20%5Ccdot%20%5Cfrac%7By_%7B2%7D-y%7D%7By_%7B2%7D-y_%7B1%7D%7D%2Bf%5Cleft%28x%2C%20y_%7B2%7D%5Cright%29%20%5Ccdot%20%5Cfrac%7By-y_%7B1%7D%7D%7By_%7B2%7D-y_%7B1%7D%7D
㓚 Guox_%7B2%7D%3D1%2C%20x_%7B1%7D%3D0%2C%20y_%7B2%7D%3D1%2C%20y_%7B1%7D%3D1, then:
f%28x%2C%20y%29%3D%281-y%29%20%5Ccdot%281-x%29%20%5Ccdot%20f%280%2C0%29%2B%281-y%29%20%5Ccdot%20x%20%5Ccdot%20f%281%2C0%29%2By%20%5Ccdot%281-x%29%20%5Ccdot%20f%280%2C1%29%2By%20%5Ccdot%20x%20%5Ccdot%20f%281%2C1%29
RoI Align 就行用的双线性插值对连续点利用周围的四个点进行双线性插值

详细学习链接

4. Focal loss

%5Calpha平衡了正负样本数量,但实际上,目标检测中大量的候选目标都是易分样本,这些样本会使损失很低,因此模型应关注那些难分样本,将高置信度的样本损失函数降低一些,就有了Focal loss
FL%20%3D%20%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%20-%5Calpha%281-p%29%5E%7B%5Cgamma%7D%20log%28p%29%20%26%20if%20%5C%20y%20%3D1%5C%5C%20-%281-%5Calpha%29p%5E%7B%5Cgamma%7D%20log%281-p%29%20%26%20if%20%5C%20y%20%3D0%20%5Cend%7Bmatrix%7D%5Cright.

5. 深度可分离卷积

一些轻量级的网络,如mobilenet中,会有深度可分离卷积depthwise separable convolution,由depthwise(DW)和pointwise(PW)两个部分结合起来,用来提取特征feature map

与传统的卷积运算相比,参数个数和运算成本都比较低

正则卷积操作
深度学习总结

卷积层共4个Filter,每个Filter包含了3个Kernel,每个Kernel的大小为3×3。因此卷积层的参数数量可以用如下公式来计算:

N_std = 4 × 3 × 3 × 3 = 108

深度可分离卷积

  • 通道卷积

深度学习总结
其中一个Filter只包含一个大小为3×3的Kernel,卷积部分的参数个数计算如下:

N_depthwise = 3 × 3 × 3 = 27

  • 逐点卷积
    深度学习总结

由于采用的是1×1卷积的方式,此步中卷积涉及到的参数个数可以计算为:

N_pointwise = 1 × 1 × 3 × 4 = 12

经过Pointwise Convolution之后,同样输出了4张Feature map,与常规卷积的输出维度相同

详细学习链接

6. 为什么说Dropout可以解决过拟合?

(1)取平均的作用: 先回到标准的模型即没有dropout,我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。例如3个网络判断结果为数字9,那么很有可能真正的结果就是数字9,其它两个网络给出了错误结果。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉一半隐藏神经元导致网络结构已经不同,整个dropout过程就相当于对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。
(2)减少神经元之间复杂的共适应关系: 因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征。从这个角度看dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。
(3)Dropout类似于性别在生物进化中的角色:物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应,性别的出现可以繁衍出适应新环境的变种,有效的阻止过拟合,即避免环境改变时物种可能面临的灭绝。
详细学习链接

7. 知识蒸馏

知识蒸馏指的是将复杂模型(teacher)中的dark knowledge迁移到简单模型(student)中去,一般来说,teacher模型具有强大的能力和表现,而student模型则体量很小。通过知识蒸馏,希望student模型能尽可能逼近亦或是超过teacher模型,从而用更少的复杂度来获得类似的预测效果,实现模型的压缩和量化。

总结来说,知识蒸馏,可以将一个网络的知识转移到另一个网络。做法是先训练一个teacher网络,然后使用这个teacher网络的输出和数据的真实标签去训练student网络。知识蒸馏,可以用来将网络从大网络转化成一个小网络,并保留接近于大网络的性能;也可以将多个网络的学到的知识转移到一个网络中,使得单个网络的性能接近emsemble的结果。

详细学习链接
详细学习链接

8. 1×1卷积核作用

  1. 降维/升维
  2. 增加非线性
  3. 跨通道信息交互(channal 的变换)

9. add_with_concat

连接

  • concat操作时增加通道数,add是添加特征图,通道数保持不变。
  • 对于Concat的操作,如果通道数相同,再进行卷积,add相当于concat之后对应的通道共享同一个卷积核。

区别

  • 对于Concat操作,合并通道数,即增加了描述图像本身的特征,但没有增加每个特征下的信息。
  • 对于add层,它更像是信息之间的叠加。有一个先验的,tensoradd前后的语义相似。

综上所述

因此,如果需要融合BATensor,如果它们语义不同,我们可以使用Concat的形式,如UNetSegNet进行编码和解码结构,主要使用Concat

而如果AB语义相同,比如AB是不同分辨率的特征,语义相同,我们可以用add进行融合,比如FPNB等网络的设计。

详细学习链接

10. CNN

CNN

  • 局部连接:不是全连接,而是使用size相对input小的kernel在局部感受视野内进行连接(点积运算)
  • 权重共享:在一次卷积核操作中,每次计算一个感知场,通过滑动遍历对整个输入进行卷积,而不是每次移动都改变卷积核参数

两者都旨在减少参数。通过对视场的局部感知,可以通过卷积运算得到高阶特征,可以达到更好的效果。

池化的意义

1.特征不变形:池化操作是模型更加关注是否存在某些特征而不是特征具体的位置。

2.特征降维:池化相当于在空间范围内做了维度约减,从而使模型可以抽取更加广范围的特征。同时减小了下一层的输入大小,进而减少计算量和参数个数。

3.在一定程度上防止过拟合,更方便优化。

11. 感受野

感受野(ReceptiveField)的定义是卷积神经网络每一层输出的特征图(featuremap)上的像素点映射到原始输入图像上的区域大小。更通俗的解释是,特征图上的一个点对应于原始输入图像上的一个区域,如下图所示。
深度学习总结

12. 欠拟合和过拟合

解决欠拟合:

  1. 添加其他功能。组合、泛化、相关、上下文特征、平台特征等特征是特征添加的重要手段。有时特征项不足会导致欠拟合。
  2. 添加多项式特征。例如将线性模型添加二次项或三次项使泛化能力更强。例如,FM(Factorization Machine)模型、FFM(Field-aware Factorization Machine)模型,其实就是线性模型,增加了二阶多项式,保证了模型一定的拟合程度。
  3. 可以增加模型的复杂性。
  4. 减小正则化因子。正则化的目的是防止过拟合,但如果模型先欠拟合,则需要减小正则化参数。

解决过拟合:

  1. 重新清洗数据,不纯的数据会导致过拟合,这种情况需要重新清洗数据。
  2. 增加训练样本的数量。
  3. 降低模型复杂性。
  4. 增加正则项系数。
  5. 采用dropout方法,dropout方法,通俗的讲就是在训练的时候让神经元以一定的概率不工作。
  6. early stopping,减少迭代次数。
  7. 提高学习率。
  8. 添加噪声数据。数据增强。
  9. 在树结构中,树可以被修剪。
  10. 减少功能项目。

13. 优化器

  1. 非自适应优化器
    GD、BGD、SGD、SGDM
  2. 自适应优化器
    Adagrad、Adadelta、RMSprop、Adam

14. 神经网络模型不收敛

原因

  1. 忘记标准化您的数据
  2. 忘记检查输出
  3. 无数据预处理
  4. 没有使用正则化方法
  5. 使用了一个太大的 batch size
  6. 使用错误的学习率
  7. 在最后一层使用错误的激活函数
  8. 网络包含不良梯度
  9. 网络权重未正确初始化
  10. 使用了太深的神经网络
  11. 隐藏层神经元个数设置不正确

对应的解决方案是:

  1. 规范化数据。常用的归一化方法有零均值归一化和线性函数归一化;
  2. 检测训练过程中各个阶段的数据结果。如果是图像数据,可以考虑使用可视化的方法;
  3. 预处理数据,包括做一些简单的转换;
  4. 采用正则化方法,比如 L2 正则,或者 dropout;
  5. 在训练的时候,找到一个可以容忍的最小的 batch 大小。可以让 GPU 并行使用最优的 batch 大小并不一定可以得到最好的准确率,因为更大的 batch 可能需要训练更多时间才能达到相同的准确率。所以大胆的从一个很小的 batch 大小开始训练,比如 16,8,甚至是 1。
  6. 不使用渐变剪裁。找到在训练过程中不会导致错误爆炸的最大学习率。将学习率设置为比这个低一个数量级,这可能非常接近最优学习率。
  7. 如果是在做回归任务,大部分情况下是不需要在最后一层使用任何激活函数;如果是分类任务,一般最后一层是用 sigmoid 激活函数;
  8. 如果你发现你的训练误差没有随着迭代次数的增加而变化,那么很可能就是出现了因为是 ReLU 激活函数导致的神经元死亡的情况。可以尝试使用如 leaky ReLU 或者 ELUs 等激活函数,看看是否还出现这种情况。
  9. 目前比较常用而且在任何情况下效果都不错的初始化方式包括了“he”,“xaiver”和“lecun”。所以可以任意选择其中一种,但是可以先进行实验来找到最适合你的任务的权值初始化方式。
  10. 从256到1024个隐藏神经元数量开始。然后,看看其他研究人员在相似应用上使用的数字

15. 权重初始化方法

  1. 初始化为常量
  2. 平均初始化
  3. 普通函数初始化
  4. Aavier初始化:尽可能的让输入和输出服从相同的分布,这样就能够避免后面层的激活函数的输出值趋向于深度学习总结0
  5. He Kaiming initialization

16. 网络模型训练技巧

17. 时序建模模块

18. 激活函数

19. AUC和ROC

20. L1和L2

  • L1 正则化项是模型参数的绝对值之和。 L2 正则化项是模型各参数平方和的平方根值。
  • L1正则化可以使部分权重深度学习总结0生成一个稀疏的权重矩阵,即可以生成一个稀疏的模型,可以用于特征选择;在一定程度上,L1还可以防止过拟合。当L1的正则化系数非常小时,我们得到的最优解会很小,可以达到与L2正则化类似的效果。
  • L2 正则化可以通过权重衰减使所有权重趋于深度学习总结0,而不是深度学习总结0,导致模型权重参数更小更平滑,防止模型过拟合(overfitting);
  • L2正则化的效果是将原始最优解的每个元素以不同的比例缩放; L1正则化会使原最优解的元素发生不同程度的偏移,使部分元素变为深度学习总结0,从而产生稀疏性。

21. 标签平滑-labelsmoothing

标签平滑采用如下思想:在训练时,假设标签可能存在错误,从而避免“过度”信任训练样本的标签。当目标函数是交叉熵时,这个想法有一个非常简单的实现,叫做标签平滑(LabelSmoothing)。
没有标签平滑计算的损失只考虑了正确标签位置的损失,没有考虑其他标签位置的损失,这会导致没有考虑其他错误标签位置的损失的问题,这会使模型过于集中很多关于正确增加预测。标签的概率,而不是专注于降低预测错误标签的概率,最终的结果是模型在自己的训练集上拟合得很好,但是在其他测试集上表现不佳,也就是过拟合,也就是据说模型的泛化能力很差。

平滑后的样本交叉熵损失不仅考虑了训练样本中正确标签位置(onehot标注1)的损失,还略微考虑了其他错误标签位置(onehot标签位置为深度学习总结0 )。损失,导致最终损失的增加,导致模型学习能力的提高,即要减少原来的损失,它必须学习得更好,即迫使模型增加正确的概率分类并减少错误分类的概率。前进。

详细学习链接
详细学习链接

22. BN,LN,IN,GN, SN

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

23. FPN为何能够提升小目标的精度

低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。原来多数的object detection算法都是只采用顶层特征做预测。FPN同时利用低层特征高分辨率和高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。并且预测是在每个融合后的特征层上单独进行的。所以可以提升小目标的准确率。

24. Softmax与sigmoid计算公式

详细学习链接
详细学习链接

25. 为什么分类问题的损失函数采用交叉熵而不是均方误差MSE?

版权声明:本文为博主Fighting_1997原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/frighting_ing/article/details/123378776

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年3月11日
下一篇 2022年3月11日

相关推荐