Back to Annotated Deep Learning Paper Implementations

AMSGrad

docs/si/optimizers/amsgrad.html

latest12.2 KB
Original Source

homeoptimizers

View code on Github

#

AMSGrad

මෙයඅ PyTorch කඩදාසි ක්රියාත්මක කිරීම ආදම් සහ ඉන් ඔබ්බට අභිසාරී වීම .

අපගේ ආදම් ප්රශස්තිකරණ ක්රියාත්මක කිරීමේ දිගුවක් ලෙස අපි මෙය ක්රියාත්මකකරමු. එය ක්රියාත්මක කිරීම ආදම්ට බෙහෙවින් සමාන බැවින් එය ස්වයංක්රීයව ක්රියාත්මක කිරීම ඇත්තෙන්ම කුඩා වේ.

ආදම්අභිසාරී වීමට අපොහොසත් වන කඩදාසි වල විස්තර කර ඇති කෘතිම උදාහරණය ක්රියාත්මක කිරීමක් ද අප සතුව ඇත.

18fromtypingimportDict1920importtorch21fromtorchimportnn2223fromlabml\_nn.optimizersimportWeightDecay24fromlabml\_nn.optimizers.adamimportAdam

#

AMSGradප්රශස්තකරණය

මෙමපන්තිය අර්ථ දක්වා ඇති ආදම් ප්රශස්තකරණයෙන් විහිදේ adam.py. ආදම් ප්රශස්තකරණය GenericAdaptiveOptimizer අර්ථ දක්වා ඇති පන්තිය දීර් ing __init__.pyකරයි.

27classAMSGrad(Adam):

#

ප්රශස්තකරණයආරම්භ කරන්න

  • params යනු පරාමිතීන් ලැයිස්තුවයි
  • lr යනු ඉගෙනුම් අනුපාතයයි α
  • betas (β1​, β2​) ක tuple වේ
  • epsϵ^ හෝ මත ϵ පදනම් වේ optimized_update
  • weight_decay``WeightDecay අර්ථ දක්වා ඇති පන්තියේ අවස්ථාවකි __init__.py
  • 'optimized_update'යනු එකතු කිරීමෙන් පසු එය කිරීමෙන් දෙවන මොහොතේ පක්ෂග්රාහීව නිවැරදි කිරීම ප්රශස්ත කිරීම සඳහා ද යන්න ධජයකි ϵ
  • amsgrad ආදම් සරල කිරීම සඳහා AMSGrad හෝ වැටීම භාවිතා කළ යුතුද යන්න දැක්වෙන ධජයකි
  • defaults කණ්ඩායම් අගයන් සඳහා පෙරනිමි ශබ්ද කෝෂයකි. ඔබට පන්තිය දීර් extend කිරීමට අවශ්ය විට මෙය ප්රයෝජනවත් Adam වේ.
35def\_\_init\_\_(self,params,lr=1e-3,betas=(0.9,0.999),eps=1e-16,36weight\_decay:WeightDecay=WeightDecay(),37optimized\_update:bool=True,38amsgrad=True,defaults=None):

#

53defaults={}ifdefaultsisNoneelsedefaults54defaults.update(dict(amsgrad=amsgrad))5556super().\_\_init\_\_(params,lr,betas,eps,weight\_decay,optimized\_update,defaults)

#

පරාමිතිතත්වයක් ආරම්භ කරන්න

  • state පරාමිතිය ප්රශස්තකරණය රාජ්ය වේ (tensor)

  • group පරාමිති කණ්ඩායමේ ප්රශස්තිකරණ ගුණාංග ගබඩා කරයි

  • param පරාමිතිය tensor වේ θt−1​

58definit\_state(self,state:Dict[str,any],group:Dict[str,any],param:nn.Parameter):

#

අපවිස්තාරණය කරන ආදම් ප්රශස්තිකරණයේ init_state ඇමතුම

68super().init\_state(state,group,param)

