Bir sinir ağında iyi başlangıç ​​ağırlıkları nelerdir?


68

Sadece dizi sinirsel ağın başlangıç ağırlıkları seçmek için iyi bir fikirdir ki duymuş , olan Verilen bir nörona giriş sayısı. Kümelerin normalize olduğu varsayılmaktadır - ortalama 0, varyans 1 (bunun önemli olup olmadığını bilmiyorum).(1d,1d)d

Bu neden iyi bir fikir?


Bkz benim ustaları tezi, sayfa 81 başlatma teknikleri üzerinde genel bir bakış için.
Martin Thoma

Yanıtlar:


47

Lojistik nöronları kullandığınızı ve degrade iniş / geri yayılım ile egzersiz yaptığınızı varsayıyorum.

Lojistik fonksiyonu, büyük pozitif veya negatif girişler için daireye yakındır. girişindeki türev yaklaşık , ancak türev yaklaşık 1/ . Bunun anlamı, eğer bir lojistik nöronun girişi ise , belirli bir eğitim sinyali için, nöron kat daha yavaş öğrenecektir , eğer girdi .21/10101/220001022002

Nöronun hızlı bir şekilde öğrenmesini istiyorsanız, ya büyük bir egzersiz sinyali (çapraz entropi kaybı işlevi gibi) üretmeniz gerekir veya türevin büyük olmasını istersiniz. için, başlangıç ​​ağırlıkları belirlersiniz, böylece sık sık aralığında girdiler alırsınız .[4,4]

Verdiğiniz ilk ağırlıklar çalışmayabilir veya olmayabilir. Girişlerin nasıl normalleştirildiğine bağlıdır. Girişler normalize ise ortalama olması ve standart sapma , daha sonra rasgele bir miktar üzerine ağırlıklar üniforma açısından ortalama ve varyans , bağımsız olacaktır . dışında bir miktar alma olasılığı azdır. Bu, arttıkça , nöronların öğrenmemeleri için doymuş başlamalarına neden olmamanız anlamına gelir .01d(1d,1d)013d[4,4]d

Normalleştirilmemiş girdilerde, bu ağırlıklar doygunluktan kaçınmada etkili olmayabilir.


1
Yani temel olarak, her zaman en azından verileri normalleştirmeyi düşünmelisiniz. Şimdi mantıklı geliyor. Std sapmasının neden 1/3 olacağını ve giriş toplamının <-4,4> aralığının dışında kalma olasılığının ne kadar küçük olduğunu açıklayabilir misiniz?
elmes

1
Bunu gösteren bazı temel varyans özellikleri vardır: Eğer ve bağımsızsa, o zaman ve ve bağımsızdır ve ortalama , sonra . XYVar(X+Y)=Var(X)+Var(Y)XY0Var(XY)=Var(X)Var(Y)
Douglas Zare

1
Chebyshev eşitsizliğini kullanarak rastgele bir değişkenin ortalamadan en az standart sapma olasılığı olduğunu tahmin edebilirsiniz . Uygulamada bu keskin değildir, ancak kesin sonuç dağılıma bağlıdır. 12
Douglas Zare

Bu arada yanlış hesapladım. Varyans bu yüzden standart sapma . 1313
Douglas Zare

1
"Lojistik işlevi büyük pozitif veya negatif girişler için düzlüğe yakın. Girişin türevi ..." İlgili konu , lojistik regresyonun maliyet fonksiyonunun türevi olmamalı mı ? Maliyet fonksiyonunun türevine girdi, lojistik fonksiyon tarafından ağırlık ve sinyallerin boyutuna bakılmaksızın (0,1) olarak ölçeklendirildi mi?
Moobie

28

[1] soruyu ele alıyor:

İlk olarak, geriye doğru taşırken simetriyi kırmak için ağırlıklar sıfır olmamalıdır:

Önyargılar genellikle sıfıra başlatılabilir, ancak aynı katmanın gizli birimleri arasındaki simetriyi kırmak için ağırlıkların dikkatlice başlatılması gerekir. Farklı çıktı birimleri farklı gradyan sinyalleri aldığı için, bu simetri kırma sorunu çıktı ağırlıklarını ilgilendirmez (bu nedenle sıfıra da ayarlanabilir).

