通过多个独立输出强化学习a3c

时间:2017-08-28 17:29:48

标签: tensorflow

我正在尝试修改和实现Asynchronous Advantage Actor Critic(A3C)模型的googles模式。网上有大量的例子让我开始,但我遇到了试图扩展样本的问题。

我可以找到的所有例子都集中在乒乓上作为左或右状态输出或保持静止的例子。我试图将其扩展为一个系统,也有一个单独的开关输出。在乒乓球的背景下,它将提升你的速度。

我可以找到基于我的代码的代码here。它正在玩厄运,但它仍然具有相同的左右,但也有一个火按钮而不是保持静止。我正在研究如何修改此代码,以便fire是一个独立的动作。

我知道我可以轻松地从模型中添加另一个单独的输出,以便输出看起来像这样:

self.output = slim.fully_connected(rnn_out,a_size,
    activation_fn=tf.nn.softmax,
    weights_initializer=normalized_columns_initializer(0.01),
    biases_initializer=None)
self.output2 = slim.fully_connected(rnn_out,1,
    activation_fn=tf.nn.sigmoid,
    weights_initializer=normalized_columns_initializer(0.01),
    biases_initializer=None)

我正在努力的是如何修改值输出并重新定义损失函数。该值仍然与两个输出的组合相关联。或者每个独立输出是否有单独的值输出。我觉得它应该仍然只是一个输出作为值,但我不确定他们如何使用那个值并修改损失函数以考虑到这一点。

我正在考虑为损失函数添加一个单独的术语,以便计算看起来像这样:

self.actions_1 = tf.placeholder(shape=[None],dtype=tf.int32)
self.actions_2 = tf.placeholder(shape=[None],dtype=tf.float32)
self.actions_onehot = tf.one_hot(self.actions_1,a_size,dtype=tf.float32)
self.target_v = tf.placeholder(shape=[None],dtype=tf.float32)
self.advantages = tf.placeholder(shape=[None],dtype=tf.float32)

self.responsible_outputs = tf.reduce_sum(self.output1 * self.actions_onehot, [1])
self.responsible_outputs_2 = tf.reduce_sum(self.output2 * self.actions_2, [1])

#Loss functions
self.value_loss = 0.5 * tf.reduce_sum(tf.square(self.target_v - tf.reshape(self.value,[-1])))
self.entropy = - tf.reduce_sum(self.policy * tf.log(self.policy))
self.policy_loss = -tf.reduce_sum(tf.log(self.responsible_outputs)*self.advantages) - 
    tf.reduce_sum(tf.log(self.responsible_outputs_2)*self.advantages)
self.loss = 0.5 * self.value_loss + self.policy_loss - self.entropy * 0.01

我想知道我是否在这里,或者是否有资源或示例可以扩展。

1 个答案:

答案 0 :(得分:1)

首先,您提到的示例不需要两个输出节点。一个具有连续输出值的输出节点足以解决。此外,你不应该使用占位符来获得优势,而是应该使用折扣奖励。

tf.stop_gradient

在计算政策损失时,您必须使用value来阻止self.policy_loss = -tf.reduce_sum(tf.log(self.responsible_outputs)*tf.stop_gradient(self.advantages)) 节点梯度反馈对政策学习的贡献。

po_id | sku | purchase_date    | price | qty
----------------------------------------------
    1 | 123 | 2017-01-01 12:25 | 20.15 |   5
    2 | 123 | 2017-05-01 15:45 | 17.50 |   3
    3 | 123 | 2017-05-02 12:00 | 15.00 |   1
    4 | 456 | 2013-06-10 16:00 | 60.00 |   7