Это немного широкий вопрос, но вот разбивка.
Во-первых, NN - это просто функциональные аппроксиматоры. Дайте им некоторый ввод и вывод, и они найдут f (input) = output Только, если такая функция существует и дифференцируема на основе потерь / стоимости
Таким образом, функция Q Q (состояние, действие) = futureReward для этого действия, предпринятого в этом состоянии
В качестве альтернативы, мы можем изменить функцию Q, чтобы она принимала текущее состояние и вывод массива предполагаемых будущих наград за каждое действие. Пример:
[7,5,1,8] for action a,b,c,d
Итак, теперь функция Q => Q (состояние) = futureRewardMatrix [action *]
Теперь все, что вам нужно это нейронная сеть, которая принимает текущее состояние и выводит вознаграждения за каждое действие. (работает только для отдельных действий [a, b, c, d ..])
Как обучить сеть.
- Соберите тренировочную партию, набрав состояний, действий, наград, nextState
- Для получения действий вы используете nn .predict (состояние) , с учетом эпсилона для выбора случайных действий
Обучение:
x_train = state
y_train[action] = reward + self.gamma * (np.amax(nn.predict(nextState))
далее мы тренируемся на относительно большой партии x_trains и y_trains
nn.train_on_batch(x_train_batch,y_train_batch)
Затем повторите процесс сбора пакетов для каждого шага среды.
Я рекомендую вам ознакомиться с medium и todatascience DQN статей и их соответствующие репозитории Github, чтобы получить полную реализацию кода