吳恩達深度學習筆記(51)-歸一化網絡的激活函數(重要!)

歸一化網絡的激活函數(Normalizing activations in a network)

在深度學習興起後,最重要的一個思想是它的一種算法,叫做

Batch歸一化,由Sergey loffe和Christian Szegedy兩位研究者創造。

Batch歸一化會使你的參數搜索問題變得很容易,使神經網絡對超參數的選擇更加穩定,超參數的範圍會更加龐大,工作效果也很好,也會使你的訓練更加容易,甚至是深層網絡。

讓我們來看看Batch歸一化是怎麼起作用的吧。

吳恩達深度學習筆記(51)-歸一化網絡的激活函數(重要!)

訓練一個模型,比如logistic迴歸時,你也許會記得,歸一化輸入特徵可以加快學習過程。你計算了平均值,從訓練集中減去平均值,計算了方差,接著根據方差歸一化你的數據集,在之前的筆記中我們看到,這是如何把學習問題的輪廓,從很長的東西,變成更圓的東西,更易於算法優化。所以這是有效的,對logistic迴歸和神經網絡的歸一化輸入特徵值而言。

吳恩達深度學習筆記(51)-歸一化網絡的激活函數(重要!)

那麼更深的模型呢?

你不僅輸入了特徵值x,而且這層有激活值a^([1]),這層有激活值a^([2])等等。

如果你想訓練這些參數,比如w^([3]),b^([3]),那歸一化a^([2])的平均值和方差豈不是很好?

以便使w^([3]),b^([3])的訓練更有效率。

在logistic迴歸的例子中,我們看到了如何歸一化x_1,x_2,x_3,會幫助你更有效的訓練w和b。

所以問題來了,對任何一個隱藏層而言,我們能否歸一化a值,在此例中,比如說a^([2])的值,但可以是任何隱藏層的,以更快的速度訓練w^([3]),b^([3]),因為a^([2])是下一層的輸入值,所以就會影響w^([3]),b^([3])的訓練。

簡單來說,這就是Batch歸一化的作用。儘管嚴格來說,我們真正歸一化的不是a^([2]),而是z^([2]),深度學習文獻中有一些爭論,關於在激活函數之前是否應該將值z^([2])歸一化,或是否應該在應用激活函數a^([2])後再規範值

實踐中,經常做的是歸一化z^([2])(意思就是在上一層網絡淨輸出時進行歸一化,而不是在激活函數激活之後再進行歸一化)

,所以這就是我介紹的版本,我推薦其為默認選擇,那下面就是Batch歸一化的使用方法。

吳恩達深度學習筆記(51)-歸一化網絡的激活函數(重要!)

在神經網絡中,已知一些中間值,假設你有一些隱藏單元值,從z^((1))到z^((m)),這些來源於隱藏層,所以這樣寫會更準確,即z^([l](i))為隱藏層,i從1到m,但這樣書寫,我要省略l及方括號,以便簡化這一行的符號。

所以已知這些值,如下,你要計算平均值,強調一下,所有這些都是針對l層,但我省略l及方括號,然後用正如你常用的那個公式計算方差,接著,你會取每個z^((i))值,使其規範化,方法如下,減去均值再除以標準偏差,為了使數值穩定,通常將ε作為分母,以防σ=0的情況。

吳恩達深度學習筆記(51)-歸一化網絡的激活函數(重要!)

所以現在我們已把這些z值標準化,化為含平均值0和標準單位方差,所以z的每一個分量都含有平均值0和方差1,但我們不想讓隱藏單元總是含有平均值0和方差1,也許隱藏單元有了不同的分佈會有意義,所以我們所要做的就是計算,

吳恩達深度學習筆記(51)-歸一化網絡的激活函數(重要!)

γ和β是你模型的學習參數

所以我們使用梯度下降或一些其它類似梯度下降的算法,比如Momentum或者Nesterov,Adam,你會更新γ和β,正如更新神經網絡的權重一樣。

吳恩達深度學習筆記(51)-歸一化網絡的激活函數(重要!)

請注意γ和β的作用是,你可以隨意設置̃z^((i))的平均值,事實上,如果γ=√(σ^2+ε),如果γ等於這個分母項(z_norm^((i))=(z^((i))-μ)/√(σ^2+ε)中的分母),β等於μ,這裡的這個值是z_norm^((i))=(z^((i))-μ)/√(σ^2+ε)中的μ,那麼γz_norm^((i))+β的作用在於,它會精確轉化這個方程,如果這些成立(γ=√(σ^2+ε),β=μ),那麼̃z^((i))=z^((i))。

吳恩達深度學習筆記(51)-歸一化網絡的激活函數(重要!)

通過對γ和β合理設定,規範化過程,即這四個等式,從根本來說,只是計算恆等函數,通過賦予γ和β其它值,可以使你構造含其它平均值和方差的隱藏單元值。

吳恩達深度學習筆記(51)-歸一化網絡的激活函數(重要!)

所以,在網絡匹配這個單元的方式,之前可能是用z^((1)),z^((2))等等,現在則會用̃z^((i))取代z^((i)),方便神經網絡中的後續計算。如果你想放回[l],以清楚的表明它位於哪層,你可以把它放這。

所以希望你學到的是,歸一化輸入特徵X是怎樣有助於神經網絡中的學習,Batch歸一化的作用是它適用的歸一化過程,不只是輸入層,甚至同樣適用於神經網絡中的深度隱藏層

應用Batch歸一化了一些隱藏單元值中的平均值和方差,不過訓練輸入和這些隱藏單元值的一個區別是,你也許不想隱藏單元值必須是平均值0和方差1。

吳恩達深度學習筆記(51)-歸一化網絡的激活函數(重要!)

比如,如果你有sigmoid激活函數,你不想讓你的值總是全部集中在這裡(就是上圖中的中間部分),你想使它們有更大的方差,或不是0的平均值,以便更好的利用非線性的sigmoid函數,而不是使所有的值都集中於這個線性版本中,這就是為什麼有了γ和β兩個參數後,你可以確保所有的z^((i))值可以是你想賦予的任意值,或者它的作用是保證隱藏的單元已使均值和方差標準化。那裡,均值和方差由兩參數控制,即γ和β,學習算法可以設置為任何值,所以它真正的作用是,使隱藏單元值的均值和方差標準化,即z^((i))有固定的均值和方差,均值和方差可以是0和1,也可以是其它值,它是由γ和β兩參數控制的。

希望你能學會怎樣使用Batch歸一化,至少就神經網絡的單一層而言,在下一個筆記中,我會教你如何將Batch歸一化與神經網絡甚至是深度神經網絡相匹配。

對於神經網絡許多不同層而言,又該如何使它適用,之後,我會告訴你,Batch歸一化有助於訓練神經網絡的原因。所以如果覺得Batch歸一化起作用的原因還顯得有點神秘,那跟著我走,在接下來的兩個筆記中,我們會弄清楚。


分享到:


相關文章: