Yığın Normalleştirme (Batch Normalization)

Yığın Normalleştirme Nedir ? Neden Kullanılır ?

Yığın normalleştirme methodu görece yeni bir yöntem. 2015 yılında şu makaleyle yayınlandı. Yığın normalleştirme derin sinir ağlarındaki herhangi bir katmana 0’a ortalanmış ve 1 ile 0 arasında değerlere sahip veriler vermemizi sağlar.

Mini-Yığınlar, Kaydırma ve Ölçekleme

Tabii sadece bu kadarla kalmıyor. Yığın normalleştirmeyi günümüz sinir ağlarında tercih edilen bir metod yapan birkaç şey daha var. Gelin yığın normalleştirme algoritmasına bir göz atalım:

Sırasıyla :

  • Mini-yığındaki girdilerin hepsi toplanıp toplam girdi sayısına bölünerek ortalama değer bulunuyor.

  • Mini-yığındaki her girdiden ortalama değer çıkarılıp karesi alınıyor ve hepsi toplanıyor. Sonrasında yine mini-yığındaki toplam girdi sayısına bölünüyor. Buna mini-yığının varyansı denir. Yani verilerin genellikle hangi aralıklarda bulunduğunun bir ölçütü.

  • Veriler normalize ediliyor.

  • Normalize edilmiş veri gamma(ölçekleme parametresi) ve beta(kaydırma parametresi) ile çarpılıyor.

Şimdi son kısma dikkatinizi çekmek istiyorum. Burada normalize edilmiş veriyi gamma ve beta parametreleriyle çarpıyoruz ve elimizde öğrenilebilir bir lineer denklem oluyor. Yani gamma ve beta hiper parametreler. Bu, onların eğitim sırasında optimize edileceği anlamına geliyor. Bu parametreler yığın normalleştirme katmanının veri üzerinde ne kadar işlem yapacağı üstüne bir kontrol kazanmasını sağlıyor. Dikkat ederseniz bu parametrelere gamma = sqrt(var(x)) ve beta = mean(x) değerleri atanırsa veri üstünde herhangi bir normalizasyon gerçekleşmeyecek. Yani basitçe eğitim sırasında bu katman verinin üstünde ne kadar oynama yapmak gerektiğine kendi karar veriyor.

Modelleme, İleri-İşlem ve Geri-İşlem

Modellemeler algoritmaları görselleştirip daha kolay anlaşılmalarını sağlar. Özellikle derin sinir ağlarında, ağdaki işlemlerin modellemelerini çıkarıp ileri ve geri işlemleri bu grafik benzeri modellerde izlememiz gerekir. Dolayısıyla, biz de yığın normalleştirme için oluşturulmuş bir modelin üstünden gideceğiz.

Derin ağların ve hesaplama modellemelerinin nasıl çalıştığı hakkında basit bir bilgiye sahip olduğunuzu varsayarak, yığın-normalleştirmenin ileri işlem safhasını direkt koda dökeceğim. Zaten grafikteki işlemlerin dışında farklı bir şey yapmayacağız.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
def batchnorm_forward(x, gamma, beta, eps):

N, D = x.shape

#adım1 : ortalama değer hesabı
mu = 1./N * np.sum(x, axis = 0)

#adım2: ortalama değer vektörünün her x değerinden çıkarılması
xmu = x - mu

#adım3: Aşağıya kıvrılan dalı takip ederek - xmu'nün karesi
sq = xmu ** 2

#adım4: varyansın hesaplanması
var = 1./N * np.sum(sq, axis = 0)

#adım5: nümerik stabilite için eps ekliyoruz ve sonra karekök alıyoruz
sqrtvar = np.sqrt(var + eps)

#adım6: tersini alıyoruz
ivar = 1./sqrtvar

#adım7: normalizasyon için son adım
xhat = xmu * ivar

#adım8: gamma(scaling) parametresiyle çarpalım
gammax = gamma * xhat

#adım9: beta(shift) parametresiyle toplayalım.
out = gammax + beta

#geri işlem için gerekecek değerleri cache'te tutuyoruz.
cache = (xhat,gamma,xmu,ivar,sqrtvar,var,eps)

