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

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

3天内不再提示

关于Dropout、BN及数据预处理方案

电子设计 来源:程序员大本营 作者:datayx 2021-05-31 17:37 次阅读

一、随机失活(Dropout)

具体做法:在训练的时候,随机失活的实现方法是让神经元以超参数o4YBAF-cdnmAWpDBAAACU_DoSa0457.png的概率被激活或者被设置为 0。如下图所示:

pIYBAF-cdnuAKYslAABDQ5yQB94073.jpg

Dropout 可以看作是 Bagging 的极限形式,每个模型都在当一种情况中训练,同时模型的每个参数都经过与其他模型共享参数,从而高度正则化。在训练过程中,随机失活也可以被认为是对完整的神经网络抽样出一些子集,每次基于输入数据只更新子网络的参数(然而,数量巨大的子网络们并不是相互独立的,因为它们都共享参数)。在测试过程中不使用随机失活,可以理解为是对数量巨大的子网络们做了模型集成(model ensemble),以此来计算出一个平均的预测。

关于 Dropout 的 Motivation:一个是类似于性别在生物进化中的角色:物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应,性别的出现可以繁衍出适应新环境的变种,有效的阻止过拟合,即避免环境改变时物种可能面临的灭绝。还有一个就是正则化的思想,减少神经元之间复杂的共适应关系,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。

这里强烈推荐看下论文原文。虽然是英文的,但是对于更深刻的理解还是有很大帮助的!

二、图像数据的预处理

为什么要预处理:简单的从二维来理解,首先,图像数据是高度相关的,假设其分布如下图 a 所示(简化为 2 维)。由于初始化的时候,我们的参数一般都是 0 均值的,因此开始的拟合 o4YBAF-cdn2AUm5PAAAISG9lNi8513.png,基本过原点附近(因为 b 接近于零),如图 b 红色虚线。因此,网络需要经过多次学习才能逐步达到如紫色实线的拟合,即收敛的比较慢。如果我们对输入数据先作减均值操作,如图 c,显然可以加快学习。更进一步的,我们对数据再进行去相关操作,使得数据更加容易区分,这样又会加快训练,如图 d。

pIYBAF-cdoCAGQkwAAAU0Fjltps385.jpg

下面介绍下一些基础预处理方法:

归一化处理

均值减法(Mean subtraction):它对数据中每个独立特征减去平均值,从几何上可以理解为在每个维度上都将数据云的中心都迁移到原点。(就是每个特征数据减去其相应特征的平均值)

归一化(Normalization);先对数据做零中心化(zero-centered)处理,然后每个维度都除以其标准差。

pIYBAF-cdoKAHx1cAAAs6MzWcJQ190.jpg

(中间零中心化,右边归一化)

PCA 和白化(Whitening)

白化(Whitening):白化操作的输入是特征基准上的数据,然后对每个维度除以其特征值来对数值范围进行归一化。该变换的几何解释是:如果数据服从多变量的高斯分布,那么经过白化后,数据的分布将会是一个均值为零,且协方差相等的矩阵

特征向量是按照特征值的大小排列的。我们可以利用这个性质来对数据降维,只要使用前面的小部分特征向量,丢弃掉那些包含的数据没有方差的维度。这个操作也被称为主成分分析( Principal Component Analysis)简称 PCA)降维

o4YBAF-cdoSAM91NAAAqrWV9zyE177.jpg

(中间是经过 PCA 操作的数据,右边是白化)

需要注意的是:

对比与上面的中心化,与 pca 有点类似,但是不同的是,pca 把数据变换到了数据协方差矩阵的基准轴上(协方差矩阵变成对角阵),也就是说他是轴对称的,但简单的零中心化,它不是轴对称的;还有 PCA 是一种降维的预处理,而零中心化并不是。

常见错误:任何预处理策略(比如数据均值)都只能在训练集数据上进行计算,算法训练完毕后再应用到验证集或者测试集上。例如,如果先计算整个数据集图像的平均值然后每张图片都减去平均值,最后将整个数据集分成训练 / 验证 / 测试集,那么这个做法是错误的。应该怎么做呢?应该先分成训练 / 验证 / 测试集,只是从训练集中求图片平均值,然后各个集(训练 / 验证 / 测试集)中的图像再减去这个平均值。

三、Batch Normalization

pIYBAF-cdoeAaDEsAACN5x16PK0221.png

原论文中,作者为了计算的稳定性,加了两个参数将数据又还原回去了,这两个参数也是需要训练的。说白了,就是对每一层的数据都预处理一次。方便直观感受,上张图:

o4YBAF-cdomALAtFAABipDQJan0158.jpg

