Bir sinir ağındaki gizli katman ne hesaplar?


187

Eminim ki birçok kişi 'sizin için google yapmama izin ver' bağlantılarıyla yanıt verecektir, bu yüzden bunu anlamaya çalıştığımı söylemek istiyorum, lütfen buradaki anlayış eksikliğimi affedin, ancak bunun nasıl olduğunu çözemiyorum. Bir sinir ağının pratik uygulaması aslında işe yarıyor.

Giriş katmanını ve verilerin nasıl normalleştirileceğini anlıyorum, ayrıca önyargı birimini de anlıyorum, ancak gizli katmana gelince, bu katmandaki gerçek hesaplamanın ne olduğunu ve çıktıya nasıl eşlendiğini biraz sisli görüyorum. Gizli katmandaki soru işaretli diyagramları, AND / OR / XOR gibi boolean fonksiyonları, aktivasyon fonksiyonlarını ve tüm gizli birimlerle eşleşen giriş düğümlerini ve yalnızca birkaç gizli birimle eşleşen giriş düğümlerini ve benzerlerini gördüm. Sadece pratik açıdan birkaç sorum var. Tabii ki, bir çocuğa açıklayacağınız gibi tüm sinir ağı sürecinin basit bir açıklaması harika olurdu.

Gizli katmanda hangi hesaplamalar yapılır?

Bu hesaplamalar çıktı katmanına nasıl eşlenir?

Çıktı katmanı nasıl çalışır? Verileri gizli katmandan normalleştirmek mi?

Giriş katmanındaki bazı katmanlar neden gizli katmana bağlı, bazıları değil?


13
Buradaki insanlar çok güzel, daha önce hiç cevap vermeme izin vermeyen bir cevap görmedim, ancak ilk başlarda temel sorular gibi görünen şeylere şaşırtıcı derecede kapsamlı ve anlayışlı cevaplar gördüm. Maalesef, sizinkinde size yardımcı olamam ama bu oldukça alakalı görünüyor, bu yüzden mutlu bir şekilde oy kullanıyorum.
Gala,

4
Yorumlarınız ve oylarınız için teşekkürler Gael, muhtemelen hepimiz bu insanların nasıl kazanabileceğini bildiğimiz için SO topluluğu tarafından biraz yorgunum :) Rozetler kazanmaya çalışmak yerine burada daha fazla işbirliği ruhu görmekten memnun oldum ve soruları düzenleyerek / kapatarak
FAtBalloon

1
Özellikle sinir ağları konusunda uzman değilim, ancak uygulama ve yöntemlerinde yer aldım. Belki de o kadar yararlı olmayan cevabım, gizli olan belirli hesaplamaların, çıkışınıza, yani elde etmeye çalıştığınız şeye uygulayacağınız 'maliyet fonksiyonuna' bağlı olacağıdır. Örneğin, giriş öğelerini kümelenmiş kümeler halinde gruplamak istiyorsanız, gizli katmandaki öğeler arasındaki mesafeleri hesaplarsınız. Bu, işlemin bu tabakadan ayrılmasına izin veren bir hata kriterini karşılayana kadar, bu katman içindeki çeşitli yinelemeler ve optimizasyon döngülerinden geçebilir.
Lucozade

Yanıtlar:


230

Üç cümle sürümü:

  • Her katman, önceki katmana istediğiniz herhangi bir işlevi uygulayabilir (genellikle, doğrusal olmayan bir dönüşümü takip eden doğrusal dönüşüm).

  • Gizli katmanların görevi, girdileri, çıktı katmanının kullanabileceği bir şeye dönüştürmektir.

  • Çıkış katmanı, gizli katman aktivasyonlarını, çıktınızın açık olmasını istediğiniz ölçeğe dönüştürür.

5 yaşında gibisin:

Bilgisayarda, resimde bir veri yolu olup olmadığını size bildirmek istiyorsanız, doğru araçlara sahipse bilgisayarın daha kolay bir zamanı olabilir.

Böylece, otobüs dedektörünüz bir tekerlek dedektöründen (size bir araç olduğunu söylemenize yardımcı olmak için) ve bir kutu dedektöründen (otobüs büyük bir kutu şeklinde olduğundan) ve bir büyüklük dedektöründen (size bir araba olamayacak kadar büyük olduğunu söyleyebilir) ). Bunlar gizli katmanınızın üç elementi: ham görüntünün bir parçası değiller, otobüsleri tanımlamanıza yardımcı olmak için tasarladığınız araçlar.

