• Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift(BN)


    internal covariate shift(ics):训练深度神经网络是复杂的,因为在训练过程中,每层的输入分布会随着之前层的参数变化而发生变化。所以训练需要更小的学习速度和careful参数初始化,这将减缓训练的速度。

    bn的目的就是解决ics

    我们知道在神经网络训练开始前,都要对输入数据做一个归一化处理,那么具体为什么需要归一化呢?归一化后有什么好处呢?原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。

    对于深度网络的训练是一个复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。

    我们知道网络一旦train起来,那么参数就要发生更新,除了输入层的数据外(因为输入层数据,我们已经人为的为每个样本归一化),后面网络每一层的输入数据分布是一直在发生变化的,因为在训练的时候,前面层训练参数的更新将导致后面层输入数据分布的变化。以网络第二层为例:网络的第二层输入,是由第一层的参数和input计算得到的,而第一层的参数在整个训练过程中一直在变化,因此必然会引起后面每一层输入数据分布的改变。我们把网络中间层在训练过程中,数据分布的改变称之为:“Internal  Covariate Shift”。

    bn算法就是需要对每层输入进行预处理,但预处理处理的是线性变换的数据,而不是经过激活函数的数据。并且bn算法每次处理的是一个batch的数据,即平均值和标准差都是一个batch的平均和一个batch的标准差。

    根据之前我们训练全连接网络的经验,要想让训练能收敛,选择合适的超参数如learning_rate或者参数的初始化非常重要,如果选择的值不合适,很可能无法收敛。当然使用更好的算法如momentum或者adam等可以让算法更容易收敛,但是对于很深的网络依然很难训练。

    把某层的输入限制在均值为0方差为1的分布会使网络的表达能力变弱,所以增加两个可学习的参数β、γ对数据进行缩放和平移,这样对BN层进行一些限制的放松。

    http://blog.csdn.net/happynear/article/details/44238541

    http://blog.csdn.net/hjimce/article/details/50866313

    http://geek.csdn.net/news/detail/160906

  • 相关阅读:
    js 跨域问题 汇总
    js 数组的常用方法
    移动端web总结
    BitCoinCore配置文件解读
    同一台主机部署两个比特币钱包以及rpc服务的摘要
    ubuntu启动进程笔记
    C#按制定的环境编译替换不出对应的配置项的解决措施。
    【转】Javascript中使用WScript.Shell对象执行.bat文件和cmd命令
    C#执行javascript代码,执行复杂的javascript代码新方式
    linux小笔记
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/6722005.html
Copyright © 2020-2023  润新知