Bazı başlangıç ​​stratejileri:

  • [2] ve [3], fan girişinin karekökünün tersi tarafından ölçeklendirilmesini önerir
  • Glorot ve Bengio (2010) ve Deep Learning Tutorials, içeri giren ve dışarı çıkanların bir kombinasyonunu kullanıyor:
    • Hiperbolik teğet birimler için: ile bir Üniforma (-r, r) örneği (fan-in sayısı Ünitenin girişleri).r=6fan-in+fan-out
    • sigmoid üniteleri için: ile bir Üniforma (-r, r) örneği alın (fan-in sayısı Ünitenin girişleri).r=46fan-in+fan-out
  • RBM'lerde, 0.1 veya 0.01 civarında küçük bir standart sapmaya sahip sıfır-ortalama bir Gaussian ağırlıkları başlatmak için iyi çalışır (Hinton, 2010).
  • Ortogonal rasgele matris başlatma, yani başlangıç ​​başlatma matrisiniz olarak W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)kullanın u.

Ayrıca, denetimsiz ön eğitim bazı durumlarda yardımcı olabilir:

Önemli bir seçenek, birinin parametreleri başlatmak için denetlenmeyen ön eğitim (ve hangi denetlenmeyen özellik öğrenme algoritmasını kullanması) kullanması gerektiğidir. Çoğu ortamda, yardım için ve nadiren incitmek için denetimsiz ön eğitim gördük, fakat elbette ek eğitim süresi ve ek hiper parametreler anlamına geliyor.

Bazı YSA kütüphanelerinin bazı ilginç listeleri de vardır, örneğin Lazanya :

Constant([val]) Initialize weights with constant value.
Normal([std, mean]) Sample initial weights from the Gaussian distribution.
Uniform([range, std, mean]) Sample initial weights from the uniform distribution.
Glorot(initializer[, gain, c01b])   Glorot weight initialization.
GlorotNormal([gain, c01b])  Glorot with weights sampled from the Normal distribution.
GlorotUniform([gain, c01b]) Glorot with weights sampled from the Uniform distribution.
He(initializer[, gain, c01b])   He weight initialization.
HeNormal([gain, c01b])  He initializer with weights sampled from the Normal distribution.
HeUniform([gain, c01b]) He initializer with weights sampled from the Uniform distribution.
Orthogonal([gain])  Intialize weights as Orthogonal matrix.
Sparse([sparsity, std]) Initialize weights as sparse matrix.

[1] Bengio, Yoshua. " Derin mimarilerin gradyan tabanlı eğitimi için pratik öneriler. " Yapay Sinir Ağları: Ticaretin Püf Noktaları. Springer Berlin Heidelberg, 2012. 437-478.

[2] LeCun, Y., Bottou, L., Orr, GB ve Muller, K. (1998a). Verimli backprop. Yapay Sinir Ağlarında Ticaretin Püf Noktaları .

[3] Glorot, Xavier ve Yoshua Bengio. " İleriye dönük derinlemesine sinir ağlarının eğitiminin zorluğunun anlaşılması ." Yapay zeka ve istatistik konulu uluslararası konferans. 2010.


2
İki yararlı referans eklemek istiyorum: 1) Doğrultuculara Derinlemesine Aktarmak: ImageNet Sınıflandırmasında İnsan Seviyesinde Performansı Aşmak - aktivasyona duyarlı ölçeklendirmenin önemi hakkında arxiv.org/abs/1502.01852 2) Doğrusal olmayan dinamiklere tam çözümler derin doğrusal sinir ağlarında öğrenme arxiv.org/abs/1312.6120 - ortonormal matrisler sadece Gauss gürültüsünden çok daha iyidir
eski-ufo

1
Bir editör, sigmoid ve hiperbolik tanjant için başlatmaların orijinal kağıda uyması için değiştirilmesini önerir.
gung - Reinstate Monica

2
Bu düzenlemeye devam etmek istedin mi Frank? Değilse geri alabilirsiniz.
gung - Reinstate Monica

Bir şeyleri özlüyorum. Lojistik sigmoid aktivasyon fonksiyonlarını kullanırken Glorot ve Bengio (2010) gazetesinde Denklem 16 değerinin 4 katı kullanılmasını önerdikleri yazısında nerede? Denklem 16, Denklem 12 ve tekdüze bir dağılımın varyansının kullanılmasından sonra gelir, ancak Denklem 16, 0'da birim türev ile simetrik bir aktivasyon varsayarak türetilir. Bu nedenle, örneğin bir tanh aktivasyon fonksiyonu, fakat bir lojistik aktivasyon fonksiyonu (simetrik olmayan). Ayrıca, bu önerilen başlatma işlemini lojistik sigmoid ile test etmiyorlar; sadece tanh ve softsign ile test ediyorlar.
Tommy L,

