Обучение нейронной сети для Q-обучения - PullRequest
0 голосов
/ 03 августа 2020

Я начинаю узнавать о Q-обучении с нейронной сетью для прогнозирования значений q, и чтобы лучше понять, как это работает, я пытаюсь создать это с нуля.

(Извините за неправильную запись, я был не могу понять, как это сделать правильно)

Если у меня есть 2 возможных действия из любого состояния s, выход для текущего состояния sᵗ при прямой передаче по сети будет Q (sᵗ), что для этого примера давайте Предположим, Q (sᵗ) = [1.2, 3.5]

Теперь мы выполняем действие aᵗ = 1, которое является действием с наибольшим значением Q, которое приводит нас к состоянию sᵗ⁺¹.

Затем мы выполняем прямой проход с sᵗ⁺¹, который, предположим, дает Q (sᵗ⁺¹) = [2.3, 0.4]

Предположим, также он дает вознаграждение r = 3 и что ставка дисконтирования ? = 0.9.

Итак, сеть предсказала для пары действий состояния Q (sᵗ, aᵗ), что Q (sᵗ, aᵗ) = 3,5

Целью будет Q (sᵗ, aᵗ) = r + ? maxQ (sᵗ⁺¹, a *)

Что для этого примера будет Q (sᵗ, aᵗ) = 3 + 0,9 * max [2,3, 0,4 ] = 3 + 0,9 * 2,3 = 5,07

Тогда мы могли бы вычислить квадрат потерь как (5,07 - 3,5) ² = 2,4649

Однако в прошлом, когда я использовал нейронные сети, я использовал только ошибку (цель - выход), а не квадрат ошибки, а также знал цель для всех выходных нейронов сети, что означает, что я мог создать вектор потерь, такой как [1.2, 3.5, -0.2]

Если у меня есть входной слой -> скрытый слой -> RELU -> выходной слой (с линейной функцией активации для выходного слоя), как мне использовать эту потерю для обновления весов.

Создать вектор потерь, в котором потери всех остальных выходных нейронов равны 0, за исключением того, который будет иметь квадрат потерь 2,4649, например [0, 2,4649]? Затем используйте обратное распространение, чтобы изменить веса в соответствии с этим?

Или я могу сделать то же самое, но вместо квадрата потерь мне нужно найти квадрат средних потерь, разделив его на количество выходов (2) чтобы получить вектор потерь [0, 1.23245]?

Или я все вместе неправильно понял?

...