3-7 測試時的 Batch Norm


測試時的 Batch Norm( Batch Norm at test time)

Batch 歸一化將你的數據以 mini-batch 的形式逐一處理,但在測試時,你可能需要對每個樣本逐一處理:

$u = \frac{1}{m}\sum\limits_i {{z^{(i)}}}$

${\sigma ^2} = \frac{1}{m}\sum\limits_i {({z^{(i)}}}  - u{)^2}$

$z_{norm}^{(i)} = \frac{{{z^{(i)}} - u}}{{\sqrt {{\sigma ^2} + \varepsilon } }}$

${{\tilde z}^{(i)}} = \gamma z_{norm}^{(i)} + \beta$

在訓練時,這些就是用來執行 Batch 歸一化的等式。在一個 mini-batch 中,你將 mini-batch 的${z^{(i)}}$ 值求和,計算均值,所以這里你只把一個 mini-batch 中的樣本都加起來,我用 m 來表示這個 mini-batch 中的樣本數量,而不是整個訓練集。然后計算方差,再計算$z_{norm}^{(i)}$ 即用均值和標准差來調整,加上$\varepsilon$是為了數值穩定性。${\tilde z}$是用$\gamma$和$\beta$再次調整${z_{norm}}$得到的。

請注意用於調節計算的u和${\sigma ^2}$是在整個 mini-batch 上進行計算,但是在測試時,你可能不能將一個 mini-batch 中的 6428 或 2056 個樣本同時處理,因此你需要用其它方式來得到u和${\sigma ^2}$,而且如果你只有一個樣本,一個樣本的均值和方差沒有意義。那么實際上,為了將你的神經網絡運用於測試,就需要單獨估算u和${\sigma ^2}$,在典型的 Batch 歸一化運用中,你需要用一個指數加權平均來估算,這個平均數涵蓋了所有 mini-batch:

選擇l層為例:

第一個 mini-batch 和l層的的u為:${u^{\left\{ 1 \right\}\left[ l \right]}}$

第二個 mini-batch 和l層的的u為:${u^{\left\{ 2 \right\}\left[ 2 \right]}}$

依次類推。

可以采用指數加權平均的方法來追蹤你看到的這個均值向量的最新平均值。同樣的,你可以用指數加權平均來追蹤你在這一層的第一個 mini-batch 中所見的${\sigma ^2}$的值,以及第二個 mini-batch 中所見的${\sigma ^2}$的值。因此在用不同的 mini-batch 訓練神經網絡的同時,能夠得到你所查看的每一層的u和${\sigma ^2}$的實時數值。

最后在測試時,計算等式:

$z_{norm}^{(i)} = \frac{{{z^{(i)}} - u}}{{\sqrt {{\sigma ^2} + \varepsilon } }}$

只需要帶入你的z值,使用u和${\sigma ^2}$的加權平均。

進而計算式子:

${{\tilde z}^{(i)}} = \gamma z_{norm}^{(i)} + \beta$

總結一下就是,在訓練時u和${\sigma ^2}$是在整個 mini-batch 上計算出來的包含了像是 64 或28 或其它一定數量的樣本,但在測試時,你可能需要逐一處理樣本,方法是根據你的訓練集估算u和${\sigma ^2}$,估算的方式有很多種,理論上你可以在最終的網絡中運行整個訓練集來得到u和${\sigma ^2}$但在實際操作中,我們通常運用指數加權平均(也叫做流動平均)來追蹤在訓練過程中你看到的u和${\sigma ^2}$。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM