Caffe Batch Normalization推导2

Caffe Batch Normalization推导

首先仔细看过Caffe的BN层实现的话会发现caffe的BN层与论文的是不太一致的。

没有了 γ 和 β 。(因为如果有需要的话可以再加一个scale layer。)我这里将推导出给caffe的backward注释一样的diff公式。
那么我们先来定义一下问题。若 L 是网络的损失函数,那么就是已知 Lyi , yi=xix¯σ2+ϵ√ , x¯=1mmi=1xi , σ2=1mmi=1(xix¯)2 ,求 Lxi 。
推导的过程基本上就是链式规则的应用了。具体过程如下:

 

Lxi=j=1mLyjyjxi

 

 

x¯xi=1m

 

 

σ2xi=1m(j=1m(2(xjx¯)(1m))+2(xix¯))

 

由于 mj=1(2(xjx¯)(1m)))=0 ,所以 σ2xi=2m(xix¯) 。

 

yjxi=12(σ2+ϵ)32(xjx¯)σ2xi1m(σ2+ϵ)12ij

 

 

yjxi=12(σ2+ϵ)32(xjx¯)σ2xi+(11m)(σ2+ϵ)12i=j

 

然后,我们将 yjxi 代入 Lxi=mj=1Lyjyjxi 

 

Lxi=j=1&jimLyj(12(σ2+ϵ)32(xjx¯)σ2xi1m(σ2+ϵ)12)+Lyi(12(σ2+ϵ)32(xjx¯)σ2xi+(11m)(σ2+ϵ)12)

 

我们注意到 j=i 的情况和 ji 的情况只是多了一个 (σ2+ϵ)12 。因此我们可以合并这两个情况,变成以下式子

 

Lxi=Lyi(σ2+ϵ)12+j=1mLyj(1m(σ2+ϵ)32(xjx¯)(xix¯)1m(σ2+ϵ)12)

 

然后我们提出公因式 (σ2+ϵ)12 ,则

 

Lxi=(σ2+ϵ)12(Lyi1mj=1mLyj1mj=1mLyj(xjx¯)(xix¯)(σ2+ϵ)12(σ2+ϵ)12)

 

我故意的拆分了 (σ2+ϵ) ,这是因为 yi=xix¯σ2+ϵ√ ,我们可以将它代入到这个式子中,这样,这个式子就变成了

 

Lxi=(σ2+ϵ)12(Lyi1mj=1mLyj(1mj=1mLyjyj)yi)

 

至此我们得到了跟caffe的batch_norm_layer.cpp第187行一样的式子(只不过它用的矩阵的形式)

 

1 // if Y = (X-mean(X))/(sqrt(var(X)+eps)), then
2 //
3 // dE(Y)/dX =
4 //   (dE/dY - mean(dE/dY) - mean(dE/dY \cdot Y) \cdot Y)
5 //     ./ sqrt(var(X) + eps)
6 //
7 // where \cdot and ./ are hadamard product and elementwise division,
8 // respectively, dE/dY is the top diff, and mean/var/sum are all computed
9 // along all dimensions except the channels dimension.  In the above
10 // equation, the operations allow for expansion (i.e. broadcast) along all
11 // dimensions except the channels dimension where required.

 

posted @ 2018-03-19 11:20  菜鸡一枚  阅读(137)  评论(0编辑  收藏  举报