Back to Annotated Deep Learning Paper Implementations

ගැඹුරු සම්මතය

docs/si/normalization/deep_norm/index.html

latest9.6 KB
Original Source

homenormalizationdeep_norm

[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-Dec​Enc-α(2N)41​−0.81(N4M)161​​Enc-β(8N)−41​−0.87(N4M)−161​​Dec-α−(2M)41​(3M)41​​Dec-β−(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 ස්ථර නෝම් සඳහා හැඩයයි LN
  • eps ස්ථර නෝම් ϵ සඳහා වේ
  • 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

Trending Research Paperslabml.ai