热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

(九)批量归一化

1、引入对输入数据做了归一化处理,就是将每个特征在所有样本上的值转归一化成均值0方差1。这样我们保证训练数据里数值都同样量级上,从而使得训练的时候数值更加稳定。对于浅层模型来说,通

1、引入

对输入数据做了归一化处理,就是将每个特征在所有样本上的值转归一化成均值0方差1。这样我们保证训练数据里数值都同样量级上,从而使得训练的时候数值更加稳定。对于浅层模型来说,通常数据归一化预处理足够有效。输出数值在只经过几个神经层后通常不会出现剧烈变化。但对于深层神经网络来说,情况一般比较复杂。因为每一层里都对输入乘以权重后得到输出。当很多层这样的相乘累计在一起时,一个输出数据较大的改变都可以导致输出产生巨大变化,从而带来不稳定性。

批量归一化层的提出是针对这个情况。它将一个批量里的输入数据进行归一化然后输出。如果我们将批量归一化层放置在网络的各个层之间,那么就可以不断的对中间输出进行调整,从而保证整个网络的中间输出的数值稳定性。


2、批量归一化层

均值和方差

μ1ni=1nxi,μ←1n∑i=1nxi,

σ21ni=1n(xiμ)2.σ2←1n∑i=1n(xi−μ)2.

对于数据点 xixi,对它的每一个特征维进行归一化:

xi^xiμσ2+ϵ,xi^←xi−μσ2+ϵ,

这里ϵ是一个很小的常数保证不除以0。在上面归一化的基础上,批量归一化层引入了两个可以学习的模型参数,拉升参数 γ 和偏移参数 β(通道数是6时候,他们是大小为6的向量)。它们是长为p(这里p是指特征的数目,在图中即使通道数6)的向量,作用在xi^xi^上:

这里Y=y1,,ynY=y1,…,yn是批量归一化层的输出


训练的时候使用较大的批量大小来获取更好的计算性能,这时批量内样本均值和方差的计算都较为准确。但在预测的时候,我们可能使用很小的批量大小,甚至每次我们只对一个样本做预测,这时我们无法得到较为准确的均值和方差。对此,解决方法的训练批量归一化层时候维护一个移动平滑的样本均值和方差,保存起来在预测时使用。



推荐阅读
author-avatar
Huan-TH
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有