1. 程式人生 > >Batch Normalization反方向傳播求導

Batch Normalization反方向傳播求導

作者給出的批標準化的演算法如下:
這裡寫圖片描述
演算法中的ε是一個常量,為了保證數值的穩定性

反向傳播求梯度:

因為:

$${y^{(k)}} = {\gamma ^{(k)}}{\widehat x^{(k)}} + {\beta ^{(k)}}$$
所以:
$${{\partial l} \over {\partial {{\widehat x}_i}}} = {{\partial l} \over {\partial {y_i}}}\gamma $$
因為:
$${\widehat x_i} = {{{x_i} - {\mu _B}} \over {\sqrt {\sigma _B^2 + \varepsilon } }}$$
所以:
$${{\partial l} \over {\partial \sigma _B^2}} = {\sum\limits_{i = 1}^m {{{\partial l} \over {\partial {{\widehat x}_i}}}({x_i} - {u_B}){{ - 1} \over 2}(\sigma _B^2 + \varepsilon )} ^{ - {3 \over 2}}}$$
$${{\partial l} \over {\partial {u_B}}} = \sum\limits_{{\rm{i = 1}}}^m {{{\partial l} \over {\partial {{\widehat x}_i}}}} {{ - 1} \over {\sqrt {\sigma _B^2 + \varepsilon } }}$$
因為:
$${\mu _B} = {1 \over m}\sum\limits_{i = 1}^m {{x_i}} $$
$$\sigma _B^2 = {1 \over m}\sum\limits_{i = 1}^m {({x_i}}  - {\mu _B}{)^2}$$
所以:
$${{\partial l} \over {\partial {x_i}}} = {{\partial l} \over {\partial {{\widehat x}_i}}}{1 \over {\sqrt {\sigma _B^2 + \varepsilon } }} + {{\partial l} \over {\partial \sigma _B^2}}{{2({x_i} - {\mu _B})} \over m} + {{\partial l} \over {\partial {u_B}}}{1 \over m}$$
所以:
$${{\partial l} \over {\partial \gamma }} = \sum\limits_{i = 1}^m {{{\partial l} \over {\partial {y_i}}}} {\widehat x_i}$$
$${{\partial l} \over {\partial \beta }} = \sum\limits_{i = 1}^m {{{\partial l} \over {\partial {y_i}}}} $$
對於BN變換是可微分的,隨著網路的訓練,網路層可以持續學到輸入的分佈。

BN網路的訓練和推斷

按照BN方法,輸入資料x會經過變化得到BN(x),然後可以通過隨機梯度下降進行訓練,標準化是在mini-batch上所以是非常高效的。 但是對於推斷我們希望輸出只取決於輸入,而對於輸入只有一個例項資料,無法得到mini-batch的其他例項,就無法求對應的均值和方差了。 可以通過從所有訓練例項中獲得的統計量來**代替**mini-batch中m個訓練例項獲得統計量均值和方差 我們對每個mini-batch做標準化,可以對記住每個mini-batch的B,然後得到全域性統計量

$$E[x] \leftarrow {E_B}[{\mu _B}]$$
$$Var[x] \leftarrow {m \over {m - 1}}{E_B}[\sigma _B^2]$$
(這裡方差採用的是無偏方差估計) 所以推斷採用BN的方式為:
$$\eqalign{  & y = \gamma {{x - E(x)} \over {\sqrt {Var[x] + \varepsilon } }} + \beta   \cr   & {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt}  = {\gamma  \over {\sqrt {Var[x] + \varepsilon } }}x + (\beta  - {{\gamma E[x]} \over {\sqrt {Var[x] + \varepsilon } }}) \cr} $$
作者給出的完整演算法:
這裡寫圖片描述

實驗

最後給出的實驗可以看出使用BN的方式訓練精準度很高而且很穩定。

這裡寫圖片描述