《解析卷积神经网络—深度学习实践手册》—学习笔记

书籍链接
百度网盘
谷歌云盘

绪论

机器学习是人工智能的一个分支,它致力于研究如何通过计算的手段,利用经验(experience)来改善计算机系统自身的性能。通过从经验中获取知识(knowledge),机器学习算法摒弃了人为向机器输入知识的操作,转而凭借算法自身来学到所需所有知识。对于传统机器学习算法而言,“经验”往往对应以“特征”(feature)形式存储的“数据”(data),传统机器学习算法所做的事情便是依靠这些数据产生“模型”(model)。

人们尝试将特征学习这一过程也用机器自动的“学”出来,这便是“表示学习”(representation learning)。“深度学习”是表示学习中的一个经典代表。深度学习以数据的原始形态(raw data)作为算法输入,经过算法层层抽象将原始数据逐层抽象为自身任务所需的最终特征表示,最后以特征到任务目标的映射(mapping)作为结束,从原始数据到最终任务目标,“一气呵成”并无夹杂任何人为操作。相比传统机器学习算法仅学得模型这一单一“任务模块”而言,深度学习除了模型学习,还有特征学习、特征抽象等任务模块的参与,借助多层任务模块完成最终学习任务,故称其为“深度”学习。深度学习中的一类代表算法是神经网络算法,包括深度置信网络(deep belief network)、递归神经网络(recurrent neural network)和卷积神经网络(Convolutional Neural Network, 简称CNN)等等。

在这里插入图片描述
在这里插入图片描述

卷积神经网络基础知识

卷积神经网络(Convolutional Neural Networks,简称CNN)是一类特殊的人工神经网络,区别于神经网络其他模型(如,递归神经网络、Boltzmann机等),其最主要的特点是卷积运算操作(Convolutional operators)。

基本结构

总体来说,卷积神经网络是一种层次模型(hierarchical model),其输入是原始数据(raw data)。卷积神经网络通过卷积(convolution)操作、汇合(pooling)操作和非线性激活函数(noe-linear activation function)映射等一系列操作的层层堆叠,将高层语义信息逐层由原始数据输入层总抽取出来,逐层抽象,这一过程便是“前馈运算”(feed-forward)。其中,不同类型操作在卷积神经网络中一般称作“层”:卷积操作对饮“卷积层”,汇合操作对应“汇合层”等等。最终,卷积神经网络的最后一层将其目标任务(分类、回归等)形式化为目标函数(objective function)。通过计算预测值与真实值之间的误差或损失(loss),凭借反向传播算法(back-propagation algorithm)将误差或损失由最后一层逐层向前反馈(back-forward),更新每层参数,并在更新参数后再次前馈,如此往复,直到网络模型收敛,从而达到模型训练的目的。

前馈运算

神经网络模型通过前馈运算对样本进行推理(inference)和预测(prediction),通过反馈运算将预测误差反向传播逐层更新参数,如此两种运算依次交替迭代完成模型的训练过程。

反馈运算

卷积神经网络包括其他所有深度学习模型都依赖最小化损失函数来学习模型参数,从凸优化理论来看,神经网络模型不仅是非凸(non-convex)函数而且异常复杂,深度学习模型采用随机梯度下降法(Stochastic Gradient Descent,SGD)和误差反向传播(error back propogation)进行模型参数更新。


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

卷积神经网络基本部件

端到端思想

深度学习的一个重要思想即“端到端”的学习方式(end-to-end manner),属表示学习(representation learning)的一种。在深度学习普及之后,人工特征已逐渐被表示学习根据任务自动需求“学到”的特征表示所取代。更重要的是,过去解决一个热弄个智能问题往往通过分治法将其分解为预处理、特征提取与选择、分类器设计等若干步骤,分治法的动机是将问题分解为简单、可控且清晰的若干小的子问题。分步解决子问题时,尽管可在子问题上得到最优解,但子问题上的最优解并不意味着就能得到全局问题的最后解。深度学习提供的“端到端”的学习范式,整个学习流程并不进行人为的子问题划分,而是完全交给深度学习模型直接学习从原始输入到期望输出的映射。相比分治策略,“端到端”的学习方式具有协同增效的优势,有更大可能获得全局最优解。

