2016-10-10 7 views
5

Я работаю в программе обучения подкреплению, и я использую эту статью как reference. Я использую 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. 

Функция потерь уравнение здесь это

enter image description here

где моя награда +1, MAXQ (S', а ') = 0,8375 и Q (s, A) = 0,6892

Мой л бы 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') 

ответ

0

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

model.train_on_batch(state_action_vector, target) 

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

+0

Просим предоставить более подробное описание. благодаря – RZK