第九节,改善深层神经网络:超参数调试、正则化以优化(下)

一 批标准化 (batch normalization)

       部分内容来自:

Batch Normalization 批标准化

深度学习Deep Learning(05):Batch Normalization(BN)批标准化

参考论文:http://jmlr.org/proceedings/papers/v37/ioffe15.pdf

  • 2015年Google提出的Batch Normalization
  • 训练深层的神经网络很复杂,因为训练时每一层输入的分布在变化,导致训练过程中的饱和,称这种现象为:internal covariate shift。
  • 需要降低学习率Learning Rate和注意参数的初始化,论文中提出的方法是对于每一个小的训练batch都进行标准化(正态化)
  1. 允许使用较大的学习率。
  2. 不必太关心初始化的问题。
  3. 同时一些例子中不需要使用Dropout方法避免过拟合。
  4. 此方法在ImageNet classification比赛中获得4.82% top-5的测试错误率。

批标准化通俗来说就是对每一层神经网络进行标准化 (normalize) 处理, 我们知道对输入数据进行标准化能让机器学习有效率地学习,如果把每一层都

看成这种接受输入数据的模式。

我们先来看看下面的两个动图, 了解下在每层神经网络有无 batch normalization 的区别。

其中PreAct表示加权输出值z,BN PreAct表示经过批标准化之后的输出a。Act表示激活函数输出z,BN Act表示BN PreAct经过激活函数的输出a。

第一幅图片激活函数选择的是ReLU,第二幅图片选择的激活函数是Sigmoid函数。

看第一幅图,我们可以看到在L2层之后,PreAct,以及Act输出基本都为0了,说明神经网络已经不起任何作用了。而经过BN处理后,我们可以看到

神经网络可以正常工作。详细内容参考这里

BN算法

    • 如果输入数据是白化的(whitened),网络会更快的收敛

      • 白化目的是降低数据的冗余性和特征的相关性,例如通过线性变换使数据为0均值单位方差
    • 并非直接标准化每一层那么简单,如果不考虑归一化的影响,可能会降低梯度下降的影响
    • 标准化与某个样本和所有样本都有关系
      • 解决上面的问题,我们希望对于任何参数值,都要满足想要的分布;
      • 对于反向传播,需要计算:
      • 这样做的计算代价是非常大的,因为需要计算x的协方差矩阵
      • 然后白化操作:
    • 上面两种都不行或是不好,进而得到了BN的方法
    • 既然白化每一层输入代价非常大,我们可以进行简化
    • 简化1
      • 标准化特征的每一个维度而不是去标准化所有的特征,这样就不用求协方差矩阵
      • 例如d维的输入:
      • 标准化操作:
      • 需要注意的是标准化操作可能会降低数据的表达能力,例如我们之前提到的Sigmoid函数
      • 标准化之后均值为0方差为1,数据就会落在近似线性的函数区域内,这样激活函数的意义就不明显
      • 所以对于每个 ,对应一对参数 ,然后令:
      • 从式子来看就是对标准化的数据进行缩放和平移,不至于使数据落在线性区域内,增加数据的表达能力(式子中如果: ,就会使恢复到原来的值了)
      • 但是这里还是使用的全部的数据集,但是如果使用随机梯度下降,可以选取一个batch进行训练
    • 简化2
      • 第二种简化就是使用mini-batch进行随机梯度下降
      • 注意这里使用mini-batch也是标准化每一个维度上的特征,而不是所有的特征一起,因为若果mini-batch中的数据量小于特征的维度时,会产生

奇异协方差矩阵, 对应的行列式的值为0,非满秩

    • 假设mini-batch 大小为mB
    • ,对应的变换操作为:
    • 作者给出的批标准化的算法如下:
    • 算法中的ε是一个常量,为了保证数值的稳定性
  • 反向传播求梯度:
    • 因为:
    • 所以:
    • 因为:
    • 所以:
    • 因为:
    • 所以:
    • 所以:
  • 对于BN变换可微分的,随着网络的训练,网络层可以持续学到输入的分布。

  BN网络的训练和推断

  • 按照BN方法,输入数据x会经过变化得到BN(x),然后可以通过随机梯度下降进行训练,标准化是在mini-batch上所以是非常高效的。
  • 但是对于推断我们希望输出只取决于输入,而对于输入只有一个实例数据,无法得到mini-batch的其他实例,就无法求对应的均值和方差了。
  • 可以通过从所有训练实例中获得的统计量来**代替**mini-batch中m个训练实例获得统计量均值和方差
  • 我们对每个mini-batch做标准化,可以对记住每个mini-batch的B,然后得到全局统计量
  • (这里方差采用的是无偏方差估计)
  • 所以推断采用BN的方式为:
  • 作者给出的完整算法:

  实验

    • 最后给出的实验可以看出使用BN的方式训练精准度很高而且很稳定

原文地址:https://www.cnblogs.com/zyly/p/8674620.html

时间: 2024-08-03 13:10:10

第九节,改善深层神经网络:超参数调试、正则化以优化(下)的相关文章

吴恩达《深度学习》第二门课(3)超参数调试、Batch正则化和程序框架

