Sinir Ağı — Zincir Kuralını Kullanarak Geri Yayılımın Uygulanması

Sep 02 2021
Bu yazıda, Geri Yayılım sürecinde Matematiksel ihtiyaç ve Zincir Kuralının türetilmesi üzerinde duracağım. Tüm akışı açıklayan Youtube Videomun bağlantısı.
Mike'ın Pexels'daki fotoğrafı

Bu yazıda, Geri Yayılım sürecinde Matematiksel ihtiyaç ve Zincir Kuralının türetilmesi üzerinde duracağım.

Tüm akışı açıklayan Youtube Videomun bağlantısı.

İlk olarak, bu yazı için, aşağıdaki gibi gerçekten basit bir Sinir Ağı mimarisini ele alacağım.

Sinir ağımız, içinde üç düğüm bulunan bir gizli katman içerir.

Diyagramdaki her ok, ayarlanabilen tek bir ağırlık olarak tam olarak bir kayan nokta değeri içerir. Toplamda 9 ağırlık (ilk gizli katmanda 6 ve ikinci gizli katmanda 3) vardır, böylece giriş (1,1) olduğunda, çıkış mümkün olduğunca (0)'a yakın olur.

Sinir ağını eğitmekle kastettiğimiz budur. Yalnızca basitlik amacıyla henüz bir önyargı değeri sunmadık - temel mantık aynı kalır.

Şimdi bir Sinir Ağının temellerini gözden geçirelim

nöron nedir

Bir nöron, bir aktivasyon fonksiyonu, girdiler (burada x1 ve x2 burada), bir ağırlık vektörü (burada w1,w2) ve bir sapma(b) olarak bilinen matematiksel bir fonksiyonu içeren bir kapsayıcıdır.

Bir nöron önce girdilerin ağırlıklı toplamını hesaplar.

Aktivasyon fonksiyonu, basitçe bir girdi alan ve bir çıktı üreten matematiksel bir fonksiyondur.

Aktivasyon fonksiyonunu, girdiyi normalleştiren ve bir çıktı üreten matematiksel bir işlem olarak düşünün. Çıktı daha sonra sonraki katmandaki nöronlara iletilir.

Girdi katmanları: Bu katmanlar bağımsız değişkenleri girdi olarak alır.

Gizli (ara) katmanlar: Bu katmanlar, girdi verilerinin üzerinde dönüşümler gerçekleştirirken girdi ve çıktı katmanlarını birbirine bağlar. Ayrıca, gizli katmanlar, girdi değerlerini daha yüksek/düşük boyutlu değerlere dönüştürmek için düğümler (yukarıdaki diyagramdaki birimler/daireler) içerir. Daha karmaşık bir gösterim elde etme işlevi, ara katmanların düğümlerinin değerlerini değiştiren çeşitli etkinleştirme işlevleri kullanılarak elde edilir.

Çıktı katmanı: Bu, girdi değişkenlerinin sonuç vermesi beklenen değerleri içerir.

Çıktı katmanındaki düğüm sayısı (önceki şemadaki daireler), eldeki göreve ve sürekli bir değişken mi yoksa kategorik bir değişken mi tahmin etmeye çalıştığımıza bağlıdır. Çıktı sürekli bir değişken ise çıktının bir düğümü vardır. Çıktı m olası sınıfla kategorik ise, çıktı katmanında m düğüm olacaktır. Düğümlerden/nöronlardan birine yakınlaşalım ve neler olduğunu görelim. Bir nöron girdilerini şu şekilde dönüştürür:

Gördüğünüz gibi, ağırlık ve girdi çiftlerinin çarpımlarının toplamı ve ardından ek bir f fonksiyonu (önyargı terimi + ürünlerin toplamı). f fonksiyonu, bu çarpımlar toplamının üzerine doğrusal olmayanlığı uygulamak için kullanılan aktivasyon fonksiyonudur.

Gizli katman birim değerlerinin hesaplanması

