Batch Normalization的Darknet代码解析

Batch_Norm公式推导与Darknet代码理解

论文:《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

URL:https://arxiv.org/pdf/1502.03167.pdf

1. Batch_Norm的正向推导

2. Batch_Norm反向推导

其中对均值与xi的求导会用到复合函数的求导计算:

3. darknet代码

3.1 batch_norm的正向传播代码

(1) 求均值

(2)求方差

(3) 归一化

(4) 前向传播

这里存在一个滑动均值与滑动方差的概念:

滑动平均可以用来估计变量的局部均值,使得表里的更新与一段时间内的历史取值有关。变量vt时刻记为v_{t}\Theta_{t}为变量vt时刻的取值,即在不使用滑动平均模型时v_{t}=\Theta_{t},在使用滑动平均模型后,v_{t}的更新公式如下:

其中beta一般取0.9,0.99,0.999等。函数scal_cpu计算的是\beta\cdot v_{t-1},axpy_cpu计算的是v_{t}, l.mean表示\theta_{t},l.rolling_mean表示上一行计算的\beta\cdot v_{t-1}

3.2 batch_norm的反向传播代码

根据第二部分反向传播公式,依次对应darknet中的代码。

(1) 对\gamma求导

(2)对方差\sigma_{B}^2求导

(3) 对均值\mu_{B}求导

这里存在的问题为什么darknet中会丢弃第二项?很多博客求导推导的时候只有第一项,没有第二项,也没有解释原因。

原因:第二项存在\sum_{i=1}^m (x_{i} - \mu_{B}),这项的意义表示在一个样本空间中,每个样本减去该样本空间的均值,然后再求各个差值的和必然为0,所以darknet把第二项丢掉了。

(4) 对x_{i}求导

(5)  反向传播

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值