李宏毅深度学习——Batch Normalization

写在前面

本文是李宏毅深度学习2021版的batch normalization部分的笔记,并且参考了batch normalization那篇原来的论文

笔记部分

batch normalization,我们先来搞清楚他是解决什么问题的,他是解决这个Loss函数过于“崎岖”的问题,因为loss函数过于崎岖会很容易影响到我们梯度下降的效率,所以我们就需要去改变我们的x,也就是我们的feature的样式。

normalization,翻译过来就是归一化,batch normalization是这么归一化的:

简单讲述一下这个式子原论文作者是怎么个心路历程(不想知道的可以跳过)

这篇论文作者首先提到了一个词:Internal 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.

也就是说,这篇文章的作者认为,我们要减少这个 Internal Covariate Shift才能让梯度下降更好的进行(虽然这个说法被后来的人所否定)。原论文中作者先想到的是白化(whitening)在作者那个年代,他们普遍认为输入数据的白化会让训练更快地收敛。但是作者认为,“如果这些修改与优化步骤穿插在一起,那么梯度下降步骤可能尝试以一种需要的方式更新参数这减少了梯度步长的影响”。原文作者举了个例子:

结果表明,在这种情况下Loss并不会随着b的优化而改变,(虽然我个人觉得这个是中心化,不是白化,有大佬的话评论区解释一下)作者认为,需要找到一种方式“对于任何参数值,网络总是产生所需的激活分布。这样做将允许梯度需考虑的模型参数损失归一化及其对模型的依赖性参数Θ”

所以作者假设了一个函数,

于是作者觉得这个方法需要计算的东西太多了所以找到了这种归一化的方法:

但是,为了解决归一化后输入非线性的问题,我们需要加一个层,叫BN层:

这两个参数可以与原始参数一起学习,并且如果γ设置成标准差,β设置成平均值是比较好的选择的话可以恢复原始激活。

整个过程用李宏毅上课的图就是这个:

就是说,先按照前面说的方法进行归一化,然后再经过BN层就可以了,并且这个方法收敛的效果很好,准确率也非常高:

(但是,BNx5 Sigmoid效果并不是很好,原论文作者给强行圆了一下:))

为什么它能使数据稳定,作者直接给出了结果:

也就是说,

可以看到,经过BN操作以后,权重的缩放并不会影响到对 μ 的梯度计算;并且当权重越大时,即 a 越大,1/a越小意味着权重W的梯度反而越小,这样BN就保证了梯度不会依赖于参数的scale,使得参数的更新处在更加稳定的状态.

写在后面

今天的学习就到这里了,如果大家有兴趣看原文的话,1502.03167 (arxiv.org)

祝大家学习生活愉快!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值