return out, cache

Geri İşlem

Şimdi işin zorlayıcı kısmına geldik. Geri-işlem sırasında grafiğimizdeki nodları adım adım geriye doğru izleyeceğiz. Bir öndeki noddan gelen gradyan değeriyle şimdiki nodumuzun gradyanını çarparak, kayıp fonksiyonumuz üstündeki etkisini bulmak istediğimiz değişkenlere kadar ilerleyeceğiz.

Adım 9




Hatırlarsanız f = x + y şeklinde bir fonksiyonun iki değişkene göre türevi de 1 olurdu. Dolayısıyla burada lokal nodumuzun iki değişkene göre de gradyanı 1, üstten gelen gradyan akımımız ise dout değeri. Üstelik bu nodda beta yani kaydırma parametremize giden gradyanı direkt bulmuş olduk. beta (D,) boyutlarında bir vektördü. Üstten gelen dout gradyanı ise (N,D) boyutlarına sahip dolayısıyla betanın gradyan değerinin kendi boyutlarıyla uyuşması için her bir d ∈ D değeri için N değeri topluyoruz.

Adım 8




Bu sefer elimizde f = x * y tarzında bir fonksiyon var. Bu tür bir fonksiyonda ise iki değişkenden birine göre türev alındığında diğerini verir. Dolayısıyla bu adımda ileri işlemde cache değişkenin tuttuğumz değerlerden bazılarına ihtiyacımız olacak. Gamma yani ölçekleme paratmetremiz için üstten gelen gradyan ile normalize edilmiş x değerini çarpıp ( bu arada matris iç çarpımı yapmıyoruz, iki matrisin ilişkili her elemanını birbiriyle çarpıyoruz.), gamma (D,) boyutlarına sahip bir vektör olduğu için az önceki gibi her d ∈ D değeri için N değeri topluyoruz. Artık elimizde gamma parametremize giden gradyan da var. Geriye sadece x’e giden gradyanı takip etmek kaldı.

Adım 7




Artık mantığı anladığımıza göre uzun uzun anlatmadan devam edebiliriz. Şimdi ise cache değerinden bize gereken değerler xmu ve ivar.

Adım 6




Bu nodda girdi değerinin çarpmaya göre tersi alınıyor. f = 1 / x türünde bir fonksiyonun x’e göre türevi 1 / x^2’dir. Dolayısıyla lokal gradyanımız da 1 / sqrtvar^2’e eşit, zira ileri işlem sırasında bu fonksiyona girdi olarak verilen değişken sqrtvar idi.(sqrtvar değişkenini de cache’te depolamıştık.)

Adım 5




Gerekli değişkenlerimiz var ve eps. Yine karekök içerisindeki terimi (x + eps)^-1/2 olarak alıp üstel türev işlemi yapalım.

Adım 4




İlk bakışta bu adımdaki gradyanın hesabı gözünüze karmaşık gelebilir. Aslında yapacağımız işlem oldukça basit. Hatırlıyosak + (toplama) nodlarında üstten gelen gradyan değişmeden direkt (adım 9’a bakın) aktarılıyordu. Bu sefer ise üstten gelen (D,) boyutlu gradyanı (N,D) boyutlu matrise dönüştürmek için her sütunda gradyanı N ayrı satıra eşit olarak dağıtacağız. Sonuç olarak ileri işlemde bu nodun girdisi olan sq değişkeninin boyutlarında 1’lerden oluşan bir matris oluşturuyoruz, her elemanı 1/N ile çarpıyoruz, sonrasında ise üstten gelen gradyan ile çarpıyoruz.

Adım 3




Bu nodda da yapılacak oldukça basit. İleri işlem sırasında kare üs alıyorsak, geri işlem sırasında da 2x şekline dönüştürüyoruz.

Adım 2




Buradaki püf nokta ise eğer bir noda üstten 2 yada daha fazla gradyan geliyorsa, işlemlerin gradyanların toplanarak yapılacağını bilmeniz. Gerisi toplama nodlarındakiyle aynı mantıkla işliyor. Gördüğünüz gibi mu değişkeni için yine (D,) boyutuna indirmek amacıyla matrisi topluyoruz.

