> For the complete documentation index, see [llms.txt](https://kilmya1.gitbook.io/deep-multi-agent-reinforcement-learning/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kilmya1.gitbook.io/deep-multi-agent-reinforcement-learning/iii-learning-to-reciprocate/8-learning-with-opponent-learning-awareness/8.3-methods/8.3.3.-learning-via-policy-gradient.md).

# 8.3.3. Learning via Policy gradient

이번 section에서는 정확한 gradient나 hessian을 모를 때에 approximation을 통해 update하는 방법에 대해 설명합니다.

&#x20;time step T까지의 trajectory $$\tau = (s\_0,u^1\_0,u^2\_0,r^1\_0,r^2\_0,\cdots,u^1\_T,u^2\_T,r^1\_T,r^2\_T)$$에 대해, 한 agent의 discounted return $$R^a\_t(\tau) = \sum^T\_{t'=t}{\gamma^{t'-t}r^a\_{t'}}$$을 다음과 같이 정의할 수 있습니다. 그렇다면, agent의 policy$$(\pi^1,\pi^2)$$에 대해 discounted average reward 는 다음과 같습니다. $$\mathbb{E}R^1\_0(\tau), \ \mathbb{E}R^2\_0(\tau)$$

&#x20;$$\theta^1$$에 대한 $$\mathbb{E}R^1\_0(\tau)$$의 gradient를 보면, 다음과 같습니다.&#x20;

&#x20;                                                   $$\nabla\_{\theta^1}\mathbb{E}R^1\_0(\tau) = \int\nabla\_{\theta^1}  \pi^1(\tau)R^1\_0(\tau)d\tau$$

&#x20;                                                                            $$= \int \pi^1(\tau)\frac{\nabla\_{\theta^1} \pi^1(\tau)}{\pi^1(\tau)}R^1\_0(\tau)d\tau$$

&#x20;                                                                            $$= \int \pi^1(\tau) \nabla\_{\theta^1} \log\pi^1(\tau)R^1\_0(\tau)d\tau$$

&#x20;                                                                            $$= \mathbb{E}\[\nabla\_{\theta^1}\log \pi^1(\tau)R^1\_0(\tau)]$$

그러므로 gradient-based naive learner(NL-PG)는 다음과 같이 update가능합니다.

&#x20;                                                                 $$\bm{f}^1\_{\mathrm{nl,\ pg}} = \nabla\_{\theta^1}\mathbb{E}R^1\_0({\tau})\delta$$

&#x20;그렇다면, LOLA의 $$\mathbb{E}R^a\_0(\tau)$$는 agent 모두에 의한 gradient를 구해야하고 이는 위와 같이 전개하면 다음과 같이 표현 가능합니다.&#x20;

&#x20;                                   $$\nabla\_{\theta^1} \nabla\_{\theta^2}\mathbb{R}^2\_0(\tau) = \mathbb{E}\[R^2\_0(\tau)\nabla\_{\theta^1}\log{\pi^1}(\tau)(\nabla\_{\theta^2}\log{\pi^2}(\tau))^T]$$

&#x20;                                   $$= \mathbb{E}\[\sum^T\_{t=0}\gamma^tr^2\_t\cdot(\sum^t\_{l=0}{\nabla\_{\theta\_1}\log{\pi^1(u^1\_l|s\_l}}))(\sum^t\_{l=0}\nabla\_{\theta^2}\log{\pi^2(u^2\_l|s\_l))^T}$$

&#x20;LOLA의 update는 결과적으로 다음과 같이 update하게 됩니다.

&#x20;                        $$\bm{f}^1\_{\mathrm{lola, \ pg}} = \nabla\_{\theta^1}\mathbb{E}R^1\_0(\tau)\delta+ (\nabla\_{\theta^2}\mathbb{E}R^1\_0(\tau))^T\nabla\_{\theta^1}\nabla\_{\theta^2}\mathbb{E}R^2\_0(\tau)\delta\eta$$