Şimdi tüm bağlantılara ağırlık atayacağız. İlk adımda, tüm bağlantılara rastgele ağırlıklar atarız. Ve genel olarak, sinir ağları eğitim başlamadan önce rastgele ağırlıklarla başlatılır.

0 ile 1 arasında rastgele başlatılan ilk ağırlıklarla başlayalım, ancak bir sinir ağının eğitim sürecinden sonraki son ağırlıkların belirli bir değer kümesi arasında olması gerekmediğini unutmayın. Ağdaki ağırlıkların ve değerlerin resmi bir temsili aşağıdaki diyagramda (sol yarı) sağlanır ve ağda rasgele başlatılan ağırlıklar sağ yarıda sağlanır.

Bir sonraki adımda, gizli katmandaki gizli birimlerin değerlerini hesaplamak için girdinin ağırlıklarla çarpılmasını gerçekleştiriyoruz. Gizli katmanın aktivasyon öncesi birim değerleri aşağıdaki gibi elde edilir:

Aktivasyon fonksiyonunun uygulanması

Aktivasyon fonksiyonları, girdi ve çıktı arasındaki karmaşık ilişkilerin modellenmesine yardımcı olur. Sık kullanılan aktivasyon fonksiyonlarından bazıları aşağıdaki gibi hesaplanır (burada x girdidir):

Kayıp değerlerinin hesaplanması

Kayıp değerleri (alternatif olarak maliyet fonksiyonları olarak adlandırılır), bir sinir ağında optimize ettiğimiz değerlerdir. Kayıp değerlerinin nasıl hesaplandığını anlamak için iki senaryoya bakalım:

Kategorik değişken tahmini

Sürekli değişken tahmini

Sürekli değişken tahmini sırasında kaybı hesaplama

Tipik olarak, değişken sürekli olduğunda, kayıp değeri, gerçek değerler ve tahminlerdeki farkın karesinin ortalaması olarak hesaplanır, yani, sinir ağı ile ilişkili ağırlık değerlerini değiştirerek ortalama kare hatasını en aza indirmeye çalışırız. Ortalama kare hata değeri şu şekilde hesaplanır:

Kategorik değişken tahmini sırasında kaybı hesaplama

Tahmin edilecek değişken ayrık olduğunda (yani, değişkende yalnızca birkaç kategori vardır), tipik olarak kategorik bir çapraz entropi kaybı işlevi kullanırız. Tahmin edilecek değişkenin içinde iki farklı değer olduğunda, kayıp fonksiyonu ikili çapraz entropidir. İkili çapraz entropi aşağıdaki gibi hesaplanır:

y çıktının gerçek değeridir, p çıktının tahmin edilen değeridir ve m toplam veri noktası sayısıdır.

Ve sonra Kategorik çapraz entropi aşağıdaki gibi hesaplanır:

y çıktının gerçek değeridir, p çıktının tahmin edilen değeridir, m toplam veri noktası sayısıdır ve C toplam sınıf sayısıdır.

Çapraz entropi kaybını görselleştirmenin basit bir yolu, tahmin matrisinin kendisine bakmaktır. Bir görüntü tanıma probleminde beş sınıf (Köpek, Kedi, Sıçan, İnek ve Tavuk) tahmin ettiğinizi varsayalım. Sinir ağı, softmax aktivasyonu ile son katmanda mutlaka beş nörona sahip olacaktır. Bu nedenle, her veri noktası için her sınıf için bir olasılık tahmin etmek zorunda kalacaktır. Diyelim ki beş görüntü var ve tahmin olasılıkları şöyle görünüyor (her satırda vurgulanan hücre hedef sınıfa karşılık geliyor):