Adım 1




Bu nodda yapacağımız şey adım 4’tekiyle tamamen aynı.

Adım 0 (Girdi Gradyanı)




Sonuç olarak x girdi verilerine gelen gradyanı böyle buluyoruz. Ayrıca burda elde ettiğimiz dx değeri bir önceki katmana vereceğimiz dout değeri olacak.

Geri İşlem Uygulaması

Şimdi de yaptığımız işlemleri koda dökelim :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def batchnorm_backward(dout, cache):

#cache verilerini çıkaralım
xhat,gamma,xmu,ivar,sqrtvar,var,eps = cache

#girdi/çıktının boyutlarını belirleyelim
N,D = dout.shape

#adım9
dbeta = np.sum(dout, axis=0)
dgammax = dout #not necessary, but more understandable

#adım8
dgamma = np.sum(dgammax*xhat, axis=0)
dxhat = dgammax * gamma

#adım7
divar = np.sum(dxhat*xmu, axis=0)
dxmu1 = dxhat * ivar

#adım6
dsqrtvar = -1. /(sqrtvar**2) * divar

#adım5
dvar = 0.5 * 1. /np.sqrt(var+eps) * dsqrtvar

#adım4
dsq = 1. /N * np.ones((N,D)) * dvar

#adım3
dxmu2 = 2 * xmu * dsq

#adım2
dx1 = (dxmu1 + dxmu2)
dmu = -1 * np.sum(dxmu1+dxmu2, axis=0)

#adım1
dx2 = 1. /N * np.ones((N,D)) * dmu

#adım0
dx = dx1 + dx2

return dx, dgamma, dbeta

KAYNAKÇA

Paylaş Yorumlar

Simülasyon Hipotezi

Gökyüzü, hava, dünya, renkler, şekiller, sesler ve etrafımdaki her şey sadece onun bana gösterdiği ve inanmamı istediği şeyler. Ben ise sadece ellere, gözlere, ete ve kana sahip olduğuna inanan biriyim.

Simulasyon fikirleri hepimizin kafasını kurcalamıştır. Bazı insanlar rüyaların başka evrenlerde yaşandığına inanır, bazıları ise yaşadıkları hayatın zaten bir rüya olduğunu ve uyanınca gerçek hayata döneceklerine. Kendimden örnek verirsem eğer, küçükken Kur’an her insanın yaşamının ahiret öncesi bir test olduğunu söylediğinden dünyada sadece kendimin gerçek olduğunu ve diğer herkesin benim için oluşturulmuş testin birer objesi olduğunu düşünürdüm.

Tarihte de böyle olmuş. İnsanlığın başlangıcından itibaren bu hipotezlere bazen direkt bazen bir şeyin içine işlenmiş şekilde fark edersiniz. Bunlardan ilkleri dinler ve mitlerdir. Dinler asıl yaşamın dünyadaki olmadığını, bu yaşamın sadece bir test olduğunu ve asıl yaşamınızın ise bu dünyadan göçüp gidince başlayacağını söyler. Mitler ise dinlerin temelini oluşturur. Genellikle aynı ana fikre sahip farklı öykülerle dinlerin inandırıcılıklarını arttırırlar. Nuh’un Gemisi, Lut Kavmi vesaire..

Idealar ve Nesne Tabanlı Programlama

Şimdi işin felsefesine bakalım biraz. Platon bu dünyadaki şeylerin idealar evrenindeki mükemmel yapıların bozulmuş, çarpık yansımaları olduğunu söyler. Programlama bilenleriniz varsa bu nesne tabanlı programlamanın temel mantığıdır. Objeler sınıflardan türer. Mesela bir araba sınıfınız var diyelim. Bu sınıf arabaların genel özelliklerine sahiptir. Model, renk, motor gücü, üretim yılı gibi. Bu sınıftan oluşturulan objeler ise programlama sırasında asıl kullandığınız yapılardır. Yani bacanağınızın Doblo’su araba sınıfından türemiş bir objedir.