对深度模型而言,其输入数据是未经任何人为加工的原始样本形式,后续则是堆叠在输入层上的众多操作层。这些操作层整体可看作一个复杂的函数 f C N N f_{CNN} fCNN,最终损失函数由数据损失(data loss)和模型参数的正则化损失(ragularization loss)共同组成,深度模型的训练则在最终损失驱动下对模型进行参数更新并将误差反向传播至网络各层。模型的训练过程可以简单抽象为从原始数据向最终目标的直接“拟合”,而中间的这些部件正是起到将原始数据映射为特征(即特征学习)随后再映射为样本标记(即目标任务)的作用。
在这里插入图片描述

卷积层

卷积层(convolation layer)是卷积神经网络中的基础操作,甚至在网络最后起到分类作用的全连接层在工程实现时也是由卷积操作替代的。

卷积运算实际是分析数学中的一种运算方式,在卷积神经网络中通常是仅涉及离散卷积的情形。
在这里插入图片描述
卷积网络中的卷积核参数是通过网络训练学出的,除了可以学到类似的横向、纵向边缘滤波器,还可以学到任意角度的边缘滤波器。检测颜色、形状、纹理等众多基本模式(pattern)的滤波器(卷积核)都可以包含在一个足够复杂的深层卷积神经网络中。通过组合这些滤波器(卷积核)以及随着网络后续操作的进行,一般的模式会逐渐被抽象为具有高层语义的“概念”表示,并以此对应到具体的样本类别。

汇合层

同卷积层操作不同,汇合层不包含需要学习的参数。使用时仅需指定汇合类型(average或max等)、汇合操作的核大小(kernel_size)和汇合操作的步长(stride)等超参数即可。
在这里插入图片描述
汇合操作实际上是一种“降采样”(down-sampling)操作。汇合操作也可以看成是一个用p-范数(p-norm)作为非线性映射的“卷积”操作,特别的,当p趋近正无穷时就是最常见的最大值汇合。

汇合层的引入是仿照人的视觉系统对视觉输入对象进行降维(降采样)和抽象。在卷积神经网络过去的工作中,研究者普遍认为汇合层有如下三种功效:

  • 特征不变性(feature invariant)。汇合操作使模型更关注是否存在某些特征而不是特征具体的位置。可看作是一种很强的先验,使特征学习包含某种程度自由度,能容忍一些特征微小的位移。
  • 特征降维。由于汇合操作的降采样作用,汇合结果中的一个元素对应于原输入数据的一个子区域(sub-region),因此汇合相当于在空间范围内做了维度约减(spatially dimension reduction),从而使模型可以抽取更广范围的特征。同时减小了下一层输入大小,进而减小计算量和参数个数。
  • 在一定程度防止过拟合(overfitting),更方便优化。

汇合操作并不是卷积神经网络必须的元件或操作。

激活函数

激活函数(activation function)层又称非线性映射(non-linearity mapping)层,激活函数的引入为的是增加整个网络的表达能力(即非线性)。否则,若干线性操作层的堆叠仍然只能祈祷线性映射的作用。无法形成复杂的函数。

全连接层

全连接层(fully connected layers)在整个卷积神经网络中起到了“分类器”的作用。卷积层、汇合层和激活函数层等操作是将原始数据映射到隐层特征空间,全连接层则起到将学到的特征表示映射到样本的标记空间的作用。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积层输出结果的高和宽。

目标函数

全连接层是将网络特征映射到样本的标记空间做出预测,目标函数的作用则用来衡量预测值与真实样本标记之间的误差。

卷积神经网络经典结构