10

Kitaptan şu açıklama alınmıştır: Christopher Bishop tarafından Örüntü Tanıma için Sinir Ağları. Harika kitap! Daha önce girişleri giriş birimlerine beyazlattığınızı varsayalım, yani ve

<xi>=0
<xi2>=1

Soru şu: ağırlıkları en iyi nasıl seçersiniz? Fikir, optimizasyon işleminin anlamlı bir çözüme yaklaşmasına yardımcı olan bir dağılımın ardından ağırlıkların değerlerini rastgele seçmektir.

İlk katmandaki birimlerin aktivasyonu için var, burada . Şimdi, ağırlıkları girdilerden bağımsız olarak seçtiğiniz için, ve burada sigma ağırlık dağılımının bir değişkenidir. Bu sonucu elde etmek için, ağırlıkların birbirinden bağımsız olarak başlatıldığını, yani hatırlatmanız gerekir.

y=g(a)
a=i=0dwixi
<a>=i=0d<wixi>=i=0d<wi><xi>=0
<a2>=(i=0dwixi)(i=0dwixi)=i=0d<wi2><xi2>=σ2d
<wiwj>=δij

Küçük hata: yerine . <xi2>=10
bayerj,

Bu , gerekli alfa'yı bildiğinizi varsayarak bir ceratin sigma'ya nasıl ulaştığınızı açıklar . Anladığım kadarıyla sigmoid türevinin büyük bir değerine izin verecek kadar küçük olmalı, ancak deltaların kaybolmaması için çok küçük olmamalıdır. Bu doğru mu? Öyleyse - ~ 0.2 olması gerektiğini söylemek iyi bir kural mıdır? σααα
Uri

Bu, özellikle katmanları eklerken birimlerin hızlı bir şekilde doyma eğiliminde olduğu derin sinir ağları için geçerlidir. Bu soruyla ilgili çok sayıda makale var. İyi bir başlangıç ​​noktası olabilir "derin besleyici sinir ağları yetiştirmenin zorluğunun anlaşılması", glorot ve bengio tarafından olabilir
jpmuc 24:13

10