Bu dedektörlerin üçü de yanarsa (veya özellikle aktiflerse), o zaman önünüzde bir otobüsün olması iyi bir ihtimal.

Sinir ağları kullanışlıdır, çünkü çok sayıda dedektör oluşturmak ve bunları bir araya getirmek için iyi araçlar (backpropagation gibi) vardır.


Mesela yetişkinsin

İleri beslemeli bir sinir ağı, verilere bir dizi işlev uygular. Kesin işlevler kullandığınız sinir ağına bağlı olacaktır: en sık olarak, bu işlevlerin her biri önceki katmanın doğrusal bir dönüşümünü ve bunu izleyen ezilme çizgisizliğini hesaplar. Bazen işlevler başka bir şey yapabilir (örneklerinizdeki mantıksal işlevleri hesaplama veya bir görüntüdeki bitişik piksellerin ortalaması alma gibi). Böylece farklı katmanların rolleri hangi fonksiyonların hesaplandığına bağlı olabilir, ama çok genel olmaya çalışacağım.

xhyfxhghy

f(x)g(f(x))

fg

g(f(x))fg


Mantıksal fonksiyonlara sahip bir örnek:

fg

İlk katman fonksiyonları:

  • En az bir öğenin "TRUE" olduğundan emin olun (OR kullanarak)
  • Hepsinin "DOĞRU" olmadığından emin olun (NAND kullanarak)

İkinci katman işlevi:

  • Her iki birinci katman kriterinin de karşılandığından emin olun (AND kullanarak)

Ağın çıkışı sadece bu ikinci işlevin sonucudur. İlk katman , girişleri ikinci katmanın kullanabileceği bir şeye dönüştürür, böylece tüm ağ XOR gerçekleştirebilir.


Görüntüler içeren bir örnek:

Bu konuşmadaki 61 numaralı kaydırak - burada tek bir görüntü olarak da mevcut - belirli bir sinir ağındaki farklı gizli katmanların ne aradığını gösterir (görselleştirmenin bir yolu).

İlk katman, görüntüde kısa kenar parçaları arar: bunlar ham piksel verilerinden bulmak çok kolaydır, ancak bir yüze, otobüse veya file bakıp bakmadığınızı size söylemekte çok yararlı değillerdir. .

Bir sonraki katman kenarları oluşturur: altta gizli katmanın kenarları belirli bir şekilde birbirine uyuyorsa, en soldaki sütunun ortasındaki göz algılayıcılardan biri açılabilir. Ham piksellerden çok özel bir şey bulmakta çok iyi olan tek bir katman oluşturmak zor olurdu: göz dedektörleri, kenar dedektörlerinden oluşturmak için ham piksellerden çok daha kolaydır.

Bir sonraki katman, göz detektörlerini ve burun detektörlerini yüzlere dönüştürür. Başka bir deyişle, önceki katmanda bulunan göz dedektörleri ve burun dedektörleri doğru desenlerle açıldığında bunlar yanacaktır. Bunlar, belirli yüz türlerini aramakta çok iyidir: bir veya daha fazlası yanıyorsa, çıktı katmanınız bir yüzün mevcut olduğunu bildirmelidir.

Bu yararlıdır, çünkü yüz dedektörlerinin göz dedektörlerinden ve burun dedektörlerinden kolayca çıkarılabilir, ancak piksel yoğunluğundan çıkmak gerçekten zordur.

Böylece her katman sizi ham piksellerden daha uzak ve daha uzağa götürür ve nihai hedefinize daha yakın hale getirir (örneğin yüz algılama veya veri yolu algılama).


Çeşitli diğer soruların cevapları

"Giriş katmanındaki bazı katmanlar neden gizli katmana bağlı, bazıları değil?"

Ağdaki bağlantısı kesilen düğümlere "önyargı" düğümleri denir. Burada gerçekten güzel bir açıklama var . Kısa cevap, regresyondaki durdurma terimleri gibidirler.

"Resimdeki" göz algılayıcı "resimler nereden geliyor?"

Bağlandığım belirli görüntüleri iki kez kontrol etmedim, ancak genel olarak, bu görselleştirmeler giriş katmanındaki karşılık gelen nöronun aktivitesini maksimize eden piksel kümesini gösterir. Öyleyse, nöronu bir göz dedektörü olarak düşünürsek, bu nöronun en göze benzer olduğunu düşündüğü görüntüdür. Millet genellikle bu piksel kümelerini bir optimizasyon (tepe tırmanma) prosedürü ile bulur.