İçimdeki Şeytan

Girişteki söz Descartes’ın meşhur şeytanı hakkında. Kendisi gerçekliğin sadece bir yanılgı olduğunu düşünmüş ve 1641 yılında Meditations on First Philosophy adlı kitabında bu konuyu işlemiş. Bu konu üzerine birçok düşünce deneyi yapan Descartes gördüğümüz şeylerin gerçek olup olmadığından hiçbir zaman emin olamayacağımızı söyler çünkü onun şeytanı sizi her şeye ikna edebilir. Bir tür simulatör gibi.

Kavanozdaki Beyin ve Putnam

Descartes’ın bu düşünce deneyine benzer olarak Kavanozdaki Beyin teorisi de bu durumu güzel açıklar. Bu teoriye göre beyniniz bir kavanozda bulunuyor ve dış dünyayı çok iyi simule edebilen bir bilgisayara bağlı. Olayı şöyle açıklayalım : P = sizin dış dünyayla ilgili bilgileriniz olsun. Mesela güneşin sıcak olmasını ele alalım.

1- Eğer P’yi biliyorsam, o zaman kavanozda bir beyin olmayabilirim.
2- Ama kavanozdaki bir beyin olmadığımdan asla emin olamam.
3- O zaman P’yi bilmiyorum.

Bu aslında sadece bir şüphecilik argümanı. Yani size hiçbir zaman ben gerçeğim diyemeyeceğinizi anlatıyor. Putnam’ın bu tartışma üzerine söylediği şeyler de gerçekten sarsıcı. Diyor ki, “ Kavanozdaki bir beyinim diyorsunuz ama kavanoz da beyin de size simulasyon tarafından öğretilmiş gerçekler. Dolayısıyla simulasyon dışı dünyada bunlar varolmayabilir.O zaman siz de kavanozdaki bir beyin değilsiniz ama ne olduğunuzu asla kavrayamazsınız çünkü simulasyon-dışı hiçbir bilgiye sahip değilsiniz”. Aslında bu noktadan sonra birkaç tane simulasyon çeşidi olduğunu görebiliyoruz. Beynimizin kavanozda olduğu egomanyak bize özel bir simulasyon, sizin,benim ya da etrafınızdaki hiçbir şeyin simulasyon-dışı dünyaya göre gerçek olmadığı bir bilgisayar simulasyonu veya son olarak Matrix’teki gibi bir sanal-gerçeklik simulasyonu.

Daha fazla kendinden şüphe etmek isteyenler için bu konu üstüne yapılmış çok fazla düşünce deneyi var. Zhuangzi’nin Kelebek Rüyası, Chinese Room, Turing Testi, Baudrillard’ın Simulakrumu vesaire. Google’da aratarak bunlar hakkında yeterince bilgi bulabilirsiniz. Şimdi sizi asıl bölüme alıyorum.

Nick Bostrom ile Simulasyondayıza Hoşgeldiniz

Bostrom, Oxford Üniversitesi’nde İsveçli bir felsefe profesorü. Bu sıralar yapay zeka etiği ve biyoetik üzerine çalışıyor. Kendisi yapay zekanın bilinçlenip istemediğimiz sonuçlara yol açacağı bir distopya gibi fikirleri Bill Gates, Elon Musk gibi ünlü isimlere bile aşılamış. Bizim ilgilendiğimiz kısım ise 2003 yılında yayınladığı makale ve bahsettiği simulasyon hipotezi.

Bostrom makalesinde aşağıdaki 3 seçenekten az birinin doğru olması gerektiğini söylüyor:

1- İnsan ırkı kendi atalarını simule edebilecek bir uygarlık mertebesine erişemeden yok olacak.
2- Kendi atalarını simule edebilecek işlem gücüne ulaşmış bir uygarlık bazı sebeplerden dolayı bunu istemeyecek.(Durumun etik olup olmaması, Kaynak verimliliği gibi nedenler olabilir.)
3- Nerdeyse kesin olarak simulasyonda yaşıyoruz.