#

amsgrad ධජය මෙම පරාමිතිය පිරිසක් True සඳහා නම්, අපි වර්ග ඵලය අනුක්රමික ක ඝාතීය වෙනස්වන සාමාන්ය උපරිම පවත්වා

72ifgroup['amsgrad']:73state['max\_exp\_avg\_sq']=torch.zeros\_like(param,memory\_format=torch.preserve\_format)

#

ගණනයකරන්න mt​ සහ vt​ හෝ max(v1​,v2​,...,vt−1​,vt​)

  • state පරාමිතිය ප්රශස්තකරණය රාජ්ය වේ (tensor)

  • group පරාමිති කණ්ඩායමේ ප්රශස්තිකරණ ගුණාංග ගබඩා කරයි

  • grad පරාමිතිය gt​ සඳහා වත්මන් ඵලය අනුක්රමික tensor වේ θt−1​

75defget\_mv(self,state:Dict[str,any],group:Dict[str,any],grad:torch.Tensor):

#

vt​ ආදම්ගෙන් mt​ සහ ලබා ගන්න

85m,v=super().get\_mv(state,group,grad)

#

මෙමපරාමිති කණ්ඩායම භාවිතා කරන්නේ නම් amsgrad

88ifgroup['amsgrad']:

#

ලබාගන්න max(v1​,v2​,...,vt−1​).

🗒කඩදාසි මේ v^t​ සඳහා අංකනය භාවිතා කරයි, එය නැඹුරුව නිවැරදි ඝාතීය වෙනස්වන සාමාන්යය සඳහා එම අංකනය ආදම්ගේ භාවිතය සමග පටලවා නිසා අපි මෙතන බව භාවිතා කරන්නේ නැහැ.

94v\_max=state['max\_exp\_avg\_sq']

#

ගණනයකරන්න max(v1​,v2​,...,vt−1​,vt​).

🤔මම ඔබ වර්ග ඵලය අනුක්රමික දෙවන ඝාතීය සාමාන්ය නිවැරදි නැඹුරුව උපරිම ගැනීම/පවත්වා ගත යුතු දැනෙනවා. නමුත් එය PyTorch හි ද ක්රියාත්මක වන්නේ එලෙසිනි. පක්ෂග්රාහී නිවැරදි කිරීම පමණක් වටිනාකම වැඩි කරන අතර එය සැබෑ වෙනසක් කරන්නේ පුහුණුවේ මුල් පියවර කිහිපය තුළ පමණක් බැවින් එය සැබවින්ම වැදගත් නොවන බව මම සිතමි.

103torch.maximum(v\_max,v,out=v\_max)104105returnm,v\_max106else:

#

පරාමිතිකණ්ඩායම භාවිතා නොකරන්නේ නම් ආදම් වෙත ආපසු යන්න amsgrad

108returnm,v

#

කෘතිමඅත්හදා බැලීම

කඩදාසිවල විස්තර කර ඇති කෘතිම අත්හදා බැලීම මෙයයි, එය ආදම් අසමත් වන අවස්ථාවක් පෙන්වයි.

කඩදාසි(සහ ආදම්) පරාමිතීන් සම්බන්ධයෙන් ශ්රිතයක අපේක්ෂිත අගය අවම කිරීම ලෙස ප්රශස්තිකරණය කිරීමේ ගැටළුව සකස් කරයි θ. E[f(θ)] ස්ථිතික පුහුණු සැකසුම තුළ අපට f එය ස්වයංක්රීයව ක්රියාත්මක නොවේ; එනම්, ඔබ එන්එන් ප්රශස්තිකරණය කරන විට සමස්ත දත්ත කාණ්ඩයේම ක්රියාකාරිත්වය f වනු ඇත. අප ඇත්ත වශයෙන්ම ඇගයීමට ලක් කරන්නේ කුඩා කණ්ඩායමකි, එබැවින් සැබෑ කාර්යය වන්නේ ස්ටෝචාස්ටික් සාක්ෂාත් කර fගැනීමයි. මේ නිසා අපි කතා කරන්නේ අපේක්ෂිත වටිනාකමක් ගැන ය. එබැවින් පුහුණුවීමේ එක් එක් කාල පියවර f1​,f2​,...,fT​ සඳහා ශ්රිතය අවබෝධ කර ගැනීම ඉඩ දෙන්න.

