深度学习 (一)通用知识

深度学习 (一)通用知识

将从通用知识到子任务知识逐步展开,子任务不会写的太全面。

通用知识

深度学习的组成部分

  • Dataset
    • Data Augmentation
  • Model
    • 卷积神经网络(Convolutional Neural Networks, CNN)
    • 循环神经网络(Recurrent Neural Networks, RNN)
    • Transformer
    • LSTM
    • 变分自编码器(Variational Autoencoders, VAE)
    • 生成对抗网络(Generative Adversarial Networks, GAN)
    • 扩散模型(Diffusion Model)
  • Learning Rate 学习率
    • Learning Rate Scheduler
  • Activation function 激活函数
  • Loss function 损失函数
  • Optimizer 优化器

深度学习中常用的一些术语的概念

前向传播与反向传播

Backpropagation[1]

Epoch,Iteration,Batchsize

神经网络中Epoch、Iteration、Batchsize相关理解和说明[2]

  • batchsize:中文翻译为批大小(批尺寸)。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;

  • iteration:中文翻译为迭代,1个iteration等于使用batchsize个样本训练一次;一个迭代 = 一个正向通过+一个反向通过

  • epoch:迭代次数,1个epoch等于使用训练集中的全部样本训练一次;一个epoch = 所有训练样本的一个正向传递和一个反向传递

神经网络中epoch与iteration是不相等的

举个例子,训练集有1000个样本,batchsize=10,那么:训练完整个样本集需要:100次iteration,1次epoch。

一般来说,当数据集较小,能够一次性加载到内存中时,会使用Epoch;当数据集较大而无法放入内存时,使用iterations。

欠拟合与过拟合

深度学习相关概念:过拟合与欠拟合[3]

img

img

如何解决过拟合?
  • 提供更多的训练数据
    • 获取更多的真实数据
    • 数据增强
  • 调节模型允许存储的信息量或者对模型允许存储的信息加以约束,该类方法也称为正则化。
    • 调节模型大小
    • 约束模型权重,即权重正则化(在机器学习中一般使用 L2正则化,L2正则损失对于大数值的权值向量进行严厉惩罚,鼓励更加分散的权重向量,使模型倾向于使用所有输入特征做决策,此时的模型泛化性能好!)
    • 随机失活(Dropout)
随机失活为什么能够防止过拟合呢?

解释1:

随机失活使得每次更新梯度时参与计算的网络参数减少了,降低了模型容量,所以能防止过拟合。

解释2:

随机失活鼓励权重分散,从这个角度来看随机失活也能起到正则化的作用,进而防止过拟合。
总的来说通过Dropout每次输入一个样本,就相当于该神经网络就尝试了一个新的结构,但是所有这些结构之间共享权重。因为神经元不能依赖于其他特定神经元而存在,所以这种技术降低了神经元复杂的互适应关系。正因如此,网络需要被迫学习更为鲁棒的特征(泛化性更强)。

训练时使用随机失活,测试时怎么办?

测试时不使用随机失活,而是计算所有权重

如何解决欠拟合?
  • 增加新特征,可以考虑加入进特征组合、高次特征,来增大假设空间。
  • 添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。
  • 减少正则化参数,正则化的目的是用来防止过拟合的,但是模型出现了欠拟合,则需要减少正则化参数。
  • 使用非线性模型,比如核SVM 、决策树、深度学习等模型 。
  • 调整模型的容量(capacity),通俗地,模型的容量是指其拟合各种函数的能力。
  • 容量低的模型可能很难拟合训练集;使用集成学习方法,如Bagging ,将多个弱学习器Bagging。

卷积

  • 对深度可分离卷积、分组卷积、扩张卷积、转置卷积(反卷积)的理解[4]
  • conv_arithmetic[5]
  • 普通卷积

  • 转置卷积(Transposed Convolution):也被称为反卷积或部分跨越卷积,常用于上采样或解卷积网络。

  • 分组卷积(Grouped Convolution):在这种卷积中,输入和输出通道被分成几个组,每个组独立进行卷积。

  • 点卷积(Pointwise Convolution):也被称为1x1卷积,主要用于改变通道的数量。

  • 空洞卷积/扩张卷积(Dilated/Atrous Convolution):也被称为atrous卷积或空洞卷积,通过在卷积核中插入“洞”来增加其感受野。

  • 可分离卷积/深度可分离卷积(Separable Convolution, Depthwise Separable Convolution):这种卷积将空间卷积和深度卷积分开进行,从而减少计算量。

