Esta pergunta é referente ao documento Deepmind sobre DDPG: https://arxiv.org/pdf/1509.02971v5.pdf .
A maioria (todas?) Das implementações do algoritmo DDPG que eu vi computam a atualização do gradiente na rede do ator por , Onde representa os parâmetros da rede de atores, representa a rede de atores, representa a rede de críticos e representa a entrada do estado. Vou chamar essa equação 1.
A equação 1, como é mostrado no artigo, deriva da aplicação da regra da cadeia a . Isto dá.
Minha pergunta é, usando um pacote de software de auto-gradação (Theano / Tensorflow / Torch / etc), existe alguma razão pela qual eu não poderia apenas calcular o gradiente da saída de wrt diretamente? Por alguma razão, todas as implementações parecem primeiro computar o gradiente da saída de wrt e depois multiplique pelo gradiente de wrt to , de acordo com a regra da cadeia. Eu não entendo por que eles fazem isso - por que não apenas calcular diretamente o gradiente de wrt em vez de? Existe uma razão para você não poder fazer isso? Ou seja, por que a maioria das atualizações parece fazer isso:
Q_grad = gradients( Q(s, mu(s|theta)), mu(s|theta) )
mu_grad = gradients( mu(s|theta), theta )
J_grad = Q_grad * mu_grad
Em vez disso:
J_grad = gradients( Q(s, mu(s|theta)), theta )
Onde a primeira entrada para "gradientes" é a função que você deseja diferenciar e a segunda entrada é para o que você está diferenciando.
Para ser claro, não vejo razão para é uma atualização diferente da equação 1, visto que a equação 1 é literalmente derivada aplicando a regra da cadeia a , mas quero ter certeza de que não estou perdendo algum tipo de sutileza.