AI-For-Beginners/translations/tr/lessons/4-ComputerVision/08-TransferLearning/TrainingTricks.md

10 KiB
Raw Blame History

Derin Öğrenme Eğitim İpuçları

Sinir ağları daha derin hale geldikçe, bunların eğitimi süreci giderek daha zor hale geliyor. Ana sorunlardan biri, sözde kaybolan gradyanlar veya patlayan gradyanlar. Bu yazı bu sorunlara iyi bir giriş yapmaktadır.

Derin ağların eğitimini daha verimli hale getirmek için kullanılabilecek birkaç teknik bulunmaktadır.

Değerleri makul bir aralıkta tutmak

Sayısal hesaplamaların daha kararlı olmasını sağlamak için, sinir ağımız içindeki tüm değerlerin genellikle [-1..1] veya [0..1] aralığında olmasını sağlamak istiyoruz. Bu çok katı bir gereklilik değildir, ancak kayan nokta hesaplamalarının doğası gereği farklı büyüklükteki değerlerin birlikte doğru bir şekilde işlenememesi gibi bir durum söz konusudur. Örneğin, 10-10 ile 1010'i toplarsak, muhtemelen 1010'i alırız çünkü daha küçük değer, daha büyük olanla aynı düzeye "dönüştürülür" ve böylece mantissa kaybolur.

Çoğu aktivasyon fonksiyonu [-1..1] etrafında doğrusal olmayanlıklar taşır, bu nedenle tüm giriş verilerini [-1..1] veya [0..1] aralığına ölçeklendirmek mantıklıdır.

İlk Ağırlık Başlatma

İdeal olarak, değerlerin ağ katmanlarından geçtikten sonra aynı aralıkta olmasını istiyoruz. Bu nedenle, değerlerin dağılımını koruyacak şekilde ağırlıkları başlatmak önemlidir.

Normal dağılım N(0,1) iyi bir fikir değildir, çünkü n girişi olduğunda, çıkışın standart sapması n olur ve değerler [0..1] aralığının dışına çıkma olasılığı yüksektir.

Aşağıdaki başlatma yöntemleri sıklıkla kullanılır:

  • Üniform dağılım -- uniform
  • N(0,1/n) -- gaussian
  • N(0,1/√n_in), sıfır ortalamaya ve standart sapması 1 olan girişler için aynı ortalama/standart sapmanın kalmasını garanti eder
  • N(0,√2/(n_in+n_out)) -- sözde Xavier başlatması (glorot), bu, hem ileri hem de geri yayılım sırasında sinyalleri aralıkta tutmaya yardımcı olur

Batch Normalizasyonu

Doğru ağırlık başlatmasına rağmen, ağırlıklar eğitim sırasında rastgele büyük veya küçük hale gelebilir ve bu durum sinyalleri doğru aralığın dışına çıkarabilir. Sinyalleri geri getirmek için normalizasyon tekniklerinden birini kullanabiliriz. Birkaç tane vardır (Ağırlık normalizasyonu, Katman Normalizasyonu), ancak en sık kullanılanı Batch Normalizasyonudur.

Batch normalizasyonu fikri, minibatch içindeki tüm değerleri dikkate almak ve bu değerlere dayalı olarak normalizasyon (yani ortalamayı çıkarmak ve standart sapmaya bölmek) yapmaktır. Bu, ağırlıkların uygulanmasından sonra, ancak aktivasyon fonksiyonundan önce bu normalizasyonu yapan bir ağ katmanı olarak uygulanır. Sonuç olarak, daha yüksek nihai doğruluk ve daha hızlı eğitim görme olasılığımız vardır.

Batch normalizasyonu ile ilgili orijinal makale, Vikipedi'deki açıklama ve iyi bir tanıtım blog yazısı (ve Rusça olanı) bulunmaktadır.

Dropout

Dropout, eğitim sırasında rastgele nöronların belirli bir yüzdesini kaldıran ilginç bir tekniktir. Aynı zamanda bir parametre (kaldırılacak nöron yüzdesi, genellikle %10-%50) ile bir katman olarak uygulanır ve eğitim sırasında, bir sonraki katmana geçmeden önce giriş vektörünün rastgele elemanlarını sıfırlar.

Bu garip bir fikir gibi görünse de, dropout'un MNIST rakam sınıflandırıcısını eğitme üzerindeki etkisini Dropout.ipynb defterinde görebilirsiniz. Bu, eğitimi hızlandırır ve daha az eğitim döngüsünde daha yüksek doğruluk elde etmemizi sağlar.

Bu etki birkaç şekilde açıklanabilir:

  • Model için rastgele bir şok faktörü olarak düşünülebilir, bu da optimizasyonu yerel minimumdan çıkarır
  • İçsel model ortalaması olarak düşünülebilir, çünkü dropout sırasında biraz farklı bir modeli eğittiğimizi söyleyebiliriz

Bazı insanlar, sarhoş bir kişinin bir şey öğrenmeye çalıştığında, bunun sabah daha iyi hatırlanacağını, bunun da bir sarhoş kişinin bazı işlev bozukluğu olan nöronları ile anlamı kavramaya daha iyi uyum sağlamaya çalışmasından kaynaklandığını söyler. Bunun doğru olup olmadığını kendimiz hiç test etmedik.

ırı Uydurmayı Önleme

Derin öğrenmenin çok önemli bir yönü, ırı uydurmayı önleyebilme yeteneğidir. Çok güçlü bir sinir ağı modeli kullanmak cazip olabilir, ancak her zaman model parametrelerinin sayısını eğitim örneklerinin sayısıyla dengelemeliyiz.