In Bu yazıda dünyanın en büyük nöral ağların biriyle bazı Google millet tarafından, bir "yüz dedektörü" nöron ve "kedi dedektörü" nöron bu şekilde, hem de ikinci bir yol gösterir: Onlar da göstermek gerçek görüntüleri etkinleştirmek en kuvvetli nöron (şekil 3, şekil 16). İkinci yaklaşım güzeldir, çünkü ağın ne kadar esnek ve doğrusal olmadığını gösterir - bu yüksek seviye "dedektörler" özellikle piksel düzeyinde görünmese de, tüm bu görüntülere duyarlıdır.


Buradaki herhangi bir şey net değilse veya başka sorunuz varsa bana bildirin.


2
Öyleyse, belirli bir katmandaki her bir düğüm için tanımlanmış bir algoritma var mı ve ağırlıklar çıktıları farklı kılan nedir? Veya katmandaki her düğümü farklı olacak şekilde programlayabilir misiniz?
FAtBalloon

3
@GeorgeMcDowd bu konuyu ele alıyor: önerdiğiniz gibi piksellere bakmak ve veri yollarını belirlemek çok zor. Neyse ki, piksellere bakmak ve kenar bulmak kolaydır - tüm gizli katman yapmaya çalıştığı şeydir. Bir sonraki katman, kenarları temel alan çıkarımlar yapmaya çalışır, bu piksellere göre yapmaya çalışmaktan çok daha kolaydır.
David J. Harris,

4
SO, bu cevaba harcadığınız zaman ve emeğiniz için size başka bir ödül vermeli (sadece puandan öte)!
samsamara

1
@JoshuaEnfield Bence 1980'lerde mantık, insanların beynin nasıl çalıştığını düşündüğüne benzer olmanın, her yerde farklılaşabileceğinin ve sizin dediğiniz gibi değerlerin sınırlandırılmasının bir birleşimi olduğunu düşünüyorum. O zamandan beri, insanlar f(x) = max(x, 0)bu özelliklerin çoğuna sahip olmasa da ("düzeltilmiş doğrusal birim") genellikle daha iyi çalıştığını keşfetti .
David J. Harris

2
Veri yolu örneği ve işlevler zinciri onu çiviledi. Ders kitaplarının neden bu kadar açıklayıcı olamayacağını anlamıyorum.
17'de

12

Sezgisel operasyonel tanımlamaya eklemeye çalışacağım ...

Bir sinir ağı hakkında düşünmenin iyi bir yolu, doğrusal bir regresyon modelinin ne yapmaya çalıştığını düşünmektir. Doğrusal bir regresyon, bazı girdiler alır ve her girdi değerinin bazı model optimal ağırlık katsayılarını alan ve bu sonuçların toplamını gerçek çıktı ile yakından eşleşen bir çıktı yanıtı ile eşlemeye çalışan doğrusal bir model ortaya çıkarır. Katsayılar, istenen çıkış değeri ile model tarafından öğrenilen değer arasındaki bazı hata ölçütlerini en aza indirecek olan değerlerin bulunmasıyla belirlenir. Bunu söylemenin bir başka yolu, lineer modelin, her giriş için katsayı çarpanları oluşturmaya çalışacak ve hepsini (çoklu) giriş ve (tipik olarak tek) çıkış değerleri arasındaki ilişkiyi belirlemeye çalışacak şekilde toplamasıdır. Aynı model neredeyse bir sinir ağının temel yapı taşı olarak düşünülebilir;

Ancak, tek birim algılayıcısının, ağırlıklandırılmış verilerin toplamını doğrusal olmayan bir şekilde işleyebilecek bir parçası daha vardır. Genellikle bunu başarmak için bir ezme işlevi (sigmoid veya tanh) kullanır. Bu nedenle, bir dizi ağırlıklı girdiyi toplayacak bir blok olan gizli katmanın temel ünitesine sahip olursunuz - toplanan yanıtı (gizli katman) bir çıkış düğümü yanıtı oluşturmak için doğrusal olmayan bir fonksiyona toplar. Önyargı birimi, doğrusal regresyonda olduğu gibi, işlenecek her düğüme eklenen sabit bir kaymadır. Doğrusal olmayan işlem bloğu nedeniyle, artık yalnızca doğrusal yanıtlarla sınırlı kalmazsınız (doğrusal regresyon modelinde olduğu gibi).