Bostrom 3. seçeneğine şöyle devam ediyor. Eğer olur da üst bir uygarlık atalarını, yani bizi ve öncesini, simule etmek isterse o zaman simulasyondaki bilinçlerin sayısı gerçek evrende bulunan bilinçlerin sayısından çok büyük olacaktır çünkü herhangi bir zamanda bizi simule etmeya kalkışacak bir uygarlık gerçek evrendekinden milyonlarca kat fazla bilinci zamandan bağımsız şekilde oluşturabilir(Simule edilen evrende zamanın gerçek evrendekiyle aynı oranda ilerlemesine gerek yok). Dolayısıyla sizin bir simulasyonda değil de gerçek evrende yaşıyor olmanız olasılığı dramatik bir şekilde azalıyor.(Eğer ki çoklu evrenler teorisini de göze alırsak bu olasılık nerdeyse yok)

Simulasyon İkizleri (Kuantum Fiziği - Benlik Paradoksu)

Çağımızın göz nuru, kimsenin bile anlamaya niyetlenmediği kuantum fiziğine giriş yapıyoruz. Kuantum fiziği moleküler, atomik ve atom altı seviyede madde ve enerjinin doğasını ve davranışını inceleyen çalışma alanıdır diyor Vikipedi. Merak etmeyin sizi matematik formullerine boğup odanızda karadelik oluşturmayacağım. Ama ne yazık ki bizi ilgilendiren birkaç kuantum davranışına değinmemiz gerek.

Tanrıcılık Oynamak

Kuantum Mekaniği’nde Dalga Fonksiyonu adında prediktif bir fonksiyon bulunur. Bu fonksiyona göre bir elektron gözlemlenmedikçe iki ayrı duruma aynı anda sahip olabilir. Burdaki durumu basitleştirmek adına elektronun siyah yada beyaz olmasını ele alalım. Elektron gözlemlenene kadar iki durumda da bulunur. Biri gözlemlediğinde ise dalga fonksiyonu çöker ve artık iki durumdan birine sahip olur. Fonksiyon hakkında daha iyi bir anlayış edinmek için şu linke gidebilirsiniz.

Artık konunun temellerine sahip olduğumuza göre aşağıdaki argümanları sunabiliriz.

  • Diyelim bir simulasyon yapıyorsunuz. Sadece gözlemlenen yerleri ince detayına kadar işleyip gerisini belli kurallara ve örüntüye uydurulmuş basit yapılar şeklinde oluşturmak sizi boş yere harcanan işlem gücünden kurtarırdı. Evrenimizde de durum böyle. Uzaktaki galaksilerin büyük ölçeklerde Newton mekaniklerine göre işlediğini biliyoruz ama inceleyebildiğimiz yerlerde karşımıza kuantum çıkıyor. Belki de kuantumu hiçbir zaman algılayamayacağız, ne de olsa simulasyon oluşturduysanız simlerin bir simulasyonda olduklarından asla emin olamamaları gerekir.

  • Kuantum mekaniğinin işleyişi insana tanrısal yetkiler veriyor. Düşünsenize, siz gözlemlediğiniz zaman bazı şeyler gerçek oluyor. Burada “ biraz biz kimiz ki? “ dememiz gerekiyor. Benlik ve bilinç dediğimiz nedir? Bilime sorarsanız hepimiz hayvanız. Peki bir kedi ya da bir taş gözlem yaptığında da kuantum dalga fonksiyonu çöker mi? Bazı bilim adamlarına göre bilinç evrimsel süreçte bir çöp. Sadece hareketlerimizi nedenselleştirmemizi sağlıyor. Hatta yapılan şu araştırmaya bakarsanız özgür iradeye sahip olmadığımız hakkında sağlam deliller var. Şimdi bir de simulasyonda olduğunuzu düşünün. Sadece simler(insanlara) için gözlem yaptıklarında değişen bir çevre yaratmak mantıklı olurdu değil mi ?

  • Gün geçtikçe evreni matematik formüllerine oturtabiliyoruz. Max Tegmark’ın şu linkteki konuşması evrenin matematiksel temelini anlatıyor. Ayrıca evren bazı limitlere sahip. Gidebileceğiniz en küçük uzaklık Planck Uzaklığı,- 10 üzeri -35 milimetre - bundan daha küçük bir uzunluk almayı denerseniz karadelik oluşturursunuz zira daha küçük bir boyutta kararlı yapılar oluşmaz. Gidebileceğiniz en yüksek hız ışık hızı. Elektronların enerji seviyeleri katmanlar halinde ve enerjiler paketler şeklinde(quanta) aktarılıyor. Tam da bir simulasyonun sahip olması gereken limitler gibi.

  • Platon ve nesne tabanlı programlamadan bahsetmiştik. Evrende her şey temel parçacıklardan oluşur ve bu temel parçacıklar birkaç özellikleri dışında birbirinin tıpatıp aynısıdır. Hatta kuantum alan teorisine göre bu parçacıklar gerektiğinde bu alanlardan oluşurlar. Tıpkı bir elektron classınız olması ve gerektiğinde birbirinin aynı özellikte elektron objeleri oluşturabilmeniz gibi. Bu da size bir bilgisayarın hafızasını sadece gerektiğinde kullanabilmenizi sağlar.

  • Mikro düzeyde işleyen olaylarda enformasyon teorisine uyan olgular görülüyor. DNA kendini kopyalarken yanlışları düzeltmek için hata düzeltici yapılar kullanıyor ve kopyalama süreci bilgilerin bilgisayarın RAM’inden bir CD’ye yazılmasına inanılmaz benziyor. James Gates, Maryland Üniversitesi’nden bir Teorik Fizikçi, “Kuark ve elektronların süpersimetrisini açıklayan denklemleri incelerken bunlar içinde hata düzeltici yapılara denk geldim. İnternet tarayıcıların kullandıkları hata düzeltici kodların aynısıydılar.” demiş.

