Q-learning z Neural Network jako aproksymacja funkcji

11

Próbuję użyć sieci neuronowej w celu przybliżenia wartości Q w Q-learningu, tak jak w pytaniach dotyczących Q-Learning z wykorzystaniem sieci neuronowych . Jak zasugerowano w pierwszej odpowiedzi, używam liniowej funkcji aktywacji dla warstwy wyjściowej, podczas gdy nadal używam funkcji aktywacji sigmoidalnej w ukrytych warstwach (2, chociaż mogę to zmienić później). Używam również pojedynczego NN, który zwraca dane wyjściowe dla każdego działania zgodnie z zaleceniami.Q(a)

Jednak algorytm wciąż różni się w przypadku prostego problemu wyważenia wózka. Obawiam się, że moja aktualizacja Q jest nieprawidłowa. Po inicjalizacji zrobiłem to na każdym kroku:

  • Oblicz przy użyciu propagacji do przodu NN dla wszystkich akcji.Qt(st)
  • Wybierz nową akcję, , w nowym stanie .atst
  • Oblicz stosując propagację do przodu NN dla wszystkich akcji.Qt(st+1)
  • Ustaw docelową wartość Q jako: tylko dla bieżącej akcji, a_t , ustawiając Q_ {t + 1} (s, a_t) = Q_ {t} (s, a_t) dla innych stanów. Uwaga: myślę, że to jest problem.Qt+1(st,at)=Qt(st,at)+αt[rt+1+γmaxaQ(st+1,a)Qt(st,at)]atQt+1(s,at)=Qt(s,at)
  • Ustaw wektor błędu na e=QtargetQt=Qt+1Qt
  • Rozpropaguj błąd przez NN, aby zaktualizować macierze wagi.

Czy ktoś mógłby mi wskazać, gdzie popełniłem błąd?

Poza tym, czy uważasz, że powinienem również dołączyć warunek polaryzacji do warstwy wejściowej i pierwszej warstwy ukrytej (tj. Dla funkcji sigmoidalnych)? Czy to coś zmieni?

Z góry dziękuję za pomoc. W razie potrzeby mogę pomóc w wyjaśnieniu pytania lub udostępnieniu kodu.

Enrico Anderlini
źródło

Odpowiedzi:

9

Twój cel powinien być sprawiedliwy

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

Zauważ, że termin błędu (który jest poprawny) można następnie przepisać jako rt+1+γmaxaQ(st+1,a)Qt

który jest terminem w nawiasach we wzorze aktualizacji. Zostanie to pomnożone przez Twój współczynnik uczenia się NN i inne warunki propagacji wstecznej podczas uczenia się, a następnie dodane do poprzednich wag, podobnie jak formuła aktualizacjiQ

rcpinto
źródło
Dziękuję za wskazówkę! W ten sposób mogę uniknąć błędów numerycznych w wartości docelowej: jak mówisz, nie ma sensu dodawać, a następnie odejmować . Qt
Enrico Anderlini
Jednak moje uczenie się NN + Q nadal nie jest zbieżne. Więc jeśli metoda jest poprawna, myślę, że po prostu spróbuję się pobawić szybkością uczenia się i liczbą neuronów w ukrytej warstwie (warstwach)
Enrico Anderlini
1
Tak, powinieneś to zrobić (spróbuj również użyć funkcji transferu ReLU). Należy jednak pamiętać, że Q-Learning nie ma gwarancji konwergencji z przybliżeniem funkcji. Jeśli kolejna próba nie zadziała, możesz spróbować skorzystać z Advantage Learning. I wreszcie problem może polegać na tym, że dane nie są identyfikowane. Musisz więc wdrożyć funkcję powtarzania doświadczenia.
rcpinto
Mam rozszerzenie pytania. Rozumiem algorytm wspomniany w pytaniu, ale nie jestem co do i . Jeśli nagroda za grę jest znana dopiero pod koniec gry (w przypadku wygranej lub przegranej), w jaki sposób mamy zapewnić nagrodę za pośredni krok? Qt+1rt+1
Kanishka Ganguly
1
Nie masz, to zero. Ale będzie powoli propagowane przez wartości Q do poprzednich stanów, ponieważ wartość Q jest oszacowaniem łącznych przyszłych nagród.
rcpinto