අපිප්රශස්තිකරණයේ ක්රියාකාරිත්වය කනගාටුව ලෙස මනින්නෙමු, කාල පියවරේදී පරාමිතීන් R(T)=t=1∑T​[ft​(θt​)−ft​(θ∗)] θt​ කොතැනද t, සහ ප්රශස්ත θ∗ වේ අවම කරන පරාමිතීන් E[f(θ)].

දැන්කෘතිම ගැටළුව නිර්වචනය කිරීමට ඉඩ දෙයි,

ft​(x)={1010x,−10x,​for tmod101=1otherwise​​

කොහෙද −1≤x≤+1. ප්රශස්ත විසඳුම වේ x=−1.

මෙමකේතය මෙම ගැටලුව මත ආදම් සහ AMSGrad ධාවනය කිරීමට උත්සාහ කරනු ඇත.

111def\_synthetic\_experiment(is\_adam:bool):

#

x පරාමිතිය නිර්වචනය

153x=nn.Parameter(torch.tensor([.0]))

#

ප්රශස්ත, x∗=−1

155x\_star=nn.Parameter(torch.tensor([-1]),requires\_grad=False)

#

ft​(x)

157deffunc(t:int,x\_:nn.Parameter):

#

161ift%101==1:162return(1010\*x\_).sum()163else:164return(-10\*x\_).sum()

#

අදාළප්රශස්තකරණය ආරම්භ කරන්න

167ifis\_adam:168optimizer=Adam([x],lr=1e-2,betas=(0.9,0.99))169else:170optimizer=AMSGrad([x],lr=1e-2,betas=(0.9,0.99))

#

R(T)

172total\_regret=0173174fromlabmlimportmonit,tracker,experiment

#

ප්රතිඵලවාර්තා කිරීමට අත්හදා නිර්මාණය

177withexperiment.record(name='synthetic',comment='Adam'ifis\_adamelse'AMSGrad'):

#

107 පියවර සඳහා ධාවනය කරන්න

179forstepinmonit.loop(10\_000\_000):

#

ft​(θt​)−ft​(θ∗)

181regret=func(step,x)-func(step,x\_star)

#

R(T)=∑t=1T​[ft​(θt​)−ft​(θ∗)]

183total\_regret+=regret.item()

#

සෑමපියවර 1,000 කට වරක් ප්රති results ල

185if(step+1)%1000==0:186tracker.save(loss=regret,x=x,regret=total\_regret/(step+1))

#

අනුක්රමිකගණනය කරන්න

188regret.backward()

#

ප්රශස්තකරන්න

190optimizer.step()

#

අනුක්රමිකපැහැදිලි කරන්න

192optimizer.zero\_grad()

#

වගබලා ගන්න −1≤x≤+1

195x.data.clamp\_(-1.,+1.)196197198if\_\_name\_\_=='\_\_main\_\_':

#

කෘතිමඅත්හදා බැලීම ක්රියාත්මක කරන්න ආදම්. මෙන්න ප්රතිඵල. ආදම් අභිසාරී වන බව ඔබට පෙනේ x=+1

202\_synthetic\_experiment(True)

#

කෘතිමඅත්හදා බැලීම ක්රියාත්මක කරන්න AMSGrad මෙන්න ප්රති. ල. AMSGrad සැබෑ ප්රශස්ත බවට අභිසාරී වන බව ඔබට දැක ගත හැකිය x=−1

206\_synthetic\_experiment(False)

Trending Research Paperslabml.ai