这个问题是关于 DDPG 的 Deepmind 论文:https ://arxiv.org/pdf/1509.02971v5.pdf 。
我见过的大多数(全部?)DDPG 算法的实现通过以下方式计算对参与者网络的梯度更新, 在哪里表示actor网络的参数,代表演员网络,代表评论家网络,并且表示状态输入。我将把这个等式称为 1。
如论文所示,方程式 1 是通过将链式法则应用于. 这给.
我的问题是,使用自动梯度软件包(Theano/Tensorflow/Torch/etc),我有什么理由不能只计算输出的梯度写直接地?出于某种原因,所有实现似乎都首先计算输出的梯度写然后乘以梯度写给,根据链式法则。我不明白他们为什么这样做——为什么不直接计算梯度写反而?你有理由不能这样做吗?即,为什么大多数更新似乎都这样做:
Q_grad = gradients( Q(s, mu(s|theta)), mu(s|theta) )
mu_grad = gradients( mu(s|theta), theta )
J_grad = Q_grad * mu_grad
而不是这个:
J_grad = gradients( Q(s, mu(s|theta)), theta )
“梯度”的第一个输入是您要区分的功能,第二个输入是您要区分的功能。
说清楚,我看不出为什么是与等式 1 不同的更新,因为等式 1 是通过将链式法则应用于,但我想确保我不会错过某种微妙之处。