මෙය ඩීප්නෙට් කඩදාසි වලින් ඩීප් නෝම් හි පයිටෝච් ක්රියාත්මක කිරීම: ට්රාන්ස්ෆෝමර් 1,000 ස්ථර දක්වා පරිමාණය කිරීම.
ලේයර් නෝම් සහ බර ආරම්භ කිරීමේ යෝජනා ක්රමය ප්රතිස්ථාපනය කිරීම සඳහා නව සාමාන්යකරණ ශ්රිතයක් හරහා අතිශය ගැඹුරු ට්රාන්ස්ෆෝමර් ස්ථාවර කිරීමේ ක්රමයක් කඩදාසි යෝජනා කරයි. මෙය පශ්චාත්-ස්ථර සම්මතයේ ක්රියාකාරිත්වය සහ පූර්ව ස්ථර සම්මතයේ ස්ථායිතාව ඒකාබද්ධ කරයි. DeepNorms සමඟ ට්රාන්ස්ෆෝමර් ඉගෙනීමේ අනුපාතයක් නොමැතිව පවා ස්ථාවර විය යුතුය.
කඩදාසි පළමු ස්ථරය ප්රතිදානයන් වෙනස්කම් (එම ආදාන සඳහා) ස්ථාවර පුහුණු තුළ ක්රමයෙන් වෙනස් බව පෙන්නුම්; අස්ථාවර විට එය මූලික පුහුණු පියවර තුළ වේගයෙන් වෙනස් වේ. මෙය සිදුවන්නේ කුඩා අගයන් සඳහා බර ආරම්භ කිරීම සහ පුහුණුව ස්ථාවර වන ඉගෙනුම් අනුපාතය උණුසුම්-ඉහළ යාමයි. නව සාමාන්යකරණය සහ බර ආරම්භ කිරීමේ යාන්ත්රණය ව්යුත්පන්න කිරීම සඳහා ස්ථර ප්රතිදානවල වෙනස්කම් කුඩා කර තබා ගැනීමේ අදහස ඔවුන් භාවිතා කරයි.
සාමාන්යයෙන්, බර ආරම්භ කරනු ලබන්නේ සේවියර් හෝ කයිමිං මුලපිරීම් සමඟ ය. මෙම කඩදාසි පරිමාණයන් (වාසි සකසයි) ට්රාන්ස්ෆෝමර් ප්රමාණය අනුව නියත විසින් බර.
DeepNorm යෝජනා කරන්නේ Feed-Forward ජාලයේ රේඛීය පරිවර්තන දෙකෙහි බර පරිමාණය කිරීම, අගය ප්රක්ෂේපණ පරිවර්තනය කිරීම සහ ප්රතිදාන ප්රක්ෂේපණය අවධානය ස්ථරයේ පරිවර්තනය කිරීමයි. මෙම පරිවර්තනයේ බර පරිමාණය කර ඇත (සමාන වාසියක් ඇත).
පරිමාණය ක්රියාත්මක වේ
ට්රාන්ස්ෆෝමරයේ ගැඹුර මත රඳා පවතින නියතයක් යනු ස්ථර සාමාන්යකරණය වන අතර එය -th ට්රාන්ස්ෆෝමර් උප-ස්ථරයේ (FFN හෝ අවධානය) වේ.
මෙම ශ්රිතය පශ්චාත්-ස්ථර නියමය ප්රතිස්ථාපනය කිරීමට භාවිතා කරයි.
එන්කෝඩරයේ ස්ථර ගණන කොතැනද සහ විකේතකයේ ස්ථර ගණන වේ.
ව්යුත්පන්න කිරීම සඳහා කඩදාසි වෙත යොමු වන්න.
DeepNorm භාවිතා කරන අත්හදා බැලීමේ ක්රියාත්මක කිරීමක් මෙන්න.
73from typing import Union, List
74
75import torch
76from torch import nn, Size
77
78from labml_nn.normalization.layer_norm import LayerNorm
79from labml_nn.transformers import MultiHeadAttention
80from labml_nn.transformers.feed_forward import FeedForward
81from labml_nn.transformers.utils import subsequent_mask84class DeepNorm(nn.Module):alpha
වේ normalized_shape
ස්ථර නෝම් සඳහා හැඩයයි eps
ස්ථර නෝම් සඳහා වේ elementwise_affine
LayerNorm හි මූලික පරිවර්තනයක් කළ යුතුද යන්න දැක්වෙන ධජයකි91 def __init__(self, alpha: float, normalized_shape: Union[int, List[int], Size], *,
92 eps: float = 1e-5,
93 elementwise_affine: bool = True):100 super().__init__()
101
102 self.alpha = alphaආරම්භකරන්න
104 self.layer_norm = LayerNorm(normalized_shape, eps=eps, elementwise_affine=elementwise_affine)106 def forward(self, x: torch.Tensor, gx: torch.Tensor):112 return self.layer_norm(x + self.alpha * gx)මෙයDeepNorm සමඟ ට්රාන්ස්ෆෝමර් විකේතක ස්ථරයක් ක්රියාත්මක කරයි. එන්කෝඩර් ස්ථර වලට සමාන ස්වරූපයක් ඇත.
115class DeepNormTransformerLayer(nn.Module):d_model
ටෝකනය කාවැද්දීමේ ප්රමාණයයි self_attn
ස්වයං අවධානය මොඩියුලය feed_forward
යනු ආහාර ඉදිරි මොඩියුලයයි deep_norm_alpha
DeepNorm හි සංගුණකය deep_norm_beta
බර ආරම්භ කිරීම පරිමාණය කිරීම සඳහා නියත වේ122 def __init__(self, *,
123 d_model: int,
124 self_attn: MultiHeadAttention,
125 feed_forward: FeedForward,
126 deep_norm_alpha: float,
127 deep_norm_beta: float,
128 ):136 super().__init__()
137
138 self.self_attn = self_attn
139 self.feed_forward = feed_forwardඅවධානයෙන්පසු DeepNorms සහ ඉදිරි ජාලය පෝෂණය කරන්න
141 self.self_attn_norm = DeepNorm(deep_norm_alpha, [d_model])
142 self.feed_forward_norm = DeepNorm(deep_norm_alpha, [d_model])ආරම්භයෙන්පසු පරිමාණ බර
145 with torch.no_grad():ජාලරේඛීය පරිවර්තනයන් ඉදිරියට පෝෂණය කරන්න
147 feed_forward.layer1.weight *= deep_norm_beta
148 feed_forward.layer2.weight *= deep_norm_betaඅවධානයඅගය ප්රක්ෂේපනය
151 self_attn.value.linear.weight *= deep_norm_betaඅවධානයයොමු ප්රතිදානය ව්යාපෘතිය
153 self_attn.output.weight *= deep_norm_betaපළමුඇමතුමෙන් වෙස්මුහුණ ආරම්භ කරනු ඇත
156 self.mask = Nonex
හැඩයේ කාවැද්දීම් වේ [seq_len, batch_size, d_model]
158 def forward(self, x: torch.Tensor):හේතුවෙස්මුහුණක් සාදන්න
163 if self.mask is None or self.mask.size(0) != len(x):පසුකාලීනවෙස්මුහුණ, අනාගත ටෝකන දැකීමෙන් ටෝකන වසං කරනු ඇත
165 self.mask = subsequent_mask(len(x)).to(x.device)ස්වයංඅවධානය හරහා ධාවනය කරන්න, i.e. යතුරු සහ වටිනාකම් ස්වයං සිට
168 x = self.self_attn_norm(x, self.self_attn(query=x, key=x, value=x, mask=self.mask))Feed-forwardජාලය හරහා ගමන් කරන්න
170 x = self.feed_forward_norm(x, self.feed_forward(x))173 return x