Как обновить веса в keras для обучения с подкреплением?

#python #theano #keras #reinforcement-learning

#python #theano #keras #подкрепление-обучение

Вопрос:

Я работаю в программе обучения с подкреплением и использую эту статью в качестве ссылки. Я использую python с keras (theano) для создания нейронной сети, а псевдокод, который я использую для этой программы, является

 Do a feedforward pass for the current state s to get predicted Q-values for all actions.

Do a feedforward pass for the next state s’ and calculate maximum overall network outputs max a’ Q(s’, a’).

Set Q-value target for action to r   γmax a’ Q(s’, a’) (use the max calculated in step 2). For all other actions, set the Q-value target to the same as originally returned from step 1, making the error 0 for those outputs.

Update the weights using backpropagation.
  

Уравнение функции потерь здесь такое

введите описание изображения здесь

где моя награда равна 1, maxQ(s’,a’) = 0,8375 и Q (s, a) = 0,6892

Мой L был бы 1/2*(1 0.8375-0.6892)^2=0.659296445

Теперь, как мне обновить веса моей модели нейронной сети, используя указанное выше значение функции потерь, если моя структура модели такова

 model = Sequential()
model.add(Dense(150, input_dim=150))
model.add(Dense(10))
model.add(Dense(1,activation='sigmoid'))
model.compile(loss='mse', optimizer='adam')
  

Ответ №1:

Предполагая, что NN моделирует функцию Q value, вы просто передаете цель в сеть. например

 model.train_on_batch(state_action_vector, target)
  

Где state_action_vector — это некоторый предварительно обработанный вектор, представляющий ввод состояния-действия в вашу сеть. Поскольку ваша сеть использует функцию потерь MSE, она вычислит условие прогнозирования, используя действие состояния при прямом проходе, а затем обновит веса в соответствии с вашей целью.

Комментарии:

1. Пожалуйста, предоставьте более подробное описание. Спасибо