Почему в уравнении (коде) нет знака?
Это потому, что расчет потерь выполняется внутри функции соответствия.
reward + self.gamma * np.amax(self.brain.predict(next_state)[0])
Это то же самое, что и target компонента в функции потерь.
Внутри метода подгонки потери в керасе будут рассчитываться, как указано ниже.Для единственной точки данных обучения (стандартные обозначения нейронных сетей)
x = input state
y = predicted value
y_i = target value
loss(x) = y_i - y
на этом этапе target - предсказание происходит внутри.
Почему мы прогнозируем дважды для одной модели?
Хороший вопрос !!!
target = reward + self.gamma * np.amax(self.brain.predict(next_state)[0])
На этом шаге мы прогнозируем значениеследующее состояние для вычисления целевого значения для состояния s, если мы предпримем определенное действие a (которое обозначается как Q (s, a))
target_f = self.brain.predict(state)
На этом этапе мы вычисляем всезначения Q для каждого действия , которое мы можем выполнить в состоянии s.
target = 1.00 // target is a single value for action a
target_f = (0.25,0.25,0.25,0.25) //target_f is a list of values for all actions
затем выполняется следующий шаг.
target_f[0][action] = target
мы только меняем значениевыбранное действие.(если мы предпримем действие 3)
target_f = (0.25,0.25,1.00,0.25) // only action 3 value will change
Теперь target_f будет фактическим целевым значением , которое мы пытаемся предсказать с правильной формой.