SSS

Optimizasyon hataları nasıl ayıklanabilir ve azaltılabilir?

Özet: Model optimizasyon zorlukları yaşıyorsa başka şeyler denemeden önce bunları düzeltmek önemlidir. Eğitim hatalarını teşhis edip düzeltmek, aktif olarak devam eden bir araştırma alanıdır.

Standard WideResNet ile Stride 1x1 WideResNet'i karşılaştıran bir grafik.
            Y ekseni test hata oranı, x ekseni ise temel öğrenme oranıdır.
            Temel öğrenme oranı arttıkça Standart WideResNet'in TestErrorRate'inde kademeli bir düşüş yaşanır. Buna karşılık, Stride WideResNet, temel öğrenme oranı arttıkça büyük dalgalanmalar yaşıyor.
Şekil 4. WideResnet'te tek bir artık bloktaki adımları değiştirmek (2x2 -> 1x1) eğitimde kararsızlığa neden olur.

 

Şekil 4 ile ilgili olarak aşağıdakilere dikkat edin:

  • Adımların değiştirilmesi, düşük öğrenme hızlarında performansı düşürmez.
  • Yüksek öğrenme hızları, kararsızlık nedeniyle artık iyi bir şekilde eğitilmiyor.
  • Öğrenme hızı ısınma işleminin 1.000 adım boyunca uygulanması, bu kararsızlık örneğini çözerek 0,1'lik maksimum öğrenme hızıyla kararlı bir eğitim sağlar.

Kararsız iş yüklerini belirleme

Öğrenme hızı çok yüksekse iş yükü dengesizleşir. Kararsızlık yalnızca çok küçük bir öğrenme hızı kullanmanıza neden olduğunda sorun yaratır. En az iki tür eğitim kararsızlığı ayırt edilmeye değerdir:

  • Başlatma sırasında veya eğitimin başlarında kararsızlık.
  • Eğitimin ortasında ani dengesizlik.

Aşağıdaki adımları uygulayarak iş yükünüzdeki kararlılık sorunlarını belirlemek için sistematik bir yaklaşım benimseyebilirsiniz:

  • Öğrenme hızı taraması yapın ve en iyi öğrenme hızını (lr*) bulun.
  • Öğrenme oranları için eğitim kaybı eğrilerini lr* değerinin hemen üzerinde çizin.
  • Öğrenme hızları > lr* olduğunda kayıp kararsızlığı (eğitim dönemlerinde kayıp azalmaz, artar) görülürse kararsızlığı düzeltmek genellikle eğitimi iyileştirir.

Aykırı değerler eğitim sırasında sahte dengesizliğe neden olabileceğinden, eğitim sırasında tam kayıp gradyanının L2 normunu kaydedin. Bu, gradyanların ne kadar agresif bir şekilde kırpılacağını veya ağırlık güncellemelerinin nasıl yapılacağını belirleyebilir.

NOT: Bazı modellerde, çok erken bir aşamada kararsızlık görülür. Ardından, yavaş ancak kararlı bir eğitime yol açan bir iyileşme yaşanır. Sık değerlendirme yapılmadığı için yaygın değerlendirme planlarında bu sorunlar gözden kaçabilir.

Bunu kontrol etmek için lr = 2 * current best kullanarak yalnızca ~500 adımlık kısaltılmış bir çalıştırma için eğitim verebilirsiniz ancak her adımı değerlendirebilirsiniz.

İki grafik: Her iki grafiğin x ekseni Global Step, y ekseni ise Train Loss'tur. Her iki grafikte de (2,2) dönüşüm adımı, (1,1) dönüşüm adımıyla karşılaştırılıyor. İlk grafikte her 1.000 adımda bir yapılan değerlendirmeler gösterilir. Bu ilk grafikte, her iki dönüşüm adımı da daha fazla genel adımla birlikte kademeli ve istikrarlı bir düşüş gösteriyor. İkinci grafik, ilk 25 adımda sık yapılan değerlendirmeleri gösterir. Bu ikinci grafikte, (2,2) Conv Stride'ı, 20 Global Steps'e kadar daha tutarlı bir şekilde düşük hale gelmeden önce ilk birkaç Global Steps'te Train Loss'ta büyük dalgalanmalar gösteriyor. (1,1) Conv Stride'ı, ilk Global Step'ten sonra bile sürekli olarak düşük bir Train Loss gösteriyor.
5. şekil. Eğitimin başında daha sık değerlendirme yapmanın değeri. Modelin erken eğitimde kararsızlık yaşadığından şüpheleniyorsanız bu parametre yararlı olabilir.

 

