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

    文章

    4759

    浏览量

    100458
  • 人工智能
    +关注

    关注

    1791

    文章

    46736

    浏览量

    237294
  • 深度学习
    +关注

    关注

    73

    文章

    5485

    浏览量

    120935
收藏 人收藏

    评论

    相关推荐

    深度学习模型的鲁棒性优化

    深度学习模型的鲁棒性优化是一个复杂但至关重要的任务,它涉及多个方面的技术和策略。以下是一些关键的优化方法: 一、数据预处理与
    的头像 发表于 11-11 10:25 119次阅读

    FPGA加速深度学习模型的案例

    FPGA(现场可编程门阵列)加速深度学习模型是当前硬件加速领域的一个热门研究方向。以下是一些FPGA加速深度学习
    的头像 发表于 10-25 09:22 123次阅读

    AI大模型深度学习的关系

    AI大模型深度学习之间存在着密不可分的关系,它们互为促进,相辅相成。以下是对两者关系的介绍: 一、深度学习是AI大
    的头像 发表于 10-23 15:25 340次阅读

    深度学习模型量化方法

    深度学习模型量化是一种重要的模型轻量化技术,旨在通过减少网络参数的比特宽度来减小模型大小和加速推理过程,同时尽量保持
    的头像 发表于 07-15 11:01 447次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>模型</b>量化<b class='flag-5'>方法</b>

    基于Python的深度学习人脸识别方法

    基于Python的深度学习人脸识别方法是一个涉及多个技术领域的复杂话题,包括计算机视觉、深度学习、以及图像处理等。在这里,我将概述一个基本的
    的头像 发表于 07-14 11:52 1158次阅读

    深度学习模型中的过拟合与正则化

    深度学习的广阔领域中,模型训练的核心目标之一是实现对未知数据的准确预测。然而,在实际应用中,我们经常会遇到一个问题——过拟合(Overfitting)。过拟合是指
    的头像 发表于 07-09 15:56 721次阅读

    深度学习中的时间序列分类方法

    的发展,基于深度学习的TSC方法逐渐展现出其强大的自动特征提取和分类能力。本文将从多个角度对深度学习在时间序列分类中的应用进行综述,探讨
    的头像 发表于 07-09 15:54 680次阅读

    深度学习中的无监督学习方法综述

    深度学习作为机器学习领域的一个重要分支,近年来在多个领域取得了显著的成果,特别是在图像识别、语音识别、自然语言处理等领域。然而,深度学习
    的头像 发表于 07-09 10:50 449次阅读

    深度学习中的模型权重

    深度学习这一充满无限可能性的领域中,模型权重(Weights)作为其核心组成部分,扮演着至关重要的角色。它们不仅是模型学习的基石,更是
    的头像 发表于 07-04 11:49 871次阅读

    深度学习常用的Python库

    深度学习常用的Python库,包括核心库、可视化工具、深度学习框架、自然语言处理库以及数据抓取库
    的头像 发表于 07-03 16:04 543次阅读

    深度学习模型训练过程详解

    深度学习模型训练是一个复杂且关键的过程,它涉及大量的数据、计算资源和精心设计的算法。训练一个深度学习
    的头像 发表于 07-01 16:13 1047次阅读

    深度学习模型优化与调试方法

    深度学习模型在训练过程中,往往会遇到各种问题和挑战,如过拟合、欠拟合、梯度消失或爆炸等。因此,对深度学习
    的头像 发表于 07-01 11:41 666次阅读

    一种利用光电容积描记(PPG)信号和深度学习模型对高血压分类的新方法

    学习方法来对高血压的四个阶段进行分类。这里采用的分类方法是:Alexnet、Resnet -50、VGG-16和新的模型:AvgPool_VGG-16。使用这些算法时要考虑到数据集的数
    发表于 05-11 20:01

    深度学习检测小目标常用方法

    深度学习的效果在某种意义上是靠大量数据喂出来的,小目标检测的性能同样也可以通过增加训练集中小目标样本的种类和数量来提升。
    发表于 03-18 09:57 671次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>检测小目标<b class='flag-5'>常用</b><b class='flag-5'>方法</b>

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

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