Peki sadece bir güncelleme olarak Redresör içine derin Delving: He ve arkadaşları tarafından İnsan Düzeyli Performansı n ImageNet Sınıflandırması aşarak başlatma ile spesifik olarak bir başlatma tanıtıldı senin NN girişlerinin sayısıdır. Bu başlatmayı birçok yeni çalışmada (ReLU'yla da) kullandım. Aslında bunun hata oranını belirttiğiniz (-1 / n, 1 / n) 'den çok daha hızlı nasıl azalttığını gösteriyorlar. Ayrıntılı açıklama için, makaleye bakın ancak işte bu kadar hızlı birleşiyor: w = U([0,n]) * sqrt(2.0/n)n22 katmanlı büyük modelin yakınsaklığı


Vaov! Benim için önemli gelişme.
Thomas W

Çok sayıda giriş olmasa da ... MNIST ile başarısız oluyor.
Thomas W

He-initialisation'ın (P) ReLU'lar için özel olarak tasarlandığını ve simetrik olmadığı gerçeğini (Xavier-ilklendirmedeki varsayımlardan biri) açıkladığına dikkat edin. Bağlam dışı bu grafik kanmayın!
Bay Tsjolder,

5

Buradaki fikir, ağırlıkları ağ üzerinden iyi ileri ve geri veri akışı sağlayacak şekilde başlatmak istediğinizdir. Yani, ağda ilerledikçe, aktivasyonların sürekli olarak daralmasını ya da artmasını istemiyorsunuz.

Bu görüntü, ağ üzerinden bir MNIST geçişinden sonra 3 farklı başlatma stratejisi altında 5 katmanlı bir ReLU Çok Katmanlı Perceptron'un aktivasyonlarını göstermektedir.

ReLU MLP’de farklı başlangıç ​​stratejileriyle yapılan aktiviteler

Her üç durumda da, ağırlıkları standart sapması ile belirlenen sıfır merkezli normal dağılımdan çekilir. İlk ağırlıklar çok küçükse (standart sapma küçükse) aktivasyonların tıkandığını ve aktivasyonların çok büyük olması durumunda aktivasyonların patladığını görebilirsiniz. Yaklaşık olarak doğru olan orta değer, aktivasyonların ve gradyan güncellemelerinin varyansının yaklaşık olarak ağdan geçtiğiniz gibi kalacağı ağırlıkları ayarlayarak bulunabilir.

Ağırlık başlatma hakkında daha ayrıntılı olan bir blog yazısı yazdım , ancak temel fikir şu şekilde.

Eğer , -inci katmanın aktivasyonlarını belirtirse , katmanın boyutunu ve onları -st katmanına bağlayan ağırlıkları , sonra bir aktivasyon fonksiyonu için bu gösterebilir ile elimizdekix(i)iniw(i)(i+1)ff(s)1

Var(x(i+1))=niVar(x(i))Var(w(i))

Elde etmek için bu nedenle durumun uygulamak zorundadırVar(x(i+1))=Var(x(i))

Var(w(i))=1ni.

Biz gösteriyorsa, tarafından , geri geçiş biz Benzer istiyoruzLxj(i)Δj(i)

Var(Δ(i))=ni+1Var(Δ(i+1))Var(w(i)).

sürece , bu iki koşul arasında gerekir ve makul bir seçim harmonik ortalamadır.ni=ni+1

Var(w(i))=2ni+ni+1.

Normal dağılıma ağırlıklardan örnekler verirsek bu koşulu . Homojen bir dağılım için , biz almalıdır yana . Bu yüzden Glorot'un başlatılmasına ulaştık. Bu, örneğin Keras'taki yoğun ve 2B evrişim katmanları için varsayılan başlatma stratejisidir.N(0,σ)σ=2ni+ni+1U(a,a)a=6ni+ni+1Var(U(a,a))=a2/3

Glorot başlatma, önemsiz ve aktivasyonları için oldukça iyi çalışır , ancak için de . Neyse ki, , negatif girdilerin sadece nedeniyle, varyansın yarısını kabaca kaldırır ve bu, yukarıdaki koşullarımızdan birini iki ile çarparak kolayca değiştirilebilir:tanhReLUf(s)=ReLU(s)

Var(w(i))=2ni.

3

Ağırlık başlatma problemini hafifleten bir diğer teknik, Toplu Normalizasyondur . Öğrenmeyi orijinal belgede açıklandığı şekilde dengelemek için her birimin ortalamasını ve varyansını standart hale getirmek için hareket eder . Uygulamada, Toplu Normalleştirme (BN) kullanan ağlar, kötü başlatma için önemli ölçüde daha sağlamdır. BN şu şekilde çalışır: Her mini parti için ampirik ortalama ve varyansı hesaplarız, sonra girişini standart hale ve ölçekleme yoluyla çıktısını oluşturur

μB=1mi=1Mxi   and   σB2=1mi=1m(xiμB)2x^i=xiμBσB2+ϵ   and   BN(xi)=γx^i+β
xiBN(xi)x^i by ve her ikisi de eğitim sırasında öğrenilen ekler .γβ

BN, aktivasyon başına ortalama ve standart sapmalarına izin veren iki ekstra parametre ( ve ) sunar . Bunun nedeni, normalize ifade gücünü azaltabilir. Bu yeni parametreleştirmenin daha iyi öğrenme dinamikleri vardır: eski parametrelemede, ortalaması önceki tüm katmanların parametreleri arasındaki karmaşık bir etkileşimle belirlendi - bu yüzden ağ derinleştikçe ağ parametrelerinde küçük değişiklikler meydana gelir. Yeni parametreleştirmede ortalaması ile birlikte öğrendiğimiz tarafından belirlenirγβx^ixixix^iβγEğitim sırasında Böylece, Toplu Normalleştirme öğrenmeyi dengeler.

Sonuç olarak, Toplu Normalleştirme, çok daha yüksek öğrenme oranları kullanarak daha hızlı bir eğitim sağlar ve hatalı başlatma sorununu hafifletir. BN ayrıca ağın doygunluk modlarında sıkışıp kalmasını önleyerek doymuş doğrusal olmayan doygunluk kullanımını da mümkün kılar. Özetle, Toplu İş Normalleştirme, normalize edilmiş aktivasyonları ağa dahil eden farklılaştırılabilir bir dönüşümdür. Uygulamada, tamamen bağlı bir katmanın hemen ardından bir BN katmanı yerleştirilebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.