Yapay Sinir Ağlarının ağırlıkları neden rastgele sayılarla ilklendirilmeli? [kapalı]


105

Sıfırdan bir sinir ağı kurmaya çalışıyorum. Tüm AI literatüründe, ağın daha hızlı yakınlaşması için ağırlıkların rastgele sayılarla başlatılması gerektiği konusunda bir fikir birliği vardır.

Fakat sinir ağlarının başlangıç ​​ağırlıkları neden rastgele sayılar olarak başlatılıyor?

Bir yerlerde bunun "simetriyi kırmak" için yapıldığını ve bunun sinir ağının daha hızlı öğrenmesini sağladığını okumuştum. Simetriyi bozmak nasıl daha hızlı öğrenmesini sağlar?

Ağırlıkları 0 olarak başlatmak daha iyi bir fikir olmaz mı? Bu şekilde ağırlıklar değerlerini (pozitif veya negatif) daha hızlı bulabilir mi?

Ağırlıkları rastgele hale getirmenin arkasında, başlatıldıklarında optimum değerlerine yakın olacaklarını ummanın dışında başka bir temel felsefe var mı?


8
Bu, Çapraz Doğrulamalı için daha uygun görünüyor .
Sycorax

2
Bu soruyu kapatmak için oy kullanıyorum çünkü konu yardım merkezinde tanımlandığı gibi programlama değil, genel makine öğrenimi teorisi ve metodolojisi ile ilgili.
Desertnaut

Yanıtlar:


140

Simetrinin kırılması burada çok önemlidir, performans için değil. Çok katmanlı algılayıcının ilk 2 katmanını düşünün (giriş ve gizli katmanlar):

görüntü açıklamasını buraya girin

İleri yayılma sırasında gizli katmandaki her birim sinyal alır:

görüntü açıklamasını buraya girin

Yani, her gizli birim, karşılık gelen ağırlık ile çarpılan girdilerin toplamını alır.

Şimdi tüm ağırlıkları aynı değerde (örneğin sıfır veya bir) başlattığınızı hayal edin. Bu durumda, her gizli birim tam olarak aynı sinyali alacaktır . Örneğin, tüm ağırlıklar 1 olarak başlatılırsa, her birim girişlerin (ve çıkışların sigmoid(sum(inputs))) toplamına eşit sinyal alır . Tüm ağırlıklar sıfırsa, daha da kötüsü, her gizli birim sıfır sinyal alacaktır. Giriş ne olursa olsun - tüm ağırlıklar aynıysa, gizli katmandaki tüm birimler de aynı olacaktır .

Simetri ile ilgili ana sorun budur ve ağırlıkları rastgele (veya en azından farklı değerlerle) başlatmanızın nedenidir. Bu sorunun, her bir bağlantı kullanan tüm mimarileri etkilediğini unutmayın.


1
Harika açıklama. Ama neden kelime kullanmak symmetrydeğil correlation? Bu kelimeyi ilk kim kullandı?
nn0p

1
@ nn0p: korelasyon, 2 sinyalin benzer bir yönde değiştiğini, ancak her zaman değil ve tam olarak aynı büyüklükte olmadığını gösterir. En azından bildiğim kadarıyla, simetrinin resmi bir tanımı yoktur ve burada düğümler arasındaki tüm bağlantılar üzerinde tam olarak aynı sinyalleri temsil etmek için kullanılır , bu da eğitimi gereksiz kılar.
ffriend

@friend bırakma kullanmamız durumunda, randomizasyon daha gerekli değildir. Yanlış mıyım?
emanuele

1
@emanuele Dropout'un kendisi bir çeşit randomizasyondur, bu yüzden evet, işe yaramalı. Yine de, her yinelemede "çıkarılmayan" tüm bağlantılar simetrik güncelleme alacak, bu yüzden öğrenmenin oldukça yavaş olacağını tahmin ediyorum ve bu nedenle herhangi bir pratik ağda hala rastgele başlatmayı kullanmanızı tavsiye ediyorum.
ffriend

Bu ileriyi iyi açıklıyor, peki ya backprop?
zell

74

Analoji:

Umarım bu iyi bir benzetmedir. Bunu olabildiğince basit bir şekilde açıklamaya çalıştım.