Eh, sonuç olarak diyelim ki simulasyondayız. Ee sonra? Bu konuyu kafaya takıp sorun etmeye gerek yok. Yine de insanın başına ne gelirse meraktan gelirmiş. Şahsen bu sıralar benim oldukça ilgilendiğim bir hipotez ama nasıl olsa kimse hiçbir zaman bu konuda bir kanıta sahip olamayacak yine de araştırmadan da edemiyoruz. Bilim dediğimiz de insanın bitmek bilmeyen merakının sonucudur zaten.

KAYNAKÇA

Paylaş Yorumlar

Gradyan İnişi ve Backpropagation

Gradyan iniş algoritması , yapay sinir ağlarının onlara verdiğimiz verileri ‘öğrenmesini’ sağlayan algoritmalardan biri. Bu algoritma nöral ağımızın kayıp fonksiyonunun değerini minimize etmeye çalışıyor. Bir çeşit optimizasyon fonksiyonu olarak düşünebilirsiniz. Backpropagation ise gradyan iniş algoritmamızı kolaylıkla uygulayabilmemiz için oluşturulan bir yöntem. Ağımızdaki katmanları oluşturan fonksiyonları en basit değişkenlerine kadar indirip bir model oluşturuyoruz, ve modeli çıktıdan itibaren geri doğru takip ederek dL/dW ilişkisini zincir kuralıyla bulmaya çalışıyoruz.

Şimdi, basitçe anlatabilmek için, 2 tane tamamen bağlı katmana sahip bir nöral ağda backpropagationu modelleyelim.

Modelin Açıklaması