Sık karşılaşılan kararsızlık kalıpları için olası düzeltmeler

Yaygın kararsızlık durumları için aşağıdaki olası düzeltmeleri deneyin:

  • Öğrenme oranı ısınmasını uygulayın. Bu, eğitimin ilk aşamalarındaki dengesizlik için en iyi çözümdür.
  • Gradyan kırpma uygulayın. Bu, hem eğitimin başlarında hem de ortalarında yaşanan kararsızlıklar için iyi bir çözümdür ve ısınma işleminin düzeltemediği bazı kötü başlatma işlemlerini düzeltebilir.
  • Yeni bir optimize edici deneyin. Bazen Adam, Momentum'un ele alamadığı dengesizlikleri giderebilir. Bu, aktif bir araştırma alanıdır.
  • Model mimariniz için en iyi uygulamaları ve en iyi ilk kullanımları kullandığınızdan emin olun (örnekler aşağıda verilmiştir). Modelde yoksa artık bağlantılar ve normalleştirme ekleyin.
  • Kalıntıdan önceki son işlem olarak normalleştirin. Örneğin: x + Norm(f(x)). Norm(x + f(x)) karakterinin sorunlara neden olabileceğini unutmayın.
  • Kalan dalları 0 olarak başlatmayı deneyin. (Bkz. ReZero is All You Need: Fast Convergence at Large Depth.)
  • Öğrenme hızını düşürün. Bu son çaredir.

Öğrenme oranı ısınması

Aynı deneyi gösteren iki grafik. İlk grafikte x ekseni genel adım, y ekseni ise eğitim kaybıdır. Düşük öğrenme hızıyla ısınma sayıları kullanıldığında eğitim kaybı çok dengesizdi.
            Daha yüksek öğrenme hızıyla ısınma sayılarında eğitim kaybı çok daha kararlıydı.
6. şekil. Isınma dönemi sırasındaki kararsızlık örneği (yatay eksendeki log ölçeğine dikkat edin). Bu durumda başarılı bir eğitim için 40.000 adım ısınma yapılması gerekiyordu.

Öğrenme oranı ısınması ne zaman uygulanır?

Doğrulama kümesindeki çapraz entropi kaybının (y ekseni) temel öğrenme hızına (x ekseni) karşı grafiği. Grafikte, altı olası deneme gösterilmektedir. Bu denemelerin tümünde temel öğrenme oranı nispeten düşüktür. Doğrulama
            kaybı, temel öğrenme hızı arttıkça düşer, ardından artmaya başlamadan önce düşük bir noktaya ulaşır. Grafikte, tamamı nispeten yüksek bir temel öğrenme hızına sahip olan dört uygulanamaz deneme de gösterilmektedir.
Şekil 7a. Eğitim kararsızlığı gösteren bir model için hiperparametre ekseni grafiği örneği. En iyi öğrenme oranı, mümkün olanın sınırındadır. "Uygulanamaz" bir deneme, NaN'ler veya kayıpla ilgili alışılmadık derecede yüksek değerler üretir.

 

Eğitim kümesindeki çapraz entropi kaybının (y ekseni) global adıma (x ekseni) karşı grafiği. İlk Global adımlarında kayıp çok hızlı bir şekilde düşer. Ardından, yaklaşık 10.000 adımda kayıp önemli ölçüde artar. Ardından, yaklaşık 15.000 adımda kayıp kademeli olarak azalır.
7b.şekil Kararsızlık gördüğünüz bir öğrenme hızıyla eğitilmiş modelin eğitim kaybı.

 

