zoukankan      html  css  js  c++  java
  • Batch Normalization的算法本质是在网络每一层的输入前增加一层BN层(也即归一化层),对数据进行归一化处理,然后再进入网络下一层,但是BN并不是简单的对数据进行求归一化,而是引入了两个参数λ和β去进行数据重构

    Batch Normalization

    Batch Normalization是深度学习领域在2015年非常热门的一个算法,许多网络应用该方法进行训练,并且取得了非常好的效果。

    众所周知,深度学习是应用随机梯度下降法对网络进行训练,尽管随机梯度下降训练神经网络非常有效,但是它有一个缺点,就是需要人为的设定很多参数,比如学习率,权重衰减系数,Dropout比例等。这些参数的选择对训练结果至关重要,以至于训练的大多数精力都耗费在了调参上面。BN算法就可以完美的解决这些问题。

    当我们使用了BN算法,我们可以去选择比较大的初始学习率,这样就会加快学习的速度;我们还可以不必去理会过拟合中的dropout、正则项约束问题等,因为BN算法可以提高网络的泛化能力;我们再也不需要使用局部响应归一化层,因为BN本身就是归一化的网络;还可以打乱训练数据,防止每批训练的时候,某一个样本经常被选到。

    通常在训练神经网络之前,我们都会对数据进行归一化处理,为什么呢?因为神经网络训练实际是为了学习数据的分布情况,一旦训练数据与测试数据分布不同,那么网络的泛化能力也会大大降低。另外,如果每一批的训练数据都不同,那么神经网络就会去适应不同训练数据的分布,这样就会大大降低网络训练的速度。

    深度学习的训练是一个复杂的过程,如果前几层的数据分布发生了变化,那么后面就会积累下去,不断放大,这样就会导致神经网络在训练过程中不断适应新的数据分布,影响网络训练的速度。

    但是在网络训练的过程中,参数会不断的调整,除了输入层数据之外,后面网络每一层的输入分布在不断变化的(因为后面层的输入时前面层的输出,前面层的参数调整了,后面层的输入数据分布就会发生变化)。这样就会降低网络训练的速度。因此,BN算法就被提出。

    BN的算法本质是在网络每一层的输入前增加一层BN层(也即归一化层),对数据进行归一化处理,然后再进入网络下一层,但是BN并不是简单的对数据进行求归一化,而是引入了两个参数λβ去进行数据重构,具体公式如下: 
    BN

    那么为什么要引入这两个参数呢?因为网络中某一层学习到的特征本来就在S型函数两端,如果强行进行归一化处理,那么就会破坏这一层中学到的特征。而加入了这两个参数,可以将学到的特征重新映射回原来的网络所学习到的特征分布,因此不会破坏原来学到的特征。

    实验表明,Batch Normalization效果惊人的好,训练速度可以达到原来的十倍以上。

  • 相关阅读:
    Git撤销commit消息保留修改
    switchysharp设置
    Windows10下的docker安装与入门 (三) 创建自己的docker镜像并且在容器中运行它
    Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像
    Windows10下的docker安装与入门 (一)使用docker toolbox安装docker
    semver(Semantic Versioning)
    conda install mingw libpython
    下载 安装MYsql 服务器
    .NET(c#) 移动APP开发平台
    .NET(c#) 移动APP开发平台
  • 原文地址:https://www.cnblogs.com/bonelee/p/7930605.html
Copyright © 2011-2022 走看看