神经网络量化入门--Folding BN ReLU

本文探讨了如何在神经网络量化过程中合并BatchNorm和ReLU到Conv层,以加速推理。通过Folding BatchNorm,可以将BN的运算整合到Conv中,减少计算开销。在量化时,同样可以采用相同方法,并考虑ReLU前后scale和zeropoint的一致性,以保持量化前后的一致性。最后,文章提到ReLU以外的激活函数可能不适用此合并方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇文章介绍了量化训练的基本流程,本文介绍量化中如何把 BatchNorm 和 ReLU 合并到 Conv 中。

Folding BatchNorm

BatchNorm 是 Google 提出的一种加速神经网络训练的技术,在很多网络中基本是标配。

回忆一下,BatchNorm 其实就是在每一层输出的时候做了一遍归一化操作:

其中 x i x_i xi 是网络中间某一层的激活值, μ β \mu_{\beta} μβ σ β \sigma_{\beta} σβ 分别是其均值和方差, y i y_i yi 则是过了 BN 后的输出。

一般卷积层与BN合并

Folding BatchNorm 不是量化才有的操作,在一般的网络中,为了加速网络推理,我们也可以把 BN 合并到 Conv 中。

合并的过程是这样的,假设有一个已经训练好的 Conv 和 BN:

假设 Conv 的 weight 和 bias 分别是 w w w b b b。那么卷积层的输出为:
y = ∑ i N w i x i + b (1) y=\sum_{i}^N w_i x_i + b \tag{1} y=iNwixi+b(1)
图中 BN 层的均值和标准差可以表示为 μ y \mu_{y} μy σ y \sigma_{y} σy,那么根据论文的表述,BN 层的输出为:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ y_{bn}&=\gamma…
然后我们把 (1) 代入 (2) 中可以得到:
y b n = γ σ y 2 + ϵ ( ∑ i N w i x i + b − μ y ) + β (3) y_{bn}=\frac{\gamma}{\sqrt{\sigma_y^2+\epsilon}}(\sum_{i}^N w_i x_i + b-\mu_y)+\beta \tag{3} ybn=σy2+ϵ γ(iNwix

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值