딥러닝과 정책 함수가 결합하면 강력한 정책 네트워크를 만들어 냅니다. 이번 챕터에서는 보상 및 밸류 네트워크를 이용해 직접적으로 정책 네트워크를 학습하는 방법에 대해 알아보겠습니다. 이는 수많은 최신 강화학습 알고리즘의 뿌리가 되는 방법론입니다.
πθ(s,a)\pi_\theta(s,a)πθ(s,a)의 손실 함수를 어떻게 정의하지...?
∇θJ(θ)=∇θ∑s∈Sd(s)∑a∈Aπθ(s,a) Rs,a\nabla_\theta J(\theta) = \nabla_\theta \sum_{s\in S} d(s)\sum_{a\in A}\pi_\theta(s,a)\,R_{s,a}∇θJ(θ)=∇θ∑s∈Sd(s)∑a∈Aπθ(s,a)Rs,a =∑s∈Sd(s)∑a∈A∇θπθ(s,a) Rs,a= \sum_{s\in S} d(s)\sum_{a\in A}\nabla_\theta \pi_\theta(s,a)\,R_{s,a}=∑s∈Sd(s)∑a∈A∇θπθ(s,a)Rs,a =∑s∈Sd(s)∑a∈Aπθ(s,a)πθ(s,a) ∇θπθ(s,a) Rs,a= \sum_{s\in S} d(s)\sum_{a\in A}\frac{\pi_\theta(s,a)}{\pi_\theta(s,a)}\,\nabla_\theta \pi_\theta(s,a)\,R_{s,a}=∑s∈Sd(s)∑a∈Aπθ(s,a)πθ(s,a)∇θπθ(s,a)Rs,a =∑s∈Sd(s)∑a∈Aπθ(s,a) ∇θπθ(s,a)πθ(s,a) Rs,a= \sum_{s\in S} d(s)\sum_{a\in A}\pi_\theta(s,a)\,\frac{\nabla_\theta \pi_\theta(s,a)}{\pi_\theta(s,a)}\,R_{s,a}=∑s∈Sd(s)∑a∈Aπθ(s,a)πθ(s,a)∇θπθ(s,a)Rs,a =∑s∈Sd(s)∑a∈Aπθ(s,a) ∇θlogπθ(s,a) Rs,a= \sum_{s\in S} d(s)\sum_{a\in A}\pi_\theta(s,a)\,\nabla_\theta \log \pi_\theta(s,a)\,R_{s,a}=∑s∈Sd(s)∑a∈Aπθ(s,a)∇θlogπθ(s,a)Rs,a =Eπθ[∇θlogπθ(s,a) Rs,a]= \mathbb{E}_{\pi_\theta}[\nabla_\theta \log \pi_\theta(s,a)\,R_{s,a}]=Eπθ[∇θlogπθ(s,a)Rs,a]
1 step MDP : ∇θJ(θ)=Eπθ[∇θlogπθ(s,a)∗Rs,a]\nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta}[\nabla_\theta \log \pi_\theta(s,a) * R_{s,a}]∇θJ(θ)=Eπθ[∇θlogπθ(s,a)∗Rs,a] MDP : ∇θJ(θ)=Eπθ[∇θlogπθ(s,a)∗Qπθ(s,a)]\nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta}[\nabla_\theta \log \pi_\theta(s,a) * Q_{\pi_\theta}(s,a)]∇θJ(θ)=Eπθ[∇θlogπθ(s,a)∗Qπθ(s,a)] → “Policy Gradient Theorem”
πθ(s,a)\pi_\theta(s,a)πθ(s,a)의 파라미터 θ\thetaθ를 랜덤으로 초기화 다음(A~C)을 반복 A. 에이전트의 상태를 초기화: s←s0s \leftarrow s_0s←s0 B. πθ\pi_\thetaπθ를 이용하여 에피소드 끝까지 진행, {s0,a0,r0,s1,a1,r1,…,sT,aT,rT}\{s_0, a_0, r_0, s_1, a_1, r_1, \ldots, s_T, a_T, r_T\}{s0,a0,r0,s1,a1,r1,…,sT,aT,rT}을 얻음 C. t=0∼Tt = 0 \sim Tt=0∼T에 대해 다음을 반복 Gt←∑i=tTri∗γi−tG_t \leftarrow \sum_{i=t}^{T} r_i * \gamma^{i-t}Gt←∑i=tTri∗γi−t θ←θ+α∗∇θlogπθ(st,at)∗Gt\theta \leftarrow \theta + \alpha * \nabla_\theta \log \pi_\theta(s_t, a_t) * G_tθ←θ+α∗∇θlogπθ(st,at)∗Gt
Q : ∇θlogπθ(s,a)\nabla_\theta \log \pi_\theta(s,a)∇θlogπθ(s,a) 대신 ∇θπθ(s,a)\nabla_\theta \pi_\theta(s,a)∇θπθ(s,a)를 사용해도 될까요?
∇θJ(θ)=∑s∈Sd(s)∑a∈A∇θπθ(s,a) Rs,a\nabla_\theta J(\theta) = \sum_{s\in S} d(s)\sum_{a\in A}\nabla_\theta \pi_\theta(s,a)\,R_{s,a}∇θJ(θ)=∑s∈Sd(s)∑a∈A∇θπθ(s,a)Rs,a ∇θJ(θ)≠∑s∈Sd(s)∑a∈Aπθ(s,a) ∇θπθ(s,a) Rs,a\nabla_\theta J(\theta) \ne \sum_{s\in S} d(s)\sum_{a\in A}\pi_\theta(s,a)\,\nabla_\theta \pi_\theta(s,a)\,R_{s,a}∇θJ(θ)=∑s∈Sd(s)∑a∈Aπθ(s,a)∇θπθ(s,a)Rs,a