0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度学习模型常用的数据增强方法

汽车玩家 来源:CSDN博主 作者:csuzhaoqinghui 2020-01-19 17:03 次阅读

数据增强(Data Augmentation)

人工智能,或者说计算机视觉的一个最终目标在于构建一个真正可适用于真实世界复杂环境的系统。而就目前所应用的机器学习系统而言,大部分采用了有监督的学习方法,也必然导致了需要广泛收集图像样本,并进行对应的图像标注的工作。而人力时有穷尽,高质量的样本集图片又是构建一个优秀的机器学习系统的关键因素。使用适当的数据增强方法可以将数据集的数量增大十倍以上,从而极大化利用小样本集中的每个样本,使之也可以训练得到一个较好的机器学习模型。数据增强方法也可以提高模型的鲁棒性,防止其易在训练中出现过拟合的现象。

常用的数据增强方法主要来自数字图像处理中的几何变换,但不改变图像中的像素值,而是改变了其空间位置,借此希望卷积神经网络学习到图像中更多的不变性特征,也有利于提高其泛化性能。

以下将对各种方法做简单的列举与说明。

平移(Shift)变换:对原始图片在图像平面内以某种方式(预先定义或者随机方式确定平移的步长、范围及其方向)进行平移。

翻转(Flip)变换:沿竖直或者水平方向对原始图片进行翻转。

随机裁剪(Random Crop):随机定义感兴趣区域以裁剪图像,相当于增加随机扰动。

噪声扰动(Noise):对图像随机添加高斯噪声或者椒盐噪声等。

对比度变换(Contrast):改变图像对比度,相当于在HSV空间中,保持色调分量H不变,而改变亮度分量V和饱和度S,用于模拟现实环境的光照变化。

缩放变换(Zoom):以设定的比例缩小或者放大图像。

尺度变换(Scale):与缩放变换有点类似,不过尺度变换的对象是图像内容而非图像本身(可以参考SIFT特征提取方法),构建图像金字塔以得到不同大小、模糊程度的图像。

权重初始化(weight initialization)

传统神经网络之所以一直没办法加深网络的深度,一个很重要的原因在于使用随机梯度下降法训练时,随着训练迭代过程的深入会出现梯度弥散的现象,也就导致了神经网络无法有效地从样本中进行学习。而造成梯度弥散的一部分原因应该归结于传统神经网络使用了权重随机初始化。

而现代深度神经网络抛弃了随机初始化的方法,转而使用高斯初始化、 Xavier算法等来解决这一问题。

所谓的高斯初始化方法是指随机选取一个固定均值(如0等)和固定方差(如0.01等)的高斯分布中的值作为网络各个神经元的权重参数的初值,从而保证权重参数训练开始时符合高斯分布,以期获得更好的结果。这是一种常用的权重初始化方法。

Xavier算法是Glorot于2010年提出的权值初始化方法。相比与随机初始化或者高斯初始化方法中的随机选取,Xavier算法为每一个深度神经网络的初始权值进行了个性定制,因为他是根据输入输出神经元的个数来进行权重的初始化。该算法假设对于一个网络有n个线性神经元,其初始权值为W,网络输出为Y,即:

Y=W_1 X_1+W_2 X_2+⋯+ W_n X_n (1-1)

计算每个神经元输出的方差如下:

Var(W_i X_i )=E[X_i ]^2 Var(W_i )+E[W_i ]^2 Var(X_i ) + Var(W_i )Var(X_i ) (1-2)

假设所有输入权重的均值为0,上述公式可以简化如下:

Var(W_i X_i )= Var(W_i )Var(X_i ) (1-3)

同时假设Xi和Wi都是独立同分布的,可得输出Y的方差:

Var(Y)=Var(W_1 X_1+W_2 X_2+⋯+ W_n X_n )=nVar(W_i )Var(X_i ) (1-4)

故如果我们要求输出分布要与输入的分布一样,则nVar(Wi)的值应为1。

