原理

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

为什么要引入beta和gamma

  • 不总是要标准正态分布,否则会损失表达能力,作者以sigmoid函数为例进行说明。可以看到,标准正态分布(正负三倍标准差)正好落在sigmoid函数的线性部分。其他激活函数(ReLU系列)更有可能需要不同的分布。

  • 恒等映射

    如果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
    • 限制了当前层分布的变化,因此减小了对下一层的影响
    • 当前层可以改变数据的分布,因此减小了之前层的影响

最新文章

  1. 关于oracle中创建新表时将我们要用的表的结构和数据都复制过去
  2. SVN--分支、合并
  3. 见招拆招:绕过WAF继续SQL注入常用方法
  4. Redis 连接池的问题
  5. C#语言基础2016/3/6
  6. 虚拟机IP设置
  7. web自动化框架之三获取数据库值与界面值比较~~
  8. 图片上没有line-height垂直居中
  9. 关于PHP程序员解决问题的能力
  10. c指针点滴1
  11. hdu1556 Color the ball
  12. Idea facet
  13. dubbo源码—service export
  14. cassandra 堆外内存管理
  15. Python函数式编程之闭包
  16. XFS文件系统的备份和恢复
  17. Python爬虫 获得淘宝商品评论
  18. Light OJ 1102
  19. [转载]oracle树形查询 start with connect by
  20. 布局控件Grid

热门文章

  1. (转)用mysql自带工具mysqlslap对数据库进行压力测试
  2. (转)Linux企业运维人员常用的150个命令分享
  3. CentOS下安装官方RPM包的MySQL后找不到my.cnf
  4. Linux~win10上开启ubuntu子系统
  5. 使用自动化恶意软件分析cuckoo分析exe程序
  6. Java线程池——ThreadPoolExecutor的使用
  7. Win32 DPAPI加密编程
  8. Java中的断言 Assert
  9. gc原理小结
  10. java温故而知新(6)深入理解IO Stream