Bir öğrenme oranı seçme


85

Şu anda, SGDgeri yayılım kullanan sinir ağları için , Stokastik Degrade İnişini uygulamak için çalışıyorum ve amacını anladığım sırada, öğrenme oranı için nasıl değer seçileceği konusunda bazı sorularım var.

  • Öğrenme oranı, iniş oranını belirttiği için hata gradyanının şekliyle ilişkili midir?
  • Eğer öyleyse, bu bilgiyi bir değer hakkında kararınızı bildirmek için nasıl kullanırsınız?
  • Hangi tür değerleri seçmem gerekiyorsa ve bunları nasıl seçmeliyim?
  • Görünüşe göre küçük değerlerin fazladan atlamaktan kaçınmasını istersiniz, ancak yerel minimumda sıkışıp kalmamanız veya inişin uzun sürmesi için nasıl birini seçersiniz?
  • Sabit bir öğrenme oranına sahip olmak mantıklı mı yoksa degradedeki minimum seviyeye yaklaşırken değerini değiştirmek için bir ölçü mü kullanmalıyım?

Kısacası: SGD için öğrenme oranını nasıl seçerim?

Yanıtlar:


69
  • Öğrenme oranı, iniş oranını belirttiği için hata gradyanının şekliyle ilişkili midir?

    • Düz SGD'de cevap hayır. Hata gradyanına ilgisiz olan global bir öğrenme oranı kullanılır. Ancak, aldığınız sezgi, SGD güncelleme kuralının çeşitli değişikliklerine ilham verdi.
  • Eğer öyleyse, bu bilgiyi bir değer hakkında kararınızı bildirmek için nasıl kullanırsınız?

    • Bunlardan en bilinenleri Adagrad'dır ve her boyuttaki hata gradyanı gt tarihinin l2 normuna dayanan her boyutta η bir küresel öğrenme oranı ölçeklendirir :

      görüntü tanımını buraya girin

    • Adadelta , hem adagrad gibi hata gradyan geçmişini hem de ağırlık güncelleme geçmişini kullanan ve hiçbir öğrenme oranı ayarlamama avantajına sahip başka bir eğitim algoritmasıdır .

  • Hangi tür değerleri seçmem gerekiyorsa ve bunları nasıl seçmeliyim?

    • Sinir ağlarında düz SGD için öğrenme oranlarının ayarlanması genellikle 0.01 gibi aklı başında bir değerle başlamak ve ardından optimal bir değer bulmak için çapraz doğrulama yapmaktır. Tipik değerler, 0.0001 ila 1 arasında değişen birkaç büyüklük sırası arasındadır.
  • Görünüşe göre küçük değerlerin fazladan atlamaktan kaçınmasını istersiniz, ancak yerel minimumda sıkışıp kalmamanız veya iniş yapmak için çok uzun sürmeniz gereken birini nasıl seçersiniz? Sabit bir öğrenme oranına sahip olmak mantıklı mı yoksa degradedeki minimum seviyeye yaklaşırken değerini değiştirmek için bir ölçü mü kullanmalıyım?

    • Genellikle, en iyi olan değer en yüksek sabit öğrenme oranına yakındır ve öğrenme hızı bozulma / tavlama (doğrusal ya da üstel olarak) eğitim boyunca kullanılır. Bunun arkasındaki neden, başlangıçta açık bir öğrenme sinyali olmasıdır, bu nedenle agresif güncellemeler araştırmayı teşvik ederken, daha küçük öğrenme oranları yerel hata yüzeyinin daha hassas bir şekilde kullanılmasına izin verir.

1
Uygulamada, adadelta ile bir öğrenme oranı kullanacaksınız. Bazı problemlerde onsuz çalışmaz.
bayer

Unutulmamalıdır Adam iyileştirici Adagrad veya Adadelta bugünlerde daha olağandır.
E_net4 hala 16

22

Aşağıda, Sinir Ağları'ndaki (Geri Yayılım) Andrew Ng tarafından öğrenme oranına ilişkin çok iyi bir not (sayfa 12). Öğrenme oranı ile ilgili detayları bulacaksınız.

http://web.stanford.edu/class/cs294a/sparseAutoencoder_2011new.pdf