普通卷积

img

反卷积/转置卷积

如何理解深度学习中的deconvolution networks? - 谭旭的回答 - 知乎[6]

Deconvolution大致可以分为以下几个方面:

  • unsupervised learning,其实就是covolutional sparse coding[1][2]:这里的deconv只是观念上和传统的conv反向,传统的conv是从图片生成feature map,而deconv是用unsupervised的方法找到一组kernel和feature map,让它们重建图片。
  • CNN可视化[3]:通过deconv将CNN中conv得到的feature map还原到像素空间,以观察特定的feature map对哪些pattern的图片敏感,这里的deconv其实不是conv的可逆运算,只是conv的transpose,所以tensorflow里一般取名叫transpose_conv。
  • upsampling[4][5]:在pixel-wise prediction比如image segmentation[4]以及image generation[5]中,由于需要做原始图片尺寸空间的预测,而卷积由于stride往往会降低图片size, 所以往往需要通过upsampling的方法来还原到原始图片尺寸,deconv就充当了一个upsampling的角色。
空洞卷积
  • 如何理解空洞卷积(dilated convolution)? - 刘诗昆的回答 - 知乎[7]
  • 如何理解空洞卷积(dilated convolution)? - 谭旭的回答 - 知乎[6:1]

空洞卷积(Dilated/Atrous Convolution),广泛应用于语义分割与目标检测等任务中,语义分割中经典的deeplab系列与DUC对空洞卷积进行了深入的思考。目标检测中SSD与RFBNet,同样使用了空洞卷积。

img

分组卷积

分组卷积

深度可分离卷积

卷积神经网络之深度可分离卷积(Depthwise Separable Convolution)[8]

Google的MobileNet和旷世的ShuffleNet使用了深度可分离卷积(Depthwise Separable Convolution,DSC)。

它包括两个步骤:逐通道卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)。

优点:

  • 参数数量和运算成本较低:相比常规的卷积操作,深度可分离卷积的参数数量和运算成本都较低。这使得在参数量相同的前提下,采用深度可分离卷积的神经网络层数可以做得更深。
  • 提高效率:如果使用得当,深度可分离卷积能在不牺牲模型性能的前提下显著提高效率。

缺点:

  • 模型性能可能变差:对于规模较小的模型,如果将2D卷积替换为深度可分离卷积,其模型大小可能会显著降低,但模型的能力可能会变得不太理想,因此得到的模型可能是次优的。
  • 在GPU上的速度并不快:由于内存带宽和数据IO的限制,深度可分离卷积在GPU上的速度并不快,其主要原因是内存访问量很高。(深度可分离卷积减少了计算量,增加了网络深度,所以在GPU是内存访问拖累模型性能)

深度可分离卷积

为什么 MobileNet、ShuffleNet 在理论上速度很快,工程上并没有特别大的提升?[9]

separable convolutions in image processing

在计算机图像处理中,有一种经常进行的操作,就是图像滤波,也叫图像卷积(深度学习中的卷积概念也是衍生于它,只不过深度学习中的卷积核是三维的,图像处理中的卷积核是二维的),比如用Canny卷积提取图像中的边缘信息,用Gaussian卷积构造金字塔等等。在深度学习中,深度可分离卷积(Depth-wise Separable Convolution)取代传统卷积,可以起到加速(减少计算量)和减小模型大小(参数数量)的作用;类似地,在图像处理中,往往也可以用两个独立的小的卷积串联,取代一个大的卷积,也可以起到减少计算量和减小参数数量的作用。

separable convolutions in image processing[10]

池化

平均池化

img

最大池化

imgimg

归一化

BatchNormalization、LayerNormalization、InstanceNorm、GroupNorm、SwitchableNorm总结-CSDN博客[11]

  • Batch Normalization
  • Layer Normalization
  • Weight Normalization
  • Instance Normalization
  • Group Normalization
  • Switchable Normalization

