docs/si/rl/ppo/index.html
[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/rl/ppo/ init.py)
මෙය PyTorch ක්රියාත්මක කිරීමයි Proximal Policy ප්රශස්තිකරණය - PPO .
PPOයනු ශක්තිමත් කිරීමේ ඉගෙනීම සඳහා ප්රතිපත්තිමය ශ්රේණියේ ක්රමයකි. සරල ප්රතිපත්ති ඵලය අනුක්රමික ක්රම සාම්පලයක් (හෝ සාම්පල මාලාවක්) අනුව තනි ඵලය අනුක්රමික යාවත්කාලීන කරන්න. ප්රතිපත්තිය ඕනෑවට වඩා අපගමනය නිසා එක් සාම්පලයක් සඳහා බහු ඵලය අනුක්රමික පියවර කරන්නේ ප්රශ්න ඇති, නරක ප්රතිපත්තියක් නිෂ්පාදනය. දත්ත සාම්පල කිරීම සඳහා භාවිතා කරන ලද ප්රතිපත්තියට සමීපව ප්රතිපත්තිය තබා ගැනීමට උත්සාහ කිරීමෙන් නියැදියකට බහු ශ්රේණියේ යාවත්කාලීන කිරීම් කිරීමට PPO අපට ඉඩ දෙයි. යාවත්කාලීන කරන ලද ප්රතිපත්තිය දත්ත සාම්පල කිරීම සඳහා භාවිතා කරන ප්රතිපත්තියට සමීප නොවේ නම්, ශ්රේණියේ ප්රවාහය ක්ලිපින් කිරීමෙන් එය එසේ කරයි.
එයභාවිතා කරන අත්හදා බැලීමක් ඔබට සොයාගත හැකිය මෙහි. අත්හදා බැලීම සාමාන්යකරණය කළ වාසි ඇස්තමේන්තුභාවිතා කරයි.
29importtorch3031fromlabml\_helpers.moduleimportModule32fromlabml\_nn.rl.ppo.gaeimportGAE
PPOයාවත්කාලීන කිරීමේ රීතිය ව්යුත්පන්න කර ඇති ආකාරය මෙන්න.
ප්රතිපත්තිවිපාකය උපරිම කිරීමට අපට අවශ්ය r වන්නේ විපාකය θmaxJ(πθ)=Eτ∼πθ[t=0∑∞γtrt] කොතැනද, ප්රතිපත්තිය ද, ප්රතිපත්තියෙන් සම්මාදිට්ඨි වූ ගමන් τ මාර්ගයකි. π γ අතර වට්ටම් සාධකය [0,1]වේ.
Eτ∼πθ[t=0∑∞γtAπOLD(st,at)]Eτ∼πθ[t=0∑∞γt(QπOLD(st,at)−VπOLD(st))]Eτ∼πθ[t=0∑∞γt(rt+VπOLD(st+1)−VπOLD(st))]Eτ∼πθ[t=0∑∞γt(rt)]−Eτ∼πθ[VπOLD(s0)]====J(πθ)−J(πθOLD)
ඉතින්, θmaxJ(πθ)=θmaxEτ∼πθ[t=0∑∞γtAπOLD(st,at)]
වට්ටම්-අනාගතරාජ්ය ව්යාප්තිය නිර්වචනය කරන්න, dπ(s)=(1−γ)t=0∑∞γtP(st=s∣π)
එවිට,
J(πθ)−J(πθOLD)=Eτ∼πθ[t=0∑∞γtAπOLD(st,at)]=1−γ1Es∼dπθ,a∼πθ[AπOLD(s,a)]
වැදගත්කම a නියැදීම πθOLD,
J(πθ)−J(πθOLD)=1−γ1Es∼dπθ,a∼πθ[AπOLD(s,a)]=1−γ1Es∼dπθ,a∼πθOLD[πθOLD(a∣s)πθ(a∣s)AπOLD(s,a)]
එවිටඅපි උපකල්පනය dπθ(s) හා dπθOLD(s) සමාන ය. මෙම උපකල්පනය J(πθ)−J(πθOLD) මගින් අප හඳුන්වා දෙන දෝෂය KL අපසරනය πθ හා අතර බැඳී πθOLDඇත. සීමා සහිත ප්රතිපත්ති ප්රශස්තිකරණය මේ සඳහා සාක්ෂි පෙන්වයි. මම එය කියවා නැත.
J(πθ)−J(πθOLD)=1−γ1Ea∼πθOLDs∼dπθ[πθOLD(a∣s)πθ(a∣s)AπOLD(s,a)]≈1−γ1Ea∼πθOLDs∼dπθOLD[πθOLD(a∣s)πθ(a∣s)AπOLD(s,a)]=1−γ1LCPI
35classClippedPPOLoss(Module):
137def\_\_init\_\_(self):138super().\_\_init\_\_()
140defforward(self,log\_pi:torch.Tensor,sampled\_log\_pi:torch.Tensor,141advantage:torch.Tensor,clip:float)-\>torch.Tensor:
අනුපාතය rt(θ)=πθOLD(at∣st)πθ(at∣st); මෙය ත්යාගවලට වඩා වෙනස් rtය.
144ratio=torch.exp(log\_pi-sampled\_log\_pi)
LCLIP(θ)=Eat,st∼πθOLD[min(rt(θ)Atˉ,clip(rt(θ),1−ϵ,1+ϵ)Atˉ)]
අනුපාතය1 ට ආසන්න වන පරිදි ක්ලිප් කර ඇත. අපි අවම වශයෙන් ගන්නා අතර එමඟින් අනුපාතය අතර නොවේ πθOLD නම් 1−ϵ සහ ශ්රේණිය πθ දෙසට ඇද දමනු ඇත 1+ϵ. මෙය KL අපසරනය අතර πθ හා πθOLD සීමා කර තබා ගනී. විශාල අපගමනය කාර්ය සාධනය බිඳවැටීමට හේතු විය හැක; එහිදී ප්රතිපත්ති කාර්ය සාධනය පහත වැටී අප නරක ප්රතිපත්තියකින් නියැදීම් නිසා යථා තත්ත්වයට පත් නොවේ.
සාමාන්යකරණයකරන ලද වාසිය භාවිතා කරමින් ප්රතිපත්ති ශ්රේණියේ තක්සේරුකරු වෙත නැඹුරුවක් Atˉ=σ(At^)At^−μ(At^) හඳුන්වා දෙයි, නමුත් එය විචලතාව ගොඩක් අඩු කරයි.
173clipped\_ratio=ratio.clamp(min=1.0-clip,174max=1.0+clip)175policy\_reward=torch.min(ratio\*advantage,176clipped\_ratio\*advantage)177178self.clip\_fraction=(abs((ratio-1.0))\>clip).to(torch.float).mean()179180return-policy\_reward.mean()
ඒහා සමානව අපි අගය ශ්රිතය යාවත්කාලීන කිරීම ද ක්ලිප් කරමු
VCLIPπθ(st)LVF(θ)=clip(Vπθ(st)−Vt^,−ϵ,+ϵ)=21E[max((Vπθ(st)−Rt)2,(VCLIPπθ(st)−Rt)2)]
ක්ලිපින්අගය ශ්රිතය සැලකිය යුතු ලෙස බැහැර Vθ නොවන බවට වග බලා ගනී VθOLD.
183classClippedValueFunctionLoss(Module):
205defforward(self,value:torch.Tensor,sampled\_value:torch.Tensor,sampled\_return:torch.Tensor,clip:float):206clipped\_value=sampled\_value+(value-sampled\_value).clamp(min=-clip,max=clip)207vf\_loss=torch.max((value-sampled\_return)\*\*2,(clipped\_value-sampled\_return)\*\*2)208return0.5\*vf\_loss.mean()