Birinin sizi helikopterden bilinmeyen bir dağın tepesine düşürdüğünü ve orada mahsur kaldığınızı hayal edin. Her yer sisli. Bildiğiniz tek şey, bir şekilde deniz seviyesine inmeniz gerektiğidir. Mümkün olan en düşük noktaya inmek için hangi yöne gitmelisiniz?

Deniz seviyesine bir yol bulamazsanız ve bu yüzden helikopter sizi tekrar götürür ve sizi aynı dağ zirvesine düşürür. Aynı yönleri tekrar almanız gerekir çünkü kendinizi aynı başlangıç ​​pozisyonlarına "başlatıyorsunuz" .

Bununla birlikte, helikopter sizi dağda rastgele bir yere her düşürdüğünde , farklı yönler ve adımlar atarsınız. Yani, daha iyi bir şans olurdu mümkün olan en düşük noktaya ulaşmanız için .

Simetriyi kırmakla kastedilen budur . Başlatma asimetriktir ( farklı olan ), böylece aynı soruna farklı çözümler bulabilirsiniz.

Bu benzetmede, indiğiniz yer ağırlıklardır . Bu nedenle, farklı ağırlıklarda, en düşük seviyeye ( veya daha düşük seviyeye ulaşma şansı daha yüksektir) ) noktaya .

Ayrıca, sistemdeki entropiyi artırır, böylece sistem daha düşük noktaları ( yerel veya küresel minimumlar ) bulmanıza yardımcı olmak için daha fazla bilgi oluşturabilir .

görüntü açıklamasını buraya girin


10
Görünüşe göre helikopter sizi dağda birkaç kez rastgele bir yere düşürüyor, ancak derin öğrenmede ağırlıkları rastgele yalnızca bir kez başlatıyoruz.
YuFeng Shen

1
Bu gerçek bir sezgisel açıklamadır. Ayrıca NN'lerin neredeyse hiçbir zaman dışbükey olmadığını da not etmeliyiz - bu nedenle randomizasyon ideal bir yoldur - ancak bir dışbükey kayıp fonksiyonunuz varsa, o zaman elbette ağırlıklarınızı neye başlattığınızın önemi yoktur.
Kingz

4
Bu iyi bir benzetme - ancak sizin ve arkadaşlarınızın dağa (yani bir ağdaki düğümler) ya aynı noktada ya da farklı noktalardaki farklı kişilerde düştüğünü varsaymak daha mantıklı. Ve birbirinizle iletişim kurabileceğinizi varsayalım. İletişimin olduğu farklı noktalar daha hızlı bir inişe izin verecektir. Aynı nokta, herkesin muhtemelen aynı yolu izleyeceği anlamına gelir.
ahmedhosny

26

Cevabı oldukça basit. Temel eğitim algoritmaları doğası gereği açgözlüdür - küresel optimum olanı değil, "en yakın" yerel çözümü bulurlar. Sonuç olarak, herhangi bir sabit başlatmadan başlamak, çözümünüzü belirli bir ağırlık kümesine doğru yönlendirir. Bunu rastgele (ve muhtemelen birçok kez) yaparsanız, hata yüzeyinin garip bir bölümünde sıkışıp kalmanız çok daha az olasıdır.

Aynı argüman, global bir optimum (k-aracı, EM, vb.) Bulamayan ve global optimizasyon tekniklerine (SVM için SMO algoritması gibi) uygulanmayan diğer algoritmalar için de geçerlidir.


Yani, sadece randomize ederek yerel minimumda sıkışıp kalmayacağı garanti değil mi? Ancak farklı rastgele ağırlıklarla yapılan çoklu çalışmalardan sonra global minimuma ulaşabilir mi?
Shayan RC

1
Garanti yoktur, ancak çoklu başlatma en azından gerçek optimuma yaklaşmaya yardımcı olabilir.
lejlot

Ağırlıkları başlatmak için değer belirlemeye yönelik standart bir formül veya kural var mı? Sigmoid işlevinin kullanıldığı ileri beslemeli, çok katmanlı, geri yayılımlı sinir ağına sahibim.
lkkkk


3
Bu, insanların rastgele başlatmayı kullanmalarının nedeni değildir, çünkü çoğu insan eğitimi birçok kez farklı rastgele başlatmalarla yeniden başlatmaz ve ağ hala iyi bir yerel optimizasyona ulaşabilir.
cesarsalgado

4