normalization

Batch Normalization,BN

batch normalization

为什么要归一化?[12]

BN 的作用?
  • 加快网络的训练与收敛的速度

    • 在深度神经网络中中,如果每层的数据分布都不一样的话,将会导致网络非常难收敛和训练。如果把每层的数据都在转换在均值为零,方差为1 的状态下,这样每层数据的分布都是一样的训练会比较容易收敛。
  • 控制梯度爆炸防止梯度消失

    • \(sigmoid\)函数为例,\(sigmoid\)函数使得输出在\([0,1]\)之间,实际上当 输入过大或者过小,经过sigmoid函数后输出范围就会变得很小,而且反向传播时的梯度也会非常小,从而导致梯度消失,同时也会导致网络学习速率过慢;同时由于网络的前端比后端求梯度需要进行更多次的求导运算,最终会出现网络后端一直学习,而前端几乎不学习的情况。Batch Normalization (BN) 通常被添加在每一个全连接和激励函数之间,使数据在进入激活函数之前集中分布在0值附近,大部分激活函数输入在0周围时输出会有加大变化。

同样,使用了\(BN\)之后,可以使得权值不会很大,不会有梯度爆炸的问题。

防止过拟合

在网络的训练中,BN的使用使得一个\(minibatch\)中所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果,即同样一个样本的输出不再仅仅取决于样本的本身,也取决于跟这个样本同属一个\(batch\)的其他样本,而每次网络都是随机取\(batch\),比较多样,可以在一定程度上避免了过拟合。

感受野(receptive field, RF)[13]

感受野

感受野的作用

(1)一般 task 要求感受野越大越好,如图像分类中最后卷积层的感受野要大于输入图像,网络深度越深感受野越大性能越好;

(2)密集预测 task 要求输出像素的感受野足够的大,确保做出决策时没有忽略重要信息,一般也是越深越好;

(3)目标检测 task 中设置 anchor 要严格对应感受野, anchor 太大或偏离感受野都会严重影响检测性能。(ECCV 2016 SSD)

卷积神经网络的感受野 - 知乎[14]

正则化

激活函数

  • Sigmoid
  • Tanh
  • ReLU
  • leaky ReLU

优化器

  • 随机梯度下降(SGD)
  • Mini-Batch
  • 动量(Momentum)
  • Nesterov 动量
  • AdaGrad
  • AdaDelta
  • RMSProp
  • Adam
  • Adamax
  • Nadam
  • AMSGrad
  • AdaBound

损失函数

  • Cross Entropy Loss
  • Focal Loss

模型 计算量/内存访问/参数量 估计

CNN模型计算量估计[15]

CNN模型内存访问估计[16]

CNN模型参数量估计[17]

深度学习的一些trick

训练技巧

  • 一些分类网络的训练技巧[18]
  • 李沐 —— Bag of Tricks for Image Classification with Convolutional Neural Networks[19]

调参方法

深度学习调参技巧[20][21]

超参数搜索方法 ML DL 自动化 资源代价 利用历史信息 多机并行 适用于
照看法(Baby Sitting) YES *** NO * YES NO 参数少,机器少,水平高
网格搜索(Grid Search) YES * YES **** NO YES 参数少,机器多,信息少
二分搜索(Binary Search) YES ** NO * YES NO 凸函数
随机搜索(Random Search) YES *** YES **** NO YES 参数多,机器多
贝叶斯优化(Bayesian Optimization) YES **** YES * YES N/A 某些特殊情况

比赛刷分技巧

Kaggle Ensemble

  • Ensemble Learning Techniques Tutorial[22]
  • Kaggle Ensembling Guide | MLWave[23]
  • 深入了解模型融合Ensemble(深度+代码) - 知乎[24]

img

  • Max Voting / Voting Classifier 投票法 [分类问题]
  • Averageing 平均法 [回归问题]
    • Weight Average
  • Stacking 堆叠法
Weighted Averaging

Weighted Averaging

Stacking

Stacking

深度学习中样本问题和解决方法

不平衡样本的处理

负样本远多于正样本