Daha önce tanıttığımız ırı uydurma kavramını anladığınızdan emin olun!

ırı uydurmayı önlemek için birkaç yol vardır:

  • Erken durdurma -- doğrulama setindeki hatayı sürekli izleyerek, doğrulama hatası artmaya başladığında eğitimi durdurma.
  • ık Ağırlık Çürütme / Düzenleme -- yüksek mutlak ağırlık değerleri için kayıp fonksiyonuna ekstra bir ceza ekleyerek, modelin çok dengesiz sonuçlar almasını önler
  • Model Ortalaması -- birkaç modeli eğitip ardından sonucu ortalamak. Bu, varyansı minimize etmeye yardımcı olur.
  • Dropout (İçsel Model Ortalaması)

Optimizatörler / Eğitim Algoritmaları

Eğitimin bir diğer önemli yönü, iyi bir eğitim algoritması seçmektir. Klasik gradyan inişi makul bir seçimdir, ancak bazen çok yavaş olabilir veya başka sorunlara yol açabilir.

Derin öğrenmede, Stokastik Gradyan İnişi (SGD) kullanıyoruz; bu, eğitim setinden rastgele seçilen minibatch'lere uygulanan bir gradyan inişidir. Ağırlıklar bu formül ile ayarlanır:

wt+1 = wt - η∇ℒ

Momentum

Momentum SGD'de, önceki adımlardan bir gradyan kısmını saklıyoruz. Bu, bir yere ataletle hareket ederken farklı bir yönde bir darbe aldığımızda, yolculuğumuzun hemen değişmediği, ancak orijinal hareketin bir kısmını koruduğu durumla benzerdir. Burada hızı temsil etmek için başka bir vektör v tanıtıyoruz:

  • vt+1 = γ vt - η∇ℒ
  • wt+1 = wt+vt+1

Burada γ parametresi, ataletin ne kadar dikkate alındığını gösterir: γ=0, klasik SGD'ye karşılık gelir; γ=1, saf hareket denklemi anlamına gelir.

Adam, Adagrad, vb.

Her katmanda sinyalleri bazı matrislerle çarptığımız için Wi, ||Wi||'ya bağlı olarak, gradyan ya azalabilir ve 0'a yakın olabilir ya da sonsuz bir şekilde yükselebilir. Bu, Patlayan/Kaybolan Gradyanlar sorununu oluşturmaktadır.

Bu sorunun çözümlerinden biri, denklemin içinde yalnızca gradyanın yönünü kullanmak ve mutlak değeri görmezden gelmektir, yani

wt+1 = wt - η(∇ℒ/||∇ℒ||), burada ||∇ℒ|| = √∑(∇ℒ)2

Bu algoritmaya Adagrad denir. Aynı fikri kullanan diğer algoritmalar: RMSProp, Adam

Adam, birçok uygulama için çok etkili bir algoritma olarak kabul edilir, bu nedenle hangi algoritmayı kullanacağınızdan emin değilseniz - Adam'ı kullanın.

Gradyan kesme

Gradyan kesme, yukarıdaki fikrin bir uzantısıdır. ||∇ℒ|| ≤ θ olduğunda, ağırlık optimizasyonunda orijinal gradyanı dikkate alıyoruz ve ||∇ℒ|| > θ olduğunda - gradyanı normu ile bölüyoruz. Burada θ bir parametredir; çoğu durumda θ=1 veya θ=10 alabiliriz.

Öğrenme oranı azaltma

Eğitim başarısı genellikle öğrenme oranı parametresi η'ye bağlıdır. Daha büyük η değerlerinin daha hızlı bir eğitim sağladığını varsaymak mantıklıdır; bu, genellikle eğitim sürecinin başında istediğimiz bir şeydir ve ardından daha küçük η değerleri, ağın ince ayarını yapmamıza olanak tanır. Bu nedenle, çoğu durumda η'yi eğitim sürecinde azaltmak isteriz.

Bu, her eğitim döngüsünden sonra η'yi bazı sayılarla (örneğin 0.98) çarparak veya daha karmaşık bir öğrenme oranı takvimi kullanarak yapılabilir.

Farklı Ağ Mimarileri

Probleminiz için doğru ağ mimarisini seçmek zor olabilir. Normalde, belirli görevimiz (veya benzer bir görev) için işe yaradığını kanıtlamış bir mimari seçeriz. İşte bilgisayarla görme için sinir ağı mimarileri hakkında iyi bir genel bakış bulunmaktadır.

Eğitim örneklerimizin sayısı için yeterince güçlü bir mimari seçmek önemlidir. Çok güçlü bir model seçmek ırı uydurma ile sonuçlanabilir.

Bir diğer iyi yol, gerekli karmaşıklığa otomatik olarak uyum sağlayacak bir mimari kullanmaktır. Belirli bir ölçüde, ResNet mimarisi ve Inception kendiliğinden ayarlanan mimarilerdir. Bilgisayarla görme mimarileri hakkında daha fazla bilgi bulunmaktadır.

ıklama:
Bu belge, makine tabanlı AI çeviri hizmetleri kullanılarak çevrilmiştir. Doğruluğa özen göstersek de, otomatik çevirilerin hatalar veya yanlışlıklar içerebileceğini lütfen dikkate alınız. Orijinal belge, kendi dilinde yetkili kaynak olarak değerlendirilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilmektedir. Bu çevirinin kullanılması sonucunda oluşabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.