docs/si/optimizers/adam.html
මෙය PyTorch ක්රියාත්මක කිරීමකි ජනප්රිය ප්රශස්තිකරණය කඩදාසි ඇඩම් වෙතින් ඇඩම්: ස්ටොචාස්ටික් ප්රශස්තිකරණය සඳහා ක්රමයක් .
ආදම් යාවත්කාලීන කිරීම,
mtvtm^tv^tθt←β1mt−1+(1−β1)⋅gt←β2vt−1+(1−β2)⋅gt2←1−β1tmt←1−β2tvt←θt−1−α⋅v^t+ϵm^t
කොහෙද αβ1, β2 සහ ϵ පරිමාණ අධි පරාමිතීන් වේ. mt සහ පළමු vt හා දෙවන ඇණවුම් අවස්ථා වේ. m^t v^t සහ පක්ෂග්රාහී නිවැරදි අවස්ථාවන් වේ. ϵ ශුන්ය දෝෂයකින් බෙදීම සඳහා විසඳුමක් ලෙස භාවිතා කරයි, නමුත් අනුක්රමික විචල්යතාවයට එරෙහිව ක්රියා කරන අධි-පරාමිතියක ආකාරයක් ලෙසද ක්රියා කරයි.
උපකල්පනයකරමින් ගන්නා ලද effective ලදායී පියවර ϵ=0 වන්නේ, Δt=α⋅v^tm^t මෙය මායිම් කරනු ලබන්නේ ∣Δt∣≤α⋅1−β21−β1 1−β1>1−β2 කවදාද සහ ∣Δt∣≤α වෙනත් ආකාරයකින් ය. සහ වඩාත් පොදු අවස්ථාවන්හීදී, ∣Δt∣≈α
40importmath41fromtypingimportDict,Any,Tuple,Optional4243importtorch44fromlabmlimporttracker45fromtorchimportnn4647fromlabml\_nn.optimizersimportGenericAdaptiveOptimizer,WeightDecay
ආදම්ප්රශස්තකරණය ක්රියාත්මක කිරීම __init__.py සඳහා අපි GenericAdaptiveOptimizer අර්ථ දක්වා ඇති පන්තිය දීර් extend කරමු.
50classAdam(GenericAdaptiveOptimizer):
params යනු පරාමිතීන් ලැයිස්තුවයිlr යනු ඉගෙනුම් අනුපාතයයි αbetas (β1, β2) ක tuple වේepsϵ^ හෝ මත ϵ පදනම් වේ optimized_updateweight_decay``WeightDecay අර්ථ දක්වා ඇති පන්තියේ අවස්ථාවකි __init__.pyoptimized_update එකතු කිරීමෙන් පසු එය කිරීමෙන් දෙවන මොහොතේ පක්ෂග්රාහීව නිවැරදි කිරීම ප්රශස්ත කිරීම සඳහා ධජයකි ϵdefaults කණ්ඩායම් අගයන් සඳහා පෙරනිමි ශබ්ද කෝෂයකි. ඔබට පන්තිය දීර් extend කිරීමට අවශ්ය විට මෙය ප්රයෝජනවත් Adam වේ.58def\_\_init\_\_(self,params,59lr:float=1e-3,betas:Tuple[float,float]=(0.9,0.999),eps:float=1e-16,60weight\_decay:WeightDecay=WeightDecay(),61optimized\_update:bool=True,62defaults:Optional[Dict[str,Any]]=None):
76defaults={}ifdefaultsisNoneelsedefaults77defaults.update(weight\_decay.defaults())78super().\_\_init\_\_(params,defaults,lr,betas,eps)7980self.weight\_decay=weight\_decay81self.optimized\_update=optimized\_update
state පරාමිතිය ප්රශස්තකරණය රාජ්ය වේ (tensor)
group පරාමිති කණ්ඩායමේ ප්රශස්තිකරණ ගුණාංග ගබඩා කරයි
param පරාමිතිය tensor වේ θt−1
83definit\_state(self,state:Dict[str,any],group:Dict[str,any],param:nn.Parameter):
පරාමිතියමත ගෙන ඇති ප්රශස්තිකරණ පියවර ගණන මෙයයි, t
93state['step']=0
අනුක්රමිකක ඝාතීය වෙනස්වන සාමාන්යය, mt
95state['exp\_avg']=torch.zeros\_like(param,memory\_format=torch.preserve\_format)
වර්ගඵලය අනුක්රමික වටිනාකම් ඝාතීය වෙනස්වන සාමාන්යය, vt
97state['exp\_avg\_sq']=torch.zeros\_like(param,memory\_format=torch.preserve\_format)
state පරාමිතිය ප්රශස්තකරණය රාජ්ය වේ (tensor)
group පරාමිති කණ්ඩායමේ ප්රශස්තිකරණ ගුණාංග ගබඩා කරයි
grad පරාමිතිය gt සඳහා වත්මන් ඵලය අනුක්රමික tensor වේ θt−1
99defget\_mv(self,state:Dict[str,Any],group:Dict[str,Any],grad:torch.Tensor):
ලබා β1 ගන්න β2
109beta1,beta2=group['betas']
ලබා mt−1 ගන්න vt−1
112m,v=state['exp\_avg'],state['exp\_avg\_sq']
ස්ථානයෙහිගණනය කිරීම mt mt←β1mt−1+(1−β1)⋅gt
116m.mul\_(beta1).add\_(grad,alpha=1-beta1)
ස්ථානයෙහිගණනය කිරීම vt vt←β2vt−1+(1−β2)⋅gt2
119v.mul\_(beta2).addcmul\_(grad,grad,value=1-beta2)120121returnm,v
මෙයරාජ්යය මත පදනම්ව නවීකරණය කරන ලද ඉගෙනුම් අනුපාතය නැවත ලබා දෙයි. ආදම් සඳහා මෙය පරාමිති කණ්ඩායම සඳහා නිශ්චිත ඉගෙනුම් අනුපාතය පමණි, α.
123defget\_lr(self,state:Dict[str,any],group:Dict[str,any]):
131returngroup['lr']
state පරාමිතිය ප්රශස්තකරණය රාජ්ය වේ (tensor)group පරාමිති කණ්ඩායමේ ප්රශස්තිකරණ ගුණාංග ගබඩා කරයිparam පරාමිතිය tensor වේ θt−1m``v සහ නිවැරදි නොකළ පළමු හා දෙවන අවස්ථා mt සහ vt.මෙයපහත සඳහන් දේ ගණනය කරයි
θt←θt−1−α⋅v^t+ϵm^t
සිට αβ1, β2 සහ පරිමාණයන් ϵ වන අතර අනෙක් ඒවා අපි මෙම ගණනය කිරීම වෙනස් කරන ආතතීන් වේ ගණනය කිරීම ප්රශස්ත කරන්න.
θtθtθt←θt−1−α⋅v^t+ϵm^t←θt−1−α⋅vt/(1−β2t)+ϵmt/(1−β1t)←θt−1−α1−β1t1−β2t⋅vt+ϵ^mt
අධි-පරාමිතියලෙස අප සඳහන් කළ යුත්තේ ϵ^=(1−β2t)ϵ කොහේද?
133defadam\_update(self,state:Dict[str,any],group:Dict[str,any],param:torch.nn.Parameter,134m:torch.Tensor,v:torch.Tensor):
ලබා β1 ගන්න β2
166beta1,beta2=group['betas']
සඳහානැඹුරුව නිවැරදි කිරීමේ පදය m^t, 1−β1t
168bias\_correction1=1-beta1\*\*state['step']
සඳහානැඹුරුව නිවැරදි කිරීමේ පදය v^t, 1−β2t
170bias\_correction2=1-beta2\*\*state['step']
ඉගෙනුම්අනුපාතය ලබා ගන්න
173lr=self.get\_lr(state,group)
මෙමගණනය උපරිම ඵල ලබා ගැනීම සඳහා යන්න
176ifself.optimized\_update:
vt+ϵ^
178denominator=v.sqrt().add\_(group['eps'])
α1−β1t1−β2t
180step\_size=lr\*math.sqrt(bias\_correction2)/bias\_correction1
θt←θt−1−α1−β1t1−β2t⋅vt+ϵ^mt
183param.data.addcdiv\_(m,denominator,value=-step\_size)
ප්රශස්තිකරණයකින්තොරව ගණනය කිරීම
185else:
1−β2tvt+ϵ
187denominator=(v.sqrt()/math.sqrt(bias\_correction2)).add\_(group['eps'])
1−β1tα
189step\_size=lr/bias\_correction1
θt←θt−1−α⋅v^t+ϵm^t
192param.data.addcdiv\_(m,denominator,value=-step\_size)
state පරාමිතිය ප්රශස්තකරණය රාජ්ය වේ (tensor)
group පරාමිති කණ්ඩායමේ ප්රශස්තිකරණ ගුණාංග ගබඩා කරයි
grad පරාමිතිය gt සඳහා වත්මන් ඵලය අනුක්රමික tensor වේ θt−1
param පරාමිතිය tensor වේ θt−1
194defstep\_param(self,state:Dict[str,any],group:Dict[str,any],grad:torch.Tensor,param:torch.nn.Parameter):
බරක්ෂය වීම ගණනය කරන්න
205grad=self.weight\_decay(param,grad,group)
ලබා mt ගන්න vt
208m,v=self.get\_mv(state,group,grad)
ප්රශස්තිකරණපියවර ගණන වැඩි t කරන්න
211state['step']+=1
ආදම් යාවත්කාලීන කිරීම සිදු
214self.adam\_update(state,group,param,m,v)