Back to Annotated Deep Learning Paper Implementations

ආදම්ප්රශස්තකරණය

docs/si/optimizers/adam.html

latest11.0 KB
Original Source

homeoptimizers

View code on Github

#

ආදම්ප්රශස්තකරණය

මෙය PyTorch ක්රියාත්මක කිරීමකි ජනප්රිය ප්රශස්තිකරණය කඩදාසි ඇඩම් වෙතින් ඇඩම්: ස්ටොචාස්ටික් ප්රශස්තිකරණය සඳහා ක්රමයක් .

ආදම් යාවත්කාලීන කිරීම,

mt​vt​m^t​v^t​θt​​←β1​mt−1​+(1−β1​)⋅gt​←β2​vt−1​+(1−β2​)⋅gt​2←1−β1​tmt​​←1−β2​tvt​​←θt−1​−α⋅v^t​​+ϵm^t​​​

කොහෙද αβ1​, β2​ සහ ϵ පරිමාණ අධි පරාමිතීන් වේ. mt​ සහ පළමු vt​ හා දෙවන ඇණවුම් අවස්ථා වේ. m^t​ v^t​ සහ පක්ෂග්රාහී නිවැරදි අවස්ථාවන් වේ. ϵ ශුන්ය දෝෂයකින් බෙදීම සඳහා විසඳුමක් ලෙස භාවිතා කරයි, නමුත් අනුක්රමික විචල්යතාවයට එරෙහිව ක්රියා කරන අධි-පරාමිතියක ආකාරයක් ලෙසද ක්රියා කරයි.

උපකල්පනයකරමින් ගන්නා ලද effective ලදායී පියවර ϵ=0 වන්නේ, Δt=α⋅v^t​m^t​​ මෙය මායිම් කරනු ලබන්නේ ∣Δt∣≤α⋅1−β2​​1−β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_update
  • weight_decay``WeightDecay අර්ථ දක්වා ඇති පන්තියේ අවස්ථාවකි __init__.py
  • optimized_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)

#

ගණනයකරන්න mt​ සහ vt​

  • 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​←β1​mt−1​+(1−β1​)⋅gt​

116m.mul\_(beta1).add\_(grad,alpha=1-beta1)

#

ස්ථානයෙහිගණනය කිරීම vt​ vt​←β2​vt−1​+(1−β2​)⋅gt​2

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−1​
  • m``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−β2​t)​+ϵmt​/(1−β1​t)​←θt−1​−α1−β1​t1−β2​t​​⋅vt​​+ϵ^mt​​​

අධි-පරාමිතියලෙස අප සඳහන් කළ යුත්තේ ϵ^=(1−β2​t)ϵ කොහේද?

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−β1​t

168bias\_correction1=1-beta1\*\*state['step']

#

සඳහානැඹුරුව නිවැරදි කිරීමේ පදය v^t​, 1−β2​t

170bias\_correction2=1-beta2\*\*state['step']

#

ඉගෙනුම්අනුපාතය ලබා ගන්න

173lr=self.get\_lr(state,group)

#

මෙමගණනය උපරිම ඵල ලබා ගැනීම සඳහා යන්න

176ifself.optimized\_update:

#

vt​​+ϵ^

178denominator=v.sqrt().add\_(group['eps'])

#

α1−β1​t1−β2​t​​

180step\_size=lr\*math.sqrt(bias\_correction2)/bias\_correction1

#

θt​←θt−1​−α1−β1​t1−β2​t​​⋅vt​​+ϵ^mt​​

183param.data.addcdiv\_(m,denominator,value=-step\_size)

#

ප්රශස්තිකරණයකින්තොරව ගණනය කිරීම

185else:

#

1−β2​t​vt​​​+ϵ

187denominator=(v.sqrt()/math.sqrt(bias\_correction2)).add\_(group['eps'])

#

1−β1​tα​

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)

Trending Research Paperslabml.ai