CNN网络结构中的重要概念

  • 感受野
    在这里插入图片描述
    小卷积核通过多层叠加可取得与大卷积核同等规模的感受野,此外采用小卷积核同时可带来其余两个优势:第一,由于小卷积核需要多层叠加,加深了网络深度进而增强了网络容量(model capacity)和复杂度(model complexity);第二,增强网络容量的同时减少了参数个数。
    在这里插入图片描述
  • 分布式表示
    深度卷积神经网络呈现“分布式表示”(distributed representation)的特性。神经网络中的“分布式表示”指“语义概念”(concept)到神经元(neuron)是一个多对多映射,即每个语义概念由许多分布在不同神经元中被激活的模式(pattern)表示;而每个神经元又可以参与到许多不同语义概念的表示中去。

对于某个模式,如鸟的躯干,会有不同卷积核(其实就是神经元)产生影响;同时对于某个卷积核(神经元),会在不同模式上产生响应,如躯干和头部。除了分布式表示特性,神经网络响应的区域多呈现“稀疏”(sparse)特性,即响应区域集中且占原图比例较小。
在这里插入图片描述

  • 深度特征的层次性
    分布式表示是在同一层的神经元的特性,不同层神经元的表示特点,即深度特性的层次性:卷积操作可获取图像区域不同类型特征,而汇合等操作可对这些特征进行融合和抽象,随着若干卷积、汇合等操作的堆叠,各层得到的深度特征逐渐从泛化特征(如边缘、纹理等)过度到高层语义表示(躯干、头部等模式)。

经典网络案例分析

卷积神经网络的压缩

模型内部参数存在这巨大的冗余(过参数化(over-parameterization))。这种冗余在模型训练阶段是十分必要的。因为深度神经网面临的是一个及其复杂的非凸优化问题,对于现有的基于梯度下降的优化算法,这种参数上的冗余保证了网络你能够收敛到一个比较好的最优值,因而在一定程度上,网络越深,参数越多,模型越复杂,其最终的效果往往越好。

绝大多数的压缩算法,均指在将一个庞大而复杂的训练模型(pre-trained model)转化为一个精简的小模型。

按照压缩过程对网络结构的破坏程度,将模型压缩技术分为“前端压缩”与“后端压缩”两部分。

  • 前端压缩:所谓“前端压缩”,是指不改变原网络结构的压缩技术,主要包括知识蒸馏、紧凑的模型结构设计以及滤波器(filter)层面的剪枝等;由于“前端压缩”未改变原有的网络结构,仅仅只是在原模型的基础上减少了网络的层数或者滤波器的个数,其最终的模型可完美适配现有的深度学习库。
  • 后端压缩:而“后端压缩”则包括低秩近似、未加限制的剪枝,参数量化以及二值网络等,其目标在于尽可能的减少模型大小,因而会对原始网络结构造成极大程度的改造。而“后端压缩”为了追求极致的压缩比,不得不对原始的网络结构进行改造,如对参数进行量化表示等,而这样的改造往往是不可逆的。同时wield获得理想的压缩效果,必须开发相配套的运行库,甚至是专门的硬件设备,其最终的结果往往是一种压缩技术对应于一套运行库,从而带来了巨大的维护成本。
  • 两种压缩技术相互结合:“前端压缩”和“后端压缩”策略不存在绝对的好坏,各种方法均 有其各自的适应场景。同时,将两种压缩技术可以相互结合,将“前端压缩”的输出作为“后端压缩”的输入,能够在最大程度上减少模型的复杂度。

低秩近似

卷积神经网络的基本计算模式是进行卷积运算。卷积操作由矩阵相乘完成,不过通常情况下,权重矩阵往往稠密且巨大,从而带来计算和存储上的巨大开销。解决这种情况的直观想法是,若能将稠密矩阵由若干个小规模矩阵近似重构出来,那么便能有效降低存储和计算开销。由于这类算法大多采用低秩近似的技术来重构权重矩阵,将其归类为低秩近似算法。
在这里插入图片描述
低秩近似算法在中小型网络模型上取得了不错的效果,但其超参数量与网络层呈线性变化趋势,随着网络层数的增加与模型复杂度的提升,其搜索空间会急剧增大。

