3.7 测试时的 BatchNorm-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
| 3.6 Batch Norm 為什么奏效 | 回到目錄 | 3.8 Softmax 回歸 |
測試時的 BatchNorm (Batch Norm at Test Time)
Batch歸一化將你的數據以mini-batch的形式逐一處理,但在測試時,你可能需要對每個樣本逐一處理,我們來看一下怎樣調整你的網絡來做到這一點。
回想一下,在訓練時,這些就是用來執行Batch歸一化的等式。在一個mini-batch中,你將mini-batch的 z(i)z^{(i)}z(i) 值求和,計算均值,所以這里你只把一個mini-batch中的樣本都加起來,我用 mmm 來表示這個mini-batch中的樣本數量,而不是整個訓練集。然后計算方差,再算 znorm(i)z^{(i)}_{norm}znorm(i)? ,即用均值和標準差來調整,加上 ?\epsilon? 是為了數值穩定性。 z~\tilde{z}z~ 是用 γ\gammaγ 和 β\betaβ 再次調整 znormz_{norm}znorm? 得到的。
請注意用于調節計算的 μ\muμ 和 σ2\sigma^2σ2 是在整個mini-batch上進行計算,但是在測試時,你可能不能將一個mini-batch中的6428或2056個樣本同時處理,因此你需要用其它方式來得到 μ\muμ 和 σ2\sigma^2σ2 ,而且如果你只有一個樣本,一個樣本的均值和方差沒有意義。那么實際上,為了將你的神經網絡運用于測試,就需要單獨估算 μ\muμ 和 σ2\sigma^2σ2 ,在典型的Batch歸一化運用中,你需要用一個指數加權平均來估算,這個平均數涵蓋了所有mini-batch,接下來我會具體解釋。
我們選擇 lll 層,假設我們有mini-batch, X[1],X[2],X[3]……X^{[1]},X^{[2]},X^{[3]}……X[1],X[2],X[3]…… 以及對應的 yyy 值等等,那么在為 lll 層訓練 X{1}X^{\{1\}}X{1} 時,你就得到了 μ[l]\mu^{[l]}μ[l] ,我還是把它寫做第一個mini-batch和這一層的 μ\muμ 吧,( μ[l]→μ{1}[l]\mu^{[l]}\rightarrow\mu^{\{1\}[l]}μ[l]→μ{1}[l] )。當你訓練第二個mini-batch,在這一層和這個mini-batch中,你就會得到第二個 μ\muμ ( μ{2}[l]\mu^{\{2\}[l]}μ{2}[l] )值。然后在這一隱藏層的第三個mini-batch,你得到了第三個 μ\muμ ( μ{3}[l]\mu^{\{3\}[l]}μ{3}[l] )值。正如我們之前用的指數加權平均來計算 θ1,θ2,θ3\theta_1,\theta_2,\theta_3θ1?,θ2?,θ3? 的均值,當時是試著計算當前氣溫的指數加權平均,你會這樣來追蹤你看到的這個均值向量的最新平均值,于是這個指數加權平均就成了你對這一隱藏層的 zzz 均值的估值。同樣的,你可以用指數加權平均來追蹤你在這一層的第一個mini-batch中所見的 σ2\sigma^2σ2 的值,以及第二個mini-batch中所見的 σ2\sigma^2σ2 的值等等。因此在用不同的mini-batch訓練神經網絡的同時,能夠得到你所查看的每一層的 μ\muμ 和 σ2\sigma^2σ2 的平均數的實時數值。
最后在測試時,對應這個等式( znorm(i)=z(i)?μσ2+?z_{norm}^{(i)}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^2+\epsilon}}znorm(i)?=σ2+??z(i)?μ? ),你只需要用你的 zzz 值來計算 znorm(i)z_{norm}^{(i)}znorm(i)? ,用 μ\muμ 和 σ2\sigma^2σ2 的指數加權平均,用你手頭的最新數值來做調整,然后你可以用左邊我們剛算出來的 znormz_{norm}znorm? 和你在神經網絡訓練過程中得到的 β\betaβ 和 γ\gammaγ 參數來計算你那個測試樣本的 z~\tilde{z}z~ 值。
總結一下就是,在訓練時, μ\muμ 和 σ2\sigma^2σ2 是在整個mini-batch上計算出來的包含了像是64或28或其它一定數量的樣本,但在測試時,你可能需要逐一處理樣本,方法是根據你的訓練集估算 μ\muμ 和 σ2\sigma^2σ2 ,估算的方式有很多種,理論上你可以在最終的網絡中運行整個訓練集來得到 μ\muμ 和 σ2\sigma^2σ2 ,但在實際操作中,我們通常運用指數加權平均來追蹤在訓練過程中你看到的 μ\muμ 和 σ2\sigma^2σ2 的值。還可以用指數加權平均,有時也叫做流動平均來粗略估算 μ\muμ 和 σ2\sigma^2σ2 ,然后在測試中使用 μ\muμ 和 σ2\sigma^2σ2 的值來進行你所需要的隱藏單元 zzz 值的調整。在實踐中,不管你用什么方式估算 μ\muμ 和 σ2\sigma^2σ2 ,這套過程都是比較穩健的,因此我不太會擔心你具體的操作方式,而且如果你使用的是某種深度學習框架,通常會有默認的估算 μ\muμ 和 σ2\sigma^2σ2 的方式,應該一樣會起到比較好的效果。但在實踐中,任何合理的估算你的隱藏單元 zzz 值的均值和方差的方式,在測試中應該都會有效。
Batch歸一化就講到這里,使用Batch歸一化,你能夠訓練更深的網絡,讓你的學習算法運行速度更快,在結束這周的課程之前,我還想和你們分享一些關于深度學習框架的想法,讓我們在下一段視頻中一起討論這個話題。
課程PPT
| 3.6 Batch Norm 為什么奏效 | 回到目錄 | 3.8 Softmax 回歸 |
總結
以上是生活随笔為你收集整理的3.7 测试时的 BatchNorm-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3.6 BatchNorm 为什么起作用
- 下一篇: 3.8 Softmax 回归-深度学习第