題:
神經網絡中好的初始權重是什麼?
elmes
2013-01-13 03:26:39 UTC
view on stackexchange narkive permalink

我剛剛聽說,​​從$(\ frac {-1} {\ sqrt d},\ frac {1} {\ sqrt d}} $範圍中選擇神經網絡的初始權重是一個好主意。 ,其中$ d $是給定神經元的輸入數量。假設這些集合已標準化-均值0,方差1(不知道這是否重要)。

為什麼這是個好主意?

有關初始化技術的概述,請參見[我的碩士論文,第81頁](https://arxiv.org/pdf/1707.09725.pdf#page=95)。
六 答案:
Douglas Zare
2013-01-13 05:35:49 UTC
view on stackexchange narkive permalink

我假設您正在使用邏輯神經元,並且您正在通過梯度下降/反向傳播進行訓練。

對於大的正或負輸入,邏輯函數接近於平坦。輸入為$ 2 $時的導數約為$ 1/10 $,但是輸入為$ 10 $時的導數約為$ 1/22000 $。這意味著如果邏輯神經元的輸入為$ 10 $,那麼對於給定的訓練信號,神經元將學習的$ 2200 $比輸入$ 2 $慢兩倍。

如果希望神經元快速學習,則需要產生巨大的訓練信號(例如具有交叉熵損失函數),或者希望導數較大。為了使導數變大,您可以設置初始權重,以便經常獲得在$ [-4,4] $範圍內的輸入。

您賦予的初始權重可能會或可能不會起作用。這取決於如何標準化輸入。如果將輸入歸一化為均值$ 0 $和標準差$ 1 $,則將$ d $項的隨機總和的權重統一為$(\ frac {-1} {\ sqrt {d}},\ frac {1} {\ sqrt {d}})$將具有均值$ 0 $和方差$ \ frac {1} {3} $,獨立於$ d $。您獲得$ [-4,4] $之外的款項的可能性很小。這意味著當您增加$ d $時,您不會使神經元開始飽和,從而使它們不學習。

對於未歸一化的輸入,這些權重可能無法有效避免飽和。

因此,基本上,至少應該始終考慮對數據進行規範化。您能解釋一下為何std偏差為1/3,並且輸入總和的概率在<-4,4>範圍之外的可能性有多小?
方差有一些基本屬性暗示著這一點:如果$ X $和$ Y $是獨立的,則$ \ text {Var}(X + Y)= \ text {Var}(X)+ \ text {Var}( Y)$,並且如果$ X $和$ Y $是獨立的且均值$ 0 $,則$ \ text {Var}(X * Y)= \ text {Var}(X)* \ text {Var}(Y) $。
您可以使用Chebyshev不等式估算隨機變量與均值至少有$ 12 $標準偏差的概率。在實踐中,這不是很清晰,但是確切的結果取決於分佈。
順便說一句,我算錯了。方差為$ \ frac {1} {3} $,因此標準差為$ \ sqrt {\ frac13} $。
您是否不想將權重也限制為不接近0?
“對於大的正或負輸入,邏輯函數接近平坦。輸入為...的導數。”相關主題難道不是邏輯回歸的“成本函數”的導數嗎?因此,無論權重和信號的大小如何,對數函數的導數輸入都已被邏輯函數縮放為(0,1)?
@DouglasZare我認為方差與d無關。實際上是1/3 * d。
Franck Dernoncourt
2015-12-12 09:19:54 UTC
view on stackexchange narkive permalink

[1]解決了這個問題:

首先,不應該將權重設置為零,以便在反向傳播時打破對稱性:

通常可以將偏差設置為初始化為零,但權重需要仔細初始化以打破同一層隱藏單元之間的對稱性。由於不同的輸出單元接收到不同的梯度信號,因此這種對稱破壞問題與輸出權重(進入輸出單元)無關,因此也可以將其設置為零。

一些初始化策略:

  • [2]和[3]建議通過扇入的平方根的倒數進行縮放
  • Glorot和Bengio(2010),並且使用深度學習教程扇入和扇出的組合:
    • 用於雙曲正切單位:使用$ r = \ sqrt {\ frac {6} {\ text {fan- in} + \ text {fan-out}}} $(扇入是單位的輸入數量)。
    • 對於S形單位:使用$ r採樣Uniform(-r,r) = 4 \ sqrt {\ frac {6} {\ text {fan-in} + \ text {fan-out}}} $(fan-in是單元的輸入數量)。
  • 對於RBM,零均值高斯,標準偏差約為0.1或0.01的小高斯效果很好(Hinton,2010年)以初始化權重。
  • 正交隨機矩陣初始化,即 W = np.rand om.randn(ndim,ndim); u,s,v = np.linalg.svd(W),然後使用 u 作為您的初始化矩陣。

此外,無監督的預訓練在某些情況下可能會有所幫助:

一個重要的選擇是,是否應該使用無監督的預訓練(以及要使用哪種無監督的特徵學習算法)來初始化參數。在大多數情況下,我們發現無監督的預訓練可以幫助您,很少受到傷害,但這當然意味著額外的訓練時間和其他超參數。

一些ANN庫也有一些有趣的地方清單,例如千層面

  Constant([val])用恆定值初始化權重。Normal([std,mean])從高斯分佈中採樣初始權重。Uniform([range,std,mean])從均值中採樣初始權重distribution.Glorot(initializer [,gain,c01b])Glorot權重初始化.GlorotNormal([gain,c01b])具有從正態分佈中採樣的權重的Glorot.GlorotUniform([gain,c01b])具有從Uniform分佈中採樣的權重的Glorot。 He(initializer [,gain,c01b])He權重初始化。HeNormal([gain,c01b])He初始化器,其權重從正態分佈中採樣。HeUniform([gain,c01b])He初始化器,其權重從Uniform分佈中採樣。 Orthogonal([gain])將權重初始化為正交矩陣。Sparse([sparsity,std])將權重初始化為稀疏矩陣。 

[1] Bengio,Yoshua。 “ 基於梯度的深度架構培訓的實用建議。”“神經網絡:交易技巧”。 Springer Berlin Heidelberg,2012年。437-478。

[2] LeCun,Y.,Bottou,L.,Orr,G. B.和Muller,K.(1998a)。 高效的反向傳播器。在神經網絡中,交易技巧

[3] Glorot,Xavier和Yoshua Bengio。 “ 理解訓練深度前饋神經網絡的困難。”國際人工智能與統計會議。 2010。

我想添加兩個有用的參考: 1)深入研究整流器:在ImageNet分類上超越人類水平的性能-關於激活感知縮放的重要性http://arxiv.org/abs/1502.01852 2)深層線性神經網絡中學習非線性動力學的精確解http://arxiv.org/abs/1312.6120-正交矩陣比僅高斯噪聲好得多
編輯建議將S型和雙曲正切的初始化值切換為與原始紙匹配。
弗蘭克,您要保留此編輯嗎?如果沒有,您可以回滾。
我肯定錯過了什麼。在Glorot和Bengio(2010)的論文中,當他們建議使用邏輯S形激活函數時,他們建議使用等式16值的4倍?公式16是通過使用公式12和均勻分佈的方差得出的,但是公式16是在假設單元激活為0的對稱激活的情況下得出的。tanh激活函數,但不是邏輯激活函數(非對稱)。此外,他們甚至不使用邏輯S形測試此提議的初始化。他們只用tanh和softsign測試它。
參考文獻[1]的第15頁提出了權重,即答案具有權重。即乙狀結腸的重量是tanh的重量的4倍。參考文獻[3]似乎沒有提到這些。
jpmuc
2013-01-14 02:45:07 UTC
view on stackexchange narkive permalink