Her satırın 1'e eşit olduğuna dikkat edin. İlk satırda, hedef Köpek ve tahmin olasılığı 0,88 olduğunda, karşılık gelen kayıp 0,128'dir (bu, 0,88 logunun negatifidir). Benzer şekilde, diğer kayıplar hesaplanır. Gördüğünüz gibi, doğru sınıfın olma olasılığı yüksek olduğunda kayıp değeri daha azdır. Bildiğiniz gibi, olasılıklar 0 ile 1 arasında değişir. Yani, olası minimum kayıp 0 olabilir (olasılık 1 olduğunda) ve olasılık 0 olduğunda maksimum kayıp sonsuz olabilir. Bir veri kümesindeki son kayıp, ortalamadır. tüm satırlardaki tüm bireysel kayıpların toplamı.

İleri beslemeli yayılma — İleri beslemeli yayılımı kodlamanın üst düzey bir stratejisi aşağıdaki gibidir:

  1. Her nöronda bir toplam ürün gerçekleştirin.

3. Çıkış katmanına kadar her nörondaki ilk iki adımı tekrarlayın.

4. Tahmini gerçek çıktıyla karşılaştırarak kaybı hesaplayın.

Geri yayılımın uygulanması

İleri beslemeli yayılımda, giriş katmanını gizli katmana bağladık ve daha sonra çıkış katmanına bağlandık. İlk yinelemede, ağırlıkları rastgele başlattık ve ardından bu ağırlık değerlerinden kaynaklanan kaybı hesapladık. Geri yayılımda, ters yaklaşımı kullanırız. İleri beslemeli yayılımda elde edilen kayıp değeri ile başlıyoruz ve ağın ağırlıklarını, kayıp değeri mümkün olduğunca en aza indirecek şekilde güncelliyoruz.

Aşağıdaki adımları uyguladığımızda kayıp değeri azalır:

Belirli bir ağırlığa yapılan güncellemenin, küçük bir miktar değiştirilerek azaltılan kayıp miktarı ile orantılı olduğunu unutmayın. Sezgisel olarak, eğer bir ağırlığı değiştirmek kaybı büyük bir değerle azaltırsa, o zaman ağırlığı büyük miktarda güncelleyebiliriz. Ancak, ağırlığı değiştirerek kayıp azalması küçükse, o zaman sadece küçük bir miktar güncelliyoruz.

Peki bir Sinir Ağları Geri Yayılım sırasında ağırlıkları ve Önyargıları nasıl günceller?

Ans is — Geri yayılım, ağırlıkların ve önyargıların değerlerini değiştirerek hatayı azaltır. Bunu Geri Yayılım sırasında yapmak için ağırlıktaki değişim oranı ile hata değişim oranını hesaplarız.

Belirli bir ağırlığa yapılan güncellemenin, küçük bir miktar değiştirilerek azaltılan kayıp miktarı ile orantılı olduğunu unutmayın.

Sezgisel olarak bu mantıklıdır, çünkü eğer bir ağırlığı değiştirmek kaybı büyük bir değerle azaltırsa, o zaman ağırlığı büyük miktarda güncelleyebiliriz. Ancak, ağırlığı değiştirerek kayıp azalması küçükse, o zaman sadece küçük bir miktar güncelliyoruz.

Geri Yayılımdaki Zincir Kuralı, hesaplamaları büyük ölçüde verimli hale nasıl getirir?

Önce maliyeti tek başına C=C(w) ağırlıklarının bir fonksiyonu olarak düşünün. w₁,w₂,… ağırlıklarını numaralandırıyorsunuz ve belirli bir wᵢ ağırlığı için ∂C/∂wᵢ'yi hesaplamak istiyorsunuz. Bunu yapmanın açık bir yolu, yaklaşımı kullanmaktır.

burada ϵ>0 küçük bir pozitif sayıdır ve eᵢ iᵗʰ yönündeki birim vektördür. Başka bir deyişle, wᵢ'nin biraz farklı iki değeri için C maliyetini hesaplayarak ve ardından yukarıdaki denklemi uygulayarak ∂C/∂wᵢ'yi tahmin edebiliriz. Aynı fikir, önyargılara göre ∂C/∂b kısmi türevlerini hesaplamak için kullanılabilir. Ancak bu yaklaşımla ilgili bir sorun var ki, milyonlarca ağırlıkla uğraşırken bu yaklaşım inanılmaz derecede yavaş olacak veya bazen gerçekçi bir şekilde uygulanamayacak.

