Я начинаю узнавать о 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]?
Или я все вместе неправильно понял?