Усиление обучения с моделью Keras - PullRequest
0 голосов
/ 27 октября 2018

Я пытался реализовать алгоритмы q-learning в Керасе.По статьям я нашел эти строки кода.

for state, action, reward, next_state, done in sample_batch:
        target = reward
        if not done:
            #formula
          target = reward + self.gamma * np.amax(self.brain.predict(next_state)[0])
        target_f = self.brain.predict(state)
        #shape (1,2)
        target_f[0][action] = target
        print(target_f.shape)
        self.brain.fit(state, target_f, epochs=1, verbose=0)
    if self.exploration_rate > self.exploration_min:
        self.exploration_rate *= self.exploration_decay

Переменная sample_batch - это массив, содержащий образец state, action, reward, next_state, done из собранных данных.Я также нашел следующую формулу q-обучения Formula

Почему в уравнении (коде) нет знака -?Я обнаружил, что np.amax возвращает максимум массива или максимум вдоль оси.Когда я звоню self.brain.predict(next_state), я получаю [[-0.06427538 -0.34116858]].Таким образом, он играет роль предсказания в этом уравнении?По мере продвижения вперед target_f - это прогнозируемый результат для текущего состояния, а затем мы также добавляем к нему награду этим шагом.Затем тренируем модель по току state (X) и target_f (Y).У меня есть несколько вопросов.Какова роль self.brain.predict(next_state) и почему нет минуса?Почему мы прогнозируем дважды по одной модели?Пример self.brain.predict(state) and self.brain.predict(next_state)[0]

1 Ответ

0 голосов
/ 31 октября 2018

Почему в уравнении (коде) нет знака?

Это потому, что расчет потерь выполняется внутри функции соответствия.

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 будет фактическим целевым значением , которое мы пытаемся предсказать с правильной формой.

...