Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果连续操作空间的总和为1,如何定义策略?_Python_Tensorflow_Reinforcement Learning - Fatal编程技术网

Python 如果连续操作空间的总和为1,如何定义策略?

Python 如果连续操作空间的总和为1,如何定义策略?,python,tensorflow,reinforcement-learning,Python,Tensorflow,Reinforcement Learning,我目前正在使用策略梯度方法研究连续状态动作空间问题 环境行动空间被定义为在每个时间步加总为1的比率。因此,在这种情况下,使用高斯策略似乎并不合适 我所做的是尝试调整softmax策略(以确保策略网络输出总计为1),但我很难确定要使用的损失函数及其梯度,以更新网络参数 到目前为止,我尝试了贴现收益加权均方误差,但结果并不令人满意 在这种特殊情况下,是否有其他策略可以使用?或者有什么想法可以使用哪种损失函数 下面是我的策略网络(在我的代理类中)在tensorflow中的实现 def策略_网络(自身)

我目前正在使用策略梯度方法研究连续状态动作空间问题

环境行动空间被定义为在每个时间步加总为1的比率。因此,在这种情况下,使用高斯策略似乎并不合适

我所做的是尝试调整softmax策略(以确保策略网络输出总计为1),但我很难确定要使用的损失函数及其梯度,以更新网络参数

到目前为止,我尝试了贴现收益加权均方误差,但结果并不令人满意

在这种特殊情况下,是否有其他策略可以使用?或者有什么想法可以使用哪种损失函数

下面是我的策略网络(在我的代理类中)在tensorflow中的实现

def策略_网络(自身):
self.input=tf.placeholder(tf.float32,
形状=[None,self.input_dims],
name='input')
self.label=tf.placeholder(tf.float32,shape=[None,self.n\u actions],name='label')
#贴现收益
self.G=tf.placeholder(tf.float32,形状=[
没有一个
],name='G')
使用tf.variable_scope('layers'):
l1=tf.layers.density(
输入=自我输入,
单位=自身尺寸,
激活=tf.nn.relu,
kernel_initializer=tf.contrib.layers.xavier_initializer())
l2=tf.layers.density(
输入=l1,
单位=self.l2_尺寸,
激活=tf.nn.relu,
kernel_initializer=tf.contrib.layers.xavier_initializer())
l3=tf.layers.density(
输入=l2,
单位=自身n_动作,
激活=无,
kernel_initializer=tf.contrib.layers.xavier_initializer())
self.actions=tf.nn.softmax(l3,name='actions')
使用tf.variable_范围(“损失”):
基本损失=tf.reduce\u和(tf.square(self.actions-self.label))
损耗=基本损耗*self.G
使用tf.变量_范围(“列车”):
self.train_op=tf.train.AdamOptimizer(self.lr).最小化(损失)

在我的头顶上,你可能想试试二维高斯或多元高斯

例如,您可以预测2D Gaussian的4个参数(x_0,x_1,sigma_0,sigma_1),您可以在2D Gaussian平面上生成一对数字,例如(2,1.5),然后您可以使用softmax生成所需的动作
softmax([2,1.5])=[0.62245933 0.37754067]


然后你可以计算二维高斯平面上的一对数字的概率,然后你可以用它来计算负对数概率、优势等,从而生成损失函数并更新梯度。

在我的头上,你可以试试二维高斯或多元高斯

例如,您可以预测2D Gaussian的4个参数(x_0,x_1,sigma_0,sigma_1),您可以在2D Gaussian平面上生成一对数字,例如(2,1.5),然后您可以使用softmax生成所需的动作
softmax([2,1.5])=[0.62245933 0.37754067]


然后你可以计算二维高斯平面上一对数字的概率,然后你可以用它来计算负对数概率、优势等,从而生成损失函数并更新梯度。

你想过使用狄里克莱分布吗?您的网络可以输出浓度参数
alpha>0
,然后您可以使用它们生成一个样本,其总和为一。
PyTorch
TF
都支持此发行版,您可以从中采样并获取
logProb
。在这种情况下,除了获取样本外,由于它是一个概率分布,您还可以获得其方差,这可以作为代理信心的度量。对于3维的动作,拥有
alpha={1,1,1}
基本上意味着你的代理没有任何偏好,拥有
alpha={100,1,1}
意味着非常确定大部分权重应该属于第一维


根据评论进行编辑:

如果使用Dirichlet分布,则很难优化策略。问题是,在vanilla policy gradient中,您可以通过梯度剪裁和自适应学习速率等来控制在网络参数空间中更改策略的速度。然而,最重要的是控制概率空间中的更改速率。某些网络参数的概率变化可能比其他参数大得多。因此,即使您控制学习速率以限制网络参数的增量,您也可能会大量更改Dirichlet分布的方差,如果您认为这对您的网络是有意义的。为了最大限度地提高您行动的日志概率,您的人际网络可能更关注减少差异,而不是改变您的分发模式,这将在以后的探索和学习有意义的策略中伤害您。缓解此问题的一种方法是通过限制新保单分配与旧保单分配的KL差异来限制保单概率分布的变化率。TRPO或PPO是解决此问题和解决约束优化问题的两种方法

在实践中确保
alpha>1
也可能是好的。在将神经网络输出输入Drichlet分布之前,您可以在神经网络输出上使用softplus
ln(1+exp(x))+1
,轻松实现这一点。同时监控到达图层的渐变,并确保其存在

您可能还希望将分布的熵添加到目标函数中,以确保