Tamam, ancak birlikte çalışan tek algılayıcı ünitelerin çoğuna sahip olduğunuzda, her birinin farklı girdi ağırlığı çarpanları ve farklı yanıtları olabilir (ALL, daha önce açıklanan aynı doğrusal olmayan blok ile aynı girdi kümesini işlese bile). Yanıtları farklı kılan şey, her birinin sinir ağı tarafından eğitim yoluyla öğrenilen farklı katsayı ağırlıklarına sahip olmasıdır (bazı formlar degrade iniş içerir). Tüm algılayıcıların sonucu daha sonra tekrar işlenir ve ayrı ayrı bloklar işlendiği gibi bir çıktı katmanına geçirilir. O zaman soru, tüm bloklar için doğru ağırlıkların nasıl belirlendiğidir?

Doğru ağırlıkları öğrenmenin yaygın bir yolu rasgele ağırlıklar ile başlamak ve gerçek gerçek çıktı ile öğrenilen model çıktı arasındaki hata yanıtını ölçmektir. Hata tipik olarak ağdan geriye doğru geçirilir ve geri bildirim algoritması, bu ağırlıkları bir miktar hata ile bireysel olarak arttırır veya azaltır. Ağ ileriye doğru, çıktı yanıtını ölçerek, ardından güncelleyerek (geriye doğru ağırlık ayarlamalarını yaparak) ve bazı tatmin edici hata seviyesine ulaşana kadar ağırlıkları düzelterek tekrar tekrar tekrarlanacaktır. Bu noktada, doğrusal bir regresyon modelinden daha esnek olabilen bir regresyon modeline sahip olursunuz, genel olarak evrensel fonksiyon belirleyicisi olarak adlandırılır.

Bir sinir ağının gerçekte nasıl çalıştığını öğrenmeme gerçekten yardımcı olan yollardan biri, sinir ağları uygulama kodunu incelemek ve oluşturmaktır. En iyi temel kod açıklamalarından biri, (serbestçe temin edilebilir) sinir ağı bölümünde 'Bilimsel ve Mühendis' in DSP ' Ch. 26. Çoğunlukla neler olup bittiğini görmenize yardımcı olan çok temel bir dilde yazılır (bence fortrandı).


12

Bu konudaki görüşümü iki adımda açıklayacağım: Girdi-gizli adım ve sakla-çıktı adım. Önce gizli-çıktı adımını yapacağım çünkü daha az ilginç görünüyor (benim için).

Gizli-to-Çıktı

Gizli katmanın çıktısı farklı şeyler olabilir, ancak şimdilik onların sigmoidal aktivasyon işlevlerinden çıktığını varsayalım . Bu yüzden 0 ile 1 arasındaki değerlerdir ve birçok girdi için sadece 0 ve 1 olabilir.

Bu gizli nöronların çıktıları ile çıktı katmanları arasındaki dönüşümü sadece bir çeviri olarak düşünmeyi seviyorum (dilsel anlamda, geometrik anlamda değil). Dönüşüm kesinlikle tersine çevrilebiliyorsa ve kesinlikle değilse de çeviride kaybedilmişse bu doğrudur . Ama temelde, gizli nöronların çıktılarını farklı bir perspektiften görmüşsünüz.

Girdi-to-Gizli

Diyelim ki 3 giriş nöronunuz var (burada kolayca bazı denklemler yazabilirim) ve bazı gizli nöronlar. Her bir gizli nöron, girdi olarak ağırlıklı girdilerin toplamını alır.

hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)

Bunun anlamı, değerine hidden_1karşı çok hassas input_1, hiç duyarlı değil input_2ve sadece biraz hassas input_3.

Bu nedenle , girişin hidden_1belirli bir yönünü yakaladığını ve bunun “ input_1önemli” yön olduğunu söyleyebilirsiniz .

Çıktı hidden_1genellikle girişin bir fonksiyondan geçirilmesiyle oluşur, yani bir sigmoid fonksiyonu kullandığınızı varsayalım . Bu işlev 0 ile 1 arasındaki değerleri alır; bu yüzden bunun input_1önemli olduğunu veya olmadığını söyleyen bir anahtar olarak düşünün .