Şekil 7a'da, en iyi öğrenme oranı kararsızlığın hemen sınırında olduğundan, optimizasyon kararsızlıkları yaşayan bir modeli gösteren bir hiperparametre ekseni grafiği yer alıyor.

Şekil 7b'de, bu durumun, öğrenme hızı bu zirveden 5 veya 10 kat daha büyük olan bir modelin eğitim kaybı incelenerek nasıl iki kez kontrol edilebileceği gösterilmektedir. Bu grafik, sabit bir düşüşün ardından kayıpta ani bir artış gösteriyorsa (ör. yukarıdaki şekilde ~10 bininci adımda) model muhtemelen optimizasyon kararsızlığından etkileniyordur.

Öğrenme hızı ısınması nasıl uygulanır?

76619. adımda (y ekseni) doğrulama kaybı ile temel öğrenme hızı (x ekseni) arasındaki ilişkiyi gösteren grafik. Grafikte, WMT14 EN-De'deki bir LayerNorm Transformer'da dört farklı durumun sonuçları karşılaştırılmaktadır. Öğrenme
            oranı ısınması, daha düşük öğrenme oranlarında doğrulama kaybını azalttı.
8. şekil. Öğrenme hızı ısınmasının, eğitimdeki kararsızlıkları gidermeye yönelik faydalı etkisi.

 

Önceki prosedür kullanılarak modelin kararsız hale geldiği öğrenme hızı unstable_base_learning_rate olsun.

Isınma, öğrenme oranını 0'dan unstable_base_learning_rate değerinden en az bir kat daha büyük olan sabit bir base_learning_rate değerine yükselten bir öğrenme oranı planının eklenmesini içerir. Varsayılan olarak 10x base_learning_rate denenecektir unstable_base_learning_rate. Ancak bu prosedürün tamamının 100x gibi bir değer için tekrar çalıştırılabileceğini unutmayın unstable_base_learning_rate. Belirli program:

  • Isınma adımları boyunca 0'dan base_learning_rate'e (temel öğrenme oranı) yükselir.
  • post_warmup_steps için sabit bir hızda eğitim yapın.

Amacınız, warmup_steps'dan çok daha yüksek olan en yüksek öğrenme oranlarına erişmenizi sağlayan en kısa warmup_steps süresini bulmaktır.unstable_base_learning_rate Bu nedenle, her base_learning_rate için warmup_steps ve post_warmup_steps değerlerini ayarlamanız gerekir. post_warmup_steps değerini 2*warmup_steps olarak ayarlamak genellikle sorun yaratmaz.

Isınma, mevcut bir azalma programından bağımsız olarak ayarlanabilir. warmup_steps birkaç farklı büyüklük sırasına göre süpürülmelidir. Örneğin, örnek bir çalışmada [10, 1000, 10,000, 100,000] denenebilir. En büyük olası nokta, max_train_steps değerinin% 10'undan fazla olmamalıdır.

Eğitimi base_learning_rate'da patlatmayan bir warmup_steps oluşturulduktan sonra temel modele uygulanmalıdır. Temel olarak, bu programı mevcut programın önüne ekleyin ve bu denemeyi temel değerle karşılaştırmak için yukarıda bahsedilen optimum kontrol noktası seçimini kullanın. Örneğin, başlangıçta 10.000 max_train_steps varsa ve 1.000 adım boyunca warmup_steps işlemi yapıldıysa yeni eğitim prosedürü toplam 11.000 adım boyunca çalıştırılmalıdır.

Kararlı eğitim için uzun warmup_steps gerekiyorsa (>%5 max_train_steps) bunu hesaba katmak için max_train_steps değerini artırmanız gerekebilir.

İş yüklerinin tüm aralığında gerçekten "tipik" bir değer yoktur. Bazı modeller yalnızca 100 adım gerektirirken diğerleri (özellikle dönüştürücüler) 40.000'den fazla adım gerektirebilir.

Gradyan kırpma