以下解釋摘自《克里斯托弗·畢曉普(Christopher Bishop)》一書中的“用於模式識別的神經網絡”。很棒的書!假設您先前已將輸入單元的輸入加白,即$$ <x_ {i} > = 0 $$和$$ <x_ {i} ^ {2} > = 1 $$

問題是:如何最好地選擇權重?這個想法是按照分佈隨機選擇權重的值,這有助於優化過程收斂到有意義的解決方案。

您必須激活第一層的單位,$ y = g(a)$$,其中$$ a = \ sum_ {i = 0} ^ {d} w_ {i} x_ {i} $$。現在,由於您從輸入中獨立選擇權重,因此$$ <a> = \ sum_ {i = 0} ^ {d} <w_ {i} x_ {i} > = \ sum_ {i = 0} ^ {d} <w_ { i} ><x_ {i} > = 0 $$和$$ <a ^ 2> = \ left< \ left(\ sum_ {i = 0} ^ {d} w_ {i} x_ {i} \ right)\ left(\ sum_ {i = 0} ^ {d} w_ {i} x_ {i} \ right)\ right> = \ sum_ {i = 0} ^ {d} <w_ {i} ^ {2} ><x_ {i} ^ {2} > = \ sigma ^ {2} d $$,其中sigma是權重分佈的方差。要得出此結果,您需要回想一下權重是相互獨立初始化的,即$$ <w_ {i} w_ {j} > = \ delta_ {ij} $$