深度学习中不平衡样本的处理[25]

数据层面
数据重采样

多数样本下采样

少数样本上采样

数据增强
算法层面

在算法层面减轻类别不平衡的方法基本上是改造优化时的目标函数,使目标函数倾向于减轻多数样本的惩罚力度,加大少数样本的惩罚力度;或者加大难分样本的惩罚力度,减轻容易分样本的惩罚力度。这其中最具有典型性的是Focal Loss。

长尾数据(类别分布不均衡)

小目标的处理

Augmentation for small object detection[26]
最开始在深度学习方法流行之前,对于不同尺度的目标,大家普遍使用将原图build出不同分辨率的图像金字塔,再对每层金字塔用固定输入分辨率的分类器在该层滑动来检测目标,以求在金字塔底部检测出小目标;或者只用一个原图,在原图上,用不同分辨率的分类器来检测目标,以求在比较小的窗口分类器中检测到小目标。

数据集过少

深度学习中经典的网络模型

按任务分类

  • Computer Vision(CV)
    • Image Classification 图像分类
    • Object Detection 目标检测
      • 2D Object Detection
        • Two Stage
          • R-CNN系列
        • One Stage
          • YOLO系列
      • 3D Object Detection
    • Object Tracking 目标跟踪
      • Single Object Tracking(SOT) 单目标跟踪
      • Multi Object Tracking(MOT) 多目标跟踪
    • Object Segmentation 目标分割
      • Semantic Segmentation 语义分割
      • Instance Segmentation 实例分割
      • Panoramic Segmentation 全景分割
    • Donmain Adaptation 域泛化
    • Image Generation 图像生成
  • Natural Language Processing(NLP)
  • Text-To-Speech(TTS)

CNN经典网络

  • LeNet
  • AlexNet
  • VGG
  • GoogleNet
  • ResNet

Transformer在CV领域的经典网络

  • DETR
  • ViT
  • Swin
  • Maskformer

  1. Calculus on Computational Graphs: Backpropagation -- colah's blog ↩︎

  2. 神经网络中Epoch、Iteration、Batchsize相关理解和说明 ↩︎

  3. 深度学习相关概念:过拟合与欠拟合 ↩︎

  4. 对深度可分离卷积、分组卷积、扩张卷积、转置卷积(反卷积)的理解 ↩︎

  5. conv_arithmetic ↩︎

  6. 如何理解深度学习中的deconvolution networks? - 谭旭的回答 - 知乎 ↩︎ ↩︎

  7. 如何理解空洞卷积(dilated convolution)? - 刘诗昆的回答 - 知乎 ↩︎

  8. 卷积神经网络之深度可分离卷积(Depthwise Separable Convolution) ↩︎

  9. 为什么 MobileNet、ShuffleNet 在理论上速度很快,工程上并没有特别大的提升? - 知乎 ↩︎

  10. separable convolutions in image processing ↩︎

  11. BatchNormalization、LayerNormalization、InstanceNorm、GroupNorm、SwitchableNorm总结-CSDN博客 ↩︎

  12. 为什么要归一化? - 攻城狮? - 博客园 ↩︎

  13. 感受野 ↩︎

  14. 卷积神经网络的感受野 - 知乎 ↩︎

  15. CNN模型计算量估计 ↩︎

  16. CNN模型内存访问估计 ↩︎

  17. 5种方法获取Torch网络模型参数量计算量等信息 ↩︎

  18. 一些分类网络的训练技巧 ↩︎

  19. 李沐 —— Bag of Tricks for Image Classification with Convolutional Neural Networks ↩︎

  20. 深度学习调参有哪些技巧? - 知乎 ↩︎

  21. 深度学习调参常用方法总结 ↩︎

  22. Ensemble Learning Techniques Tutorial ↩︎

  23. Kaggle Ensembling Guide | MLWave ↩︎

  24. 深入了解模型融合Ensemble(深度+代码) - 知乎 ↩︎

  25. 深度学习中不平衡样本的处理 ↩︎

  26. Augmentation for small object detection ↩︎

posted @ 2023-11-11 21:18  攻城狮?  阅读(20)  评论(0编辑  收藏  举报