Back to Annotated Deep Learning Paper Implementations

නිවැරදිකරන ලද ආදම් (RaDAM) ප්රශස්ති

docs/si/optimizers/radam.html

latest15.1 KB
Original Source

homeoptimizers

View code on Github

#

නිවැරදිකරන ලද ආදම් (RaDAM) ප්රශස්ති

මෙමක්රියාත්මක කිරීම පදනම් වී ඇත්තේ කඩදාසි නිල වශයෙන් ක්රියාත්මක කිරීම මත අනුවර්තී ඉගෙනුම් අනුපාතය සහ ඉන් ඔබ්බට විචල්යතාව මත ය.

අපගේ AMSGrad ක්රියාත්මක කිරීමේ දිගුවක් ලෙස අපි එයPyTorch හි ක්රියාත්මක කර ඇති අතර එමඟින් ක්රියාත්මක කළ යුතු වෙනස්කම් පමණක් අවශ්ය වේ.

පුහුණුවේආරම්භක අදියරවලදී ඇඩම් ප්රශස්තකරණය සමහර විට නරක දේශීය ප්රශස්තිකරණයකට අභිසාරී වේ; විශේෂයෙන් ට්රාන්ස්ෆෝමර් පුහුණු කිරීමේදී. පර්යේෂණයන් මෙය මැඩපැවැත්වීම සඳහා උණුසුම් කිරීම් භාවිතා කරයි; මූලික පුහුණු පියවර සඳහා (උණුසුම් අවධිය) ඔවුන් අඩු ඉගෙනුම් අනුපාතයක් භාවිතා කරයි. පුහුණුවේ ආරම්භක අදියරවලදී අනුවර්තී ඉගෙනුම් අනුපාතයේ ඉහළ විචලතාව මෙම ලිපිය මඟින් ගැටළුව හඳුනා ගන්නා අතර විචලතාව අඩු කිරීම සඳහා නව නිවැරදි කිරීමේ යෙදුමක් භාවිතා කරමින් එය ගණන් කරයි.

කඩදාසිවිචල්යතා අඩු කිරීමේ යාන්ත්රණ දෙකක් ද ඇගයීමට ලක් කරයි: _ ඇඩම්-2K : පරාමිතීන් වෙනස් නොකර හෝ ගම්යතාව ගණනය නොකර පළමු 2k පියවර තුළ අනුවර්තී ඉගෙනුම් අනුපාතය (vt​ ආදම්හි) පමණක් ගණනය කරන්න ( mt​)._ ඇඩම්-ඊපීඑස් : ආදම් විශාල ϵ≈10−4.

නිවැරදිකරන ලද ආදම්

ගම්යතාව σ(g1​,...,gt​) සහ ψ(g1​,...,gt​) අනුවර්තී ඉගෙනුම් අනුපාතය ගණනය කිරීම සඳහා කාර්යයන් කරමු. ආදම් සඳහා, ඔවුන්

σ(g1​,...,gt​)ψ(g1​,...,gt​)​=1−β1​t(1−β1​)∑i=1t​β1​t−igi​​=(1−β2​)∑i=1t​β2​t−igi2​1−β2​t​​​

සරලවෙනස්වන සාමාන්යය ලෙස ඝාතීය වෙනස්වන සාමාන්යය

ඝාතීයචලනය වන සාමාන්යය බෙදා හැරීම සරල චලනය වන සාමාන්යයක් ලෙස ආසන්න කළ හැකිය.

p(1−β2​t(1−β2​)∑i=1t​β2​t−igi2​​)≈p(f(t,β2​)∑i=1f(t,β2​)​gt+1−i2​​)​

මෙන්නඅපි අවසාන f(t,β2​) ශ්රේණියේ සරල චලනය වන සාමාන්යය ගන්නෙමු. f(t,β2​) පහත සඳහන් දෑ තෘප්තිමත් කරයි,

1−β2​t(1−β2​)∑i=1t​β2​t−i⋅i​=f(t,β2​)∑i=1f(t,β2​)​(t+1−i)​​

ලබාදෙන, f(t,β2​)=1−β2​2​−1−1−β2​t2tβ2​t​

පරිමාණයකළ ප්රතිලෝම චි-කොටු

ඉහළින්අපට 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−β2​2​−1ඇත. අවම විචලතාව වීමට ඉඩ දෙන්න Cvar​

අනුවර්තීඉගෙනුම් අනුපාතයට ස්ථාවර විචලතාවයක් ψ(.) ඇති බව සහතික කිරීම සඳහා, අපි විචලනය නිවැරදි කරමු r

r=Var[ψ(.)]Cvar​​​​

ආසන්නකිරීම Var[ψ(.)]

ඔවුන් ψ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.

Cvar​Var[ψ(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_update
  • weight_decay``WeightDecay අර්ථ දක්වා ඇති පන්තියේ අවස්ථාවකි __init__.py
  • optimized_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)

#

නිවැරදිකිරීමේ පදය ගණනය කරන්න rt​

200@staticmethod201defcalc\_rectification\_term(beta2:float,step:int)-\>Optional[float]:

#

β2​t

207beta2\_t=beta2\*\*step

#

ρ∞​=1−β2​2​−1

209rho\_inf=2/(1-beta2)-1

#

ρt​=1−β2​2​−1−1−β2​t2tβ2​t​

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

#

RadAM පරාමිති යාවත්කාලීන කිරීම කරන්න

  • state පරාමිතිය ප්රශස්තකරණය රාජ්ය වේ (tensor)
  • group පරාමිති කණ්ඩායමේ ප්රශස්තිකරණ ගුණාංග ගබඩා කරයි
  • param පරාමිතිය tensor වේ θt−1​
  • m``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−β1​t

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

#

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

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

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

#

පරාමිතීන්යාවත්කාලීන කරන්න θt​←θt−1​−αrt​​1−β1​t1−β2​t​​⋅vt​​+ϵ^mt​​

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

#

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

258else:

#

නිගණ්ඨයා 1−β2​t​vt​​​+ϵ

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

#

පියවරප්රමාණය 1−β1​tα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−β1​tα​

270step\_size=lr/bias\_correction1

#

පරාමිතීන්යාවත්කාලීන කරන්න θt​←θt−1​−α⋅m^t​

273param.data.add\_(m,alpha=-step\_size)

#

විවිධ t සඳහා rt​ කුමන්ත්රණය β2​

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()

Trending Research Paperslabml.ai