輕微錯誤:$ = 1 $,而不是$ 0 $。
這說明了假設您知道所需的$ \ alpha $時,如何達到角蛋白$ \ sigma $。據我了解,$ \ alpha $應該較小以允許S形導數的較大值,但也不能太小以免增量消失。這是真的?如果是這樣-說$ \ alpha $應該是〜0.2是一個好的經驗法則嗎?
對於深度神經網絡來說尤其如此,在深度神經網絡中,添加層時單元往往會迅速飽和。有很多有關這個問題的論文。一個良好的起點可能是glorot和bengio的“理解深度前饋神經網絡的訓練難度”
Ambodi
2016-11-27 01:24:55 UTC
view on stackexchange narkive permalink

作為更新,深入整流器:超越人的性能n He等人的ImageNet分類引入了一種初始化方式,特別是初始化方式 w = U([0,n])* sqrt(2.0 / n),其中 n 是您的NN的輸入數量。我已經看到許多最近的作品(也與ReLU一起使用)使用了這種初始化。他們實際上顯示了這是如何開始以比您提到的(-1 / n,1 / n)更快的速度降低錯誤率的。有關詳細說明,請參見本文,但收斂速度有多快: The convergence of a 22-layer large model

哇!對我來說是重大的進步。
但是,不是大量輸入... MNIST失敗。
請注意,He初始化是專門為(P)ReLU設計的,並說明了它不對稱的事實(這是Xavier初始化的假設之一)。不要被上下文所迷惑!
Andre P
2017-08-14 05:09:33 UTC
view on stackexchange narkive permalink

這個想法是,您希望以確保網絡中良好的前後數據流的方式初始化權重。也就是說,您不希望激活過程隨著網絡的發展而持續縮小或增加。

此圖顯示了一次MNIST通過網絡後,在3種不同的初始化策略下5層ReLU多層感知器的激活情況。

Activations in a ReLU MLP with different initialization strategies

在所有三種情況下,權重均從零中心正態分佈中得出,該分佈由其標準偏差確定。您會看到,如果初始權重太小(標準偏差太小),則激活會被阻塞,而如果權重太大,則激活會爆炸。可以通過設置權重來找到中間值,即大約正確的值,以使激活和梯度更新的方差與您通過網絡時保持大致相同。

我寫了有關體重初始化的博客文章,其中有更詳細的內容,但基本思想如下。

如果$ x ^ {(i)} $表示第$ i $層的激活,則$ n_i $表示該層的大小,而$ w ^ {(i)} $表示將它們連接到第二層的權重。 $(i + 1)$-st層,那麼可以證明對於激活函數$ f $和$ f'(s)\大約1 $,我們有

$$ \ text {Var}(x ^ {(i + 1)})= n_i \ text {Var}(x ^ {(i)})\ text {Var}(w ^ {{i}}) $$

