Tensorflow2.0之BatchNorm层

本文深入探讨了TensorFlow 2.0中Batch Normalization(BN)层的作用和实现,解释了BN层如何解决深层网络训练的不稳定性问题,加速收敛并提升模型性能。文中详细分析了BN层在训练和测试阶段的不同行为,以及如何在LeNet-5模型中正确使用BN层。

Tensorflow2.0之BatchNorm层

简介:

卷积神经网络的出现,网络参数量大大减低,使得几十层的深层网络成为可能。然而,在残差网络出现之前,网络的加深使得网络训练变得非常不稳定,甚至出现网络长时间不更新甚至不收敛的现象,同时网络对超参数比较敏感,超参数的微量扰动也会导致网络的训练轨迹完全改变。

2015 年,Google 研究人员Sergey Ioffe 等提出了一种参数标准化(Normalize)的手段,并基于参数标准化设计了Batch Nomalization(简写为BatchNorm,或BN)层 [6]。BN 层的提出,使得网络的超参数的设定更加自由,比如更大的学习率、更随意的网络初始化等,同时网络的收敛速度更快,性能也更好。BN 层提出后便广泛地应用在各种深度网络模型
上,卷积层、BN 层、ReLU 层、池化层一度成为网络模型的标配单元块,通过堆叠Conv-BN-ReLU-Pooling 方式往往可以获得不错的模型性能。

为什么我们需要BN层?

考虑 Sigmoid 激活函数和它的梯度分布,如下图 10.39 所示,Sigmoid 函数在𝑥 ∈−2 2 区间的导数值在 . .2 区间分布;当𝑥 > 2 或𝑥 < −2时,Sigmoid 函数的导数变得很小,逼近于0,从而容易出现梯度弥散现象。为了避免因为输入较大或者较小而导致Sigmoid 函数出现梯度弥散现象,将函数输入𝑥标准化映射到0 附近的一段较小区间将变得非常重要,可以从图看到,通过标准化重映射后,值被映射在0 附近,此处的导数值不至于过小,从而不容易出现梯度弥散现象。这是使用标准化手段受益的一个例子。

在这里插入图片描述

我们再看另一个例子。考虑2 个输入节点的线性模型,如图 下图所示:

ℒ = 𝑎 = 𝑥1𝑤1 + 𝑥2𝑤2 + b

讨论如下2 种输入分布下的优化问题:
❑ 输入𝑥1 ∈[1,10] ,𝑥2 ∈[1,10]
❑ 输入𝑥1 ∈ [1,10],𝑥2 ∈[100,1000]

由于模型相对简单,可以绘制出2 种𝑥1、𝑥2下,函数的损失等高线图,图b是𝑥1 ∈[1,10]
、𝑥2 ∈[100,1000] 时的某条优化轨迹线示意,图©是𝑥1 ∈ [1,10]、𝑥2 ∈[1,10]
时的某条优化轨迹线示意,图中的圆环中心即为全局极值点

在这里插入图片描述
考虑到:
在这里插入图片描述
当𝑥1、𝑥2输入分布相近时, 𝜕ℒ / 𝜕𝑤1、𝜕ℒ / 𝜕𝑤2偏导数值相当,函数的优化轨迹如图 10.40©所示;当𝑥1、𝑥2输入分布差距较大时,比如𝑥1 ≪ 𝑥2,则
𝜕ℒ / 𝜕𝑤1 << 𝜕ℒ / 𝜕𝑤2
损失函数等势线在𝑤2轴更加陡峭,某条可能的优化轨迹如图 (b)所示。对比2 条优化轨迹线可以观察到,𝑥1、𝑥2分布相近时图 10.40©中收敛更加快速,优化轨迹更理想。
通过上述的2 个例子,我们能够经验性归纳出:网络层输入𝑥分布相近,并且分布在较小范围内时(如0 附近),更有利于函数的优化。那么如何保证输入𝑥的分布相近呢?数据标准化可以实现此目的,通过数据标准化操作可以将数据𝑥映射到𝑥̂:
在这里插入图片描述
其中μr、σr2\mu_r、\sigma_r^2μr

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值