我目前正在使用策略梯度方法研究连续状态-动作空间问题。
环境动作空间被定义为在每个时间步必须总和为 1 的比率。因此,在这种情况下,使用高斯策略似乎并不合适。
我所做的是尝试调整 softmax 策略(以确保策略网络输出总和为 1),但我很难确定要使用的损失函数以及最终的梯度以更新网络参数。
到目前为止,我已经尝试过贴现收益加权均方误差,但结果并不令人满意。
在这种特殊情况下是否可以使用任何其他策略?或者有什么想法可以使用哪个损失函数?
这是我的策略网络(在我的代理类中)在 tensorflow 中的实现。
def policy_network(self):
self.input = tf.placeholder(tf.float32,
shape=[None, self.input_dims],
name='input')
self.label = tf.placeholder(tf.float32, shape=[None, self.n_actions], name='label')
# discounted return
self.G = tf.placeholder(tf.float32, shape=[
None,
], name='G')
with tf.variable_scope('layers'):
l1 = tf.layers.dense(
inputs=self.input,
units=self.l1_size,
activation=tf.nn.relu,
kernel_initializer=tf.contrib.layers.xavier_initializer())
l2 = tf.layers.dense(
inputs=l1,
units=self.l2_size,
activation=tf.nn.relu,
kernel_initializer=tf.contrib.layers.xavier_initializer())
l3 = tf.layers.dense(
inputs=l2,
units=self.n_actions,
activation=None,
kernel_initializer=tf.contrib.layers.xavier_initializer())
self.actions = tf.nn.softmax(l3, name='actions')
with tf.variable_scope('loss'):
base_loss = tf.reduce_sum(tf.square(self.actions - self.label))
loss = base_loss * self.G
with tf.variable_scope('train'):
self.train_op = tf.train.AdamOptimizer(self.lr).minimize(loss)
Helenr
小唯快跑啊
相关分类