这个方法可以进一步加速收敛,因此学习率可以适当增大,加快训练速度;过拟合现象可以得倒一定程度的缓解,所以可以不用 Dropout 或用较低的 Dropout,而且可以减小 L2 正则化系数,训练速度又再一次得到了提升。即 Batch Normalization 可以降低我们对正则化的依赖程度。

还有要注意的是,Batch Normalization 和 pca 加白化有点类似,结果都是可以零均值加上单位方差,可以使得数据弱相关,但是在深度神经网络中,我们一般不要 pca 加白化,原因就是白化需要计算整个训练集的协方差矩阵、求逆等操作,计算量很大,此外,反向传播时,白化操作不一定可导。最后,再次强烈直接看 BN 的相关论文,有很多细节值得一看!

编辑:hfy

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

    关注

    42

    文章

    4538

    浏览量

    98437
收藏 人收藏

    评论

    相关推荐

    机器学习为什么需要数据预处理

    数据预处理是准备原始数据并使其适合机器学习模型的过程。这是创建机器学习模型的第一步也是关键的一步。 创建机器学习项目时,我们并不总是遇到干净且格式化的数据。在对
    的头像 发表于 08-24 09:20 1064次阅读
    机器学习为什么需要<b class='flag-5'>数据</b><b class='flag-5'>预处理</b>

    请教大家一下关于数据预处理

    一般将获得的加速度数据得进行数据预处理,常见的预处理方法有去掉趋势相、还得将离散的数值积分获得振幅。请问有做过的没,请教一下。
    发表于 06-07 11:16

    振动信号的预处理具体是什么意思?

    振动信号的处理预处理之间有什么区别?我用labview对振动信号进行预处理处理吗?
    发表于 10-08 15:33

    Python数据预处理方法

    机器学习-Python实践Day3(特征工程--数据预处理2)
    发表于 06-03 15:55

    数据探索与数据预处理

    目录1数据探索与数据预处理21.1 赛题回顾21.2 数据探索性分析与异常值处理21.3 相关性分析52特征工程82.1 光伏发电领域特征8
    发表于 07-12 08:37

    数据预处理故障信息获取

    数据预处理故障信息获取1.目前,常用的故障诊断参数有电流、电压、功率、转矩、磁通、温度、振动等物理量。其中定子电流信号相对于其它参数受环境等外界影响最小,也因为电流传感器安装方便而最容易获取,因此
    发表于 09-06 08:43

    工业蒸汽量预测的数据预处理知识有哪些

    工业蒸汽量预测的数据预处理知识有哪些?工业蒸汽量预测的特征工程有哪些?
    发表于 10-22 06:32

    C预处理与C语言基本数据类型

    嵌入式系统设计师学习笔记二十九:嵌入式程序设计④——C预处理预处理指令表:(编码规范:GB/T 28169-2011)关于宏定义 #denfine 详解可点击连接查看博主的另一篇文章 预定义宏
    发表于 12-21 08:29

    MPEG-4系统中基于FPGA实现数据采集及预处理

    介绍了一种基于DSP 的MPEG-4 视频压缩系统中,利用FPGA 控制视频数据实时采集并对原始视频数据进行预处理的设计方案及实现,解决了原始视频
    发表于 08-26 08:57 14次下载

    C语言的编译预处理

    在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的
    发表于 09-20 18:17 47次下载

    C语言-预处理(#define、#if...)

    在C语言程序里,出现的#开头的代码段都属于预处理预处理:是在程序编译阶段就执行的代码段。
    的头像 发表于 08-14 10:13 1581次阅读

    数据预处理嵌入AI模型的常见技巧

    本文将介绍基于 OpenVINO 模型优化器或预处理 API 将数据预处理嵌入 AI 模型的常见技巧,帮助读者在硬件投入不变的情况下,进一步提升端到端的 AI 推理程序的性能。
    的头像 发表于 12-16 13:55 806次阅读

    什么是大数据采集和预处理

    一般情况下,大数据处理的流程为:数据采集和预处理数据存储、数据分析和数据可视化。
    的头像 发表于 02-15 14:22 3082次阅读

    PyTorch教程之数据预处理

    电子发烧友网站提供《PyTorch教程之数据预处理.pdf》资料免费下载
    发表于 06-02 14:11 0次下载
    PyTorch教程之<b class='flag-5'>数据</b><b class='flag-5'>预处理</b>

    C语言有哪些预处理操作?

    C语言的预处理是在编译之前对源代码进行处理的阶段,它主要由预处理器完成。预处理器是一个独立的程序,它负责对源代码进行一些文本替换和处理,生成
    的头像 发表于 12-08 15:40 240次阅读
    C语言有哪些<b class='flag-5'>预处理</b>操作?