李宏毅机器学习 batch normalization

feature scaling

李宏毅机器学习 batch normalization_第1张图片

  • w1和w2发生同等的变化,因为x2很大,x1很小,所以w2对结果影响较大,loss在w2方向上斜率较大,w1对结果影响较小,loss在w1方向上斜率较小
  • 如果进行feature scaling,使得x1和x2有相同的变化范围loss就是正圆形的
    李宏毅机器学习 batch normalization_第2张图片

好处:

  • feature scaling 之前,learning rate在不同方向上不同,要在w1方向上有较大的learning rate, 在w2方向上有较小的learning rate;
  • 而feature scaling之后可以在不同方向使用相同的learning rate李宏毅机器学习 batch normalization_第3张图片

典型的feature scaling怎么做?

  • 将R个数据的每一维度进行normalization
    李宏毅机器学习 batch normalization_第4张图片

深度学习里Hidden layer怎么做 feature scaling

李宏毅机器学习 batch normalization_第5张图片
解决了Internal Covariate Shift(内部协变量偏移)

李宏毅机器学习 batch normalization_第6张图片
对高层的输入做Feature Scaling的问题是,每次做的时候都需要先求出输入的statistics,但是由于上一层的参数变化,每轮训练的statistics都会改变,没有办法用很简单的方法很快求出他们的statistics。解决的方法是使用Batch Normalization

Batch Normalization

假设一个batch有3个数据
李宏毅机器学习 batch normalization_第7张图片

  • 一般在激活函数之前进行归一化,batch 尽量不要太小
    李宏毅机器学习 batch normalization_第8张图片
    李宏毅机器学习 batch normalization_第9张图片

此时怎么做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 β,γ,在网络中自己学习
李宏毅机器学习 batch normalization_第10张图片

test怎么做?

  • test阶段没有batch, μ , σ \mu,\sigma μ,σ怎么找?
    李宏毅机器学习 batch normalization_第11张图片
  • 一种理想方法是:在训练过程中我们计算每个batch的μ和σ是为了代替整个training data的平均值和标准差,所以我们在测试的时候也可以采用整个training data的平均值和标准差。但是可能training data很大,去计算平均值和方差并不方便;也有可能training data是分batch进入的,没有保存整体数据,没办法计算平均值和方差
  • 实际操作:将训练过程中所有batch的μ和σ都保存下来,然后按权重求和得到用于testing的μ和σ ,由于随着update,accuracy会不断增大,所以一般我们会给后面的μ和σ更大的权重
    李宏毅机器学习 batch normalization_第12张图片李宏毅机器学习 batch normalization_第13张图片

batch normalization的好处

  • 解决了Internal Covariate Shift的问题,使得网络训练可以设置更大的learning rate,从而可以减少网络训练时间
  • 在一定程度上可以防止gradient vanish
  • 减小参数的初始化对网络学习的影响,例如某层参数的初始化扩大K倍,那对应的这一层的输出也增大K倍,但是这层的输出做了BN之后的输出保持不变
  • BN会减少regularization的需求,在一定程度上对抗overfitting
    李宏毅机器学习 batch normalization_第14张图片

你可能感兴趣的:(李宏毅机器学习)