İçbükey tapınaktan Xiaocha
Qubit Raporu | Genel Hesap QbitAI
Topların yamaçtan aşağı yuvarlanmasına ve hangi vadiye düştüğünü bulmasına izin verin. orijinal Gradyan iniş algoritması Bir oyun videosu kadar havalı olabilir:
Yukarıdaki, fast.ai'nin kurucusu Jeremy Howard tarafından paylaşılan bir videodur.İlk bakışta, karmaşık arazide savaşın bir kum tablası çıkarımı gibi görünüyor. Aslında, stokastik gradyan iniş (SGD) algoritmasının özünü ortaya koyuyor.
Google Brain Tokyo araştırmacısı hardmaru, videoya karşılık gelen makaleyi yeniden yayınladı ve "gerçek zamanlı bir strateji oyununa benzediğini" yorumladı.
Ancak eğlenceyi küçümsemeyin, videonun etkili olması için makaleyle birlikte "çekilmesi" gerekir. Yukarıdaki popüler video, fast.ai üyesi Javier Ideami tarafından yazılan popüler bir bilim makalesinden bir alıntıdır.
Kod ve formül sizi sıkıcı hissettiriyorsa, o zaman bu harika SGD videosuyla başlayabilir ve ardından bu makaleyi okuyabilirsiniz, bu, derin öğrenmeyi daha sezgisel olarak anlamanıza yardımcı olacaktır.
Gradyan tam olarak nedir?
Sayısız sahte yüz oluşturan CNN, RNN ve GAN'lar da dahil olmak üzere derin öğrenmenin mimarisi ve en son gelişmeleri, gradyan iniş algoritmasından ayrılamaz.
Eğim, yamaçta belirli bir noktada en hızlı yükselen yön olarak anlaşılabilir ve ters yönü en hızlı düşme yönüdür. Dağdan en hızlı şekilde inmek için eğimin tersi yönünde yürüyün.
Kum masa kesintisine benzeyen şey aslında attığımız küçük toplardır ve eğim yönünde dibe yuvarlanırlar.
Gradyan iniş algoritmasının nihai amacı, en düşük rakıma sahip vadi olan tüm "arazideki" en alçak noktayı (küresel minimum) bulmaktır.
Ancak bu arazide birden fazla vadi olabilir (yerel minimum), bu nedenle çok sayıda topu dağıtmamız, farklı vadilere düşmelerine izin vermemiz ve sonunda en alçak noktayı bulmak için yükseklikleri karşılaştırmamız gerekiyor.
Yukarıdakiler, stokastik gradyan iniş (SGD) algoritmasının temel fikridir.
Gradyan iniş algoritmasından bahsettikten sonra, sinir ağlarının temel bilgilerini tanıtalım.
Temelde, bir sinir ağı, girdi verilerini ihtiyacımız olan çıktıya dönüştürmek için bir dizi "ağırlık" kullanır.
En basit 2 katmanlı sinir ağıyla başlayalım ve sinir ağının yapısını kısaca tanıtalım. Aslında, sinir ağları bundan çok daha karmaşıktır, genellikle düzinelerce katman ve hatta yüzlerce katman içerir.
giriş : Sinir ağının girişi kaynak verilerdir ve nöron sayısı, kaynak verinin özellik numarasıyla eşleşir. Yukarıdaki şekil örnek olarak 4 giriş almaktadır.
Seviye bir : Bu, çevreleyen katmandaki birimlere bağlı birçok gizli nöronu içeren gizli bir katmandır.
İkinci kat : İkinci ve son katmanın ağ çıktısı olan 1 birimi vardır.
W girişi ve Z çıkışı arasında doğrusal bir ilişki vardır:
Birinci katman ağı için, Z1 = W1X + b1, A1 = ReLU (Z1), A1, etkinleştirme işlevi işlemesinden sonra Z1'in sonucudur.
İkinci katman ağı için, birinci katmanın A1 çıkışını ikinci katmanın girişi olarak kullanırız, Z2 = W2A1 + b2, A2 = Sigmoid (Z2).
W ağ katmanını temsil edecek Ağırlıklar , Ağın farklı birimleri arasındaki bağlantının gücünü temsil eder. b kısaltması Önyargı terimi , Ağ için daha fazla esneklik sağlayabilir.
İkinci katman Yh = A2'nin son çıktısı, bu sinir ağının nihai çıktısıdır.
Yh = A2 = Sigmoid (W2 ReLU (W1 X + b1) + b2)
Yh, X'in ağa girilmesinden sonra üretilen çıktı olan sinir ağının tahmin sonucunu temsil edecektir.
Bu denklemde W1, b1, W2 ve b2 bilinmeyenlerdir ve ağın doğru değerlerini bulması için eğitilmesi gerekir.
Yukarıdaki sinir ağında, her katmanın çıktısının doğrusal işlemin sonucundan sonra bir "filtre" ile eklendiğini fark edebilirsiniz. Neden bununla bu şekilde başa çıkmalıyız?
Gerçekte, girdi ve çıktı arasındaki ilişki genellikle doğrusal değildir. Bir sinir ağının mimarisi yalnızca doğrusal algoritmalardan oluşuyorsa, doğrusal olmayan davranışı hesaplamak zordur. Bu yüzden her katmanın sonuna bir tane eklemeliyiz Aktivasyon fonksiyonu .
Farklı aktivasyon fonksiyonlarının farklı özellikleri vardır. Yanlış seçim, degradenin çok küçük olmasına neden olur ve buna genellikle Ufuk gradyan sorun.
Bunun tam tersi bir sorun da var. Gradyan patlaması Gradyan değeri çok büyük olduğunda, ağ çok kararsız hale gelecektir.
Dört yaygın etkinleştirme işlevi şunlardır: Sigmoid, tanh, ReLU, sızdıran ReLU, avantajlarını ve dezavantajlarını kısaca tartışalım.
Sigmoid
1 / (1 + e -x )
Bu işlev, girdiyi iki kategoriye ayırmak için çok uygundur. Şekli çok naziktir, bu nedenle eğimi iyi kontrol edilebilir.
Ana dezavantaj, aşırı durumlarda, fonksiyon çıktısının çok düz hale gelmesidir. Bu, gradyanların kaybolması sorunu olduğu anlamına gelir.
tanh
(2 / (1 + e-2x)) - 1
Sigmoid'e çok benzer. Fonksiyon eğrisi daha diktir, bu nedenle çıktısı daha güçlü olacaktır. Dezavantajları Sigmoid'e benzer.
ReLU
maks (0, x)
Giriş 0'dan büyükse, çıkış girişe eşittir. Aksi takdirde çıktı 0'dır.
Çıktısı 0 ile sonsuz arasında değişir. Bu, çıktısının çok büyük olabileceği ve bir gradyan patlaması sorunu olabileceği anlamına gelir. Diğer bir sorun da sol tarafın tamamen düz olması ve bu da eğimin kaybolmasına neden olabilmesidir.
ReLU'nun hesaplanması basittir ve sinir ağlarının iç katmanında en sık kullanılan aktivasyon işlevidir.
Sızdıran ReLU
ReLU işlevinin ilk yarısını 0,01x ile değiştirin.
softmax
e-x / Sum (e-x)
Çıkış aralığı 0 ile 1 arasındadır.
Softmax, girdiyi bir olasılık dağılımına normalleştirir. Girişi Sigmoid gibi 0 ile 1 aralığında sıkıştırır.
Genellikle çok sınıflı bir sahnenin çıktı katmanında bulunur, Softmax her sınıfın olasılıklarının toplamının 1 olmasını sağlar.
Aslında bir sinir ağı, bir dizi işlevin birleşimidir, bazıları doğrusaldır ve bazıları doğrusal değildir.Birlikte, girdi verilerini ihtiyacımız olan çıktıya bağlayan karmaşık bir işlev oluştururlar.
Makalenin orijinal yazarı bu konuyu tartışmak için üç bölüme ayırdı ve makalenin sonundaki bağlantıda daha fazla içerik bulunabilir:
https://towardsdatascience.com/the-keys-of-deep-learning-in-100-lines-of-code-907398c76504