Lei Feng Net Not: Bu makalenin yazarı Yang Xi, orijinal metin yazar tarafından yayınlandı kişisel blog Leifeng.com yetkilendirildi.
Birçok makine öğrenimi ve derin öğrenme uygulamasında, en çok kullanılan optimize edicinin Adam olduğunu gördük. Neden?
Aşağıdakiler TensorFlow'daki iyileştiricilerdir:
Ayrıntılar için bkz: https://www.tensorflow.org/api_guides/python/train
Ayrıca keras'ta SGD, RMSprop, Adagrad, Adadelta, Adam vb. Bulunmaktadır.Detaylar:
https://keras.io/optimizers/
Yaygın gradyan inişine ek olarak, Adadelta, Adagrad, RMSProp, vb. Gibi birkaç optimize edicinin olduğunu bulabiliriz. Bunlar nedir ve nasıl seçilir?
Yaygın olarak kullanılan optimize edicilerin bir karşılaştırması bu makalede Sebastian Ruder tarafından verilmiştir. Bugün öğrenelim:
Orijinal bağlantı: https://arxiv.org/pdf/1609.04747.pdf
Bu makale sıralanacak:
Gradyan güncelleme kuralları ve her algoritmanın dezavantajları
Bu eksikliğin üstesinden gelmek için önerilen bir sonraki algoritma
Hiperparametrenin genel ayar değeri
Çeşitli algoritmaların etkilerinin karşılaştırması
Hangi algoritmayı seçmelisiniz
Öncelikle gradyan iniş BGD, SGD, MBGD'nin en yaygın üç varyantına bakın,
Bu üç form arasındaki fark, amaç fonksiyonunun gradyanını hesaplamak için ne kadar veri kullandığımıza bağlıdır.
Bu durumda, doğal olarak bir değiş tokuş söz konusudur, yani parametre güncellemesinin doğruluğu ve çalışma süresi.
Gradyan güncelleme kuralları:
BGD, maliyet fonksiyonunun parametrelere olan gradyanını hesaplamak için tüm eğitim setinin verilerini kullanır:
Dezavantajları:
Bu yöntem, bir güncellemede tüm veri setinin gradyanını hesaplamak olduğu için hesaplaması çok yavaştır ve çok sayıda veri setiyle karşılaşmak çok zordur ve modeli gerçek zamanlı olarak güncellemek için yeni verilere yatırım yapmak imkansızdır.
aralıktaki i için (nb_epochs):
params_grad = değerlendirme_gradyanı (kayıp_işlevi, veriler, parametreler)
params = params-learning_rate * params_grad
Önceden bir yineleme numarası çağını tanımlayacağız, önce params_grad gradyan vektörünü hesaplayacağız ve ardından degradenin yönü boyunca parametre parametrelerini güncelleyeceğiz.Öğrenme oranı, her adımı ne kadar atacağımızı belirler.
Toplu gradyan inişi, dışbükey işlevler için genel bir minimuma yakınsayabilir ve dışbükey olmayan işlevler için yerel bir minimuma yakınlaşabilir.
Gradyan güncelleme kuralları:
BGD'nin tüm verilerle tek seferlik gradyan hesaplamasıyla karşılaştırıldığında, SGD her güncellendiğinde her örnek için gradyanları günceller.
Büyük veri kümeleri için benzer örnekler olabilir, böylece BGD degradeleri hesaplarken fazlalık olacaktır.
SGD bir seferde yalnızca bir kez güncellenirken, artıklık yoktur ve daha hızlıdır ve örnekler eklenebilir.
aralıktaki i için (nb_epochs):
np.random.shuffle (veri)
örneğin verilerde:
params_grad = değerlendirme_gradyanı (kayıp_işlevi, örnek, parametreler)
params = params-learning_rate * params_grad
Koda baktığınızda farkı görebilirsiniz, yani genel veri seti, her örnek için bir parametre güncellemesinin gerçekleştirildiği bir döngüdür.
Dezavantajları:
Ancak, SGD sık sık güncellendiği için maliyet fonksiyonunda ciddi dalgalanmalara neden olacaktır.
BGD, yerel bir minimuma yaklaşabilir ve tabii ki SGD'nin salınımı daha iyi bir yerel minimuma sıçrayabilir.
Öğrenme oranını biraz düşürdüğümüzde, SGD ve BGD'nin yakınsaması aynıdır.
Gradyan güncelleme kuralları:
MBGD her seferinde küçük bir numune grubu kullanır, yani hesaplama için n numune,
Bu şekilde, parametre güncellemesi sırasındaki varyansı azaltabilir ve yakınsama daha kararlı hale gelir.
Öte yandan, daha etkili gradyan hesaplamaları gerçekleştirmek için derin öğrenme kütüphanesindeki yüksek düzeyde optimize edilmiş matris işlemlerinden tam olarak yararlanabilirsiniz.
SGD ile fark, her döngünün her numune üzerinde değil, n numuneden oluşan bir parti
aralıktaki i için (nb_epochs):
np.random.shuffle (veri)
get_batches içindeki parti için (data, batch_size = 50):
params_grad = değerlendirme_gradyanı (kayıp_işlevi, toplu iş, parametreler)
params = params-learning_rate * params_grad
Hiperparametre ayar değeri:
n genellikle 50 ila 256 arasındadır
Dezavantajları:
Ancak, Mini toplu gradyan inişi iyi yakınsamayı garanti edemez:
1. Öğrenme hızı çok küçükse, yakınsama hızı çok yavaş olacaktır, çok büyükse kayıp işlevi minimum değerde salınacak veya hatta sapacaktır.
(Bir önlem, önce daha büyük bir öğrenme oranı belirlemektir. İki yineleme arasındaki değişiklik belirli bir eşikten düşük olduğunda, öğrenme oranını azaltın. Bununla birlikte, eşik ayarının önceden yazılması gerekir. Veri setinin özelliklerine uyum sağlayabilme)
2. Ayrıca bu yöntem, tüm parametreleri güncellerken aynı öğrenme oranını uygulamaktır.Verilerimiz seyrekse, özellikleri düşük frekansla güncellemeyi tercih ederiz.
3. Ek olarak, dışbükey olmayan işlevler için yerel minimumlarda veya eyer noktalarında yakalamadan kaçının çünkü eyer noktası etrafındaki hata aynıdır, tüm boyutların gradyanları 0'a yakındır ve SGD burada kolayca yakalanır.
Eyer noktası, tümü bu noktanın teğet çizgisinin farklı taraflarında bulunan, pürüzsüz bir işlevin eyer noktasının yakınında bulunan bir eğri, yüzey veya hiper yüzeydir.
Örneğin, aşağıdaki şekilde iki boyutlu şekil bir eyer gibidir: x ekseni yönünde yukarı doğru ve y ekseni yönünde aşağı doğru kıvrılır. Eyer noktası (0, 0)
Yukarıdaki üç zorluğun üstesinden gelmek için aşağıdaki algoritmalar geliştirilmiştir.
[Zorluğu ele alma 1]
Geçitler durumunda SGD kolayca hapsolur. Uçurum, yüzeyin bir yönünün diğerinden daha dik olduğu anlamına gelir. Şu anda, SGD salınacak ve minimum değere yakın olmayacaktır:
Gradyan güncelleme kuralları:
Momentum, v_t 1 ekleyerek SGD'yi hızlandırabilir ve salınımı bastırabilir
Dağdan aşağı küçük bir top yuvarladığımızda direnç yoksa momentumu artacak, dirençle karşılaşırsa hızı düşecektir.
Bu öğenin eklenmesi, yakınsamayı hızlandırmak ve şoku azaltmak için, boyutun hızını aynı gradyan yönüyle daha hızlı hale getirebilir ve gradyan yönüyle boyutun güncelleme hızını daha yavaş değiştirebilir.
Hiperparametre ayar değeri:
Genel olarak, değeri yaklaşık 0,9'dur.
Dezavantajları:
Bu durum, topun dağdan aşağıya yuvarlanırken yokuş boyunca kör bir şekilde yuvarlanmasıyla eşdeğerdir.Eğer bazı peygamberleri varsa, örneğin yokuş yukarı gitmek üzereyken yavaşlaması gerektiğini bilir, adaptasyon daha iyi olur.
Gradyan güncelleme kuralları:
Parametrenin bir sonraki adımda olacağı değeri yaklaşık olarak tahmin etmek için v_t 1 kullanın. Gradyan hesaplanırken, mevcut konumda değil, gelecekteki konumdadır
Hiperparametre ayar değeri:
hala 0,9 civarında.
Etkilerin karşılaştırılması:
Mavi, Momentum sürecidir. Önce geçerli gradyan hesaplanır ve ardından güncellenen kümülatif gradyan sonrasında büyük bir sıçrama olur.
NAG, önce önceki adımın kümülatif gradyanında (kahverengi vektör) büyük bir sıçrama yapacak ve ardından bir düzeltme (kırmızı vektör) yapmak için gradyanı ölçecek. Bu beklenen güncelleme, çok hızlı ilerlememizi engelleyebilir.
NAG, RNN'nin birçok görevde daha iyi performans göstermesini sağlayabilir.
Şimdiye kadar, gradyanı güncellerken kayıp fonksiyonunun gradyanına göre hızı ayarlayabilir ve SGD'yi hızlandırabiliriz.
Ayrıca, farklı parametrelerin önemlerine göre değişen derecelerde güncellenebileceğini umuyoruz.
[Zorluğu ele alma 2]
Bu algoritma, düşük frekanslı parametrelerde daha büyük güncellemeler ve yüksek frekanslı parametrelerde daha küçük güncellemeler yapabilir. Bu nedenle, seyrek veriler için çok iyi performans gösterir, bu da tanıma gibi SGD'nin sağlamlığını büyük ölçüde artırır. Youtube videolarındaki kediler GloVe kelime düğünlerini eğitiyor çünkü hepsi düşük frekanslı özelliklerde daha büyük güncellemeler gerektiriyor.
Gradyan güncelleme kuralları:
G olduğu yerde: t anında _i parametresinin gradyanı
Normal bir SGD ise, her an moment_i'nin gradyan güncelleme formülü şöyledir:
Ama burada öğrenme oranı da t ve i ile değişir:
Bunlar arasında, G_t bir köşegen matristir ve (i, i) elemanı t zamanında _i parametresinin kare gradyanlarının toplamıdır.
Adagrad'ın avantajı, öğrenme oranının manuel olarak ayarlanmasını azaltmaktır.
Hiperparametre ayar değeri:
Genel olarak 0.01 olarak alınır.
Dezavantajları:
Dezavantajı, paydanın birikmeye devam etmesi, bu nedenle öğrenme oranının azalması ve sonunda çok küçük olmasıdır.
Bu algoritma, Adagrad'ın bir iyileştirmesidir. Adagrad ile karşılaştırıldığında, payda G, geçmiş gradyan kare zayıflama ortalaması ile değiştirilir:
Bu payda degradenin kök ortalama karesine (RMS) eşdeğerdir, bu nedenle RMS kısaltılabilir:
E'nin hesaplama formülü aşağıdaki gibidir ve t süresi önceki zamanın ortalamasına ve mevcut gradyanına bağlıdır:
Gradyan güncelleme kuralları:
Ek olarak, öğrenme oranı , öğrenme oranını önceden belirlememize gerek kalmaması için RMS ile değiştirilir:
Hiperparametre ayar değeri:
genellikle 0,9'a ayarlanır.
RMSprop, Geoff Hinton tarafından önerilen uyarlanabilir bir öğrenme hızı yöntemidir.
Hem RMSprop hem de Adadelta, Adagrad'ın öğrenme oranındaki keskin düşüş sorununu çözmek için tasarlanmıştır.
Gradyan güncelleme kuralları:
RMSprop, Adadelta'nın ilk biçimiyle aynıdır:
Hiperparametre ayar değeri:
Hinton, 'nin 0.9'a ve öğrenme oranının 'nin 0.001'e ayarlanmasını önerir.
Bu algoritma, her parametre için uyarlanabilir öğrenme oranını hesaplamanın başka bir yoludur.
Adadelta ve RMSprop gibi geçmiş gradyan vt'nin karesinin üssel bozulma ortalamasını depolamanın yanı sıra, momentum gibi geçmiş gradyan mt'nin üssel bozulma ortalamasını da korur:
Mt ve vt 0 vektör olarak başlatılırsa, 0'a doğru önyargılı olacaktır, bu nedenle sapma düzeltmesi yapılır.
Düzeltilmiş mt ve vt'yi hesaplayarak bu sapmaları dengeleyin:
Gradyan güncelleme kuralları:
Hiperparametre ayar değeri:
1 = 0.9, 2 = 0.999, = 10e 8 olması tavsiye edilir.
Uygulama, Adam'ın diğer uyarlanabilir öğrenme yöntemlerinden daha iyi olduğunu göstermektedir.
Eyer noktaları ve konturlar üzerindeki çeşitli algoritmaların performansına bir göz atalım:
Yukarıdaki iki durumda, Adagrad, Adadelta ve RMSprop'un doğru yönü bulduğu ve neredeyse hızlı bir şekilde ilerlediği ve yakınsama hızının oldukça hızlı olduğu, diğer yöntemlerin ise ya çok yavaş olduğu ya da bulmak için çok fazla sapma aldığı görülebilir.
Adagrad, Adadelta, RMSprop, Adam gibi uyarlanabilir öğrenme hızı yöntemlerinin bu senaryoda daha uygun olduğu ve daha iyi yakınsama gösterdiği şekilden görülebilmektedir.
Veriler seyrekse, kendi kendine uygulanabilir yöntemler, yani Adagrad, Adadelta, RMSprop, Adam kullanın.
RMSprop, Adadelta, Adam birçok durumda benzer etkilere sahiptir.
Adam, RMSprop temelinde önyargı düzeltme ve ivme ekledi.
Gradyan seyrekleştikçe Adam, RMSprop'tan daha iyi performans gösterecektir.
Genel olarak Adam en iyi seçimdir.
SGD birçok makalede ivme olmaksızın kullanılmaktadır. SGD bir minimum değere ulaşabilse de, diğer algoritmalardan daha uzun sürer ve bir eyer noktasında sıkışmış olabilir.
Daha hızlı yakınsamaya veya daha derin ve daha karmaşık sinir ağlarını eğitmeye ihtiyacınız varsa, uyarlanabilir bir algoritma kullanmanız gerekir.
https://stats.stackexchange.com/questions/55247/how-to-choose-the-right-optimization-algorithm
Leifeng.com'da İlgili Okumalar:
Google'ın açık kaynaklı bilgisayarla görme modeli MobileNets: farklı mobil cihaz seviyeleri için optimize edilmiştir
OpenBLAS projesi ve matris çarpım optimizasyonu | AI Araştırma Enstitüsü