Nedenini anlamak için ağımızda bir milyon ağırlığımız olduğunu hayal edin. Ardından, ∂C/∂wᵢ'yi hesaplamak için her bir wᵢ ağırlığı için C(w+ϵeᵢ) hesaplamamız gerekir. Bu, gradyanı hesaplamak için, ağ üzerinden bir milyon ileri geçiş gerektiren (eğitim örneği başına) maliyet işlevini milyonlarca kez hesaplamamız gerektiği anlamına gelir.

Geri yayılımdaki zincir kuralının son derece verimli belirli bir işlem sırası ile bizi kurtarmaya geldiği yer burasıdır.

Geri yayılımın akıllı yanı, ağ üzerinden yalnızca bir ileri geçiş ve ardından ağ üzerinden bir geri geçiş kullanarak tüm ∂C/∂wᵢ kısmi türevlerini aynı anda hesaplamamızı sağlamasıdır.

Ve böylece geri yayılımın toplam maliyeti, ağ üzerinden sadece iki ileri geçiş yapmakla kabaca aynıdır. Bunu, önceki yöntemin milyon ve bir ileri geçişiyle karşılaştırın.

Şimdi Sonunda Zincir Kuralının Gerçek Matematiksel Türevi

İlk olarak, Sinir Ağımıza tekrar bir göz atın.

Gizli katman aktivasyon değeri (sigmoid aktivasyonu) şu şekilde hesaplanır:

Gizli katman değeri şu şekilde hesaplanır:

W_11 ağırlığındaki değişime göre kayıp değeri C'deki bu değişimin, Sinir Ağı Eğitiminin Geri Yayılım kısmı sırasında hesaplanması gereken EN ÖNEMLİ şey olduğuna dikkat edin. Ve bu nedenle, bunu mümkün olduğunca optimal bir şekilde hesaplamanın bir yolunu bulmamız gerekiyor.

Önceki denklemde, bir kısmi diferansiyel denklemler zinciri oluşturduğumuza dikkat edin, böylece artık dört bileşenin her biri üzerinde kısmi türevleme gerçekleştirebiliriz ve sonuçta kayıp değerinin türevini ağırlığa göre hesaplayabiliriz. değer w_11

Neden tam olarak bu Kısmi Türev'i Zincir Kuralı uygulayarak hesaplıyoruz?

Her bir kısmi türevin kolayca hesaplanabilmesi için bir zincir oluşturuyoruz ve doğrudan bağlantılı olmayan iki değişkenin türevini alıyoruz, yani iç katman ağırlıkları ve Kayıp

Şimdi, önceki denklemdeki bireysel kısmi türevler aşağıdaki gibi hesaplanır:

Yukarıdaki denklemin (3) sigmoid fonksiyonunun türevinin ..

Kaynak

Sonuç olarak, yukarıdaki 4 bileşenli kısmi türevin tümü yerindeyken, kayıp değerinin gradyanı, kısmi türev terimlerinin her birinin önceki adımlarda hesaplandığı gibi karşılık gelen değerle değiştirilmesiyle hesaplanır:

Önceki formülden, ileri beslemeyi yeniden hesaplayarak yolumuzu kaba zorlamadan ağırlık değerindeki küçük bir değişikliğin kayıp değeri üzerindeki etkisini (ağırlığa göre kaybın gradyanı) hesaplayabildiğimizi görebiliriz. tekrar yayılma.

Ve şimdi son olarak, ağırlık değerini aşağıdaki gibi güncelleyeceğiz:

Tüm akışı açıklayan Youtube Videomun bağlantısı.