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.
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.
- Wybierz nową akcję, , w nowym stanie .
- Oblicz stosując propagację do przodu NN dla wszystkich akcji.
- 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.
- Ustaw wektor błędu na
- 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.
źródło