Demek gizli katmanın yaptığı bu! Bu ayıklar yönlerini veya özelliklerini girdi alanı.

Şimdi ağırlıklar da negatif olabilir! Bunun anlamı, " input_1önemli olan AMA input_2, bu önemi ortadan kaldırıyor " gibi unsurlar olabilir :

hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)

veya input_1ve input_3"paylaştı" öneme sahip:

hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3)

Daha fazla Geometri

Bazı doğrusal cebirleri biliyorsanız, belirli yönler boyunca yansıtma açısından geometrik olarak düşünebilirsiniz. Yukarıdaki örnekte, input_1yön boyunca projeksiyon yaptım .

hidden_1Yukarıdan tekrar bakalım . Değeri input_1yeterince büyük olduğunda, sigmoid aktivasyon fonksiyonunun çıkışı sadece 1'de kalır, daha büyük olmaz . Başka bir deyişle, gittikçe daha fazla input_1, çıktıda bir fark yaratmayacaktır. Benzer şekilde, ters (yani negatif) yönde hareket ederse, bir noktadan sonra çıkış etkilenmeyecektir.

Tamam iyi. Ancak, belirli bir yönde sonsuzluk yönünde hassasiyet istemediğimizi varsayalım ve bunun yalnızca bir çizgide belirli bir aralık için etkinleştirilmesini istiyoruz . Çok negatif değerler için bir etki yoktur ve çok pozitif değerler için etki yoktur, ancak, 5 ve 16 arasındaki değerlerin uyanmasını istersiniz. Etkinleştirme işleviniz için radyal temel işlev kullanacağınız yer burasıdır .

özet

Gizli katman, girdi alanının özelliklerini çıkarır ve çıktı katmanı bunları istenen içeriğe çevirir. Bundan çok daha fazlası olabilir, ne çok katmanlı ağlarla ve ne gibi şeyler olabilir, ama şu ana kadar anladığım şey bu.

EDIT: Harika etkileşimli grafikleri olan bu sayfa, yukarıdaki uzun ve hantal cevabımın yapabileceğimden daha iyi bir iş çıkardı: http://neuralnetworksanddeeplearning.com/chap4.html


1
OP gibi ben de sinir ağlarındaki gizli katman hakkında biraz kafam karıştı. Örnekte, NN algoritması hidden_1, hidden_2 ve hidden_3 nöronlarının ağırlığını nasıl bulur? Ve hidden_1, hidden_2 ve hidden_3 aynı girdi değişkenlerinden türetildiği için, ağırlıklar aynı çözüme yaklaşmaz mı?
RobertF

5

Sınıflandırma örneğini ele alalım. Çıktı katmanının ne yapmaya çalıştığı, numunenizin belirli bir sınıfa ait olduğu koşullu olasılığını, yani bu numunenin belirli bir sınıfa ait olma olasılığını tahmin etmektir. Geometrik olarak, katmanları doğrusal olmayan bir şekilde eşik fonksiyonlarıyla birleştirmek, sinir ağlarının en ilginç olanları olan dışbükey olmayan sorunları (konuşma tanıma, nesne tanıma vb.) Çözmelerini sağlar. Başka bir deyişle, çıktı birimleri burada tasvir edilenler gibi dışbükey olmayan karar fonksiyonları üretebilir .

Biri, gizli katmanlardaki birimleri, çıktı katmanının bir sınıfı diğerinden daha iyi ayırt edebilmesini ve daha doğru karar sınırları oluşturmasını sağlayan verilerden karmaşık özellikler öğrendiğini görebilir. Örneğin, yüz tanıma durumunda, ilk katlardaki birimler kenar benzeri özellikleri öğrenir (verilen yönlerde ve konumlarda kenarları algılar) ve daha yüksek katman, bunları burun, ağız veya gözler gibi yüz özellikleri için dedektör haline getirmeyi öğrenir. Her gizli birimin ağırlıkları bu özellikleri temsil eder ve çıktısı (bunun bir sigmoid olduğu varsayılarak) bu özelliğin numunenizde mevcut olma olasılığını temsil eder.

Genel olarak, çıktıların ve gizli katmanların çıktılarının anlamı, çözmeye çalıştığınız soruna (regresyon, sınıflandırma) ve kullandığınız kayıp fonksiyonuna (çapraz entropi, en küçük kareler, ...) bağlıdır.

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.