Back to Annotated Deep Learning Paper Implementations

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

docs/si/optimizers/ada_belief.html

latest9.5 KB
Original Source

homeoptimizers

View code on Github

#

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

මෙයපදනම් වී ඇත්තේ AadaBelief කඩදාසි නිල වශයෙන් ක්රියාත්මක කිරීමෙනි AadaBelief Optimizer: නිරීක්ෂණය කරන ලද ශ්රේණියේ විශ්වාසය අනුව පියවර අනුවර්තනය කිරීම .

මෙය RADAM හි දිගුවක් ලෙස PyTorch හි ක්රියාත්මක වේ.

ආදම්ප්රශස්තකරණය සහ ඇඩබලිෆ් අතර ඇති ප්රධාන වෙනස නම්, එය අනුවර්තී ඉගෙනුම් අනුපාතය ගණනය කරන්නේ කෙසේද යන්නයි; අනුක්රමික වර්ග වල on ාතීය චලනය වන සාමාන්යයෙන් බෙදීම වෙනුවට, ඇඩබීලීෆ් විචලනය වන on ාතීය මධ්යන්යයෙන් බෙදේ.

mt​st​m^t​s^t​θt​​←β1​mt−1​+(1−β1​)⋅gt​←β2​st−1​+(1−β2​)⋅(gt​−mt​)2←1−β1​tmt​​←1−β2​tst​+ϵ​←θt−1​−α⋅s^t​​+ϵm^t​​​

🤔කඩදාසි විචලතාව ගණනය කරයි (gt​−mt​)2, නමුත් එය නැඹුරුව නිවැරදි කළ ගම්යතාව භාවිතා කළ යුතු යැයි මට හැඟේ (gt​−m^t​)2. නැඹුරුව නිවැරදි කිරීම මූලික පුහුණු පියවරවලින් ≈1 පසුව වන බැවින් මෙය බොහෝ දේට බලපාන්නේ නැතැයි මම සිතමි.

36fromtypingimportDict,Any3738importtorch39fromtorchimportnn4041fromlabml\_nn.optimizersimportWeightDecay42fromlabml\_nn.optimizers.radamimportRAdam

#

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

මෙමපන්තිය අර්ථ දක්වා ඇති RadAM ප්රශස්තකරණයෙන් විහිදේ radam.py.

45classAdaBelief(RAdam):

#

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

  • params යනු පරාමිතීන් ලැයිස්තුවයි
  • lr යනු ඉගෙනුම් අනුපාතයයි α
  • betas (β1​, β2​) ක tuple වේ
  • epsϵ^ හෝ මත ϵ පදනම් වේ optimized_update
  • weight_decay``WeightDecay අර්ථ දක්වා ඇති පන්තියේ අවස්ථාවකි __init__.py
  • optimized_update එකතු කිරීමෙන් පසු එය කිරීමෙන් දෙවන මොහොතේ පක්ෂග්රාහීව නිවැරදි කිරීම ප්රශස්ත කිරීම සඳහා ධජයකි ϵ
  • amsgrad ආදම් සරල කිරීම සඳහා AMSGrad හෝ වැටීම භාවිතා කළ යුතුද යන්න දැක්වෙන ධජයකි
  • degenerate_to_sgd නිවැරදි කිරීමේ පදය rt​ සොයාගත නොහැකි විට sgd භාවිතා කළ යුතුද යන්න
  • rectify RaDam යාවත්කාලීන කිරීම භාවිතා කළ යුතුද යන්න
  • defaults කණ්ඩායම් අගයන් සඳහා පෙරනිමි ශබ්ද කෝෂයකි. ඔබට පන්තිය දීර් extend කිරීමට අවශ්ය විට මෙය ප්රයෝජනවත් AdaBelief වේ.
52def\_\_init\_\_(self,params,lr=1e-3,betas=(0.9,0.999),eps=1e-16,53weight\_decay:WeightDecay=WeightDecay(),amsgrad=False,54degenerate\_to\_sgd=True,55rectify=True,defaults=None):

#

73defaults={}ifdefaultsisNoneelsedefaults74super().\_\_init\_\_(params,lr,betas,eps,weight\_decay,amsgrad,degenerate\_to\_sgd,defaults)75self.rectify=rectify

#

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

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

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

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

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

#

85state['step']=0

#

ඵලයඅනුක්රමික වටිනාකම් ඝාතීය වෙනස්වන සාමාන්යය

87state['exp\_avg']=torch.zeros\_like(param,memory\_format=torch.preserve\_format)

#

විචලතාවයේඝාතීය චලනය වන සාමාන්යය

89state['exp\_avg\_var']=torch.zeros\_like(param,memory\_format=torch.preserve\_format)

#

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

93ifgroup['amsgrad']:

#

සියලුඑක්ස්ප්රස් උපරිම පවත්වාගෙන යයි. ගමන් Avg. වර්ග. ශ්රේණියේ. අගයන්

95state['max\_exp\_avg\_var']=torch.zeros\_like(param,memory\_format=torch.preserve\_format)

#

ගණනයකරන්න mt​ සහ st​ හෝ max(s1​,s2​,...,st−1​,st​)

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

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

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

97defget\_ms(self,state:Dict[str,Any],group:Dict[str,Any],grad:torch.Tensor):

#

ලබා β1​ ගන්න β2​

107beta1,beta2=group['betas']

#

ලබා mt−1​ ගන්න st−1​

110m,s=state['exp\_avg'],state['exp\_avg\_var']

#

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

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

#

ශ්රේණියසහ ගම්යතාව අතර වෙනස

116grad\_residual=grad-m

#

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

119s.mul\_(beta2).addcmul\_(grad\_residual,grad\_residual,value=1-beta2)

#

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

122ifgroup['amsgrad']:

#

ලබාගන්න max(s1​,s2​,...,st−1​).

124s\_max=state['max\_exp\_avg\_var']

#

ගණනයකරන්න max(s1​,s2​,...,st−1​,st​).

126torch.maximum(s\_max,s,out=s\_max)127128returnm,s\_max129else:

#

mt​ සහ st​ වෙනත් ආකාරයකින්

131returnm,s

#

දීඇති පරාමිති ටෙන්සරයක් සඳහා යාවත්කාලීන පියවරක් ගන්න

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

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

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

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

133defstep\_param(self,state:Dict[str,any],group:Dict[str,any],grad:torch.Tensor,param:torch.nn.Parameter):

#

බරක්ෂය වීම ගණනය කරන්න

144grad=self.weight\_decay(param,grad,group)

#

ලබා mt​ ගන්න vt​

147m,s=self.get\_ms(state,group,grad)

#

ප්රශස්තිකරණපියවර ගණන වැඩි t කරන්න

150state['step']+=1151152ifnotself.rectify:

#

ආදම් යාවත්කාලීන කිරීම සිදු කරන්න adam.py, අර්ථ දක්වා st​+ϵ ඇත, වෙනුවට vt​.

155self.adam\_update(state,group,param,m,s+group['eps'])156else:

#

නිවැරදිකරන ලද ආදම් යාවත්කාලීන කිරීම සිදු කරන්න radam.py, වෙනුවට අර්ථ දක්වා vt​ඇත. st​+ϵ

159self.r\_adam\_update(state,group,param,m,s+group['eps'])

Trending Research Paperslabml.ai