Bir sinir ağında Softmax katmanı


43

Geri yayılım ile eğitilmiş bir sinir ağına softmax katmanı eklemeye çalışıyorum, bu yüzden degradesini hesaplamaya çalışıyorum.

Softmax çıktısı olup , burada , çıkış nöron numarasıdır. jhj=ezjezij

Eğer türetirsem, o zaman alırım

hjzj=hj(1hj)

Lojistik regresyona benzer. Ancak, sayısal gradyan kontrolüm başarısız olduğu için bu yanlış.

Neyi yanlış yapıyorum? Çapraz türevleri de hesaplamam gerektiğini düşündüm (yani ) ama bunun nasıl yapılacağından ve degradenin boyutunu koruyacağından emin değilim. Aynısı, geri yayılma işlemine de uyacak.hjzk


3
Degrade kontrolünün nasıl başarısız olacağına dair özel bir soru olduğundan, NN'ye genel bir softmax katmanı eklemekten bahsetmediğinden sorunuzun başlığını iyileştirmelisiniz. Başlığı "Sinir Ağıma softmax katmanı eklerken neden geri yayılma düzgün çalışmıyor?" Olarak değiştirmenizi şiddetle tavsiye ediyorum.
Charlie Parker

Yanıtlar:


43

Bunun için kendi cevabımı vermekte kendimi kötü hissediyorum, çünkü belki de Jacobian'ın bir vektöre nasıl indirgenebileceği konusundaki son sezgi hariç, amip ve juampa tarafından oldukça iyi ele geçirilmiş .

Jacobian matrisinin köşegeninin derecesini doğru bir şekilde türetmişsinizdir.

hizj=hi(1hj):i=j

ve amipin dediği gibi, aynı zamanda Yakupyalı'nın köşegen olmayan girişlerini türetmek zorundasınız.

hizj=hihj:ij

Bu iki kavram tanımı Kronecker Deltası adı verilen bir yapı kullanılarak kolayca birleştirilebilir , böylece degradenin tanımı

hizj=hi(δijhj)

Yani bir kare matristir[J]ij=hi(δijhj)

Bu noktaya kadar olan tüm bilgiler zaten amip ve juampa tarafından kapsanmaktadır. Tabii ki sorun, girdi hatalarını zaten hesaplanmış çıktı hatalarından elde etmemiz gerektiğidir . Çıkış hatası gradyanı yana girişlerin her bağlıdır, giriş sonra gradyan olanx ihixi

[x]k=i=1hi,k

Yukarıda tanımlanan Jacobian matrisi göz önüne alındığında, bu, matrisin ürünü ve çıktı hata vektörü olarak önemsiz bir şekilde uygulanır:

σl=Jσl+1

Softmax katmanı çıkış katınızsa, onu çapraz entropi maliyet modeliyle birleştirmek, hesaplamayı basitleştirmek için basitleştirir

σl=ht

burada etiketlerin vektörüdür ve , softmax işlevinden çıkan çıktıdır. Sadeleştirilmiş form sadece uygun değil, aynı zamanda sayısal kararlılık açısından da son derece kullanışlıdır.sth


ile , bir ? (sadece 'gradyanın' bu durumda ne anlama geldiğini anlamaya çalışıyorum)σl,J=σl=(σl,1,σl,2,...,σl,k)σl,j=Czj
Alexandre Holden Daly

Evet doğru.
Mranz

Birisi lütfen Kronecker Deltası'ndaki küçük harfli delta terimlerinin ne olduğunu ve nasıl hesaplanacağını açıklayabilir mi?
danijar

Bir süre bu soruna sıkıştım. Netleşmeştirmek. Bir vektörünüz var (pre softmax) ve sonra softmax'ı hesaplarsınız. Softmax değerleri tüm giriş değerlerine bağlı olduğundan, gerçek jacobian matrisine ihtiyaç vardır. Sonra, jacobian matrisini alırsınız ve toplamı, her zamanki gibi gradyan iniş için kullandığınız tek sıralı bir vektör elde etmek için satırları azaltır. Tüm bu% 100 doğru mu?
harveyslash

