Yapay sinir ağlarında "ağırlık" nedir?


#1

Merhabalar,

Bu agirliklarin girdilerle carpimi ve bias degeri ile toplamindan kastedilen (Wx+b) agirliklarla bias degerini ilk once kendimiz mi belirliyoruz? Bu agirlik ve bias matrisleri nasil olusuyor? Biz belirliyorsak neye gore belirliyoruz bu degerleri?

Mesela Bir resmin agirlik degerleri nasil belirlenir?


#2

Merhaba, ağırlıklar öğrenilen parametrelerdir. Başlangıçta rastgele atanabileceği gibi geçmişte eğitilmiş bir modelin parametresi giriş parametresi olarak tanımlanabilir. Ancak bu değerler atanırken (+) ya da (-) değerlerden rastgele dağılımlı olarak belirlenmelidir. Çünkü ‘0’ değeri verildiği durumlarda hesap katmanlarda sürekli aynı çıkacağından en başta söylediğim öğrenme gerçekleşmemiş olacaktır. Bu istenmeyen bir durumdur. Kısaca kendimiz rastgele 0 dışında rastgele bir değerle başlanır.


#3

Tesekkur ederim @ayyuce hocam. Bide bana bi kod gosterebilir misiniz? Tensorflow veya Keras ortaminda yazilmis. Agirliklarin belirlenis sekline ozgu.

Saygilarimla


#6

@psyAI Soru sormak için başka bir başlık açabilirsiniz. Lütfen aynı sorunun altında soru sormayın.


#7

@ayyuce Hocam merhaba,

Ders videosunu izlerken, Andrew hocanın yaptığı örneklerde dw=0 , db=0 olarak görüyoruz. Bunu galiba örnek olması amacıyla yazmış. Ancak, video’nun ikinci dakikasından sonra şöyle bir ifade kullanıyor:

So to find a good value for the parameters, what we’ll do is initialize w and b to some initial value, maybe denoted by that little red dot. And for logistic regression almost any initialization method works, usually you initialize the value to zero. Random initialization also works, but people don’t usually do that for logistic regression.

Bundan dolayı biraz karmaşa yaşadım. Yardımınızı rica ederim.


#9

@aif Eğer tüm ağırlıkları sıfıra eşit olarak başlatırsanız, her katmandaki tüm nöronlar için aynı ağırlığa eşit olur. @ender gösterdiği örnekte logistic regression için başlangıç ağırlığı 0 olabilir ancak yapay sinir ağlarında bu çalışmaz. Aşağıdaki işlemde görüldüğü gibi giriş ağırlarına 0 verildiğinde tüm güncellemeler sonucu birbirine eşit çıkar. Ve eğer şekilde daha fazla gizli katman olsaydı sürekli her katmanda aynı değeri yani aynı özniteliği elde etmiş oluruz. O halde yaptığımız işin bir anlamı olmamış olur. Bu yüzden rastgele değer atamak önemlidir.



#8

ifadenizi anlayamadım, rica etsem biraz daha detaylı anlatma imkanınız var mı?


#4

Python kullanıyorsan şöyle yapabilirsin:
import numpy as np
np.random.random((3, 1)) // şeklinde rasgele sayı üretebilirsin
np.random.seed(1) // Eğer her çalıştırmada aynı random sayıları üretmek istersen öncesinde bu komutu kullanabilirsin seed de herhangi bir sayı verebilirsin sadece başlangıç referansı olarak kullanılıyor.

Başlangıç sayıyı tamamen rasgele yaparsın çünkü eğitimin amacı zaten bu sayıları optimum değerlere ulaştırmak.


#5

Ağırlık başlangıç değeri atamanın değişik yöntemleri var. Mesela Keras için ;

https://keras.io/initializers/

Bunlar Başlangıç değeri ve değişik metodların amacı eğitimin daha kolaylaştırcağının düşünülmesi.

Örnek için Yine kerasdan ;

https://github.com/keras-team/keras/blob/master/keras/initializers.py


#10

Biasları 0 başlatabilirsin, Weightleri başlatmak icin random fonksiyon kullanmanı öneriyorlar sebebi ise networkümüzün ilginç şeyler öğrenmesi ve simetrinin bozulması simetri güzel bir başlangıç değil weightler için. Weight başlatmak gerçekten networkünüzün converge etmesi icin cok önemli, Randomlığın distribution da önemli örnek vermek gerekirse uniform bir distribution çok mantıklı olmayabilir, 0,1 arasında gaussian bir distribution da başlatmak networkünün daha hızlı converge etmesini sağlayabilir. Aktivasyon fonksiyonuna göre farklı weight başlatma distributionları var.


#11

Biasların weightlerden daha yavaş değişmesi gerekiyor. Bir de fazladan bias matrisiyle uğraşmak istemezsen her zaman değeri 1 olan bias nöronları kullanabilirsin. Buna bağlı weightler bias ile aynı işlevi göreceklerdir.