docs/si/normalization/deep_norm/index.html
[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/normalization/deep_norm/ init.py)
මෙය ඩීප්නෙට් කඩදාසි වලින් ඩීප් නෝම් හිපයිටෝච් ක්රියාත්මක කිරීම: ට්රාන්ස්ෆෝමර් 1,000 ස්ථර දක්වා පරිමාණය කිරීම.
ලේයර් නෝම් සහ බර ආරම්භ කිරීමේ යෝජනා ක්රමය ප්රතිස්ථාපනය කිරීම සඳහා නව සාමාන්යකරණ ශ්රිතයක් හරහා අතිශය ගැඹුරු ට්රාන්ස්ෆෝමර් ස්ථාවර කිරීමේ ක්රමයක් කඩදාසි යෝජනා කරයි. මෙය පශ්චාත්-ස්ථර සම්මතයේ ක්රියාකාරිත්වය සහ පූර්ව ස්ථර සම්මතයේ ස්ථායිතාව ඒකාබද්ධ කරයි. DeepNorms සමඟ ට්රාන්ස්ෆෝමර් ඉගෙනීමේ අනුපාතයක් නොමැතිව පවා ස්ථාවර විය යුතුය.
කඩදාසි පළමු ස්ථරය ප්රතිදානයන් වෙනස්කම් (එම ආදාන සඳහා) ස්ථාවර පුහුණු තුළ ක්රමයෙන් වෙනස් බව පෙන්නුම්; අස්ථාවර විට එය මූලික පුහුණු පියවර තුළ වේගයෙන් වෙනස් වේ. මෙය සිදුවන්නේ කුඩා අගයන් සඳහා බර ආරම්භ කිරීම සහ පුහුණුව ස්ථාවර වන ඉගෙනුම් අනුපාතය උණුසුම්-ඉහළ යාමයි. නව සාමාන්යකරණය සහ බර ආරම්භ කිරීමේ යාන්ත්රණය ව්යුත්පන්න කිරීම සඳහා ස්ථර ප්රතිදානවල වෙනස්කම් කුඩා කර තබා ගැනීමේ අදහස ඔවුන් භාවිතා කරයි.
සාමාන්යයෙන්, බර ආරම්භ කරනු ලබන්නේ සේවියර් හෝ කයිමිං මුලපිරීම් සමඟ ය. මෙම කඩදාසි පරිමාණයන් (වාසි සකසයි) ට්රාන්ස්ෆෝමර් ප්රමාණයβ අනුව නියත විසින් බර.
DeepNorm යෝජනා කරන්නේ Feed-Forward ජාලයේ රේඛීය පරිවර්තන දෙකෙහි බර පරිමාණය කිරීම, අගය ප්රක්ෂේපණ පරිවර්තනය කිරීම සහ ප්රතිදාන ප්රක්ෂේපණය අවධානය ස්ථරයේ පරිවර්තනය කිරීමයි. මෙම පරිවර්තනයේ බර පරිමාණය කර ඇත (සමාන වාසියක්β ඇත).
පරිමාණය ක්රියාත්මක වේ
xl+1=LN(αxl+Gl(xl,θl))
ට්රාන්ස්ෆෝමරයේ ගැඹුර මත රඳා පවතින නියතයක්αLN යනු ස්ථර සාමාන්යකරණය වන අතරGl(xl,θl) එයl -th ට්රාන්ස්ෆෝමර් උප-ස්ථරයේ (FFN හෝ අවධානය) වේ.
මෙම ශ්රිතය පශ්චාත්-ස්ථර නියමය ප්රතිස්ථාපනය කිරීමට භාවිතා කරයි.
TypeEncoder onlyDecoder onlyEnc-DecEnc-α(2N)41−0.81(N4M)161Enc-β(8N)−41−0.87(N4M)−161Dec-α−(2M)41(3M)41Dec-β−(8M)−41(12M)−41
එන්කෝඩරයේ ස්ථර ගණනN කොතැනද සහM විකේතකයේ ස්ථර ගණන වේ.
ව්යුත්පන්න කිරීම සඳහා කඩදාසි වෙත යොමු වන්න.
DeepNorm භාවිතා කරන අත්හදා බැලීමේ ක්රියාත්මක කිරීමක් මෙන්න.
73fromtypingimportUnion,List7475importtorch76fromtorchimportnn,Size7778fromlabml\_nn.normalization.layer\_normimportLayerNorm79fromlabml\_nn.transformersimportMultiHeadAttention80fromlabml\_nn.transformers.feed\_forwardimportFeedForward81fromlabml\_nn.transformers.utilsimportsubsequent\_mask
xl+1=LN(αxl+Gl(xl,θl))
84classDeepNorm(nn.Module):
alpha වේ αnormalized_shape ස්ථර නෝම් සඳහා හැඩයයි LNeps ස්ථර නෝම් ϵ සඳහා වේelementwise_affine LayerNorm හි මූලික පරිවර්තනයක් කළ යුතුද යන්න දැක්වෙන ධජයකි91def\_\_init\_\_(self,alpha:float,normalized\_shape:Union[int,List[int],Size],\*,92eps:float=1e-5,93elementwise\_affine:bool=True):
100super().\_\_init\_\_()101102self.alpha=alpha
ආරම්භකරන්න LN
104self.layer\_norm=LayerNorm(normalized\_shape,eps=eps,elementwise\_affine=elementwise\_affine)
x පෙර ස්ථරයෙන් ප්රතිදානය වේ xl
gx වත්මන් උප ස්ථරයේ ප්රතිදානය වේ Gl(xl,θl)
106defforward(self,x:torch.Tensor,gx:torch.Tensor):
xl+1=LN(αxl+Gl(xl,θl))
112returnself.layer\_norm(x+self.alpha\*gx)
මෙයDeepNorm සමඟ ට්රාන්ස්ෆෝමර් විකේතක ස්ථරයක් ක්රියාත්මක කරයි. එන්කෝඩර් ස්ථර වලට සමාන ස්වරූපයක් ඇත.
115classDeepNormTransformerLayer(nn.Module):
d_model ටෝකනය කාවැද්දීමේ ප්රමාණයයිself_attn ස්වයං අවධානය මොඩියුලයfeed_forward යනු ආහාර ඉදිරි මොඩියුලයයිdeep_norm_alpha DeepNorm හි α සංගුණකයdeep_norm_beta බර ආරම්භ කිරීම පරිමාණය කිරීම සඳහා β නියත වේ122def\_\_init\_\_(self,\*,123d\_model:int,124self\_attn:MultiHeadAttention,125feed\_forward:FeedForward,126deep\_norm\_alpha:float,127deep\_norm\_beta:float,128):
136super().\_\_init\_\_()137138self.self\_attn=self\_attn139self.feed\_forward=feed\_forward
අවධානයෙන්පසු DeepNorms සහ ඉදිරි ජාලය පෝෂණය කරන්න
141self.self\_attn\_norm=DeepNorm(deep\_norm\_alpha,[d\_model])142self.feed\_forward\_norm=DeepNorm(deep\_norm\_alpha,[d\_model])
ආරම්භයෙන්පසු පරිමාණ බර
145withtorch.no\_grad():
ජාලරේඛීය පරිවර්තනයන් ඉදිරියට පෝෂණය කරන්න
147feed\_forward.layer1.weight\*=deep\_norm\_beta148feed\_forward.layer2.weight\*=deep\_norm\_beta
අවධානයඅගය ප්රක්ෂේපනය
151self\_attn.value.linear.weight\*=deep\_norm\_beta
අවධානයයොමු ප්රතිදානය ව්යාපෘතිය
153self\_attn.output.weight\*=deep\_norm\_beta
පළමුඇමතුමෙන් වෙස්මුහුණ ආරම්භ කරනු ඇත
156self.mask=None
x හැඩයේ කාවැද්දීම් වේ [seq_len, batch_size, d_model]158defforward(self,x:torch.Tensor):
හේතුවෙස්මුහුණක් සාදන්න
163ifself.maskisNoneorself.mask.size(0)!=len(x):
පසුකාලීනවෙස්මුහුණ, අනාගත ටෝකන දැකීමෙන් ටෝකන වසං කරනු ඇත
165self.mask=subsequent\_mask(len(x)).to(x.device)
ස්වයංඅවධානය හරහා ධාවනය කරන්න, i.e. යතුරු සහ වටිනාකම් ස්වයං සිට
168x=self.self\_attn\_norm(x,self.self\_attn(query=x,key=x,value=x,mask=self.mask))
Feed-forwardජාලය හරහා ගමන් කරන්න
170x=self.feed\_forward\_norm(x,self.feed\_forward(x))
173returnx