深度学习中的Normalization

最近入坑炼丹,用pytorch各种搭积木,感天地之灵气,吸日月之精华。。。

一顿操作猛如虎,再看输出就想哭。

现象:模型训练很不稳定,运气好的时候能收敛,运气差点结果直接飞掉

方案:偶尔看到pytorch中的Normalization layers,后来加了个bn层,效果出人意料的好!

https://pytorch.org/docs/stable/nn.html#normalization-layers

不仅好奇,怎么做到的,真是牛掰格拉斯啊!!

查询了各种资料,对于normalization 解释最直观透彻的,还是这篇:https://zhuanlan.zhihu.com/p/33173246

 

提取一下关键点

  1. BN 的转换是针对单个神经元可训练的——不同神经元的输入经过再平移和再缩放后分布在不同的区间,而 LN 对于一整层的神经元训练得到同一个转换——所有的输入都在同一个区间范围内。如果不同输入特征不属于相似的类别(比如颜色和大小),那么 LN 的处理可能会降低模型的表达能力。
  2. BN 和 LN 是用输入的特征数据的方差对输入数据进行 scale,而 WN 则是用 神经元的权重的欧氏范式对输入数据进行 scale。虽然在原始方法中分别进行的是特征数据规范化和参数的规范化,但本质上都实现了对数据的规范化,只是用于 scale 的参数来源不同。 
  3. 下层的权重值越大,其梯度就越小。这样,参数的变化就越稳定,相当于实现了参数正则化的效果,避免参数的大幅震荡,提高网络的泛化性能。

 

补充一下个人理解:

  1. 万变不离其踪,归一化的最终目的,还是让大家“统一标准”;统一之后,不管是训练速度,还鲁棒性都会好一些。(直观感受:统一规范好管理)
  2. 从公式角度看,各种normalization是对公式中的不同部分做归一化,或者w或者x或者<w, x>的计算方式
  3. 对于针对x的归一化,从处理过程看,是从不同方向的“统一”,盗图:在这里插入图片描述

 

实践经验:

  1. 使用bn,batchsize最好稍大点,并且做全局shuffle, 否则效果会差很多。
  2. 待续。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值