深度深度网络设计中各种归一化方法总结

前言

狭义的归一化指对输入特征进行归一化, 这在经典的机器学习中用的比较多,目的是为了消除不同特征量纲的差异。常用的归一化方法包括: Z-score, Min-Max scaler等等。

这里,我们主要总结深度学习中的一些归一化的技巧。深度学习中的归一化已经不仅仅局限于输入数据的归一化,而是网络各个层的归一化,因为每个层相当于一个非线性变换, 随着网络层数的加深,数据分布会发生较大变化(即internal covariate shift)。归一化实际上起到正则化的作用,能够大大促进网络的训练和收敛, 减轻了对参数处置的敏感性, 允许模型以更大的学习率进行训练。

批量归一化 BN

Batch Normalization顾名思义就是对每个min-batch samples进行归一化,

下图为一个BN变换的伪码, 其中 m m m为Batchsize的大小, x i x_{i} xi实际上就是就是第i个样本feed forward到某个层的某个神经元节点的input(也就是上一层的输出的加权和)
可以看到:
1.BN操作实在Batch维度上进行的,具体:每个Batch包含m个样本,基于这m个samples为每个feature独立计算均值和方差,然后进行类似于Z-Score的操作,最后通过trainable parameters进行伸缩和平移,目的是为了保证BN变换为恒等变换

实际上BN操作可以看作一个独立的网络层。
在这里插入图片描述
下面是BN变换更加抽象的一种写法,增益参数 g i l g_{i}^{l} gil, 这里的 a i l a_{i}^{l} ail表示第l层的第i个节点的输入,它实际上就是由上一层输出 h l h_{l} hl经过Linear projection得到:
在这里插入图片描述
在这里插入图片描述

那么在网络训练和推断的过程中如何使用BN呢?
以前是每层的输入 x x x直接作为该层的Input,有了BN以后,x首先用于计算BN的输出 y y y,然后再把y作为该层Input, 这样以来,网络修改完毕 (见下图伪码2-5)。

网络修改完成后就可以再进行训练以同时优化原始模型参数和BN操作的参数( λ , β \lambda, \beta λ,β)了。

训练完成后,就可以将其用于推断了,这里的问题是: 推断时Batch=1, 如何来估计均值和方差呢?
这里使用所有mini-batches的samples来估计均值和方差,其在整个Inference的整个过程中是保持不变的,具体:
E [ x ] ← E B [ μ B ] E[x] \leftarrow E_{B}[\mu_{B}] E[x]EB[μB]
V a r [ x ] ← m m − 1 E B [ σ B 2 ] Var[x]\leftarrow \frac{m}{m-1}E_{B}[\sigma_{B}^{2}] Var[x]m1mEB[σB2]

这样以来,对于测试样本 x x x, 它的normalized input可以估计为:
x ^ = x − E [ x ] V a r [ x ] + ϵ \hat{x}=\frac{x-E[x]}{\sqrt{Var[x]+\epsilon }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MasterQKK 被注册

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值