docs/si/optimizers/radam.html
මෙමක්රියාත්මක කිරීම පදනම් වී ඇත්තේ කඩදාසි නිල වශයෙන් ක්රියාත්මක කිරීම මත අනුවර්තී ඉගෙනුම් අනුපාතය සහ ඉන් ඔබ්බට විචල්යතාව මත ය.
අපගේ AMSGrad ක්රියාත්මක කිරීමේ දිගුවක් ලෙස අපි එයPyTorch හි ක්රියාත්මක කර ඇති අතර එමඟින් ක්රියාත්මක කළ යුතු වෙනස්කම් පමණක් අවශ්ය වේ.
පුහුණුවේආරම්භක අදියරවලදී ඇඩම් ප්රශස්තකරණය සමහර විට නරක දේශීය ප්රශස්තිකරණයකට අභිසාරී වේ; විශේෂයෙන් ට්රාන්ස්ෆෝමර් පුහුණු කිරීමේදී. පර්යේෂණයන් මෙය මැඩපැවැත්වීම සඳහා උණුසුම් කිරීම් භාවිතා කරයි; මූලික පුහුණු පියවර සඳහා (උණුසුම් අවධිය) ඔවුන් අඩු ඉගෙනුම් අනුපාතයක් භාවිතා කරයි. පුහුණුවේ ආරම්භක අදියරවලදී අනුවර්තී ඉගෙනුම් අනුපාතයේ ඉහළ විචලතාව මෙම ලිපිය මඟින් ගැටළුව හඳුනා ගන්නා අතර විචලතාව අඩු කිරීම සඳහා නව නිවැරදි කිරීමේ යෙදුමක් භාවිතා කරමින් එය ගණන් කරයි.
කඩදාසිවිචල්යතා අඩු කිරීමේ යාන්ත්රණ දෙකක් ද ඇගයීමට ලක් කරයි: _ ඇඩම්-2K : පරාමිතීන් වෙනස් නොකර හෝ ගම්යතාව ගණනය නොකර පළමු 2k පියවර තුළ අනුවර්තී ඉගෙනුම් අනුපාතය (vt ආදම්හි) පමණක් ගණනය කරන්න ( mt)._ ඇඩම්-ඊපීඑස් : ආදම් විශාල ϵ≈10−4.
ගම්යතාව σ(g1,...,gt) සහ ψ(g1,...,gt) අනුවර්තී ඉගෙනුම් අනුපාතය ගණනය කිරීම සඳහා කාර්යයන් කරමු. ආදම් සඳහා, ඔවුන්
σ(g1,...,gt)ψ(g1,...,gt)=1−β1t(1−β1)∑i=1tβ1t−igi=(1−β2)∑i=1tβ2t−igi21−β2t
ඝාතීයචලනය වන සාමාන්යය බෙදා හැරීම සරල චලනය වන සාමාන්යයක් ලෙස ආසන්න කළ හැකිය.
p(1−β2t(1−β2)∑i=1tβ2t−igi2)≈p(f(t,β2)∑i=1f(t,β2)gt+1−i2)
මෙන්නඅපි අවසාන f(t,β2) ශ්රේණියේ සරල චලනය වන සාමාන්යය ගන්නෙමු. f(t,β2) පහත සඳහන් දෑ තෘප්තිමත් කරයි,
1−β2t(1−β2)∑i=1tβ2t−i⋅i=f(t,β2)∑i=1f(t,β2)(t+1−i)
ලබාදෙන, f(t,β2)=1−β22−1−1−β2t2tβ2t
ඉහළින්අපට p(ψ2(g1,...,gt))≈p(f(t,β2)∑i=1f(t,β2)gt+1−i2) කොහේද තිබේ gi∼N(0,σ2). sigma මෙහි සම්මත අපගමනය හා ගම්යතාව σ(.) සඳහා වඩා වෙනස් බව සලකන්න.
පරිමාණය කරන ලද ප්රතිලෝම චි-චතුරස්රාකාර යනු p සාමාන්ය බෙදාහැරීම් වල මධ්යන්යයේ ප්රතිලෝම චතුරස්රාකාර බෙදා හැරීමයි. p(f(t,β2)∑i=1f(t,β2)gt+1−i2)∼Scale-invX2(ρ,σ21) කොහෙද ρ=f(t,β2).
ඔවුන්විචලනය වන ρ විට ψ(.) අඩු වන බව ඔවුහු ඔප්පු ψ2(.)∼Scale-invX2(ρ,σ21)කරති.
එබැවින්විචලතාව උපරිම ρ වශයෙන් අවම කර ρ∞=1−β22−1ඇත. අවම විචලතාව වීමට ඉඩ දෙන්න Cvar
අනුවර්තීඉගෙනුම් අනුපාතයට ස්ථාවර විචලතාවයක් ψ(.) ඇති බව සහතික කිරීම සඳහා, අපි විචලනය නිවැරදි කරමු r
r=Var[ψ(.)]Cvar
ඔවුන් ψ2(.) 🤪 පළමු පිණිස පුළුල් මත Var[ψ(.)]≈4E[ψ2(.)Var[ψ2(.)] පදනම් තක්සේරු මම එය ව්යුත්පන්න කරන ආකාරය ලැබුණේ නැහැ.
Scale-invX2 බෙදා හැරීමේ සිට අප සතුව ඇත,
E[ψ2(.)]Var[ψ2(.)]=ρ−2ρ/σ2=(ρ−2)2(ρ−2)2ρ/σ4
ලබාදෙන, Var[ψ(.)]≈2(ρ−2)(ρ−4)σ2ρ
අපසතුව ඇත
rVar[ψ(.)]=Var[ψ(.)]Cvar≈2(ρ−2)(ρ−4)σ2ρ
Cvar Var[ψ(.)] ρ∞කොහේද? Lt ρ සහ පියවර t වන්න ρt, සහ පියවරෙන් පියවර නිවැරදි කිරීමේ පදය rt වන්න t.
CvarVar[ψ(g1,...,gt)]≈2(ρ∞−2)(ρ∞−4)σ2ρ∞≈2(ρt−2)(ρt−4)σ2ρt
මෙයලබා දෙයි,
rt=(ρ∞−2)(ρ∞−4)ρt(ρt−2)(ρt−4)ρ∞
139importmath140fromtypingimportDict,Optional141142importtorch143144fromlabml\_nn.optimizersimportWeightDecay145fromlabml\_nn.optimizers.amsgradimportAMSGrad
මෙමපන්තිය ඇම්සාඩම් ප්රශස්තකරණයෙන් අර්ථ දක්වා ඇත amsadam.py.
148classRAdam(AMSGrad):
params යනු පරාමිතීන් ලැයිස්තුවයිlr යනු ඉගෙනුම් අනුපාතයයි αbetas (β1, β2) ක tuple වේepsϵ^ හෝ මත ϵ පදනම් වේ optimized_updateweight_decay``WeightDecay අර්ථ දක්වා ඇති පන්තියේ අවස්ථාවකි __init__.pyoptimized_update එකතු කිරීමෙන් පසු එය කිරීමෙන් දෙවන මොහොතේ පක්ෂග්රාහීව නිවැරදි කිරීම ප්රශස්ත කිරීම සඳහා ධජයකි ϵamsgrad ආදම් සරල කිරීම සඳහා AMSGrad හෝ වැටීම භාවිතා කළ යුතුද යන්න දැක්වෙන ධජයකිdegenerate_to_sgd නිවැරදි කිරීමේ පදය rt නොසැලකිය හැකි විට sgd භාවිතා කළ යුතුද යන්න.defaults කණ්ඩායම් අගයන් සඳහා පෙරනිමි ශබ්ද කෝෂයකි. ඔබට පන්තිය දීර් extend කිරීමට අවශ්ය විට මෙය ප්රයෝජනවත් RAdam වේ.155def\_\_init\_\_(self,params,lr=1e-3,betas=(0.9,0.999),eps=1e-8,156weight\_decay:WeightDecay=WeightDecay(),157optimized\_update:bool=True,158amsgrad=False,159degenerated\_to\_sgd=True,defaults=None):
175self.degenerated\_to\_sgd=degenerated\_to\_sgd176super().\_\_init\_\_(params,lr,betas,eps,weight\_decay,optimized\_update,amsgrad,defaults)
state පරාමිතිය ප්රශස්තකරණය රාජ්ය වේ (tensor)
group පරාමිති කණ්ඩායමේ ප්රශස්තිකරණ ගුණාංග ගබඩා කරයි
grad පරාමිතිය gt සඳහා වත්මන් ඵලය අනුක්රමික tensor වේ θt−1
param පරාමිතිය tensor වේ θt−1
178defstep\_param(self,state:Dict[str,any],group:Dict[str,any],grad:torch.Tensor,param:torch.nn.Parameter):
බරක්ෂය වීම ගණනය කරන්න
189grad=self.weight\_decay(param,grad,group)
ලබාගන්න mt සහ vt; එනම් σ(.) සහ පක්ෂග්රාහී නිවැරදි ψ(.) කිරීමකින් තොරව
192m,v=self.get\_mv(state,group,grad)
ප්රශස්තිකරණපියවර ගණන ගණනය කරන්න t
195state['step']+=1
RadAM යාවත්කාලීන කිරීම සිදු
198self.r\_adam\_update(state,group,param,m,v)
200@staticmethod201defcalc\_rectification\_term(beta2:float,step:int)-\>Optional[float]:
β2t
207beta2\_t=beta2\*\*step
ρ∞=1−β22−1
209rho\_inf=2/(1-beta2)-1
ρt=1−β22−1−1−β2t2tβ2t
211rho=rho\_inf-2\*step\*beta2\_t/(1-beta2\_t)
rt විට සොයාගත හැකිය ρt>=4. එය ආසන්න අගයක් බැවින් අපි තව ටිකක් ගතානුගතික වෙමු
215ifrho\>=5:
rt=(ρ∞−2)(ρ∞−4)ρt(ρt−2)(ρt−4)ρ∞
217r2=(rho-4)/(rho\_inf-4)\*(rho-2)/rho\*rho\_inf/(rho\_inf-2)218returnmath.sqrt(r2)219else:220returnNone
state පරාමිතිය ප්රශස්තකරණය රාජ්ය වේ (tensor)group පරාමිති කණ්ඩායමේ ප්රශස්තිකරණ ගුණාංග ගබඩා කරයිparam පරාමිතිය tensor වේ θt−1m``v සහ නිවැරදි නොකළ පළමු හා දෙවන අවස්ථා mt සහ vt; i.e. σ(.) ψ(.) පක්ෂග්රාහී නිවැරදි කිරීමකින් තොරව222defr\_adam\_update(self,state:Dict[str,any],group:Dict[str,any],param:torch.nn.Parameter,223m:torch.Tensor,v:torch.Tensor):
ලබා β1 ගන්න β2
235beta1,beta2=group['betas']
සඳහානැඹුරුව නිවැරදි කිරීමේ පදය m^t, 1−β1t
237bias\_correction1=1-beta1\*\*state['step']
සඳහානැඹුරුව නිවැරදි කිරීමේ පදය v^t, 1−β2t
239bias\_correction2=1-beta2\*\*state['step']240241r=self.calc\_rectification\_term(beta2,state['step'])
ඉගෙනුම්අනුපාතය ලබා ගන්න
244lr=self.get\_lr(state,group)
ඇද rt ගත නොහැකි නම්
247ifrisnotNone:
Scalarගණනය ඒකාබද්ධ විසින් ගණනය උපරිම ඵල ලබා ගැනීම සඳහා යන්න
249ifself.optimized\_update:
නිගණ්ඨයා vt+ϵ^
251denominator=v.sqrt().add\_(group['eps'])
පියවරප්රමාණය αrt∗1−β1t1−β2t
253step\_size=lr\*math.sqrt(bias\_correction2)\*r/bias\_correction1
පරාමිතීන්යාවත්කාලීන කරන්න θt←θt−1−αrt1−β1t1−β2t⋅vt+ϵ^mt
256param.data.addcdiv\_(m,denominator,value=-step\_size)
ප්රශස්තිකරණයකින්තොරව ගණනය කිරීම
258else:
නිගණ්ඨයා 1−β2tvt+ϵ
260denominator=(v.sqrt()/math.sqrt(bias\_correction2)).add\_(group['eps'])
පියවරප්රමාණය 1−β1tαrt
262step\_size=lr\*r/bias\_correction1
පරාමිතීන්යාවත්කාලීන කරන්න θt←θt−1−αrt⋅v^t+ϵm^t
265param.data.addcdiv\_(m,denominator,value=-step\_size)
ලබාගත නොහැකි rt නම් ගම්යතාව සමග SGD කරන්න
268elifself.degenerated\_to\_sgd:
පියවරප්රමාණය 1−β1tα
270step\_size=lr/bias\_correction1
පරාමිතීන්යාවත්කාලීන කරන්න θt←θt−1−α⋅m^t
273param.data.add\_(m,alpha=-step\_size)
276def\_test\_rectification\_term():
282importmatplotlib.pyplotasplt283importnumpyasnp284285beta2=[0.9999,0.999,0.99,0.9,0.8,0.6,0.5]286plt.plot(np.arange(1,5\_000),[[RAdam.calc\_rectification\_term(b,i)forbinbeta2]foriinrange(1,5\_000)])287plt.legend(beta2)288plt.title("Optimizer")289plt.show()290291292if\_\_name\_\_=='\_\_main\_\_':293\_test\_rectification\_term()