14

Türev yanlış. Olmalı,

hjzk=hjδkjhjhk

C

nk=1Ctknlnyk(xn)

örnek küme üzerinden , , n. inci örnek için hedefin k. bileşeninin değeridir. Burada bir 1-C kodlama şeması kullandığınız varsayılmaktadır, yani, . Böyle bir durumda, karşılık gelen sınıfı temsil eden bileşen hariç, tüm t'ler sıfırdır. t n ktkntkn

Not: t'ler sabittir. Dolayısıyla bu işlevselliği en aza indirgemek, en aza indirmeye eşdeğerdir,

nk=1Ctknlnyk(xn)+nk=1Ctknlntkn=nk=1Ctknlnyk(xn)tkn

yani Jacobian’ın çok uygun bir formda olması avantajına sahip.

Ezj=hjtj

Piskopos'un Örüntü Tanıma için Sinir Ağları'nın bir kopyasını almanızı tavsiye ederim . IMHO hala sinir ağlarında en iyi kitap.


14

Softmax'ın her çıktısı tüm girdilere bağlıdır, bu yüzden degrade gerçekten de bir Jacobian matrisidir. Doğru bir şekilde hesapladınız , fakat ayrıca ise gerekir . Sanırım ilk ifadeyi türetebilirseniz, ikinci ifadeyi de kolayca türetmeniz gerekir.khJ=-sjsaatkjkjhj=hjzj=hj(1hj)khj=hjhkjk

Geriye yayılmada ne gibi bir problem gördüğünüzden emin değilim: softmax katmanında çıkışlarına ve girişlerine sahip olmalısınız , bu nedenle her çıkıştan bir hata her girişe yayılmalıdır ve tam olarak bu nedenle tüm Jacobian'a ihtiyacınız var. Öte yandan, genellikle softmax çıktısı ile ilişkili bir maliyet fonksiyonuna sahip olursunuz, örneğin burada istediğiniz (sınıflandırma yaparken, çoğu zaman bunlardan biri 1'e eşittir). ve diğerleri 0). O zaman aslında , temiz bir ifadeyle sonuçlanan bir zincir kuralı ile hesaplanabilen ve aslında bir vektör (matris değil) olan, .j C = - j t j log h h j , t j Cjj

C=jtjloghj,
tjCzj

1
Sorunumu daha iyi tanımlamaya çalışacağım, örneğin bu öğretici ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm'e göre , ağırlıkları ve deltaları türev ile çarparak öğelendiğim (adım 3). Yani tam jacobian matrisine sahipsem, boyutlar uymuyor. Teşekkürler.
Ran

Softmax değil, normal bir gizli katman ise nasıl devam edeceğini biliyor musunuz? Bu katmandaki her birimin önceki katmanın tüm birimlerinden girdiler aldığını hayal edin (yani bu katman "tam olarak bağlanır"), bu normalde böyledir. Öyleyse, hataları bu katmandan geriye doğru yaymanız gerekir ve türevler de bir Jacobian matrisi oluşturur. Nasıl yapılacağı konusunda kafanız karışırsa, karmaşanız softmax ile ilişkili değildir.
amip diyor Reinstate Monica,

1
Doğrusal ve sigmoid katmanlar için başarılı bir şekilde uygulanmaktadır çünkü türev bir vektördür, bu yüzden boyutlarla bir sorunum olmadı.
koştu.

Üzgünüm, Ran, belki de sadece aptalım, ama önceki katmana tamamen bağlı bir sigmoid katmana sahipseniz, o zaman her birimin çıkışına (ya da girişine) her birinden gelen bağlantıya göre türev alacaktır . önceki katman, yani tüm türevler bir 2D matris oluşturur, n'est-ce pas? benji
amip diyor Reinstate Monica
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.