Deep Deterministic Policy Gradient(DDPG)アルゴリズムでのActor Gradient Updateの計算


8

この質問は、DDPGに関するディープマインドペーパー(https://arxiv.org/pdf/1509.02971v5.pdf)に関するものです。

私が見たほとんどの(すべて?)実装のDDPGアルゴリズムは、、ここではアクターネットワークのパラメーターを表し、はアクターネットワークを表し、は批評家ネットワークを表し、は状態を表します入力。これを式1と呼びます。(J)=μ(s|θ)(Q(s,μ(s|θ))θ(μ(s|θ))θμQs

論文に示されている式1は、チェーンルールをことで得られます。これにより、。(J)=θ(Q(s,μ(s|θ))μ(s|θ)(Q(s,μ(s|θ))θ(μ(s|θ))

私の質問は、auto-gradソフトウェアパッケージ(Theano / Tensorflow / Torch / etc)を使用して、 wrt出力の勾配を直接計算できなかった理由があるのですか?何らかの理由で、すべての実装は、最初に wrtの出力の勾配を計算してから、チェーンルールに従って wrtからへ勾配を乗算します。彼らがこれを行う理由がわかりません- 代わりに wrt勾配を直接計算しないのはなぜですか?これができない理由はありますか?つまり、ほとんどの更新がこれを行うように見えるのはなぜですか。QθQμ(s)μ(s)θQθ

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 )

「勾配」への最初の入力は、区別したい関数であり、2番目の入力は、区別する対象です。

明確にするために、が方程式1とは異なる更新である理由はわかりません。連鎖ルールをですが、ある種の繊細さを見逃さないようにしたいと思います。(J)=θ(Q)θ(Q)


提案する勾配について具体的に教えてください。「更新としてチェーンルールを適用する前に式を使用する」の意味がわかりません
DaVinci '30

@DaVinciあいまいさをお詫びします!元の投稿を(うまくいけば)より明確にするために更新しました。
ビル

回答:


6

計算に違いはありません。私は同じことを考えていて、自分のTensorFlow DDPG実装で両方を試し、数値が同一であることを確認することで検証しました。さすがです。

ほとんどのチュートリアルのような実装(たとえば、Patrick Emamiの実装)は明示的に乗算を示していることに気づきました。ただし、OpenAIのベースライン実装で 、直接計算します。(これは、バッチ全体で平均したに等しいアクターネットワークの損失を定義することによってこれを行います)。doesθμQθμQ

からを分離してする理由は1つあります。これは、用語の1つを直接操作したい場合です。たとえば、HausknechtとStoneは、「反転勾配」を実行して、環境の範囲内に留まるようにアクションを強制します。aQθμμaQ


2

この方法で、2つの独立したネットワークを定義できます。それ以外の場合は、大規模なネットワークを定義して、ポリシーに属する部分と状態アクション値関数に属する部分を区別する必要があります。


0

2つの勾配項の間のこの乗算を理解するかどうかはわかりません。

say tensorflowを使用してこれを計算すると、次のようになります。

J_grad = gradients( Q(s, mu(s|theta)), theta )

チェーンルールを適用するためQ、ポリシーネットワークの出力に関するガディエントを計算mu(s|theta)し、ポリシーネットワークを通じてそれらの「エラー」を逆伝播し、サンプリングされた勾配wrt theta(ポリシーネットワークのすべてのレイヤーのパラメーター)を取得します。

ただし、次の場合:

Q_grad = gradients( Q(s, mu(s|theta)), mu(s|theta) )
mu_grad = gradients( mu(s|theta), theta )
J_grad = Q_grad * mu_grad

次に、私の理解では、(1)Qポリシーネットワークmu(s|theta)の出力に関する勾配を計算し、(2)mu(s|theta)ポリシーパラメータに関するポリシーネットワークの出力の勾配を計算しますthetaが、今回は個別に行います。私が理解していないのは、サイズのベクトルである最初のグラデーションと、サイズのベクトルである(1, action_dim)2番目のグラデーションがあるということ(1, theta_dim)です。更新を適用するには、サイズのベクトルになるthetaへの勾配wrtが必要(1, theta_dim)です。それで、3行目でこの乗算は正確に何をしているのか、そしてそれはポリシーネットワークを通じて最初の勾配を逆伝播することとどのように等価なのでしょうか。

J_grad = Q_grad * mu_grad

質問:

それは形状の行列を作成する外積を実行し、形状の(action_dim, theta_dim)更新ベクトルを取得するために次元を合計することによって削減され(1, theta)ますか?もしそうなら、なぜこれは有効なのですか(ポリシーネットワークを通じて最初の勾配を逆伝播することと同じです)?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.