docs/si/optimizers/ada_belief.html
මෙයපදනම් වී ඇත්තේ AadaBelief කඩදාසි නිල වශයෙන් ක්රියාත්මක කිරීමෙනි AadaBelief Optimizer: නිරීක්ෂණය කරන ලද ශ්රේණියේ විශ්වාසය අනුව පියවර අනුවර්තනය කිරීම .
මෙය RADAM හි දිගුවක් ලෙස PyTorch හි ක්රියාත්මක වේ.
ආදම්ප්රශස්තකරණය සහ ඇඩබලිෆ් අතර ඇති ප්රධාන වෙනස නම්, එය අනුවර්තී ඉගෙනුම් අනුපාතය ගණනය කරන්නේ කෙසේද යන්නයි; අනුක්රමික වර්ග වල on ාතීය චලනය වන සාමාන්යයෙන් බෙදීම වෙනුවට, ඇඩබීලීෆ් විචලනය වන on ාතීය මධ්යන්යයෙන් බෙදේ.
mtstm^ts^tθt←β1mt−1+(1−β1)⋅gt←β2st−1+(1−β2)⋅(gt−mt)2←1−β1tmt←1−β2tst+ϵ←θt−1−α⋅s^t+ϵm^t
🤔කඩදාසි විචලතාව ගණනය කරයි (gt−mt)2, නමුත් එය නැඹුරුව නිවැරදි කළ ගම්යතාව භාවිතා කළ යුතු යැයි මට හැඟේ (gt−m^t)2. නැඹුරුව නිවැරදි කිරීම මූලික පුහුණු පියවරවලින් ≈1 පසුව වන බැවින් මෙය බොහෝ දේට බලපාන්නේ නැතැයි මම සිතමි.
36fromtypingimportDict,Any3738importtorch39fromtorchimportnn4041fromlabml\_nn.optimizersimportWeightDecay42fromlabml\_nn.optimizers.radamimportRAdam
මෙමපන්තිය අර්ථ දක්වා ඇති RadAM ප්රශස්තකරණයෙන් විහිදේ radam.py.
45classAdaBelief(RAdam):
params යනු පරාමිතීන් ලැයිස්තුවයිlr යනු ඉගෙනුම් අනුපාතයයි αbetas (β1, β2) ක tuple වේepsϵ^ හෝ මත ϵ පදනම් වේ optimized_updateweight_decay``WeightDecay අර්ථ දක්වා ඇති පන්තියේ අවස්ථාවකි __init__.pyoptimized_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)
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←β1mt−1+(1−β1)⋅gt
114m.mul\_(beta1).add\_(grad,alpha=1-beta1)
ශ්රේණියසහ ගම්යතාව අතර වෙනස
116grad\_residual=grad-m
ස්ථානයෙහිගණනය කිරීම st st←β2st−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'])