Batch Normalization

介绍了BN(Batch Normalization)层如何解决内部协变量偏移问题,通过归一化输入加快深度网络训练速度,并减少对超参数调整的依赖。在卷积神经网络中,BN层还能利用权值共享策略进一步提升效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址http://blog.youkuaiyun.com/hjimce/article/details/50866313

随机梯度下降训练深度网络简单高效,但是有一个毛病,需要人为的选择参数,比如学习率,参数初始化,权重衰减系数,Drop out 比例等,这些参数的选择对训练结果至关重要

BN算法可以克服这些困难,它的作用如下:

  1. 可以选择比较大的学习率,BN有快速训练收敛的特性
  2. 可以移出 drop out 和 l2 正则化参数了,因为 BN 层具有提高网络泛化的能力
  3. 不需要使用局部响应归一化层了,因为 BN 本身就是一个归一化的网络层 
  4. 可以把训练数据彻底打乱

训练神经网络为什么要对数据进行归一化?

因为神经网络学习过程的本质就是为了学习数据的分布,一旦训练数据和测试数据分布不同,那网络的泛化能力就会大大降低,另外,一旦每批训练数据的分布不同,网络就会在每次迭代去适应不同的分布,降低了网络的训练速度

网络的训练过程中,参数不断发生更新,前面层的参数变化,会引起后面层数据的分布的变化,称之为“Internal Covariate Shift”,BN 就是为了解决中间层数据分布发生改变的情况

BN 概述

在网络的每一层输入的时候,插入一个归一化层,即先做一个归一化处理,再进入网路的下一层

白化也是一种预处理方法,然而白化的计算量太大了,很不划算。经过白化预处理后,数据满足:

1.特征的相关性降低,相当于 pca 

2.数据均值,标准差归一化,也就使得每一维特征均值为0,方差为1.

如果特征的维度比较大,要进行 PCA ,也就是实现白化的第一步,需要计算特征向量,计算量非常大,所以作者忽略了第一步 PCA 的过程,仅仅使用了如下的近似白化预处理:

                                            

对某一层的网络输入数据做一个归一化处理,Exk是对每一批训练数据神经元 xk的平均值,分母是每一批数据神经元 xk 激活度的一个标准差

但这个并不是简单的对数据做归一化输入到下一层,因为这样会影响到本层学习到的特征,所以增加一个变换重构,引入两个可以学习的参数

                                             

两个参数让网络学习恢复出原始网络所要学习的特征

BN的前向传导公式如下所以

                                 

在 CNN  中使用 BN 

从上面我们知道 BN 层是对每一个神经元做归一化处理,这样变换重构的参数量就很大了,所以 BN 也使用了权值共享的策略,把一整张图当作一个神经元处理,即相当于求取所有样本所对应的的一个特征图的所有神经元的平均值,方差,然后归一化。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值