Câu hỏi này liên quan đến bài viết Deepmind trên DDPG: https://arxiv.org/pdf/1509.02971v5.pdf .
Hầu hết (tất cả?) Việc triển khai thuật toán DDPG mà tôi đã thấy tính toán cập nhật độ dốc cho mạng diễn viên theo , trong đó đại diện cho các tham số của mạng diễn viên, đại diện cho mạng diễn viên, đại diện cho mạng phê bình và đại diện cho trạng thái đầu vào. Tôi sẽ gọi phương trình này 1.
Phương trình 1, như được hiển thị trong bài báo, được bắt nguồn bằng cách áp dụng quy tắc chuỗi cho . Điều này mang lại cho .
Câu hỏi của tôi là, bằng cách sử dụng gói phần mềm tự động phân cấp (Theano / Tensorflow / Torch / vv), có lý do nào khiến tôi không thể tính trực tiếp độ dốc của đầu ra của wrt không? Vì một số lý do, tất cả các lần triển khai dường như trước tiên sẽ tính toán độ dốc của đầu ra của wrt và sau đó nhân nó với độ dốc của wrt thành , theo quy tắc chuỗi. Tôi không hiểu tại sao họ làm điều này - tại sao không chỉ tính trực tiếp độ dốc của wrt ? Có một lý do bạn không thể làm điều này? Tức là, tại sao hầu hết các bản cập nhật dường như làm điều này:
Q_grad = gradients( Q(s, mu(s|theta)), mu(s|theta) )
mu_grad = gradients( mu(s|theta), theta )
J_grad = Q_grad * mu_grad
Thay vì điều này:
J_grad = gradients( Q(s, mu(s|theta)), theta )
Trong đó đầu vào đầu tiên cho "độ dốc" là chức năng bạn muốn phân biệt và đầu vào thứ hai là những gì bạn đang phân biệt đối với.
Để rõ ràng, tôi không thấy lý do tại sao là một bản cập nhật khác với phương trình 1, xem phương trình 1 có nguồn gốc theo nghĩa đen bằng cách áp dụng quy tắc chuỗi cho , nhưng tôi muốn chắc chắn rằng tôi không thiếu một loại tinh tế nào.