李宏毅机器学习 batch normalization

feature scaling

在这里插入图片描述

  • w1和w2发生同等的变化,因为x2很大,x1很小,所以w2对结果影响较大,loss在w2方向上斜率较大,w1对结果影响较小,loss在w1方向上斜率较小
  • 如果进行feature scaling,使得x1和x2有相同的变化范围loss就是正圆形的
    在这里插入图片描述
好处:
  • feature scaling 之前,learning rate在不同方向上不同,要在w1方向上有较大的learning rate, 在w2方向上有较小的learning rate;
  • 而feature scaling之后可以在不同方向使用相同的learning rate在这里插入图片描述
典型的feature scaling怎么做?
  • 将R个数据的每一维度进行normalization
    在这里插入图片描述
深度学习里Hidden layer怎么做 feature scaling

在这里插入图片描述
解决了Internal Covariate Shift(内部协变量偏移)

在这里插入图片描述
对高层的输入做Feature Scaling的问题是,每次做的时候都需要先求出输入的statistics,但是由于上一层的参数变化,每轮训练的statistics都会改变,没有办法用很简单的方法很快求出他们的statistics。解决的方法是使用Batch Normalization

Batch Normalization

假设一个batch有3个数据
在这里插入图片描述

  • 一般在激活函数之前进行归一化,batch 尽量不要太小
    在这里插入图片描述
    在这里插入图片描述
此时怎么做back propogation?

做了Normalization之后,反向传播也会通过μ和σ这两条路径对W1 进行更新,这是因为W1的变化会影响到 z 1 , z 2 , z 3 z^1,z^2,z^3 z1,z2,z3进而影响到μ和σ

有时候可以根据activation function再进行一些变换

有时候不希望均值为0,方差为1,所以引入两个参数 β , γ \beta,\gamma β,γ,在网络中自己学习
在这里插入图片描述

test怎么做?
  • test阶段没有batch, μ , σ \mu,\sigma μ,σ怎么找?
    在这里插入图片描述
  • 一种理想方法是:在训练过程中我们计算每个batch的μ和σ是为了代替整个training data的平均值和标准差,所以我们在测试的时候也可以采用整个training data的平均值和标准差。但是可能training data很大,去计算平均值和方差并不方便;也有可能training data是分batch进入的,没有保存整体数据,没办法计算平均值和方差
  • 实际操作:将训练过程中所有batch的μ和σ都保存下来,然后按权重求和得到用于testing的μ和σ ,由于随着update,accuracy会不断增大,所以一般我们会给后面的μ和σ更大的权重
    在这里插入图片描述在这里插入图片描述
batch normalization的好处
  • 解决了Internal Covariate Shift的问题,使得网络训练可以设置更大的learning rate,从而可以减少网络训练时间
  • 在一定程度上可以防止gradient vanish
  • 减小参数的初始化对网络学习的影响,例如某层参数的初始化扩大K倍,那对应的这一层的输出也增大K倍,但是这层的输出做了BN之后的输出保持不变
  • BN会减少regularization的需求,在一定程度上对抗overfitting
    在这里插入图片描述
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值