深度学习 (一)通用知识
深度学习 (一)通用知识
将从通用知识到子任务知识逐步展开,子任务不会写的太全面。
通用知识#
深度学习的组成部分#
- 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]
如何解决过拟合?
- 提供更多的训练数据
- 获取更多的真实数据
- 数据增强
- 调节模型允许存储的信息量或者对模型允许存储的信息加以约束,该类方法也称为正则化。
- 调节模型大小
- 约束模型权重,即权重正则化(在机器学习中一般使用 L2正则化,L2正则损失对于大数值的权值向量进行严厉惩罚,鼓励更加分散的权重向量,使模型倾向于使用所有输入特征做决策,此时的模型泛化性能好!)
- 随机失活(Dropout)
随机失活为什么能够防止过拟合呢?
解释1:
随机失活使得每次更新梯度时参与计算的网络参数减少了,降低了模型容量,所以能防止过拟合。
解释2:
随机失活鼓励权重分散,从这个角度来看随机失活也能起到正则化的作用,进而防止过拟合。
总的来说通过Dropout每次输入一个样本,就相当于该神经网络就尝试了一个新的结构,但是所有这些结构之间共享权重。因为神经元不能依赖于其他特定神经元而存在,所以这种技术降低了神经元复杂的互适应关系。正因如此,网络需要被迫学习更为鲁棒的特征(泛化性更强)。
训练时使用随机失活,测试时怎么办?
测试时不使用随机失活,而是计算所有权重
如何解决欠拟合?
- 增加新特征,可以考虑加入进特征组合、高次特征,来增大假设空间。
- 添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。
- 减少正则化参数,正则化的目的是用来防止过拟合的,但是模型出现了欠拟合,则需要减少正则化参数。
- 使用非线性模型,比如核SVM 、决策树、深度学习等模型 。
- 调整模型的容量(capacity),通俗地,模型的容量是指其拟合各种函数的能力。
- 容量低的模型可能很难拟合训练集;使用集成学习方法,如Bagging ,将多个弱学习器Bagging。
卷积#
-
普通卷积
-
转置卷积(Transposed Convolution):也被称为反卷积或部分跨越卷积,常用于上采样或解卷积网络。
-
分组卷积(Grouped Convolution):在这种卷积中,输入和输出通道被分成几个组,每个组独立进行卷积。
-
点卷积(Pointwise Convolution):也被称为1x1卷积,主要用于改变通道的数量。
-
空洞卷积/扩张卷积(Dilated/Atrous Convolution):也被称为atrous卷积或空洞卷积,通过在卷积核中插入“洞”来增加其感受野。
-
可分离卷积/深度可分离卷积(Separable Convolution, Depthwise Separable Convolution):这种卷积将空间卷积和深度卷积分开进行,从而减少计算量。
普通卷积
反卷积/转置卷积
如何理解深度学习中的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/Atrous Convolution),广泛应用于语义分割与目标检测等任务中,语义分割中经典的deeplab系列与DUC对空洞卷积进行了深入的思考。目标检测中SSD与RFBNet,同样使用了空洞卷积。
分组卷积
深度可分离卷积
卷积神经网络之深度可分离卷积(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]
池化#
平均池化
最大池化
归一化#
BatchNormalization、LayerNormalization、InstanceNorm、GroupNorm、SwitchableNorm总结-CSDN博客[11]
- Batch Normalization
- Layer Normalization
- Weight Normalization
- Instance Normalization
- Group Normalization
- Switchable Normalization
Batch Normalization,BN
为什么要归一化?[12]
BN 的作用?
-
加快网络的训练与收敛的速度
- 在深度神经网络中中,如果每层的数据分布都不一样的话,将会导致网络非常难收敛和训练。如果把每层的数据都在转换在均值为零,方差为1 的状态下,这样每层数据的分布都是一样的训练会比较容易收敛。
-
控制梯度爆炸防止梯度消失
- 以函数为例,函数使得输出在之间,实际上当 输入过大或者过小,经过sigmoid函数后输出范围就会变得很小,而且反向传播时的梯度也会非常小,从而导致梯度消失,同时也会导致网络学习速率过慢;同时由于网络的前端比后端求梯度需要进行更多次的求导运算,最终会出现网络后端一直学习,而前端几乎不学习的情况。Batch Normalization (BN) 通常被添加在每一个全连接和激励函数之间,使数据在进入激活函数之前集中分布在0值附近,大部分激活函数输入在0周围时输出会有加大变化。
同样,使用了之后,可以使得权值不会很大,不会有梯度爆炸的问题。
防止过拟合
在网络的训练中,BN的使用使得一个中所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果,即同样一个样本的输出不再仅仅取决于样本的本身,也取决于跟这个样本同属一个的其他样本,而每次网络都是随机取,比较多样,可以在一定程度上避免了过拟合。
感受野(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#
训练技巧#
调参方法#
超参数搜索方法 | 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#
- Max Voting / Voting Classifier 投票法 [分类问题]
- Averageing 平均法 [回归问题]
- Weight Average
- Stacking 堆叠法
Weighted Averaging
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系列
- Two Stage
- 3D Object Detection
- 2D 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
作者:攻城狮?
出处:https://www.cnblogs.com/daiSir/p/17826389.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)