Optimizasyon hataları nasıl ayıklanabilir ve azaltılabilir?
Özet: Modelde optimizasyon zorlukları yaşanıyorsa, başka adımları denemeden önce bunları düzeltmek önemlidir. Eğitimdeki başarısızlıkların teşhis edilmesi ve düzeltilmesi aktif 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.
Standart WideResNet, Taban Öğrenme Oranı arttıkça TestErrorRate'de giderek düşüş gösteriyor. Stride WideResNet ise temel Öğrenim Oranı yükseldikçe büyük dalgalanmalar yaşar.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/stride_instability.png?authuser=6&hl=tr)
Şekil 4 ile ilgili olarak aşağıdakilere dikkat edin:
- Adımları değiştirmek, düşük öğrenme hızlarında performansı düşürmez.
- Kararsızlık nedeniyle yüksek öğrenim oranları artık iyi eğitilmemektedir.
- 1.000 adımlı öğrenme hızı ısınması uygulandığında bu kararsızlık durumu ortadan kalkar ve maksimum öğrenme hızı 0, 1 olan eğitime istikrar sağlanır.
Kararsız iş yüklerini tanımlama
Öğrenme hızı çok büyük olursa tüm iş yükleri kararsız hale gelir. Kararsızlık ancak sizi çok düşük bir öğrenme hızı kullanmaya zorladığında ortaya çıkar. Eğitimdeki en az iki tür istikrarsızlığı ayırt etmeye değer:
- Başlatma sırasında veya eğitimin başlarında kararsızlık.
- Eğitimin ortasında aniden yaşanan istikrarsızlık.
Aşağıdakileri yaparak iş akışınızdaki kararlılık sorunlarını tanımlamak için sistematik bir yaklaşım uygulayabilirsiniz:
- Bir öğrenme hızı taraması yapın ve en iyi öğrenme hızını bulun*.
- lr* üzerindeki öğrenme oranları için eğitim kaybı eğrilerini çizin.
- Öğrenme oranları > lr*, istikrarsızlık kaybı gösteriyorsa (eğitim dönemlerinde kayıp düşmüyorsa) bu kararsızlığı düzeltmek genellikle eğitimi iyileştirir.
Aykırı değerler eğitimin ortasında sahte istikrarsızlığa neden olabileceğinden eğitim sırasında tam kayıp gradyanının L2 normunu kaydedin. Bu, gradyanların veya ağırlık güncellemelerinin ne kadar agresif bir şekilde kırpılacağını bildirebilir.
NOT: Bazı modeller çok erken aşamada kararsızlık gösterir, ardından kurtarma yavaş ama kararlı eğitime yol açar. Yaygın değerlendirme programları, yeterince sık değerlendirme yapmadığınız için bu sorunların gözden kaçmasına neden olabilir.
Bunu kontrol etmek için lr = 2 * current best
kullanarak yaklaşık 500 adımdan oluşan kısaltılmış bir koşuyu uygulayabilirsiniz ancak her adımı değerlendirin.
![İki grafik: Her iki grafiğin x ekseni Küresel Adım'dır; her iki grafik için y ekseni Tren Kaybı'dır. Her iki grafik de (2,2) Dönüşüm Adımı ile (1,1) Dönüşüm Adımını karşılaştırır. İlk grafikte her 1.000 adımdaki değerlendirmeler gösterilir. Bu ilk grafikte, her iki Dönş. Aşaması daha fazla Genel Adım ile kademeli olarak istikrarlı bir düşüş göstermektedir. İkinci grafikte ilk 25 adımdaki sık değerlendirmeler gösterilir. Bu ikinci grafikte, Dönş. Stride (2,2) değeri, 20 Global Adımla daha tutarlı bir şekilde düşüşe düşmeden önce, ilk birkaç Global Adımda Tren Kaybı'ndaki çılgın salınımları göstermektedir. (1,1) Dönüşüm Adımı, ilk Global Adımdan sonra bile sürekli olarak düşük bir Tren Kaybı olduğunu göstermektedir.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/more_frequent_evals.png?authuser=6&hl=tr)
Yaygın kararsızlık kalıpları için olası düzeltmeler
Yaygın kararsızlık kalıpları için aşağıdaki olası düzeltmeleri göz önünde bulundurun:
- Öğrenme hızı ısınma işlemini uygulayın. Bu, eğitimdeki istikrarsızlıkların erken aşamaları için en iyi seçenektir.
- Gradyan kırpma uygulayın. Bu, eğitimin başında ve ortasındaki istikrarsızlıklar için faydalıdır ve ısınma işleminin başarısız olduğu bazı kötü başlatmaları düzeltebilir.
- Yeni bir optimize ediciyi deneyin. Adam bazen Momentum'un kaldıramayacağı değişkenlikleri idare edebilir. Bu, aktif bir araştırma alanıdır.
- Model mimariniz için en iyi uygulamaları ve en iyi başlatmaları kullandığınızdan emin olun (izlenecek örnekler). Modelde halihazırda yoksa artık bağlantıları ve normalleştirmeyi ekleyin.
- Kalan değerden önceki son işlem olarak normalleştir. Örneğin:
x + Norm(f(x))
.Norm(x + f(x))
uygulamasının sorunlara neden olabileceğini unutmayın. - Kalan dalları 0 olarak başlatmayı deneyin. (İhtiyacınız Olan Tek Şey ReZero: Geniş Derinlikte Hızlı Kaynaşma bölümüne bakın.)
- Öğrenme hızını düşürün. Bu son çaredir.
Öğrenme hızı ısınma
![Aynı denemeyi gösteren iki grafik. İlk grafikte, x ekseni Global Adım, y ekseni ise Tren Kaybı'dır. Öğrenme hızı ısınma sayıları düşük olduğundan Tren Kaybı son derece istikrarsızdı.
Öğrenme hızı ısınma sayıları yükseldikçe Tren Kaybı çok daha istikrarlı hale geldi.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/instability_during_warmup.png?authuser=6&hl=tr)
Öğrenme hızı ısınması ne zaman uygulanır?
![Doğrulama grubu (y ekseni) ile temel öğrenme hızı (x ekseni) arasındaki çapraz entropi kayıplarını gösteren grafik. Grafikte, tümü nispeten düşük bir Temel öğrenme oranına sahip altı uygun deneme gösteriliyor. Taban öğrenme hızı arttıkça doğrulama kaybı düşer ve ardından artışa başlamadan önce düşük bir noktaya ulaşır. Grafikte ayrıca, hepsi nispeten yüksek bir Temel öğrenme oranına sahip dört uygulanabilir deneme de gösterilmektedir.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/axis_model_with_instability.png?authuser=6&hl=tr)
![Eğitim setindeki (y ekseni) ve global adımdaki (x ekseni) çapraz entropi kaybı grafiği. Kayıp, ilk Global adımlarda çok hızlı bir şekilde düşer. Ardından, kayıp yaklaşık 10.000 adım önemli ölçüde artar. Daha sonra, kayıp
kademeli olarak yaklaşık 15.000 adım düşer.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/loss_model_with_instability.png?authuser=6&hl=tr)
Şekil 7a'da, en iyi öğrenme hızı kararsızlığın sınırında olduğu için optimizasyon kararsızlığı yaşayan bir modeli gösteren hiperparametre eksen grafiği gösterilmektedir.
Şekil 7b'de, öğrenme hızı bu zirve değerinden 5 kat veya 10 kat daha büyük olan bir modelin eğitim kaybı incelenerek bunun nasıl tekrar kontrol edilebileceği gösterilmektedir. Bu grafik, sabit bir düşüşten sonra kayıpta ani bir artış gösterirse (ör.yukarıdaki şekilde ~10. 000 adımda) model muhtemelen optimizasyon kararsızlığından muzdarip olur.
Öğrenme hızı ısınma işlemini uygulama
![76619 adımındaki (y ekseni) ve temel öğrenme hızındaki (x ekseni) doğrulama kaybının grafiği. Grafikte, WMT14 EN-De'de bir Katman Norm Dönüştürücüsü ile ilgili dört farklı durumun sonucu karşılaştırılmıştır. Öğrenme hızı ısınma hızı, daha düşük öğrenme hızlarında doğrulama kaybını azaltır.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/beneficial_effect_warmup.png?authuser=6&hl=tr)
Önceki prosedürü kullanarak, modelin kararsız hale geldiği öğrenme hızı unstable_base_learning_rate
olsun.
Isınma sürecinde, öğrenme hızını 0'dan 0'dan sabit bir base_learning_rate
seviyesine yükselten bir öğrenme hızı programı hazırlanır. Bu plan, unstable_base_learning_rate
değerinden en az bir büyüklük sırasına göre belirlenir.
Varsayılan değer, 10 kat unstable_base_learning_rate
değerinde bir base_learning_rate
denemesidir. Ancak bu prosedürün tamamını 100 kat gibi bir değer için tekrarlamanın mümkün olduğunu unutmayın.
unstable_base_learning_rate
. Özel zaman çizelgesi:
- Isınma_adımları üzerinden 0'dan base_learning_rate'ye yükselin.
- post_warmup_steps için sabit bir hızda eğitim yapın.
Hedefiniz, unstable_base_learning_rate
seviyesinin çok üzerinde olan en yüksek öğrenme oranlarına erişmenizi sağlayacak en kısa warmup_steps
sayısını bulmaktır.
Yani her base_learning_rate
için warmup_steps
ve post_warmup_steps
ayarlarını yapmanız gerekir. post_warmup_steps
değerinin 2*warmup_steps
olarak ayarlanması genellikle sorun oluşturmaz.
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. Uygun en büyük nokta, max_train_steps
değerinin% 10'undan fazla olmamalıdır.
base_learning_rate
için eğitimin her adımını tamamlamayan bir warmup_steps
oluşturulduktan sonra temel modele uygulanması gerekir.
Esasen, bu programı mevcut programın başına ekleyin ve bu denemeyi referans değerle karşılaştırmak için yukarıda açıklanan en uygun kontrol noktası seçimini kullanın. Örneğin, başlangıçta 10.000 max_train_steps
kullanıcımız varsa ve 1.000 adım için warmup_steps
işlemi gerçekleştirdiysek yeni eğitim prosedürü toplam 11.000 adımdan oluşur.
Kararlı eğitim için uzun warmup_steps
gerekliyse (max_train_steps
'ın% 5'inden fazla) bunu hesaba katmak için max_train_steps
değerini artırmanız gerekebilir.
Tüm iş yükleri aralığında aslında "tipik" bir değer yoktur. Bazı modeller yalnızca 100 adıma ihtiyaç duyarken diğerleri (özellikle dönüştürücüler) 40.000'den fazla adıma ihtiyaç duyabilir.
Gradyan kırpma
![Grad l2 normu (y ekseni) ile global adım (x ekseni) karşılaştırması grafiği. "Tipik" gradyan norm eğitimi, ilk küresel adımlarda oldukça istikrarsızdı. Çok agresif olan bir klip eşiği, öğrenme hızını düşürür ve eğitimi yavaşlatır. Daha iyi bir klip eşiği (genel gradyan standardının hemen üzerinde) erken eğitimi dengeledi.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/gradient_clipping.png?authuser=6&hl=tr)
Gradyan kırpma en çok büyük veya aykırı değerlerde gradyan sorunları oluştuğunda yararlıdır. Gradyan Kırpma aşağıdaki sorunlardan birini düzeltebilir:
- Erken eğitim kararsızlığı (erken büyük gradyan standardı)
- Eğitim sırasında yaşanan istikrarsızlıklar (eğitimin ortasında gradyan ani artışları).
Bazen uzun ısınma dönemleri, kırpmanın sağlamadığı dengesizlikleri düzeltebilir. Ayrıntılar için Öğrenme hızı ısınma bölümüne bakın.
🤖 Isınma sırasında kırpmak nasıl olur?
İdeal klip eşikleri, "tipik" gradyan standardının hemen üzerindedir.
Aşağıda, gradyan kırpmanın nasıl yapılabileceğine ilişkin bir örnek verilmiştir:
- $\left | g \right |$ gradyanının normu $\lambda$ gradyan kırpma eşiğinden büyükse ${g}'= \lambda \times \frac{g}{\left | g \right |}$ burada ${g}'$ yeni renk geçişini belirtmektedir.
Eğitim sırasında kırpılmamış gradyan normunu kaydedin. Varsayılan olarak şu oluşturun:
- Gradyan normu ve adım grafiğini
- Tüm adımlarda toplanan gradyan normlarının histogramı
Renk geçişi 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 çalışmazsa bu eşiği ayarlayabilirsiniz.
🤖 Bir tür uyarlanabilir stratejiye ne dersiniz?
Gradyan kırpmayı denediğinizde kararsızlık sorunları devam ederse bunu daha fazla deneyebilirsiniz; yani eşiği küçültebilirsiniz.
Son derece agresif bir gradyan kırpma yöntemi (yani güncellemelerin% 50'sinden fazlası kırpılıyor), özünde öğrenme hızını düşürmenin garip bir yoludur. Kırpma işlemini çok agresif bir şekilde kullanıyorsanız bunun yerine öğrenme hızını azaltmanız gerekir.
Öğrenme hızı ve diğer optimizasyon parametrelerine neden hiperparametre diyoruz? Bunlar, önceki herhangi bir dağılımın parametreleri değildir.
"Hiperparametre" teriminin Bayes makine öğreniminde kesin bir anlamı vardır. Bu nedenle, öğrenme hızına ve diğer ayarlanabilir derin öğrenme parametrelerinin çoğuna "hiperparametreler" olarak atıfta bulunulması muhtemelen terminolojinin kötüye kullanımıdır. Öğrenme oranları, mimari parametreler ve derin öğrenme ile ilgili diğer tüm incelenebilir öğeler için "metaparameter" terimini kullanmayı tercih ederiz. Çünkü metaparametre, "hiperparametre" kelimesinin yanlış kullanımından kaynaklanan karışıklık potansiyelini önler. Bu karışıklığın, olasılıksal yanıt yüzeyi modellerinin kendi gerçek hiperparametrelerinin olduğu Bayes optimizasyonundan bahsederken özellikle olasıdır.
Maalesef "hiperparametre" terimi kafa karıştırıcı olsa da derin öğrenme topluluğunda son derece yaygın bir şekilde kullanılmaktadır. Bu nedenle, bu teknik bilgiden haberdar olma ihtimali olmayan pek çok kişinin yer aldığı geniş bir kitleye yönelik olan bu belgede, alandaki karışıklıklardan birine neden olan bir kaynağa katkıda bulunmayı ve diğerini önlemeyi umarak katkıda bulunmaya karar verdik. Bununla birlikte, bir araştırma makalesini yayınlarken farklı bir seçim yapabiliriz ve diğerlerini çoğu bağlamda bunun yerine "metaparametre" kullanmaya teşvik ederiz.
Grup boyutu, doğrulama grubu performansını doğrudan iyileştirmek için neden ayarlanmamalıdır?
Eğitim ardışık düzeninin diğer ayrıntılarını değiştirmeden grup boyutunun değiştirilmesi, genellikle doğrulama grubu performansını etkiler. Ancak eğitim ardışık düzeni her toplu iş boyutu için bağımsız olarak optimize edilirse iki grup boyutu arasındaki doğrulama grubu performansındaki fark genellikle ortadan kalkar.
Grup boyutuyla en güçlü şekilde etkileşime giren ve dolayısıyla her grup boyutu için ayrı ayrı ayar yapılması en önemli olan hiperparametreler, optimize edici hiperparametreleri (örneğin, öğrenme hızı, momentum) ve normalleştirme hiperparametreleridir. Daha küçük grup boyutları, örneklem varyansı nedeniyle eğitim algoritmasına daha fazla gürültü getirir. Bu sesin normalleşme bir etkisi olabilir. Bu nedenle, büyük parti boyutları fazla eşleştirmeye daha yatkın olabilir ve daha güçlü normalleştirme ve/veya ek normalleştirme teknikleri gerektirebilir. Ayrıca, toplu boyutu değiştirirken eğitim adımlarının sayısını da ayarlamanız gerekebilir.
Tüm bu etkiler dikkate alındıktan sonra, grup boyutunun ulaşılabilir maksimum doğrulama performansını etkilediğine dair ikna edici bir kanıt yoktur. Ayrıntılar için Shallue ve diğerleri 2018 sayfasına bakın.
Tüm popüler optimizasyon algoritmaları için güncelleme kuralları nelerdir?
Bu bölümde, çeşitli popüler optimizasyon algoritmaları için güncelleme kuralları yer almaktadır.
Stokastik gradyan azalma (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 hızı, $\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 hızı, $\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 (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}\]