මෙයඅ PyTorch කඩදාසි ක්රියාත්මක කිරීම ආදම් සහ ඉන් ඔබ්බට අභිසාරී වීම .
අපගේ ආදම් ප්රශස්තිකරණ ක්රියාත්මක කිරීමේ දිගුවක් ලෙස අපි මෙය ක්රියාත්මකකරමු. එය ක්රියාත්මක කිරීම ආදම්ට බෙහෙවින් සමාන බැවින් එය ස්වයංක්රීයව ක්රියාත්මක කිරීම ඇත්තෙන්ම කුඩා වේ.
ආදම්අභිසාරී වීමට අපොහොසත් වන කඩදාසි වල විස්තර කර ඇති කෘතිම උදාහරණය ක්රියාත්මක කිරීමක් ද අප සතුව ඇත.
18from typing import Dict
19
20import torch
21from torch import nn
22
23from labml_nn.optimizers import WeightDecay
24from labml_nn.optimizers.adam import Adamමෙමපන්තිය අර්ථ දක්වා ඇති ආදම් ප්රශස්තකරණයෙන් විහිදේ adam.py
. ආදම් ප්රශස්තකරණය GenericAdaptiveOptimizer
 අර්ථ දක්වා ඇති පන්තිය දීර් ing __init__.py
කරයි. 
27class AMSGrad(Adam):params
 යනු පරාමිතීන් ලැයිස්තුවයි lr
 යනු ඉගෙනුම් අනුපාතයයි  betas
 (, ) ක tuple වේ eps
  හෝ මත  පදනම් වේ optimized_update
 weight_decay
 WeightDecay
 අර්ථ දක්වා ඇති පන්තියේ අවස්ථාවකි __init__.py
 amsgrad
 ආදම් සරල කිරීම සඳහා AMSGrad හෝ වැටීම භාවිතා කළ යුතුද යන්න දැක්වෙන ධජයකි defaults
 කණ්ඩායම් අගයන් සඳහා පෙරනිමි ශබ්ද කෝෂයකි. ඔබට පන්තිය දීර් extend කිරීමට අවශ්ය විට මෙය ප්රයෝජනවත් Adam
වේ. 35    def __init__(self, params, lr=1e-3, betas=(0.9, 0.999), eps=1e-16,
36                 weight_decay: WeightDecay = WeightDecay(),
37                 optimized_update: bool = True,
38                 amsgrad=True, defaults=None):53        defaults = {} if defaults is None else defaults
54        defaults.update(dict(amsgrad=amsgrad))
55
56        super().__init__(params, lr, betas, eps, weight_decay, optimized_update, defaults)state
 පරාමිතිය ප්රශස්තකරණය රාජ්ය වේ (tensor) group
 පරාමිති කණ්ඩායමේ ප්රශස්තිකරණ ගුණාංග ගබඩා කරයි param
 පරාමිතිය tensor වේ 58    def init_state(self, state: Dict[str, any], group: Dict[str, any], param: nn.Parameter):අපවිස්තාරණය කරන ආදම් ප්රශස්තිකරණයේ init_state
 ඇමතුම 
68        super().init_state(state, group, param)amsgrad
 ධජය මෙම පරාමිතිය පිරිසක් True
 සඳහා නම්, අපි වර්ග ඵලය අනුක්රමික ක ඝාතීය වෙනස්වන සාමාන්ය උපරිම පවත්වා 
72        if group['amsgrad']:
73            state['max_exp_avg_sq'] = torch.zeros_like(param, memory_format=torch.preserve_format)state
 පරාමිතිය ප්රශස්තකරණය රාජ්ය වේ (tensor) group
 පරාමිති කණ්ඩායමේ ප්රශස්තිකරණ ගුණාංග ගබඩා කරයි grad
 පරාමිතිය  සඳහා වත්මන් ඵලය අනුක්රමික tensor වේ 75    def get_mv(self, state: Dict[str, any], group: Dict[str, any], grad: torch.Tensor):ආදම්ගෙන් සහ ලබා ගන්න
85        m, v = super().get_mv(state, group, grad)මෙමපරාමිති කණ්ඩායම භාවිතා කරන්නේ නම් amsgrad
 
88        if group['amsgrad']:ලබාගන්න .
🗒කඩදාසි මේ සඳහා අංකනය භාවිතා කරයි, එය නැඹුරුව නිවැරදි ඝාතීය වෙනස්වන සාමාන්යය සඳහා එම අංකනය ආදම්ගේ භාවිතය සමග පටලවා නිසා අපි මෙතන බව භාවිතා කරන්නේ නැහැ.
94            v_max = state['max_exp_avg_sq']ගණනයකරන්න .
🤔මම ඔබ වර්ග ඵලය අනුක්රමික දෙවන ඝාතීය සාමාන්ය නිවැරදි නැඹුරුව උපරිම ගැනීම/පවත්වා ගත යුතු දැනෙනවා. නමුත් එය PyTorch හි ද ක්රියාත්මක වන්නේ එලෙසිනි. පක්ෂග්රාහී නිවැරදි කිරීම පමණක් වටිනාකම වැඩි කරන අතර එය සැබෑ වෙනසක් කරන්නේ පුහුණුවේ මුල් පියවර කිහිපය තුළ පමණක් බැවින් එය සැබවින්ම වැදගත් නොවන බව මම සිතමි.
103            torch.maximum(v_max, v, out=v_max)
104
105            return m, v_max
106        else:පරාමිතිකණ්ඩායම භාවිතා නොකරන්නේ නම් ආදම් වෙත ආපසු යන්න amsgrad
 