3.1调试处理 (1)不同超参数调试的优先级是不一样的,如下图中的一些超参数,首先最重要的应该是学习率α(红色圈出),然后是Momentum算法的β.隐藏层单元数.mini-batch size(黄色圈出).再之后是Layer.learning rate decay(紫色圈出).最后是Adam算法中的β1.β2.ε. (2)用随机取值代替网格点取值.下图左边是网格点取值,如果二维参数中,一个参数调试的影响特别小,那么虽然取了25个点,其实只相当于取了5个不同的点:而右图中随机取值取了多少个点就代

深度学习之超参数调试

前言            以下内容是个人学习之后的感悟,转载请注明出处~ 超参数调试 在深度学习中,超参数有很多,比如学习率α.使用momentum或Adam优化算法的参数(β1,β2,ε).层数layers.不同层隐藏 单元数hidden units.学习率衰退.mini=batch的大小等.其中一些超参数比其他参数重要,其优先级可以分为以下几级,如图,红色 框最优先,橙色次之,紫色再次之,最后没有框住的一般直接取经验值(当然你也可以自己取). 那么如何来调试超参数呢? 以下图的2维超参数为

吴恩达-深度学习-课程笔记-8: 超参数调试、Batch正则化和softmax( Week 3 )

1 调试处理( tuning process ) 如下图所示,ng认为学习速率α是需要调试的最重要的超参数. 其次重要的是momentum算法的β参数(一般设为0.9),隐藏单元数和mini-batch的大小. 第三重要的是神经网络的层数和学习率衰减 adam算法的三个参数一般不调整,设定为0.9, 0.999, 10^-8. 注意这些直觉是ng的经验,ng自己说了,可能其它的深度学习研究者是不这么认为的. 那么如何选择参数呢?下面介绍两个策略,随机搜索和精细搜索. 早一代的机器学习算法中,如下

deeplearning.ai 改善深层神经网络 week3 听课笔记

这一周的主体是调参. 1. 超参数:No. 1最重要,No. 2其次,No. 3其次次. No. 1学习率α:最重要的参数.在log取值空间随机采样.例如取值范围是[0.001, 1],r = -4*np.random.rand(), α = 10r. No. 2 Momentum β:0.9是个不错的选择.在1-β的log取值空间随机采样.例如取值范围[0.9, 0.999],则1-β的取值空间[0.001, 0.1]. No. 2 各个隐含层的神经元数量:可以在线性取值空间随机采样. No.

深度学习——超参数调试

1. 超参数的重要性级别:红->桔->紫 2. 如何调整参数 2.1 不要用grid来设置选择,因为不同参数的重要性不同 参数的选择范围从一个比较大的,到后来一个较小的 3. 为超参数选择合适的范围 3.1 uniform选择:如每层的节点数或网络层数.但并不是适用于所有超参数 3.2 scale的方法:比如选择学习率 如果在[0.0001,1]之间均匀选择,那么其实90%的数据是来自于[0.1,1],10%是来自[0.0001,0.1].所以,更合理的方法应该是 把[0.0001,1]转换成

改善深层神经网络:超参数调试、正则化及优化

第一周   深度学习的实用层面 1.1 训练.验证.测试集 应用机器学习是个高度迭代的过程:想法--->编码--->实验 (1)神经网络的层数 (2)隐含层神经元个数 (3)学习率 (4)激励函数 小规模数据:训练集70%,验证集30%   或者 训练60% 验证20% 测试20% 大规模数据:训练90%以上 注:可以没有测试集,验证集用于检测各种算法模型,选出最好的,验证集和测试集必须来源于同一分布 1.2 偏差.方差 人眼识别错误率(最优误差,贝叶斯误差)0%左右,训练集验证集来源于同一分

]DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法

1. Mini batch梯度下降法 介绍 假设我们的数据量非常多,达到了500万以上,那么此时如果按照传统的梯度下降算法,那么训练模型所花费的时间将非常巨大,所以我们对数据做如下处理: 如图所示,我们以1000为单位,将数据进行划分,令$x^{\{1\}}=\{x^{(1)},x^{(2)}……x http://pic.cnhubei.com/space.php?uid=1132&do=album&id=825921http://pic.cnhubei.com/space.php?uid

改善深层神经网络(一)深度学习的实用层面

1.L 层神经网络正则化: (1)L2 正则化: (2)为什么正则化可以避免过拟合? 当 lambda 足够大时,最小化 J 时,就会使得权重矩阵 w 趋近于0,神经网络简化为高偏差状态: lambda 较大,w 较小,由 z = w * a + b,z 也较小,以 tanh 函数为例: 当 z 在较小的阶段,函数 g(z) 趋近于线性. 如果每一层都趋近线性,该网络为线性网络,不会产生过拟合的情况. (3)dropout正则化(随机失活): 神经网络的每一个节点都含有 p 的概率失活,如下图:

吴恩达深度学习课程第二课-改善深层神经网络

第一周 深度学习的实用层面 1.1 训练,配置,测试训练集 学习完如何构建神经网络,接下来学习如何高效运行神经网络 数据集划分: train,dev,test: 在train中训练模型,利用dev选择最佳模型,利用test测试最终模型 1.2 偏差Bias,方差Variance 欠拟合(高偏差),过拟合(高方差) 1.3 处理欠拟合,过拟合方案 1.4 正则化Regularization 原文地址:https://www.cnblogs.com/nrocky/p/12114269.html