• Batch Normalization 笔记


    原理

    输入层可以归一化,那么其他层也应该可以归一化。但是有个重要的问题,为什么要引入beta和gamma。

    为什么要引入beta和gamma

    • 不总是要标准正态分布,否则会损失表达能力,作者以sigmoid函数为例进行说明。可以看到,标准正态分布(正负三倍标准差)正好落在sigmoid函数的线性部分。其他激活函数(ReLU系列)更有可能需要不同的分布。
      sigmoid vs normal
    • 恒等映射
      如果beta和gamma正好是均值和标准差,那么变换之后得到的是该特征原来的分布。
    • 可以不要bias,因为会减均值

    测试过程

    • 测试时,归一化过程往往针对一个输入,因此均值和方差需要在训练时学习。例如:
    # training
    running_mean = momentum * running_mean + (1 - momentum) * sample_mean
    running_var = momentum * running_var + (1 - momentum) * sample_var
    
    # testing
    output = gamma * (x-running_mean)/sqrt(running_var+epsilon) + beta
    

    参数数量

    • 当前层的每个特征有各自的分布,因此BN是针对各个特征的
    • 对于CNN来说,n个激活图的层有4n个参数,beta,gamma以及running mean和running variance

    BN的效果

    • 改善了网络中的梯度流
    • 可以使用更大的学习率
    • 降低了对权重初始化的要求
    • 提供一定程度的正则化

    Why BN works?

    covariate shift
    数据的分布是变化的,已经学习到的映射(权重)在新的数据上需要重新训练。在隐藏层之间,称为internal covariate shift。

    • 当实际的映射(ground truth mapping)有shift时(网络没有训练好时)问题更严重

    BN的作用

    • 使各层的输入数据具有相似的分布(正态分布)
    • 减小了internal covariate shift
      • 限制了当前层分布的变化,因此减小了对下一层的影响
      • 当前层可以改变数据的分布,因此减小了之前层的影响
  • 相关阅读:
    java web 自定义的权限框架
    java web 中 读取windows图标并显示
    apache httpclient
    Gson json解析工具
    org.apache.commons
    ehcache 缓存管理工具
    springmvc集成Freemarke配置的几点
    SaltStack与ZeroMQ(二)
    Python中的__init__和__new__介绍
    TCP 介绍
  • 原文地址:https://www.cnblogs.com/whenyd/p/8416332.html
Copyright © 2020-2023  润新知