我正在尝试使用tensorflow 2实现DDPG。 问题是它没有学到:即使在添加了一些噪声和一些探索与探索因素之后,该代理似乎每次都在一个通用方向上卡住,只是改变了它的强度。
这是我的Actor神经网络:
d1 = self.dense(states, weights[0], weights[1])
d1 = tf.nn.relu(d1)
d2 = self.dense(d1, weights[2], weights[3])
d2 = tf.nn.relu(d2)
d3 = self.dense(d2, weights[4], weights[5])
d3 = tf.nn.tanh(d3)
return d3*self.action_bounds
这是它的训练功能:
def train(self, states, critic_gradients):
with tf.GradientTape() as t:
actor_pred = self.network(states)
actor_gradients = \
t.gradient(actor_pred, self.weights, -critic_gradients)
actor_gradients = list(map(lambda x: x/self.batch_size, actor_gradients))
self.opt.apply_gradients(zip(actor_gradients, self.weights))
评论家班级采用的comment_gradients。
评论家网类似于演员的网:
def _network(self, states, actions, weights, axis):
x = tf.concat([states, actions], axis=axis)
d1 = self.dense(x, weights[0], weights[1])
d1 = tf.nn.relu(d1)
d2 = self.dense(d1, weights[2], weights[3])
d2 = tf.nn.relu(d2)
d3 = self.dense(d2, weights[4], weights[5])
d3 = tf.nn.relu(d3)
return d3
配重:
self.shapes = [
[self.state_size+self.action_size, 64],
[64],
[64, 32],
[32],
[32, 1],
[1]
]
对于具有均方误差函数损失的简单最小化函数的临界火车。
如果错误是在主要(我在主要论文之后写的)或类中出现,我将无法获得。 需要注意的一件事是,我用一个简单的数据集测试了评论家的网络,并且收敛了。 我不知道如何尝试演员网络,我只是在带有钟摆环境的健身房中使用。
答案 0 :(得分:0)
您没有提供完整的算法代码。 检查DDPG paper的网络体系结构和超参数,因为它在纸上证明了相同的算法配置对于不同的问题和环境非常有效。 确保您正确使用目标网络,体验重播,探索...
目标网络使学习稳定。对于Critic网络更新,您实际上应该使用Target Actor和Target Critic网络的结果,并使用重播缓冲区中的数据样本基于Q学习计算TD错误。
对于像DDPG这样的非政策算法,只需将噪声直接添加到动作中即可解决探索问题。您可以根据环境选择噪声函数(请再次在纸上参考并检查Ornstein-Uhlenbeck噪声函数)。