Fonksiyon yaklaşımı olarak Sinir Ağı ile Q-öğrenme


11

Sinir Ağları kullanarak Q-Öğrenme ile ilgili Sorular bölümünde olduğu gibi Q-öğrenimindeki Q değerini yaklaşık olarak belirlemek için bir Sinir Ağı kullanmaya çalışıyorum . İlk cevapta önerildiği gibi, çıktı katmanı için doğrusal bir etkinleştirme işlevi kullanıyorum, yine de gizli katmanlarda sigmoid etkinleştirme işlevini kullanıyorum (2, ancak bunu daha sonra değiştirebilirim). Ayrıca tavsiye edildiği gibi her eylem için bir çıktı döndüren tek bir NN kullanıyorum .Q(a)

Bununla birlikte, algoritma basit araba direği dengeleme problemi için hala ayrışmaktadır. Bu yüzden Q güncellememin yanlış olduğundan korkuyorum. Başlatma işleminden sonra, her adımda yaptığım şey şudur:

  • Tüm eylemler için ileri yayılmasını kullanarak hesaplayın .Qt(st)
  • Yeni bir eylem seçin, , yeni bir duruma .atst
  • Tüm eylemler için ileriye doğru yayılmasını kullanarak hesaplayın .Qt(st+1)
  • Hedef Q değerini şu şekilde ayarlayın: yalnızca geçerli eylem için, a_t , diğer durumlar için Q_ {t + 1} (s, a_t) = Q_ {t} (s, a_t) ayarı . Not, bence sorun bu.Qt+1(st,at)=Qt(st,at)+αt[rt+1+γmaxaQ(st+1,a)Qt(st,at)]atQt+1(s,at)=Qt(s,at)
  • Hata vektörünü e=QtargetQt=Qt+1Qt
  • Ağırlık matrislerini güncellemek için hatayı NN üzerinden geri çoğaltın.

Birisi bana yanlış gittiğimi söyleyebilir mi?

Ayrıca, giriş katmanına ve ilk gizli katmana (yani sigmoid işlevler için) bir önyargı terimi eklemem gerektiğini düşünüyor musunuz? Bir fark yaratacak mı?

Yardımınız için şimdiden çok teşekkür ederim. Gerekirse soruyu netleştirmeye veya kodu paylaşmaya yardımcı olabilirim.

Yanıtlar:


9

Hedefiniz sadece

rt+1+γmaxaQ(st+1,a) .

Hata teriminizin (doğru olan) daha sonra olarak yeniden yazılabileceğini rt+1+γmaxaQ(st+1,a)Qt

bu, güncelleme formülündeki parantez içindeki terimdir. Bu, öğrenme sırasında NN öğrenme oranınız ve diğer backpagagation terimleriniz ile çarpılır ve daha sonra güncelleme formülü gibi önceki ağırlıklara eklenir .Q


Bahşiş için teşekkürler! Bu şekilde, hedef değerde sayısal hatalardan kaçınabilirim: Dediğiniz gibi, eklemek ve sonra çıkarmak . Qt
Enrico Anderlini

Ancak, NN + Q öğrenimim hala yakınsamıyor. Bu yüzden, yöntem doğruysa, sanırım sadece öğrenme oranı ve gizli katmanlardaki nöron sayısı ile oynamaya çalışacağım
Enrico Anderlini

1
Evet, bunu yapmalısınız (ReLU aktarma işlevini de kullanmayı deneyin). Ancak Q-Learning'in işlev yaklaşımı ile yakınsama garantisi olmadığını unutmayın. Bir sonraki denemeniz işe yaramazsa, Advantage Learning'i denemek isteyebilirsiniz. Ve son olarak, sorun verilerinizin doğru olmaması olabilir. Bu nedenle, Deneyim Tekrarını uygulamanız gerekir.
rcpinto

Sorunun bir uzantısı var. Algoritmayı soruda belirtildiği gibi anlıyorum ama ve terimleri hakkında kafam karıştı . Eğer oyunun ödülü sadece oyunun sonunda bilinirse (galibiyet veya kayıp durumunda), ara adım için ödülü nasıl sağlayabiliriz? Qt+1rt+1
Kanishka Ganguly

1
Yapmazsın, sıfır. Ancak, Q değerleri tarafından önceki durumlara yavaşça yayılacaktır, çünkü Q değeri, gelecekteki kümülatif ödüllerin bir tahminidir .
rcpinto
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.