3.4 归一化网络的激活函数-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
| 3.3 超參數訓練的實踐: Pandas vs. Caviar | 回到目錄 | 3.5 將 Batch Norm 擬合進神經網絡 |
歸一化網絡的激活函數 (Normalizing Activations in a Network)
在深度學習興起后,最重要的一個思想是它的一種算法,叫做Batch歸一化,由Sergey loffe和Christian Szegedy兩位研究者創造。Batch歸一化會使你的參數搜索問題變得很容易,使神經網絡對超參數的選擇更加穩定,超參數的范圍會更加龐大,工作效果也很好,也會是你的訓練更加容易,甚至是深層網絡。讓我們來看看Batch歸一化是怎么起作用的吧。
當訓練一個模型,比如logistic回歸時,你也許會記得,歸一化輸入特征可以加快學習過程。你計算了平均值,從訓練集中減去平均值,計算了方差,接著根據方差歸一化你的數據集,在之前的視頻中我們看到,這是如何把學習問題的輪廓,從很長的東西,變成更圓的東西,更易于算法優化。所以這是有效的,對logistic回歸和神經網絡的歸一化輸入特征值而言。
那么更深的模型呢?你不僅輸入了特征值 xxx ,而且這層有激活值 a[1]a^{[1]}a[1] ,這層有激活值 a[2]a^{[2]}a[2] 等等。如果你想訓練這些參數,比如, w[3],b[3]w^{[3]},b^{[3]}w[3],b[3] 那歸一化 a[2]a^{[2]}a[2] 的平均值和方差豈不是很好?以便使 w[3],b[3]w^{[3]},b^{[3]}w[3],b[3] 的訓練更有效率。在logistic回歸的例子中,我們看到了如何歸一化 x1,x2,x3x_1,x_2,x_3x1?,x2?,x3? ,會幫助你更有效的訓練 www 和 bbb 。
所以問題來了,對任何一個隱藏層而言,我們能否歸一化 aaa 值,在此例中,比如說 a[2]a^{[2]}a[2] 的值,但可以是任何隱藏層的,以更快的速度訓練, w[3],b[3]w^{[3]},b^{[3]}w[3],b[3] 因為 a[2]a^{[2]}a[2] 是下一層的輸入值,所以就會影響 w[3],b[3]w^{[3]},b^{[3]}w[3],b[3] 的訓練。簡單來說,這就是Batch歸一化的作用。盡管嚴格來說,我們真正歸一化的不是 a[2]a^{[2]}a[2] ,而是 z[2]z^{[2]}z[2] ,深度學習文獻中有一些爭論,關于在激活函數之前是否應該將值 z[2]z^{[2]}z[2] 歸一化,或是否應該在應用激活函數 a[2]a^{[2]}a[2] 后再規范值。實踐中,經常做的是歸一化 z[2]z^{[2]}z[2] ,所以這就是我介紹的版本,我推薦其為默認選擇,那下面就是Batch歸一化的使用方法。
在神經網絡中,已知一些中間值,假設你有一些隱藏單元值,從 z(1)z^{(1)}z(1) 到 z(m)z^{(m)}z(m) ,這些來源于隱藏層,所以這樣寫會更準確,即 z[l](i)z^{[l](i)}z[l](i) 為隱藏層, iii 從1到 mmm ,但這樣書寫,我要省略 lll 及方括號,以便簡化這一行的符號。所以已知這些值,如下,你要計算平均值,強調一下,所有這些都是針對 lll 層,但我省略 lll 及方括號,然后用正如你常用的那個公式計算方差,接著,你會取每個 z(i)z^{(i)}z(i) 值,使其規范化,方法如下,減去均值再除以標準偏差,為了使數值穩定,通常將 ?\epsilon? 作為分母,以防 σ=0\sigma=0σ=0 的情況。
所以現在我們已把這些 zzz 值標準化,化為含平均值0和標準單位方差,所以 zzz 的每一個分量都含有平均值0和方差1,但我們不想讓隱藏單元總是含有平均值0和方差1,也許隱藏單元有了不同的分布會有意義,所以我們所要做的就是計算,我們稱之為 z~(i)\tilde{z}^{(i)}z~(i) , z~(i)=γznorm(i)+β\tilde{z}^{(i)}=\gamma z^{(i)}_{norm}+\betaz~(i)=γznorm(i)?+β ,這里 γ\gammaγ 和 β\betaβ 是你模型的學習參數,所以我們使用梯度下降或一些其它類似梯度下降的算法,比如Momentum或者Nesterov,Adam,你會更新 γ\gammaγ 和 β\betaβ ,正如更新神經網絡的權重一樣。
請注意 γ\gammaγ 和 β\betaβ 的作用是,你可以隨意設置 z~(i)\tilde{z}^{(i)}z~(i) 的平均值,事實上,如果 γ=σ2+?\gamma=\sqrt{\sigma^2+\epsilon}γ=σ2+?? ,如果 γ\gammaγ 等于這個分母項( znorm(i)=z(i)?μσ2+?z^{(i)}_{norm}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^2+\epsilon}}znorm(i)?=σ2+??z(i)?μ? 中的分母), β\betaβ 等于 μ\muμ ,這里的這個值是 znorm(i)=z(i)?μσ2+?z^{(i)}_{norm}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^2+\epsilon}}znorm(i)?=σ2+??z(i)?μ? 中的 μ\muμ ,那么 γznorm(i)+β\gamma z^{(i)}_{norm}+\betaγznorm(i)?+β 的作用在于,它會精確轉化這個方程,如果這些成立( γ=σ2+?,β=μ\gamma=\sqrt{\sigma^2+\epsilon},\beta=\muγ=σ2+??,β=μ ),那么 z~(i)=z(i)\tilde{z}^{(i)}=z^{(i)}z~(i)=z(i) 。
通過對 γ\gammaγ 和 β\betaβ 合理設定,規范化過程,即這四個等式,從根本來說,只是計算恒等函數,通過賦予 γ\gammaγ 和 β\betaβ 其它值,可以使你構造含其它平均值和方差的隱藏單元值。
所以,在網絡匹配這個單元的方式,之前可能是用 z(1),z(2)z^{(1)},z^{(2)}z(1),z(2) 等等,現在則會用 z~(i)\tilde{z}^{(i)}z~(i) 取代 z(i)z^{(i)}z(i) ,方便神經網絡中的后續計算。如果你想放回 [l][l][l] ,以清楚的表明它位于哪層,你可以把它放這。
所以我希望你學到的是,歸一化輸入特征 XXX 是怎樣有助于神經網絡中的學習,Batch歸一化的作用是它適用的歸一化過程,不只是輸入層,甚至同樣適用于神經網絡中的深度隱藏層。你應用Batch歸一化了一些隱藏單元值中的平均值和方差,不過訓練輸入和這些隱藏單元值的一個區別是,你也許不想隱藏單元值必須是平均值0和方差1。
比如,如果你有sigmoid激活函數,你不想讓你的值總是全部集中在這里,你想使它們有更大的方差,或不是0的平均值,以便更好的利用非線性的sigmoid函數,而不是使所有的值都集中于這個線性版本中,這就是為什么有了 γ\gammaγ 和 β\betaβ 兩個參數后,你可以確保所有的 z(i)z^{(i)}z(i) 值可以是你想賦予的任意值,或者它的作用是保證隱藏的單元已使均值和方差標準化。那里,均值和方差由兩參數控制,即 γ\gammaγ 和 β\betaβ ,學習算法可以設置為任何值,所以它真正的作用是,使隱藏單元值的均值和方差標準化,即 z(i)z^{(i)}z(i) 有固定的均值和方差,均值和方差可以是0和1,也可以是其它值,它是由 γ\gammaγ 和 β\betaβ 兩參數控制的。
我希望你能學會怎樣使用Batch歸一化,至少就神經網絡的單一層而言,在下一個視頻中,我會教你如何將Batch歸一化與神經網絡甚至是深度神經網絡相匹配。對于神經網絡許多不同層而言,又該如何使它適用,之后,我會告訴你,Batch歸一化有助于訓練神經網絡的原因。所以如果覺得Batch歸一化起作用的原因還顯得有點神秘,那跟著我走,在接下來的兩個視頻中,我們會弄清楚。
課程PPT
| 3.3 超參數訓練的實踐: Pandas vs. Caviar | 回到目錄 | 3.5 將 Batch Norm 擬合進神經網絡 |
總結
以上是生活随笔為你收集整理的3.4 归一化网络的激活函数-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3.3 超参数训练实战:Pandas v
- 下一篇: 3.5 将 Batch 拟合进神经网络-