Ağımız ilk katmanda X1 inputları ile W1 ağırlıklarını çarpıyor. Bu çarpıma bias değerini ekleyip. Bir RELU maskesinden geçiriyor(RELU maskesi max(0,f(x,w) fonksiyonunu uygular). Maskeden çıkarılan değerler tekrar W2 ağırlıklarıyla çarpılıyor ve bir skor değeri elde ediliyor. Bu skor değerleri de kayıp fonksiyonumuza sokulup modelimizin ne kadar başarılı olduğu ölçülüyor. Kayıp fonksiyonumuzun da bir Cross-Entropy Loss Function olduğunu kabul edelim.

Forward Pass

Şimdi modelin matematiksel ifadesini yazalım.Önce x1 ve w1 çarpılıyor :

$$f\;=\;X1\;.\;W1\;$$

Sonrasında b1 ekleniyor ve ilk katmanın yapısını tamamlamış oluyoruz.

$$f\;=\;X1\;.\;W1\;+\;b1$$

İlk katmandan çıkan değerler bir RELU içinden geçiriliyor. Bu işlem sonucunda aldığımız değerlere de X2 diyelim.

$$\mathrm X2\;=\:\max(0,\mathrm f)$$

Son olarak da bu X2 değerlerini W2 ile çarpıp, b2 ile toplayarak g fonksiyonunu elde ediyoruz.

$$g\;=\;X2\;.\;W2\;+\;b2\;$$

Yani skor fonksiyonumuzu şöyle açabiliriz :

$$g\circ f\;=\;W2\;.\;f\;+\;b2 \;\;\;\;,\;\;\;\; f\;=\;max(0,X1.W1+b1)$$

Kayıp Fonksiyonumuza gelirsek, Softmax ve Cross-Entropy Loss Function kullanıyoruz.

$$Softmax_j(z)\;=\;\frac{\;e^{Z_j}}{\displaystyle\underset k{\sum\;\;e^{z_k}}}$$
$$Cross-Entropy\;Loss\;,\;L_i\;=\;-\;\log\left(Softmax(y_i)\;\right)$$

Backpropagation (Backward Pass)

Şimdi modelimizi sondan başa doğru gradyanlar alarak takip edeceğiz. Önce skorlarımızın kayıp fonksiyonumuz üzerindeki gradyanını bulalım.
Softmax fonskiyonunun girdisi ve çıktısı birer vektör olduğundan, softmax’ın türevi dediğimizde aslında kastettiğim ve bulacağımız şey jakobyan matrisidir.
Aşağıdaki notasyonla ifade edilebilir :

$$D_jS_{i\;}\;=\;\frac{\partial S_i}{\partial a_j}\;=\;S_i(\delta_{ij}\;-\;S_j)$$

Notasyonun eldesi hakkında daha detaylı bilgi için bu linke tıklayabilirsiniz.

Şimdi modelimizi geri doğru takip edelim :

$$\frac{\partial L}{\partial b2}\;=\;\frac{\partial L}{\partial g}\;.\;\frac{\partial g}{\partial b2}\;\;\;,\;\;\; \frac{\partial L}{\partial W2}\;=\;\frac{\partial L}{\partial g}\;.\;\frac{\partial g}{\partial W2}$$
$$\frac{\partial L}{\partial X2}\;=\;\frac{\partial L}{\partial g}\;.\;\frac{\partial g}{\partial X2}\;$$

RELU kapısında işler biraz değişiyor.

$$\frac{\partial L}{\partial RELU}\;=\;\frac{\partial X2}{\partial RELU}\;.\;\frac{\partial L}{\partial X2}\;$$

Burada X2’nin RELU’ya göre kısmı türevini aldığımızda, RELU sadece 0’dan büyük gradyanların bu kapıdan geriye gitmesine izin veriyor. Detayını burda vermeyeceğim, merak edenler için şu linkte anlatılmış.

$$\frac{\partial L}{\partial b1}\;=\;\frac{\partial L}{\partial RELU}\;.\;\frac{\partial{RELU}}{\partial{b1}}\;\;\;,\;\;\;\;\frac{\partial L}{\partial W1}\;=\;\frac{\partial L}{\partial RELU}\;.\;\frac{\partial{RELU}}{\partial{W1}}\;$$

Evet, sonuç olarak W1 ve W2 ağırlık tensorlerine giden gradyanları bu şekilde elde ediyoruz. Gradyan iniş algoritması ile bu ağırlık tensorleri güncellenir ve model optimize edilir. Tabii inceledğimiz örnek oldukça basitti, yine de karmaşık modellerin de temelinde bu mantık yatıyor. Dolayısıyla bu iki yöntemi anlamak oldukça önemli.

Paylaş Yorumlar