剪枝与稀疏约束

通过剪枝处理,在减小模型复杂度的同时, 还能防止过拟合,提升模型泛化性。在神经网络的初始化训练中,需要一定冗余度的参数数量来保证模型的可塑性与“容量”(capacity),在完成训练之后,则可以通过剪枝操作来移除这些冗余参数,使得模型更加成熟。
剪枝算法操作流程

  • 衡量神经元的重要程度–这是剪枝算法中最重要的核心步骤。根据剪枝粒度(granularity)的不同,神经元的定义可以是一个权重连接,也可以是整个滤波器。衡量其重要程度的方法也是多种多样, 从一些基本的启发式算法,到基于梯度的方案,其计算复杂度与最终的效果也是各有千秋。
  • 移除掉一部分不重要的神经元。根据上一步的衡量结果,剪除掉部分神经元。可以根据某个阈值来判断神经元是否可以被剪除,也可以按重要程度排序,剪除掉一定比例的神经元。一般而言,后者比前者更加简便,灵活性也更高。
  • 对网络进行微调。由于剪枝操作会不可避免的影响网络的精度,为防止对分类性能造成过大的破坏,需要对剪枝后的模型进行微调。对于大规模图像数据集而言,微调会占用大量的计算资源。
  • 返回第一步,进行下一轮剪枝。

参数量化

参数量化是一种常用的后端压缩技术。所谓“量化”,是指从权重中归纳出若干“代表”,由这些“代表”来表示一类权重的具体数值。“代表”被存储在码本(codebook)之中,而原权重矩阵只需记录各自“代表”的索引即可,从而极大的降低了存储开销。
在这里插入图片描述

二值网络

二值网络可以被视为量化方法的一种极端情况:所有参数的取值只能是 ±1。正
是这种极端的设定,使得二值网络能够获得极大的压缩效益。首先,在普通的
神经网络中,一个参数是由单精度浮点数来表示的,参数的二值化能将存储开
销降低为原来的 1/32。其次,如果中间结果也能二值化的话,那么所有的运算
仅靠位操作便可完成。借助于同或门(XNOR gate)等逻辑门元件便能快速完
成所有的计算。而这一优点是其余压缩方法所不能比拟的。深度神经网络的一
大诟病就在于其巨大的计算代价,如果能够获得高准确度的二值网络,那么便
可摆脱对GPU 等高性能计算设备的依赖。

知识蒸馏

知识蒸馏是迁移学习(transfer learning)的一种,其最终目的是将一个庞大而复杂的模型所学到的知识,通过一定技术手段迁移到精简的小模型上,使得小模型能够获得与大模型相近的性能。

在知识蒸馏的框架中,有两个基本要素起着决定性的作用:一是何谓“知识”,即如何提取模型中的知识;一是如何“蒸馏”,即如何完成知识迁移的任务。

知识蒸馏作为前向压缩算法的一种补充,可以用来更好的知道小规模网络的训练。但是该方法与主流的剪枝、量化等技术相比,目前的效果还十分有限。

紧凑的网络结构

紧凑的网络结构,主要是将新颖的结构运用到神经网络的设计中来,使得模型在规模与精度之间达到一个较好的平衡。

下图中的a图Fire Module基本单元是为了追求更少的模型参数,图b是弥补小网络在无监督领域自适应任务上的不足,使用多个分支分别捕捉不同层次的图像特征,达到扩充小网络多样性的目的。
在这里插入图片描述

  • “挤压”:特征维度的大小对于模型容量有较大的影响,维度不高,模型的表示能力会受到限制。高纬度的特征会导致卷积层参数的急剧增加。为了模型容量与参数的平衡,可以使用1x1卷积来对输入特征进行降维,同时,1x1卷积可以综合多个通道的信息,得到更加紧凑的输入特征,保证了模型的泛化性。
  • “扩张”:常见网络模型的卷积层通常由若干个3x3的卷积核构成,占用了大量的计算资源。为了减少网络参数,同时也为了综合多种空间结构信息,使用了部分1x1的卷积来代替3x3的卷积。为了使得不同卷积核的输出能够拼接成一个完整的输出,需要对3x3的卷积输入配置合适的填充像素。
  • 每一条分支都首先用1x1的卷积对输入特征做降维处理,三条分支分别为普通的卷积操作(convolution)、扩张卷积(dilated convolution)与反卷积(deconvolution)。使用扩张卷积的目的是为了使用较少参数获得较大感受野,用反卷积则是为了重构输入特征,提供与其他两条分支截然不同的卷积特征。最后为了减少参数,对每一条分支均使用了分组卷积。三条分支在最后汇总,拼接为新的张量,作为下一层的输入。