Bahsettiğiniz gibi, kilit nokta simetriyi kırmak . Çünkü tüm ağırlıkları sıfırlarsanız, sinir ağınızdaki tüm gizli nöronlar (birimler) tam olarak aynı hesaplamaları yapıyor olacaktır. Bu arzu ettiğimiz bir şey değil çünkü farklı gizli birimlerin farklı fonksiyonları hesaplamasını istiyoruz. Ancak, hepsini aynı değerle başlatırsanız bu mümkün değildir.


2
  1. Ağırlıkları 0 olarak başlatmak daha iyi bir fikir olmaz mı? Bu şekilde ağırlıklar değerlerini (pozitif veya negatif) daha hızlı bulabilir mi?

  2. Simetriyi bozmak nasıl daha hızlı öğrenmesini sağlar?

Tüm ağırlıkları sıfır olarak başlatırsanız, tüm katmanların tüm nöronları aynı hesaplamayı gerçekleştirir, aynı çıktıyı verir ve orada tüm derin ağı işe yaramaz hale getirir . Ağırlıklar sıfırsa, tüm derin ağın karmaşıklığı tek bir nöronunkiyle aynı olur ve tahminler rastlantısaldan daha iyi bir şey olmaz.

Aynı girişlere bağlı gizli bir katmanda yan yana olan düğümler, öğrenme algoritmasının ağırlıkları güncellemesi için farklı ağırlıklara sahip olmalıdır.