Global adım (x ekseni) ile Grad l2 normunun (y ekseni) grafiği. "Tipik" gradyan normu eğitimi, ilk küresel adımlarda çok dengesizdi. Çok agresif bir klip eşiği, öğrenme hızını düşürdü ve eğitimi yavaşlattı. Daha iyi bir kırpma eşiği (tipik gradyan normunun hemen üzerinde) erken eğitimi dengeledi.
9.şekil Eğimi kırpma, erken eğitimde kararsızlığı düzeltir.

 

Gradyan kırpma, en çok büyük veya aykırı gradyan sorunları oluştuğunda kullanışlıdır. Gradyan kırpma, aşağıdaki sorunlardan birini düzeltebilir:

  • Erken eğitimde kararsızlık (büyük gradyan normu)
  • Eğitim sırasında dengesizlikler (eğitim sırasında gradyanda ani artışlar).

Bazen daha uzun ısınma süreleri, kırpmanın düzeltemediği dengesizlikleri düzeltebilir. Ayrıntılar için Öğrenme hızı ısınması bölümüne bakın.

🤖 Isınma sırasında kırpma işlemi nasıl yapılır?

İdeal kırpma eşikleri, "tipik" gradyan normunun hemen üzerindedir.

Aşağıda, gradyan kırpmanın nasıl yapılabileceğine dair bir örnek verilmiştir:

  • Gradyanın normu $\left | g \right |$ gradyan kırpma eşiği $\lambda$ değerinden büyükse ${g}'= \lambda \times \frac{g}{\left | g \right |}$ işlemini yapın. Burada ${g}'$ yeni gradyanı ifade eder.

Eğitim sırasında kırpılmamış gradyan normunu günlüğe kaydeder. Varsayılan olarak oluşturulacaklar:

  • Gradyan normu ile adım arasındaki ilişkiyi gösteren bir grafik
  • Tüm adımlar genelinde toplanan gradyan normlarının histogramı

Gradyan normlarının 90. yüzdelik dilimine göre bir gradyan kırpma eşiği seçin. Eşik, iş yüküne bağlıdır ancak% 90 iyi bir başlangıç noktasıdır. %90 işe yaramazsa bu eşiği ayarlayabilirsiniz.

🤖 Uyarlanabilir bir strateji kullanabilir miyim?

Eğim kırpmayı denediğiniz halde kararsızlık sorunları devam ederse eşiği daha da küçülterek daha fazla kırpmayı deneyebilirsiniz.