数据扩充

在实践中有效的数据扩充(data augmentation)不仅能扩充训练样本数量,还能增减训练样本的多样性。一方面可避免过拟合,另一方面会提升模型的性能。

简单数据扩充方式

  • 水平翻转操作会使原数据集扩充一倍。
  • 随机抠取操作一般用较大(约0.8至0.9倍原图大小)的正方形在原图的随机位置处抠取图像块(image patch/crop),每张图像随机抠取的次数决定了数据集扩充的倍数。
  • 尺度变换一般是将图像分辨率变为原图像的0.8、0.9、1.1、1.2、1.3等倍数。
  • 旋转操作类似,将原图像旋转一定角度,如-30°、-15°、15°、30°等。
  • 对原图或已变换的图像(或图像块)进行色彩抖动(color jittering)也是一种常用的数据扩充手段。色彩抖动是在RGB颜色空间对原有RGB色彩分布进行轻微的扰动,也可在HSV颜色空间尝试随机改变图像原有的饱和度和明度(即改变S和V通道 的值)或对色调进行微调(小范围改变该通道的值)。
  • 在实践中,会将上述几种方式叠加使用,将图像数据扩充至原有数量的数倍甚至数十倍。但是实际使用中需要根据任务特点选择合适的数据扩充方式,而不是将所有的数据扩充方法都叠加,因为一些数据扩充方法不仅无益于提高性能,反而还会起到相反的作用。

特殊的数据扩充方式

  • FancyPCA
    在这里插入图片描述
  • 监督式数据扩充
    简单的数据扩充方法直接作用于原图,并未借助于任何图像标记信息。监督式数据扩充,利用图像标记信息。区别于“以物体为中心”(object-centric)的图像分类任务,场景分类(scene-centric image classification)依靠图像整体蕴含的高层语义(high-level semantic)进行图像分类。

首先根据原图数据训练一个分类的初始模型。而后,利用该模型,对每张图生成对应的特征图(activation map)或热力图(heat map)。特征图可指示图像区域与场景标记间的相关概率。根据此概率映射回原图选择较强相关的图像区域作为抠取的图像块。由于一开始利用了图像标记训练了一个初始分类模型,因此这样的过程被称作“监督式数据扩充”。同样的数据扩充方式适用于高层语义图像分类任务,如场景分类和基于图像的节日分类等问题。
在这里插入图片描述

数据预处理

机器学习中,对于输入特征做归一化(normalization)预处理操作是常见的步骤。类似的,在图像处理中,图像的每个像素信息同样可以看做一种特征。在实践中,对每个特征减去平均值来中心化数据是非常重要的,这种归一化处理方式被称作‘中心式归一化’(mean normalization)。卷积神经网络中的数据预处理通常是计算训练集图像像素均值,之后再处理训练集、验证集和测试集图像时需要分别减去该均值。

减均值操作的原理是,默认自然图像是一类平稳的数据分布(即数据每一个维度的统计都服从相同分布),此时,在每个样本上减去数据的统计平均值(逐样本计算)可以移除共同部分,凸显个体差异。
在这里插入图片描述

网络参数初始化

在这里插入图片描述

全零初始化

在这里插入图片描述

随机初始化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其他初始化方法

