前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日一问之 Batch Normalization

每日一问之 Batch Normalization

作者头像
caoqi95
发布2019-03-28 11:51:32
6480
发布2019-03-28 11:51:32
举报

Batch Normalization 的好处是什么?

这么久了,早就忘记了 Batch Normalization 的具体内容了,只依稀记得是有点正则化的效果的。之前学习吴恩达课程的时候,采用的是手写笔记的方式,但是我并没有把它带到学校来,无法及时查看及复习。这就是手写笔记的弊端。所以,今天特意再次整理 Batch Normalization 的相关知识,如下几点所示:

  • 什么是 Batch Normalization ?
  • 为什么使用 Batch Normalization ?

什么是 Batch Normalization

从名字上可以看出,是一种批(batch)归一化的操作。就像对输入层的输入特征进行归一化一样,BN 也可以加速模型学习的过程。具体操作是:通常在使用 SGD 算法的时候,在 mini-batch 中计算每一隐藏层输入的均值和方差。即在每个 mini-batch 中,在对每个隐藏层的输入 x 或者 z 使用激活函数之前(学术界有过争论,但通常是在使用激活函数之前进行操作)进行 Normalize 操作,如下图所示。

Batch Normalization Alogrithm

其中

\gamma
\gamma

\beta
\beta

,都是从模型中学习到的参数。如果当

\gamma ^{(k)} = \sqrt{Var\left [ x^{(k)} \right ]}
\gamma ^{(k)} = \sqrt{Var\left [ x^{(k)} \right ]}

\beta ^{(k)}=E[x^{(k)}]
\beta ^{(k)}=E[x^{(k)}]

时,可以恢复原始的(激活)值。在反向传播中的计算会如下所示:

为什么使用 Batch Normalization

使用 Batch Normalization 也是为了解决训练深层神经网络的一些弊端。

消除 Internal Covariate Shift

在训练神经网络的过程中会存在 Internal Covariate Shift 的问题。

在 Batch Normalization 的论文中,作者将 Internal Covariate Shift 问题定义为由于训练期间网络参数的变化导致的网络激活分布的变化。在 LeCun,Wiesler & Ney 等人的论文中可以知道,如果对神经网络的输入进行白化(whitened,zero means and unit variances)及去相关操作,那么可以消除 Internal Covariate Shift 的不良影响,从而加快神经网络的训练。而 Batch Normalization 的操作和上述类似,也能起到消除 Internal Covariate Shift 的作用。

防止梯度消失

众所周知,在使用 sigmoid 和 tanh 等激活函数的时候,如果输入过大,将会造成梯度消失的后果。而在使用激活函数之前。对输入进行归一化,则将特征进行了缩减,使其分布集中在非线性激活区域。如下图,可以很直观的看出,该图来自莫烦的文章,强烈建议大家去读,讲解的很直观明了。

起到轻微的正则化效果

在 Batch Normalization 的过程中,在每个 mini-batch 中,在神经网络的每一层计算均值和方差。这个过程只是在该 mini-batch 中计算,而不是在整个数据集上,所以均值和方差会带来一些噪音,以及在后面的计算中也会带来一些噪音。这和 Dropout 的操作很相似。Dropout 增加噪音的过程是,它使隐藏单元,以一定的概率乘以 0,以一定的概率乘以 1,这样后面的隐藏单元就不会过分的依赖前面的单元。和 Dropout 类似,BN 往隐藏层代入了噪音,也使得后面的单元不依赖前面的单元。所以,BN 也能够起到轻微的正则化作用。

P.S: Andrew Ng 在其课程中建议,可以同时使用 Batch Normalization 和 Dropout ,这样会带来更强的正则化效果。但是不要把 BN 的这个小作用当做很重要的 trick 来使用。因为 Batch Normalization 的真正作用是归一化每一激活层。

参考

[1]. Batch Normalization Paper

[2]. 深度学习中 Batch Normalization为什么效果好?

[3]. 莫烦 - 什么是批标准化 (Batch Normalization)

[4]. 吴恩达-深度学习课程

P.S:文中有错欢迎指出,互相学习。以及欢迎关注我的公众号 :)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.12.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 Batch Normalization
  • 为什么使用 Batch Normalization
    • 消除 Internal Covariate Shift
      • 防止梯度消失
        • 起到轻微的正则化效果
        • 参考
        相关产品与服务
        批量计算
        批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档