Batch Normalization

1. 背景

先来看看为什么要归一化操作吧。 归一化之前和归一化之后的代价函数示意图,左边的最归一化之前,右边为归一化之后,最中间的点为我们要优化的最优点(图片来自Andrew最新deeplearning.ai改善深层神经网络课程的1.9 Normalizing inputs)。

我们可以看到,在归一化之前,不同的特征的取值范围可能有所不同,这样带来的不好的地方就是在进行梯度下降的时候,学习率不能够设置太大,否则会造成明显波动,导致长时间不能收敛的情况。但是经过归一化之后,无论我们从哪一个位置开始,都能够方便地找到最小值,这样就更加容易优化,从而加速我们的训练过程。

2. Covariate Shift

论文”Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift”关于”Covariate Shift”的定义如下:

We define Internal Covariate Shift as the change in the distribution of network activations due to the change in network parameters during training.

稍加解释,即分布的变化。怎么说呢? 假设我们现在已经使用黑猫的图片训练了一个分类器来识别猫的图片,但现在假如有一些白猫的图片,虽然都是猫,但是因为训练数据并没有白猫的图片,那么分类器大概率识别不出来,这就是分布的变化。也即Covariate Shift问题。 接下来来看看神经网络中的Covariate Shift问题吧。 首先,下图为一个神经网络,为了表示(画图)方便,没有全连接箭头来表示,记住层与层之前都是全连接即可,

接下来仅考虑第三个隐层:

3. Batch Normalization

顾名思义,就是一个归一化的操作。如何做呢? 首先和归一化输入类似,先标准化:

公式就是这样,让我们从一个神经元来看看它是怎么操作的吧。

4. BN正则化

我们知道神经网络的正则化可以使用dropout和l2 norm,在Ng的神经网络调参课程3.6 Why does BN work 中提到的另外一点就是BN可以看成是这一种正则化。 因为每一次我们使用BN的时候,都仅仅是使用了当前的mini-batch的均值和方差。但是每一个mini-batch肯定会存在一些噪音,这就相当于在训练的时候为每一个隐层单元增加了一些噪音(试想Denoising Autoencoder不就是在训练的时候增加一些噪音来使得训练的模型更加鲁棒吗) 当mini-batch的越大,就相当于看的信息越完整,这个时候的噪音也就越小,正则化的效果也就会降低。

5. 预测阶段的BN

参考资料: 1. Andrew Ng deeplearning.ai深度学习课程 2. Ioffe S, Szegedy C. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift[J]. 2015:448-456.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

论文推荐 | Cycle-GAN:通过双向循环实现一个超棒的图像风格转换器

Zhu Jun-Yan /Park Taesung /Isola Phillip /Efros Alexei A.

1052
来自专栏机器学习养成记

one-hot编码

以Type变量为例,进行one-hot编码。为了观察结果方便,把顺序打乱,观察编码后结果。

852
来自专栏WD学习记录

机器学习 学习笔记(12) EM算法

在实际情况中,往往会遇到未观测变量,未观测变量的学名是隐变量(latent variable)。令X表示已观测变量集,Z表示隐变量集,

723
来自专栏AI研习社

谷歌工程师:聊一聊深度学习的weight initialization

编者按:本文作者夏飞,清华大学计算机软件学士,卡内基梅隆大学人工智能硕士。现为谷歌软件工程师。作者授权雷锋网 AI 研习社发布。 ? █ TLDR (or th...

2605
来自专栏编程

Python数据分析-数据预处理

主题 数据预处理 一、数据清洗 主要是删除原始数据集中无关的数据、重复的数据,平滑噪声数据,筛选掉与挖掘主题无关的数据,处理异常值缺失值等操作 1. 缺失...

4126
来自专栏机器学习养成记

缺失值处理(r语言,mice包)

对缺失值的处理是数据预处理中的重要环节,造成数据缺失的原因有:数据丢失、存储故障和调查中拒绝透露相关信息。这里我们使用VIM包中的sleep数据集为样本,介绍缺...

4157
来自专栏技术随笔

[译] Instance Normalization: The Missing Ingredient for Fast Stylization

3508
来自专栏cloudskyme

跟我一起数据挖掘(23)——C4.5

C4.5简介 C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法。它的目标是监督学习:给定一个数据集,其中的每一个元组都能用一组属性值来描述,每一个元组属...

3509
来自专栏个人分享

Kmeans算法学习与SparkMlLib Kmeans算法尝试

K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归...

841
来自专栏机器之心

入门 | 十分钟搞定Keras序列到序列学习(附代码实现)

27612

扫码关注云+社区