尽管算法中使用了诸多假设,可是在实际应用过程中取得了良好的效果。直观上来讲,对原始的Xavier算法来说,假设输入的均值为0对于传统的神经网络是合理的。因为其初始化层之后是非线性激活层(tanh,sigmoid等)中的激活函数在0值附近的梯度值最大。而对于现代深度神经网络而言,由于其线性整流单元(ReLU)对于输入的响应有一半为0,故He等提出以下公式作为替代。

Var(W_i )=2/n_in (1-8)

随机梯度下降法(Stochastic Gradient descent)

梯度下降法(Gradient descent)是当前最为受欢迎的优化算法之一,也是最常用的深度神经网络优化方法。它通过沿着当前函数点所对应的梯度的反方向进行迭代搜索,从而找到目标函数的极值点。许多学者对其提出了改进算法。

标准梯度下降法可以表征为:

θ(t+1)=θ_t- η∇θ E(L(θ_t) (1-9)

其中η为每次迭代的学习率,L(θ)为目标函数。E[L(θ)]整个数据集的数学期望。

标准梯度下降法要求在每次迭代的时候都要计算整个数据集的梯度方向。它可以保证凸目标函数可以收敛到全局最小点,而对于非凸目标函数至少可以收敛到局部极值点。近几十年来,样本数据的增长速度远远大于处理器的计算能力的增长。从这个角度上来说,统计机器学习方法的局限在于计算能力而不在于样本量的大小。对于小样本学习中标准梯度下降法是适用的,但是应用于大数据集时是极其缓慢的,整个数据集无法一次性装载进内存中的情况越来越普遍。因此标准梯度下降法无法胜任于现代大规模数据的优化任务,此时随机梯度下降法 (stochastic gradient descent, SGD)的应用效果要远远好于标准梯度下降法。

相比于计算整个数据集的梯度方向,随机梯度下降法(SGD)以从训练集中随机选取的单个样本来估计目标梯度,以迭代更新参数θ。

θ(t+1)=θ_t- η_t ∇θ L(θ_t;x^((t) ),y^((t) )) (1-10)

在实际应用过程中,每次的参数更新并不是根据单个样本计算的,而是由所定义的最小批量样本(mini-batch)来计算的。这可以降低单个样本参数更新的剧烈波动并使收敛过程更加稳定。由于采用批量样本并不能完全代表数据集的梯度方向,其参数更新的波动也是无可避免的。但是这种波动一定程度上使其能够跳转到潜在的更好的局部极小点,并且最终到达全局最小点。尽管理论上,随机梯度下降法(SGD)可以渐进收敛,但是在实际应用过程中仍有许多挑战。

首先,收敛的速度取决于学习率η,一个合适的学习率并不是那么容易确定的。如果学习率太小会导致收敛过程极其缓慢,而过大的学习率η将会阻碍模型收敛并导致目标函数在最小值附近波动甚至发散。其次,对于神经网络这种高度非线性任务而言,其目标函数通常都有大量的次优局部极小点,为保证收敛到全局最小点需要避免训练过程陷入局部极小点中。

对于学习率或者学习策略的选择,可以参考以下方法:

- 选取一个足够小的,在第一次迭代中可以收敛的常数值(或选取两个取其均值),如果收敛速度有所下降,取η/2作为新的学习率;

- 在每次迭代之后引入评估机制,当两次迭代间的变化小于某个设定阈值时减小学习率。

为了避免训练陷入局部极小点,Qian等提出了基于动量(momentum)的梯度下降学习算法,通过增加历史参数更新的权重项,加速当前参数更新的过程并减少振荡。

ν(t+1)=〖γν〗_t- η_t ∇θ L(θ_t;x^((t) ),y^((t) )) (1-11)

θ(t+1)=θ_t+ν(t+1) (1-12)

其中ν_(t+1)是当前的更新向量,γ即为动量,通常设为0.9或者其他常数。

2013年,Sutskever等对传统动量算法改进动量更新过程使得训练更加稳定。而Recht等提出并行SGD以适应现代海量数据集的训练任务。

批规范化(Batch normalization)

当训练一个深度神经网络时,由于各层参数不断变化,所以各层输入的概率分布也在不断的变化,也导致了非线性激活函数(如sigmoid等)正负两边都会饱和,使得训练迭代的过程变得极其缓慢甚至无法进行。这时候,通常需要采用较小的学习率以及精细进行权重初始化。loffe等将这种现象称为“内部协方差偏移”(internal covariate shift),并提出了批规范化(Batch normalization,BN)解决此类问题。

该论文中提出在每次随机梯度下降迭代时,在最小批量样本(mini-batch)内做规范化操作,使得输出结果各个维度的均值为0,方差为1,有效地避免了非线性激活函数的饱和问题(以sigmoid为例,观察sigmoid函数即可知,该函数输入集中在0附近时,其输出梯度较大);同时也让梯度变化受参数及其初值的影响减小。

假设对当前隐含层执行规范化,其输入有d个,分别为 x=〖[x_1,x_1,…,x_d]〗^T,则其第k维输出如下:

x ̂k = (x_k-μβ)/√(δ_β^2+ϵ) (1-13)

其中,μβ和δβ^2分别为最小批量样本的均值和方差。

为了加强其表示能力,原作中引入了一对可学习参数 γ,β,使得:

y_k=〖BN〗_(γ,β) (x_k )= γx ̂_k+β (1-14)

总体而言,批规范化(Batch normalization)作用可以归纳如下:

(1) 可以使用更高的学习率,加快了训练速度;

(2) 可以移除或使用较低的dropout(下一小节将作介绍)。dropout是常用的防止过拟合的方法,较低的dropout也可以提高训练速度。

(3) 减少图像预处理的使用。由于现在训练迭代次数降低,所以可以对样本数据少做一些图像扭曲,让神经网络多从真实的数据中学习。

当然,对于上述问题的解决办法并不是唯一的,Razvan等提出的自然梯度(Natural Gradient)也是对解决这一问题的一种思路。

Dropout

众所周知,过拟合问题一直是机器学习的算法的致力于解决的问题。对于大型神经网络来说,其参数规模相比于浅层学习算法有了跃进式的增加,所以相对来说也更加容易发生过拟合的现象。而为了解决过拟合问题,一般会采用集成方法,即同时训练多个模型进行组合,然而这种方法费时费力也不能保证取得预期效果。

2012年,Hinton等提出Dropout用于解决神经网络训练易过拟合的问题。通过在其训练过程中,按照事先规定的概率暂时屏蔽掉其中的某些神经元。由于这种屏蔽是暂时而是随机的,对于随机梯度下降来说,相当于每一次批量样本的训练均是在训练一个新的网络。极端情况下,对于一个n节点的网络,相当于同时在训练2^n个不同网络模型, 但此时需要优化的参数数量确实不变的,这也一定程度上符合传统的集成方法的思想而同时解决了其费时的问题。

其数学表达如下:

y= εx (1-15)

其中,ε以一定的概率p等于0,使得该神经元节点x暂时被屏蔽。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4538

    浏览量

    98438
  • 人工智能
    +关注

    关注

    1773

    文章

    43371

    浏览量

    230134
  • 深度学习
    +关注

    关注

    73

    文章

    5206

    浏览量

    119804
收藏 人收藏

    评论

    相关推荐

    如何基于深度学习模型训练实现工件切割点位置预测

    Hello大家好,今天给大家分享一下如何基于深度学习模型训练实现工件切割点位置预测,主要是通过对YOLOv8姿态评估模型在自定义的数据集上训
    的头像 发表于 12-22 11:07 267次阅读
    如何基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>模型</b>训练实现工件切割点位置预测

    如何基于深度学习模型训练实现圆检测与圆心位置预测

    Hello大家好,今天给大家分享一下如何基于深度学习模型训练实现圆检测与圆心位置预测,主要是通过对YOLOv8姿态评估模型在自定义的数据集上
    的头像 发表于 12-21 10:50 544次阅读
    如何基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>模型</b>训练实现圆检测与圆心位置预测

    深度学习如何训练出好的模型

    和足够的计算资源,还需要根据任务和数据的特点进行合理的超参数调整、数据增强模型微调。在本文中,我们将会详细介绍深度
    的头像 发表于 12-07 12:38 588次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>如何训练出好的<b class='flag-5'>模型</b>

    深度学习的由来 深度学习的经典算法有哪些

    深度学习作为机器学习的一个分支,其学习方法可以分为监督学习和无监督学习。两种
    发表于 10-09 10:23 306次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>的由来 <b class='flag-5'>深度</b><b class='flag-5'>学习</b>的经典算法有哪些

    视觉深度学习迁移学习训练框架Torchvision介绍

    Torchvision是基于Pytorch的视觉深度学习迁移学习训练框架,当前支持的图像分类、对象检测、实例分割、语义分割、姿态评估模型的迁移学习
    的头像 发表于 09-22 09:49 411次阅读
    视觉<b class='flag-5'>深度</b><b class='flag-5'>学习</b>迁移<b class='flag-5'>学习</b>训练框架Torchvision介绍

    深度学习在医学图像分割与病变识别中的应用实战

    地观察和分析。然而,医学图像常常具有复杂的结构、噪声干扰和不同的病变特征,使得传统的图像处理方法难以取得令人满意的结果。基于深度学习方法通过学习
    发表于 09-04 11:11

    构建神经网络模型常用方法 神经网络模型常用算法介绍

    神经网络模型是一种通过模拟生物神经元间相互作用的方式实现信息处理和学习的计算机模型。它能够对输入数据进行分类、回归、预测和聚类等任务,已经广泛应用于计算机视觉、自然语言处理、语音处理等
    发表于 08-28 18:25 593次阅读

    深度学习的定义和特点 深度学习典型模型介绍

    深度学习(Deep Learning)是一种基于人工神经网络的机器学习算法,其主要特点是模型由多个隐层组成,可以自动地学习特征,并进行预测或
    发表于 08-21 18:22 1013次阅读

    计算机视觉中的九种深度学习技术

    计算机视觉中仍有许多具有挑战性的问题需要解决。然而,深度学习方法正在针对某些特定问题取得最新成果。 在最基本的问题上,最有趣的不仅仅是深度学习模型
    发表于 08-21 09:56 317次阅读
    计算机视觉中的九种<b class='flag-5'>深度</b><b class='flag-5'>学习</b>技术

    深度学习框架和深度学习算法教程

    了基于神经网络的机器学习方法深度学习算法可以分为两大类:监督学习和无监督学习。监督学习的基本
    的头像 发表于 08-17 16:11 656次阅读

    深度学习框架是什么?深度学习框架有哪些?

    深度学习框架是什么?深度学习框架有哪些?  深度学习框架是一种软件工具,它可以帮助开发者轻松快速
    的头像 发表于 08-17 16:03 1612次阅读

    什么是深度学习算法?深度学习算法的应用

    什么是深度学习算法?深度学习算法的应用 深度学习算法被认为是人工智能的核心,它是一种模仿人类大脑
    的头像 发表于 08-17 16:03 1348次阅读

    深度学习是什么领域

    深度学习是什么领域  深度学习是机器学习的一种子集,由多层神经网络组成。它是一种自动学习技术,可
    的头像 发表于 08-17 16:02 1058次阅读

    机器学习深度学习的区别

      机器学习是一种方法,利用算法来让机器可以自我学习和适应,而且不需要明确地编程。在许多应用中,需要机器使用历史数据训练模型,然后使用该
    发表于 08-02 17:36 349次阅读

    基于深度学习的点云分割的方法介绍

      摘 要:点云分割是点云数据理解中的一个关键技术,但传统算法无法进行实时语义分割。近年来深度学习被应用在点云分割上并取得了重要进展。综述了近四年来基于深度
    发表于 07-20 15:23 0次下载