108            return m, vකඩදාසිවල විස්තර කර ඇති කෘතිම අත්හදා බැලීම මෙයයි, එය ආදම් අසමත් වන අවස්ථාවක් පෙන්වයි.
කඩදාසි(සහ ආදම්) පරාමිතීන් සම්බන්ධයෙන් ශ්රිතයක අපේක්ෂිත අගය අවම කිරීම ලෙස ප්රශස්තිකරණය කිරීමේ ගැටළුව සකස් කරයි . ස්ථිතික පුහුණු සැකසුම තුළ අපට එය ස්වයංක්රීයව ක්රියාත්මක නොවේ; එනම්, ඔබ එන්එන් ප්රශස්තිකරණය කරන විට සමස්ත දත්ත කාණ්ඩයේම ක්රියාකාරිත්වය වනු ඇත. අප ඇත්ත වශයෙන්ම ඇගයීමට ලක් කරන්නේ කුඩා කණ්ඩායමකි, එබැවින් සැබෑ කාර්යය වන්නේ ස්ටෝචාස්ටික් සාක්ෂාත් කර ගැනීමයි. මේ නිසා අපි කතා කරන්නේ අපේක්ෂිත වටිනාකමක් ගැන ය. එබැවින් පුහුණුවීමේ එක් එක් කාල පියවර සඳහා ශ්රිතය අවබෝධ කර ගැනීම ඉඩ දෙන්න.
අපිප්රශස්තිකරණයේ ක්රියාකාරිත්වය කනගාටුව ලෙස මනින්නෙමු, කාල පියවරේදී පරාමිතීන් කොතැනද , සහ ප්රශස්ත වේ අවම කරන පරාමිතීන් .
දැන්කෘතිම ගැටළුව නිර්වචනය කිරීමට ඉඩ දෙයි,
කොහෙද . ප්රශස්ත විසඳුම වේ .
මෙමකේතය මෙම ගැටලුව මත ආදම් සහ AMSGrad ධාවනය කිරීමට උත්සාහ කරනු ඇත.
111def _synthetic_experiment(is_adam: bool):පරාමිතිය නිර්වචනය
153    x = nn.Parameter(torch.tensor([.0]))ප්රශස්ත,
155    x_star = nn.Parameter(torch.tensor([-1]), requires_grad=False)157    def func(t: int, x_: nn.Parameter):161        if t % 101 == 1:
162            return (1010 * x_).sum()
163        else:
164            return (-10 * x_).sum()අදාළප්රශස්තකරණය ආරම්භ කරන්න
167    if is_adam:
168        optimizer = Adam([x], lr=1e-2, betas=(0.9, 0.99))
169    else:
170        optimizer = AMSGrad([x], lr=1e-2, betas=(0.9, 0.99))172    total_regret = 0
173
174    from labml import monit, tracker, experimentප්රතිඵලවාර්තා කිරීමට අත්හදා නිර්මාණය
177    with experiment.record(name='synthetic', comment='Adam' if is_adam else 'AMSGrad'):පියවර සඳහා ධාවනය කරන්න
179        for step in monit.loop(10_000_000):181            regret = func(step, x) - func(step, x_star)183            total_regret += regret.item()සෑමපියවර 1,000 කට වරක් ප්රති results ල
185            if (step + 1) % 1000 == 0:
186                tracker.save(loss=regret, x=x, regret=total_regret / (step + 1))අනුක්රමිකගණනය කරන්න
188            regret.backward()ප්රශස්තකරන්න
190            optimizer.step()අනුක්රමිකපැහැදිලි කරන්න
192            optimizer.zero_grad()වගබලා ගන්න
195            x.data.clamp_(-1., +1.)
196
197
198if __name__ == '__main__':කෘතිමඅත්හදා බැලීම ක්රියාත්මක කරන්න ආදම්. මෙන්න ප්රතිඵල. ආදම් අභිසාරී වන බව ඔබට පෙනේ
202    _synthetic_experiment(True)කෘතිමඅත්හදා බැලීම ක්රියාත්මක කරන්න AMSGrad මෙන්න ප්රති. ල. AMSGrad සැබෑ ප්රශස්ත බවට අභිසාරී වන බව ඔබට දැක ගත හැකිය
206    _synthetic_experiment(False)