Ağırlıkları sıfır olmayan (ancak 0,1 vb. Gibi 0'a yakın) yaparak, algoritma ağırlıkları sonraki yinelemelerde öğrenecek ve takılıp kalmayacaktır. Bu şekilde simetri kırılır.

  1. Ağırlıkları rastgele hale getirmenin arkasında, başlatıldıklarında optimum değerlerine yakın olacaklarını ummanın dışında başka bir temel felsefe var mı?

Stokastik gradyan inişi gibi stokastik optimizasyon algoritmaları, arama için bir başlangıç ​​noktası seçerken ve aramanın ilerlemesinde rastgeleliği kullanır.

Bir sinir ağının araştırılmasının veya öğrenilmesinin ilerlemesi yakınsama olarak bilinir. Optimal olmayan bir çözümü veya yerel optima'yı keşfetmek, erken yakınsamaya neden olur.

Tek bir yerel optimaya güvenmek yerine, algoritmanızı farklı rastgele ağırlıklarla birden çok kez çalıştırırsanız, yerel optimaya takılıp kalmadan global optimayı bulma konusunda en iyi olasılık vardır.

2015 sonrası, makine öğrenimi araştırmalarındaki gelişmeler nedeniyle, He-et-al Initializatio n rastgele başlatmanın yerini alacak şekilde tanıtıldı

w=np.random.randn(layer_size[l],layer_size[l-1])*np.sqrt(2/layer_size[l-1])

Ağırlıklar hala rastgeledir ancak önceki nöron katmanının boyutuna bağlı olarak aralık bakımından farklılık gösterir.

Özetle, sıfır olmayan rastgele ağırlıklar bize yardımcı olur

  1. Yerel optimadan çıkın
  2. Simetriyi kırmak
  3. Daha fazla yinelemede global optimaya ulaşın

1

Rastgele değerlerle başlatmaya ek olarak, başlangıç ​​ağırlıkları büyük değerlerle başlamamalıdır. Bunun nedeni, tanh ve sigmoid işlevlerini genellikle gizli katmanlarda ve çıktı katmanlarında kullanmamızdır. İki fonksiyonun grafiklerine bakarsanız, ilk iterasyondaki ileri yayılmadan sonra daha yüksek değerler elde edilir ve bu değerler sigmoid ve tanh fonksiyonlarında türevi sıfıra yakınsayan yerlere karşılık gelir. Bu, öğrenme sürecinin soğuk bir başlangıcına ve öğrenme süresinin artmasına neden olur. Sonuç olarak, ağırlıkları rastgele başlatırsanız, bu değerleri "0.01" veya "0.001" gibi değerlerle çarparak bu sorunları önleyebilirsiniz.


1

Her şeyden önce, bazı algoritmalar sıfır başlangıç ​​ağırlıklandırmalarıyla bile birleşir. Basit bir örnek, bir Doğrusal Algılayıcı Ağıdır. Elbette, birçok öğrenme ağı rastgele başlangıç ​​ağırlıklandırması gerektirir (ancak bu, en hızlı ve en iyi olanı elde etmenin garantisi değildir. cevabı ).

Sinir ağları, ağırlıkları öğrenmek ve güncellemek için Geri yayılımı kullanır ve sorun, bu yöntemde ağırlıkların yerel optimal düzeye yakınsamasıdır. global optimal değil (yerel minimum maliyet / kayıp) .

Rastgele ağırlıklandırma , ağın mevcut alandaki her yön için şansı değerlendirmesine ve daha iyi bir cevaba ulaşmak ve tek bir yönle sınırlı kalmamak için kademeli olarak iyileştirmesine yardımcı olur. veya cevapla .

[Aşağıdaki resim, nasıl yakınsamanın tek boyutlu bir örneğini göstermektedir. Başlangıç ​​konumu göz önüne alındığında, yerel optimizasyon elde edilir, ancak genel bir optimizasyon yapılmaz. Daha yüksek boyutlarda, rastgele ağırlıklandırma, doğru yerde olma veya daha iyi başlama şansını artırabilir, bu da ağırlıkların daha iyi değerlere yakınsamasına neden olur.] [1]

[1]: https://i.stack.imgur.com/2dioT.png [Kalhor, A. (2020). Sınıflandırma ve Regresyon NN'leri. Ders.]

En basit durumda, yeni ağırlık aşağıdaki gibidir:

W_new = W_old + D_loss

Burada maliyet fonksiyonu gradyanı, yeni bir ağırlık elde etmek için önceki ağırlığa eklenir. Önceki tüm ağırlıklar aynıysa, sonraki adımda tüm ağırlıklar eşit olabilir. Sonuç olarak, bu durumda, geometrik bir bakış açısıyla, sinir ağı tek yönde eğimlidir ve tüm ağırlıklar aynıdır. Ancak ağırlıklar farklı ise, ağırlıkları farklı miktarlarda güncellemek mümkündür. (Her ağırlığın sonuç üzerinde sahip olduğu etki faktörüne bağlı olarak, ağırlıkların maliyetini ve güncellemelerini etkiler. Böylece ilk rastgele ağırlıklandırmadaki küçük bir hata bile çözülebilir).

Bu çok basit bir örnekti, ancak rastgele ağırlıklandırmanın öğrenme üzerindeki etkisini gösteriyor. Bu, sinir ağının bir tarafa gitmek yerine farklı alanlara gitmesini sağlar. Sonuç olarak, öğrenme sürecinde bu alanların en iyisine gidin


0

Daha matematiksel olalım. Aslında cevap vermemin nedeni, bu kısmı diğer cevaplarda eksik bulmuş olmamdır. 2 katmanınız olduğunu varsayalım. Geri yayılma algoritmasına bakarsak, hesaplama

dZ2 = A2 - Y

dW2 = (1 / m) * dZ2 * A2.T

Db2'yi görmezden gelelim. (Üzgünüm üzgünüm;))

dZ1 = W2.T * dZ2. * g1 '(Z1)

...

Gördüğünüz problem kalın. DW1'i hesaplamak için gereken (dW1'i hesaplamak için gerekli olan), içinde W2'ye sahiptir ve bu 0'dır. Yani aslında sinir ağı hiçbir şey öğrenmiyor. Lojistik regresyondan (tek birim) daha kötü olduğunu düşünüyorum. Lojistik regresyon durumunda, X sayesinde farklı girdi elde ettiğiniz için daha fazla yineleme ile öğrenirsiniz. Bu durumda, diğer katmanlar her zaman aynı çıktıyı verir, böylece hiç öğrenmezsiniz.


0

Bir şey öğrendim: Ağırlığı sıfır olarak başlatırsanız, aynı katmandaki aktivasyon birimlerinin aynı olacağı, yani aynı değerlere sahip olacağı açıktır. Geri dönüş yaptığınızda, dW degradesinin tüm satırlarının da aynı olduğunu göreceksiniz, dolayısıyla ağırlık matrisi W'nin tüm satırları gradyan iniş güncellemelerinden sonra aynıdır. Genel olarak, tüm ağırlıkların sıfıra başlatılması, ağın simetriyi kıramamasına neden olur. Bu, her katmandaki her nöronun aynı şeyi öğreneceği anlamına gelir ve her katman için bir sinir ağını eğitiyor olabilirsiniz n[l]=1n[l]=1ve ağ, lojistik regresyon gibi doğrusal bir sınıflandırıcıdan daha güçlü değildir. Andrew Ng kursu:

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.