Dördüncü puanınız için, normalde birinin "fazla" aşması ya da çok yavaş birleşmesi gereken "dengeli" bir öğrenme oranı seçmesi gerektiği konusunda haklısınız. Biri, öğrenme oranını teşhis / ince ayar yapmak için maliyet fonksiyonunun inişiyle çizebilir. Uygulamada, Andrew normalde "yeterince iyi" bir öğrenme oranı elde etmek için L-BFGS algoritmasını kullanır (sayfa 12'de belirtilmiştir).


9

Bir öğrenme hızı seçmek, hiperparametre optimizasyonu olarak bilinen bir "meta-problem" örneğidir . En iyi öğrenme oranı eldeki probleme ve ayrıca optimize edilen modelin mimarisine ve hatta mevcut optimizasyon sürecinde modelin durumuna bağlıdır! Gibi hyperparameter optimizasyonu adamış hatta yazılım paketi bulunur bahçe nanesi ve hyperopt (örnekler sadece birkaç, diğerleri vardır!).

Tam ölçekli hiperparametre optimizasyonunun yanı sıra, şu ana kadar belirtilmeyen öğrenme oranlarını seçmek için oldukça yaygın olan bir teknikten bahsetmek istedim. Simüle edilmiş tavlama , birinin büyük bir öğrenme hızı ile başladığı ve optimizasyon ilerledikçe öğrenme oranını kademeli olarak azalttığı bir modeli optimize etmek için kullanılan bir tekniktir. Genel olarak, modelinizi büyük bir öğrenme oranıyla (0,1 ya da öylesine) optimize edersiniz ve daha sonra bu oranı kademeli olarak (çoğunlukla 0.01, ardından 0.001, 0.0001 vb.) Düşürerek düşürürsünüz.

Bu, ilerleme kaydedildiği sürece modeli bir öğrenme oranıyla optimize etmek için erken durma ile birleştirilebilir , daha sonra ilerleme yavaş gibi göründüğünde daha küçük bir öğrenme hızına geçilir. Daha büyük öğrenme oranları, modelin genel, büyük ölçekli optima bölgelerini belirlemesine yardımcı olurken, daha küçük oranlar modelin belirli bir yerel optimuma odaklanmasına yardımcı olur.


6

Yüksek lisans tezimden kopyala yapıştırılmış tezi :

  • Birkaç çağ için kayıp azalmazsa, öğrenme oranı çok düşük olabilir. Optimizasyon işlemi yerel asgari düzeyde sıkışmış da olabilir.
  • NAN olma kaybı çok yüksek öğrenme oranlarına bağlı olabilir. Başka bir neden sıfıra bölmek veya sıfır logaritmasını almaktır.
  • Ağırlık güncellemesi takibi: Andrej Karpathy, CS231n'nin 5. dersinde, öğrenme oranının iyi seçilip seçilmediğini kontrol etmek için ağırlık güncellemelerini takip etmeyi önerdi. Ağırlık güncellemesinin 10−3 düzeyinde olması gerektiğini öne sürüyor. Ağırlık güncellemesi çok yüksekse, öğrenme oranı azaltılmalıdır. Ağırlık güncellemesi çok düşükse, öğrenme oranı arttırılmalıdır.
  • Tipik öğrenme oranları [0.1, 0.00001] 'de

4

Yineleme sürecimiz sırasında "adım büyüklüğü" olarak dönüştürülen öğrenme oranı, yıllardır sıcak bir konu olmuştur ve devam edecektir.

İlgilendiğim konuda adım boyutu için üç seçenek var:

  • Biri " zaman " ile ilgilidir ve her boyut aynı adım boyutunu paylaşmalıdır. Gibi bir şey fark etmiş olabilirsiniz

αt

t geçerli yineleme sayısını gösterirken, alfa hiper parametresidir

  • bir sonraki degrade ile bağlanır ve her boyut kendi adım boyutuna sahiptir. Gibi bir şey fark etmiş olabilirsiniz

1αβ+s=1t1gs2αβ+s=1tgs2

alfa ve beta hiper parametresiyken, g degrade gösterir

  • Sonuncusu zaman ve degradenin birleşimidir ve olması gerektiği gibi olmalıdır.

1αβ+s=1t1gs2αβ+s=1tgs2+γt

veya

1αβ+s=1t1gs2αβ+s=1tgs2γt

Umarım bu size yardımcı olur, iyi şanslar -)


Bunun için bir referansınız var mı?
Jon,

FTRL'nin öğrenme oranı kısmına başvurabilirsiniz, TIME ve GRADIENT ile formüle edebiliriz.
joe,

3

Yapay sinir ağları genellikle ağırlıklardaki gradyan inişiyle eğitilir. Bu, her bir yinelemede, kayıp fonksiyonunun türevini her bir ağırlığa göre hesaplamak ve bu ağırlıktan çıkarmak için geri yayılım kullandığımız anlamına gelir. Bununla birlikte, bunu gerçekten denerseniz, ağırlıklar her yinelemede çok fazla değişecek ve bu da onları “aşırı düzeltici” yapacaktır ve kayıp gerçekte artacaktır. Bu yüzden pratikte insanlar genellikle her bir türevini, karşılık gelen ağırlığından çıkarmadan önce “öğrenme oranı” adı verilen küçük bir değerle çarparlar.

Sinir ağları kaybı işlevini bir yüzey olarak düşünebilirsiniz, burada taşıyabileceğiniz her yön bir ağırlığın değerini temsil eder. Degrade iniş, eğimin mevcut yönünde sıçrama yapmak gibidir ve öğrenme oranı, attığınız adımın uzunluğu gibidir.


3

David'in cevabına ek olarak fastai'de, belirli bir mimariyi kullanarak bu veri için en iyi öğrenme oranını bulma kavramını bulduğum yerdir.

Ancak bu şey sadece fastai / pytorch'ta var. Son zamanlarda birisi bir keras uygulaması yaptı .

sırayla bu makalelere dayanmaktadır:

Bu yardımcı olur umarım.


2

Jeremy Howard'ın Deep Learning kursu 1'e dayanan öğrenme oranını seçme konusunda başka bir yaklaşıma kısa bir giriş yapmama izin verin . Daha derine inmek istiyorsanız, bu blog yayınına bakın .

Jeremy Howard'ın kursunda önerilen öğrenme oranı, farklı öğrenme oranlarını denemek ve kayıp fonksiyonunu en çok aşağı indiren olanı seçmek için sistematik bir yola dayanmaktadır. Bu, birçok partiyi mini parti gradyan iniş yöntemine besleyerek ve yönteme beslediğiniz her yeni partinin öğrenme oranını artırarak yapılır. Öğrenme hızı çok küçük olduğunda, kayıp fonksiyonu çok yavaşça azalır. Öğrenme hızı çok büyük olduğunda, kayıp fonksiyonu artacaktır. Bu iki rejim arasında, kayıp fonksiyonunun en hızlı azaldığı optimal bir öğrenme oranı vardır. Bu, aşağıdaki şekilde görülebilir:

görüntü tanımını buraya girin

Öğrenme oranı civarındayken kaybın çok hızlı azaldığını görüyoruz . Bu yaklaşımı kullanarak, ağımız için en iyi sabit öğrenme oranı için bir yaklaşım seçmenin genel bir yoluna sahibiz.103

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.