GradientDescentOptimizer ve AdamOptimizer (TensorFlow) arasındaki fark nedir?


45

Basit yazdım MLP içinde TensorFlow bir modelleme olduğu XOR-Gate .

İçin böylece:

input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]

aşağıdakileri üretmelidir:

output_data = [[0.], [1.], [1.], [0.]]

Ağın bir giriş katmanı, gizli bir katmanı ve her birinin 2, 5 ve 1 nöronlu bir çıkış katmanı vardır.

Şu anda aşağıdaki çapraz entropiye sahibim:

cross_entropy = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))

Bu basit alternatifi de denedim:

cross_entropy = tf.square(n_output - output)

diğer bazı denemelerle birlikte.


Ancak, hiçbir zaman kurulum, bir ile hata olduğunun önemi GradientDescentOptimizerazalan edildi çok yavaş bir daha AdamOptimizer.

Aslında, tf.train.AdamOptimizer(0.01)400-800 öğrenme aşamasından sonra (öğrenme oranına bağlı olarak, 0.01en iyi sonuçların elde edildiği yerde ) gerçekten iyi sonuçlar vermiştir ve tf.train.GradientDescentOptimizerher ne kadar çapraz entropi hesaplaması veya öğrenme oranı kullanılsa da , her zaman 2000'den fazla öğrenme aşamasına ihtiyaç duyulmaktadır.

Bu neden böyle? Görünüşe göre AdamOptimizerher zaman daha iyi bir seçim mi?


2
Adam eniyileyici degrade inişten daha karmaşıktır ( bu kağıda dayanır ).
Marc Claesen

Yanıtlar:


77

tf.train.AdamOptimizerKullanımları Kingma ve Ba Adam algoritması öğrenme oranını kontrol etmek. Adam, basitten çok çeşitli avantajlar sunuyor tf.train.GradientDescentOptimizer. En önemlisi, parametrelerin hareketli ortalamalarını kullanmasıdır (momentum); Bengio, bu nedenlerin faydalı olmasının nedenlerini bu yazının 3.1.1. Bölümünde tartışmaktadır . Basitçe söylemek gerekirse, bu Adam'ın daha büyük ve etkili bir adım boyutu kullanmasını sağlar ve algoritma ince ayar yapmadan bu adım boyutuna yakınlaşacaktır.

Algoritmanın ana aşağı tarafı, Adam'ın her eğitim adımında her parametre için daha fazla hesaplama yapılmasını gerektirmesidir (hareketli ortalamaları ve varyansı korumak ve ölçeklendirilmiş gradyanı hesaplamak için); ve her bir parametre için tutulacak daha fazla durum (yaklaşık olarak her bir parametrenin ortalamasını ve varyansını saklamak için modelin boyutunun üç katına çıkması). Bir basit tf.train.GradientDescentOptimizer, MLP'nizde eşit olarak kullanılabilir, ancak bu kadar hızlı bir şekilde birleşmeden önce daha fazla hiperparametre ayarı gerektirir.


5
Bu cevap için teşekkürler! " Hiperparametre ayarı " hakkında konuşurken tam olarak ne demek istediğinizi ekler misiniz ?
daniel451

12
Jargon için özür dilerim! Yaklaşık konuşursak, " learning_rateargümanı tf.train.GradientDescentOptimizerkurucuya daha hızlı yaklaşıncaya kadar değiştirmek" demek istedim . :)
mrry
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.