為了獲得$ \ text {Var}(x ^ {(i + 1)})= \ text {Var}(x ^ {(i + 1}})$,我們必須施加條件

$$ \ text {Var}(w ^ {(i)})= \ frac {1} {n_i} \,。 $$

如果我們用$ \ Delta_j ^ {{i)} $表示$ \ frac {\ partial L} {\ partial x_j ^ {{i}}} $,則在向後傳遞時,我們同樣希望

$$ \ text {Var}(\ Delta ^ {(i)})= n_ {i + 1} \ text {Var}(\ Delta ^ {{i + 1)})\ text {Var}(w ^ {(i )})\,.。 $$

除非$ n_i = n_ {i + 1} $,否則我們必須在這兩個條件之間折衷,並且合理的選擇是諧波均值

$$ \ text {Var}(w ^ {(i)})= \ frac {2} {n_i + n_ {i + 1}} \,。 $$

如果我們從正態分佈$ N(0,\ sigma)$中採樣權重,則可以使用$ \ sigma = \ sqrt {\ frac {2} {n_i + n_ {i + 1}}} $滿足此條件。 對於統一分佈$ U(-a,a)$,我們應該採用$ a = \ sqrt {\ frac {6} {n_i + n_ {i + 1}}}} $,因為$ \ text {Var} \ left(U(-a,a)\ right)= a ^ 2/3 $。 因此,我們到達了Glorot初始化。例如,這是Keras中密集和2D卷積層的默認初始化策略。

Glorot初始化對於微不足道的激活和$ \ tanh $激活非常有效,但對於$ \ text {ReLU} $則效果不佳。 幸運的是,由於$ f(s)= \ text {ReLU}(s)$只是將負輸入歸零,因此可以大致消除一半的方差,並且可以通過將上面的條件之一乘以2來輕鬆修改:

$$ \ text {Var}(w ^ {(i)})= \ frac {2} {n_i} \。 $$

Vadim Smolyakov
2017-08-15 08:35:32 UTC
view on stackexchange narkive permalink

另一種減輕權重初始化問題的技術是Batch Normalization。它用於標準化每個單元的均值和方差,以穩定學習,如原始論文中所述。實際上,使用批處理規範化(BN)的網絡對於不良的初始化要強大得多。 BN的工作方式如下: $$ \ mu_B = \ frac {1} {m} \ sum_ {i = 1} ^ {M} x_i ~~~ and ~~~ \ sigma_ {B} ^ {2} = \ frac {1} {m} \ sum_ {i = 1} ^ {m}(x_i-\ mu_B)^ {2} \\ \ hat {x} _i = \ frac {x_i-\ mu_B} {\ sqrt {\ sigma_ {B} ^ {2} + \ epsilon}} ~~~ and ~~~ BN(x_i)= \ gamma \ hat { x} _i + \ beta $$ 我們為每個小批量計算經驗均值和方差,然後標準化輸入$ x_i $並通過將$ \ hat {x} _i $縮放$ \ gamma $並加上$ \ beta來形成​​輸出$ BN(x_i)$ $兩者都是在培訓期間學習的。

BN每次激活都會引入兩個額外的參數($ \ gamma $和$ \ beta $),這些參數允許$ \ hat {x} _i $具有任何均值和標準差。這樣做的原因是規範化$ x_i $會降低其表達能力。這種新的參數化具有更好的學習動態:在舊的參數化中,$ x_i $的平均值由所有先前層的參數之間的複雜交互作用確定-因此,隨著網絡變得更深,網絡參數的細微變化會放大。在新的參數化中,$ \ hat {x} _i $的平均值由我們在訓練過程中與$ \ gamma $一起學習的$ \ beta $決定。因此,批標準化可穩定學習。

因此,批處理規範化通過使用更高的學習率來實現更快的訓練,並減輕了初始化錯誤的問題。 BN還可以通過防止網絡陷入飽和模式來使用飽和非線性。總而言之,批歸一化是可微分的轉換,它將歸一化的激活引入網絡。實際上,可以在完全連接的層之後立即插入BN層。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...