利用预训练模型(pre-trained model)将预训练模型的参数作为新任务上模型的参数初始化。由于预训练模型已经在原先任务上收敛到较理想的局部最优解,加上很容易获得这些预训练模型,用此最优解作为新任务参数初始化时一个优质首选。

激活函数

“激活函数”又称“非线性映射函数”,是深度卷积神经网络中不可或缺的关键模块。深度网络模型强大的表示能量大部分是由激活函数的非线性带来的。

直观上,激活函数模拟了生物神经元特性,接受一组输入信号并产生输出,并通过一个阈值模拟神经元的激活和兴奋状态。
在这里插入图片描述

Sigmoid型函数

在这里插入图片描述

在这里插入图片描述

tanh(x)型函数

在这里插入图片描述

修正线性单元(ReLU)

在这里插入图片描述
在这里插入图片描述

Leaky ReLU

在这里插入图片描述

参数化ReLU

参数化ReLU直接将 α \alpha α作为一个网络中可学习的变量融入模型的整体训练过程中。参数化ReLU在带来更大自由度的同时,也增加了网络模型过拟合的风险。

随机化ReLU

在这里插入图片描述
在这里插入图片描述

指数化线性单元(ELU)

在这里插入图片描述

目标函数

深度网络中的目标函数(objective function)是整个网络模型的“指挥棒”,通过样本的预测结果与真实标记产生的误差反向传播指导网络参数学习与表示学习。

分类任务的目标函数

在这里插入图片描述

  • 交叉熵损失函数
    在这里插入图片描述
  • 合页损失函数
    在这里插入图片描述
  • 坡道损失函数
    在这里插入图片描述
    在这里插入图片描述
  • 大间隔交叉熵损失函数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 中心损失函数
    在这里插入图片描述
    在这里插入图片描述

回归任务的目标函数

在这里插入图片描述
在这里插入图片描述

  • L1损失函数
    在这里插入图片描述
  • L2损失函数
    在这里插入图片描述
  • Tukey’s biweight损失函数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

其他任务的目标函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

网络正则化

在这里插入图片描述

L2正则化

在这里插入图片描述

  • L1正则化
    在这里插入图片描述
  • 最大范数约束
    在这里插入图片描述
  • 随机失活
    在这里插入图片描述
  • 验证集的使用
    在这里插入图片描述
    在这里插入图片描述

超参数设定和网络训练

网络超参数设定

  • 输入数据像素大小
    使用卷积神经网络处理图像问题时,对不同输入图像为得到同规格输出,同时便于GPU设备并行,会统一将图像压缩到 2 n 2^n 2n大小。另外,若不考虑硬件设备限制(通常是GPU显存大小),更高分辨率图像作为输入数据一般均有助于网络性能的提升,特别是对基于注意力模型(attention model)的深度网络提升更为显著。不过,高分辨率图像会增加模型计算消耗而导致网络整体训练时间延长。此外,由于一般卷积神经网络采用全连接层作为最后分类层,若直接改变原始网络模型的输入图像分辨率,会导致原始模型卷积层的最终输出无法输入全连接层的状况,此时需要重新改变全连接层输入滤波器的大小或重新制定其他相关参数。
  • 卷积层参数的设定
    在这里插入图片描述
  • 汇合层参数的设定
    在这里插入图片描述

训练技巧

  • 训练数据随机打乱
    在训练卷积神经网络时,尽管训练数据固定,但由于采用了随机批处理(mini-batch)的训练机制,可以在模型每轮(epoch)训练进行前将训练数据集随机打乱(shuffle),确保模型不同轮数相同批次“看到”的数据是不同的。这样的处理不仅会提高模型收敛速率,同时,相对固定次序训练的模型,此操作会略微提升模型在测试集上的预测结果。
  • 学习率的设定
    在这里插入图片描述
    在这里插入图片描述
  • 批规范化操作
    在这里插入图片描述
    在这里插入图片描述
  • 网络模型优化算法选择
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 微调神经网络
    微调预训练模型时,需注意学习率调整和原始数据与目标数据的关系。另外,还可使用“多目标学习框架”对预训练模型进行微调。
    在这里插入图片描述

