网络优化(四)——逐层归一化

本文介绍了逐层归一化的基本概念及其在深度学习中的应用,包括批量归一化、层归一化、权重归一化及局部响应归一化等方法。详细探讨了各种归一化方法的工作原理及其实现。

1. 逐层归一化概述

逐层归一化是将传统机器学习中的数据归一化方法应用到深度神经网络中,对神经网络中隐藏层的输入进行归一化,从而使得网络更容易训练。这里的逐层归一化方法是指可以应用在深度神经网络中的任何一个中间层.实际上并不需要对所有层进行归一化。
逐层归一化可以有效提高训练效率的原因有以下几个方面:

  1. 更好的尺度不变性:在深度神经网络中,一个神经层的输入是之前神经层的输出。给定一个神经层 𝑙 𝑙 l,它之前的神经层 ( 1 , ⋯ , 𝑙 − 1 ) (1, ⋯ , 𝑙 − 1) (1,,l1) 的参数变化会导致其输入的分布发生较大的改变。当使用随机梯度下降来训练网络时,每次参数更新都会导致该神经层的输入分布发生改变。越高的层,其输入分布会改变得越明显.就像一栋高楼,低楼层发生一个较小的偏移,可能会导致高楼层较大的偏移。从机器学习角度来看,如果一个神经层的输入分布发生了改变,那么其参数需要重新学习,这种现象叫作内部协变量偏移。为了缓解这个问题,我们可以对每一个神经层的输入进行归一化操作,使其分布保持稳定。

  2. 更平滑的优化地形:逐层归一化一方面可以使得大部分神经层的输入处于不饱和区域,从而让梯度变大,避免梯度消失问题;另一方面还可以使得神经网络的优化地形更加平滑,以及使梯度变得更加稳定,从而允许我们使用更大的学习率,并提高收敛速度。

下面介绍几种比较常用的逐层归一化方法:批量归一化、层归一化、权重归一化和局部响应归一化。

2. 批量归一化

对于一个深度神经网络,令第 𝑙 𝑙 l 层的净输入为 z ( 𝑙 ) z^{(𝑙)} z(l),神经元的输出为 a ( 𝑙 ) a^{(𝑙)} a(l),即
a ( l ) = f ( z ( l ) ) = f ( W a ( l − 1 ) + b ) a^{(l)}=f(z^{(l)})=f(Wa^{(l-1)}+b) a(l)=f(z(l))=f(Wa(l1)+b)其中 f ( ⋅ ) f(\cdot) f() 为激活函数。

为了提高优化效率,就要使得净输入𝒛(𝑙) 的分布一致,比如都归一化到标准正态分布。虽然归一化操作也可以应用在输入 a ( 𝑙 − 1 ) a^{(𝑙-1)} a(l1) 上,但归一化 z ( 𝑙 ) z^{(𝑙)} z(l) 更加有利于优化。因此,在实践中归一化操作一般应用在仿射变换 W a ( l − 1 ) + b Wa^{(l-1)}+b Wa(l1)+b 之后、激活函数之前。

为了提高归一化效率,一般使用标准化将净输入 z ( 𝑙 ) z^{(𝑙)} z(l) 的每一维都归一到标准正态分布,相关的公式如下所示:
z ^ ( 𝑙 ) = z ( 𝑙 ) − E [ z ( 𝑙 ) ] v a r ( z ( 𝑙 ) ) + ϵ \hat{z}^{(𝑙)}=\frac{z^{(𝑙)}-E[z^{(𝑙)}]}{\sqrt{var(z^{(𝑙)})+\epsilon}} z^(l)=var(z(l))+ϵ z(l)E[z(l)]其中, ϵ \epsilon ϵ 为保持数值稳定设置的较小的常数,一般为 1 0 − 7 10^{-7} 107 左右。

给定一个包含 𝐾 𝐾 K 个样本的小批量样本集合,第 𝑙 𝑙 l 层神经元的净输入 z ( 1 , 𝑙 ) , ⋯   , z ( K , 𝑙 ) z^{(1,𝑙)}, \cdots, z^{(K,𝑙)} z(1,l),,z(K,l)的均值和方差为
μ B = 1 K ∑ k = 1 K z ( k , l ) σ B 2 = 1 K ∑ k = 1 K ( z ( k , l ) − μ B ) 2 \begin{aligned} \mu_B&=\frac{1}{K}\sum_{k=1}^Kz^{(k,l)} \\ \sigma^2_B&=\frac{1}{K}\sum_{k=1}^K(z^{(k,l)}-\mu_B)^2 \end{aligned} μBσB2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值