Son derece agresif gradyan kırpma (yani güncellemelerin% 50'den fazlasının kırpılması), esasında öğrenme hızını azaltmanın tuhaf bir yoludur. Çok agresif bir kırpma kullandığınızı fark ederseniz öğrenme hızını düşürmeniz daha iyi olur.

Neden öğrenme hızına ve diğer optimizasyon parametrelerine hiperparametre diyorsunuz? Bunlar, önceki dağılımların parametreleri değildir.

"Hiperparametre" terimi, Bayesçi makine öğreniminde kesin bir anlama sahiptir. Bu nedenle, öğrenme hızına ve ayarlanabilir derin öğrenme parametrelerinin çoğuna "hiperparametre" olarak atıfta bulunmak, terminolojinin kötüye kullanılması olarak değerlendirilebilir. Öğrenme hızları, mimari parametreler ve derin öğrenmede ayarlanabilir diğer tüm öğeler için "metaparametre" terimini kullanmayı tercih ederiz. Bunun nedeni, metaparametrenin "hiperparametre" kelimesinin yanlış kullanılmasından kaynaklanan kafa karışıklığı olasılığını önlemesidir. Bu karışıklık, özellikle olasılıksal yanıt yüzeyi modellerinin kendi gerçek hiperparametrelerine sahip olduğu Bayes optimizasyonu tartışılırken ortaya çıkar.

Maalesef, kafa karıştırıcı olsa da "hiperparametre" terimi, derin öğrenme topluluğunda son derece yaygın hale geldi. Bu nedenle, bu teknik ayrıntının farkında olması muhtemel olmayan birçok kişiyi içeren geniş bir kitleye yönelik bu belgede, başka bir kafa karışıklığına yol açmamak için alandaki bir kafa karışıklığına katkıda bulunmayı tercih ettik. Bununla birlikte, bir araştırma makalesi yayınlarken farklı bir seçim yapabiliriz ve çoğu bağlamda diğer kullanıcıları "metaparametre"yi kullanmaya teşvik ederiz.

Neden toplu iş boyutu, doğrulama kümesi performansını doğrudan iyileştirecek şekilde ayarlanmamalıdır?

Toplu iş boyutunu eğitim hattının diğer ayrıntılarını değiştirmeden değiştirmek genellikle doğrulama kümesi performansını etkiler. Ancak eğitim ardışık düzeni her toplu iş boyutu için bağımsız olarak optimize edilirse iki toplu iş boyutu arasındaki doğrulama kümesi performansındaki fark genellikle ortadan kalkar.

Toplu iş boyutuyla en güçlü şekilde etkileşime giren ve bu nedenle her toplu iş boyutu için ayrı ayrı ayarlanması en önemli olan hiperparametreler, optimize edici hiperparametreler (örneğin, öğrenme hızı, momentum) ve düzenleme hiperparametreleridir. Daha küçük toplu iş boyutları, örnek varyansı nedeniyle eğitim algoritmasına daha fazla gürültü ekler. Bu gürültü, düzenleyici bir etkiye sahip olabilir. Bu nedenle, daha büyük toplu iş boyutları aşırı uyuma daha yatkın olabilir ve daha güçlü düzenlileştirme ve/veya ek düzenlileştirme teknikleri gerektirebilir. Ayrıca, toplu iş boyutunu değiştirirken eğitim adımı sayısını da ayarlamanız gerekebilir.

Tüm bu etkiler dikkate alındığında, toplu iş boyutunun ulaşılabilen maksimum doğrulama performansını etkilediğine dair ikna edici bir kanıt yoktur. Ayrıntılar için Shallue et al. 2018 başlıklı makaleyi inceleyin.

Tüm popüler optimizasyon algoritmaları için güncelleme kuralları nelerdir?

Bu bölümde, sık kullanılan çeşitli optimizasyon algoritmaları için güncelleme kuralları verilmektedir.

Stokastik gradyan inişi (SGD)

\[\theta_{t+1} = \theta_{t} - \eta_t \nabla \mathcal{l}(\theta_t)\]

Burada $\eta_t$, $t$ adımındaki öğrenme hızıdır.

İlgiyi Artırma

\[v_0 = 0\]

\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]

\[\theta_{t+1} = \theta_{t} - \eta_t v_{t+1}\]

Burada $\eta_t$, $t$ adımındaki öğrenme oranı ve $\gamma$ ise momentum katsayısıdır.

Nesterov

\[v_0 = 0\]

\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]

\[\theta_{t+1} = \theta_{t} - \eta_t ( \gamma v_{t+1} + \nabla \mathcal{l}(\theta_{t}) )\]

Burada $\eta_t$, $t$ adımındaki öğrenme oranı ve $\gamma$ ise momentum katsayısıdır.

RMSProp

\[v_0 = 1 \text{, } m_0 = 0\]

\[v_{t+1} = \rho v_{t} + (1 - \rho) \nabla \mathcal{l}(\theta_t)^2\]

\[m_{t+1} = \gamma m_{t} + \frac{\eta_t}{\sqrt{v_{t+1} + \epsilon}}\nabla \mathcal{l}(\theta_t)\]

\[\theta_{t+1} = \theta_{t} - m_{t+1}\]

ADAM

\[m_0 = 0 \text{, } v_0 = 0\]

\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]

\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l}(\theta_t)^2\]

\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]

\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{m_{t+1}}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]

NADAM

\[m_0 = 0 \text{, } v_0 = 0\]

\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]

\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l} (\theta_t)^2\]

\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]

\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{\beta_1 m_{t+1} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]