不平衡样本的处理

在这里插入图片描述

数据层面处理方法

数据层面处理方法多借助数据采样法(sampling)使整体训练集样本趋于平衡,即各类样本数基本一致。

  • 数据重采样
    简单的数据重采样包括上采样(over-sampling 或up-sampling)和下采样(under-sampling 或down-sampling)。样本较少的类使用上采样,复制该类图像直至与样本最多类的样本数一致,或用数据扩充的方式替代简单的复制操作;对于多样本类别采用下采样,在批处理训练时对每批随机抽取的图像严格控制其样本较多类别的图像数量,并不是直接随机丢弃一部分图像,因为那样做会降低训练数据多样性进而影响模型泛化能力。当然仅适用数据上采样有可能会引起模型过拟合问题,更保险且有效的数据重采样是将上采样和下采样结合使用。
  • 类别平衡采样
    类别平衡采样把样本按类别分组,每个类别生成一个样本列表。训练过程中先随机选择1个或几个类别,然后从各个类别所对应的样本列表中随机选择样本,保证每个类别参与训练的机会比较均衡。类别重组法只需原始图像列表即可完成同样的均匀采样任务。首先按照类别顺序对原始样本进行排序,计算每个类别的样本数目,并记录样本最多的那个类别的样本数量,根据最多样本数对每类样本产生一个随机排列列表,用此列表中的随机数对各自类别的样本数求余,得到对应的索引值。根据索引从该类的图像中提取图像,生成该类的图像随机列表。把所有类别的随机列表连接在一起随机打乱次序,即可得到最终图像列表,最终列表中每类样本数目均等。根据列表训练模型,当训练时列表遍历完毕,则重头再做一遍上述操作即可进行第二轮训练,如此重复下去。类别重组法的优点在于只需要原始图像列表,且所有操作均在内存中在线完成,易于实现。
    在这里插入图片描述

算法层面处理方法

对于不平衡样本导致样本数目较少的类别“欠学习”现象,算法层面处理不平衡样本问题的方法多从“代价敏感”(cost-sensitive)角度出发,增加小样本错分的“惩罚代价”并将此“惩罚代价”直接体现在目标函数中,通过优化目标函数就可以调整模型在小样本上的“注意力”。

  • 代价敏感方法
    在这里插入图片描述
    在这里插入图片描述
  • 代价敏感法中权重的指定方式
    代价敏感方法处理不平衡样本问题的前提是需事先指定代价敏感矩阵或向量,其中关键是错分惩罚或错分权重的设定。实际使用中可根据样本比例、分类结果的混淆矩阵等信息指定代价敏感矩阵或向量中错分权重的具体取值。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

模型集成方法

集成学习(ensemble learning)是机器学习中的一类学习算法,指训练多个学习器并将它们组合起来使用的 方法。

数据层面的集成方法

  • 测试阶段数据扩充
  • “简易集成”法
    对于样本较多的类采取降采样(undersampling),每次采样数依照样本数目最少的类别而定,这样每类取到的样本数可保持均等。采样结束后,针对每次采样得到的子数据集训练模型,如此采样、训练反复进行多次。最后对测试数据的预测则依据训练得到的若干个模型的结果取平均或投票获得。

模型层面的集成方法

  • 单模型集成
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 多模型集成
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

深度学习开源工具简介

常用框架对比

在这里插入图片描述
在这里插入图片描述

常用框架的各自特点

  • Caffe
    在这里插入图片描述
  • DeepLearning4j
    在这里插入图片描述
  • Keras
    在这里插入图片描述
  • MXNet
    在这里插入图片描述
  • MatConvNet
    在这里插入图片描述
  • TensorFlow
    在这里插入图片描述
  • Theano
    在这里插入图片描述
  • Torch
    在这里插入图片描述

附录

向量、矩阵及其基本运算

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/studyeboy/article/details/104014444
今日推荐