Policy Gradients
通过奖惩机制reward,来对选择进行反向传递,从而确定是否需要进行加大,或者减小选择的力度
因为Policy Gradients是回合更新,不是每步更新,所以是在回合进行结束后,才对参数和reward进行调整
- 建立两个全链接层
- 利用softmax将所有的动作值转换成概率
self.all_act_prob = tf.nn.softmax(all_act, name='act_prob')
- 为了套用tf中神经网络的Loss,将动作的概率加负号进行最小化,从而将实际概率值最大化
neg_log_prob = tf.reduce_sum( -tf.log(self.all_act_prob)*tf.one_hot(self.tf_acts, self.n_actions), axis=1 ) loss = tf.reduce_mean(neg_log_prob * self.tf_vt) # reward guided loss self.train_op = tf.train.AdamOptimizer(self.lr).minimize(loss)
- 取和存现在的状态
def choose_action(self, observation): prob_weights = self.sess.run(self.all_act_prob, feed_dict={self.tf_obs: observation[np.newaxis, :]}) action = np.random.choice( range(prob_weights.shape[1]), p=prob_weights.ravel()) # select action w.r.t the actions prob return action def store_transition(self, s, a, r): self.ep_obs.append(s) self.ep_as.append(a) self.ep_rs.append(r)