Back to Annotated Deep Learning Paper Implementations

ට්රාන්ස්ෆෝමර්40

docs/si/transformers/xl/index.html

latest8.4 KB
Original Source

hometransformersxl

[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/transformers/xl/ init.py)

#

ට්රාන්ස්ෆෝමර්40

මෙය ට්රාන්ස්ෆෝමර්-එක්ස්එල් ක්රියාත්මක කිරීමයි:PyTorch හි ස්ථාවර දිග සන්දර්භයකින් ඔබ්බට අවධානය යොමු කරන භාෂා ආකෘති .

ට්රාන්ස්ෆෝමර්සමාන්තරව පුහුණු කරන ලද අනුක්රමයේ දිගට සමාන සීමිත අවධානයක් ඇත. මෙම සියලු තනතුරු ස්ථාවර ස්ථානීය කේතන ඇත. ට්රාන්ස්ෆෝමර් එක්ස්එල් මෙම අවධානය පරතරය වැඩි කරන්නේ එක් එක් තනතුරු පූර්ව ගණනය කළ අතීත කාවැද්දීම් කෙරෙහි අවධානය යොමු කිරීමට ඉඩ දීමෙනි. නිදසුනක් ලෙස සන්දර්භය දිග නම් l, එය පෙර දිග l කණ්ඩායම සඳහා සියලු ස්ථරවල කාවැද්දීම් තබා ඒවා වර්තමාන පියවරට පෝෂණය කරනු ඇත. අපි ස්ථාවර ස්ථානීය කේතීකරණ භාවිතා කරන්නේ නම් මෙම පූර්ව ගණනය කරන ලද කාවැද්දීම් වර්තමාන සන්දර්භයට සමාන ස්ථාන ඇත. ඔවුන් සාපේක්ෂ ස්ථානීය කේතන ක්රමයක් හඳුන්වා දෙන අතර එහිදී අවධානය ගණනය කිරීමේදී ස්ථානීය කේතීකරණ හඳුන්වා දෙනු ලැබේ.

සාපේක්ෂබහු ශීර්ෂ අවධානය යොමු කිරීම ක්රියාත්මක කිරීම ක්රියාත්මක වේ relative_mha.py.

මෙන්නකුඩා ෂේක්ස්පියර් දත්ත කට්ටලය පිළිබඳ ට්රාන්ස්ෆෝමර් එක්ස්එල් ආකෘතියක් පුහුණු කිරීම සඳහා පුහුණු කේතය සහ සටහන් පොතක්.

36fromtypingimportList,Optional3738importtorch39importtorch.nnasnn4041fromlabml\_helpers.moduleimportModule42fromlabml\_nn.utilsimportclone\_module\_list43from.relative\_mhaimportRelativeMultiHeadAttention44from..feed\_forwardimportFeedForward

#

XLස්ථරය ට්රාන්ස්ෆෝමර්

ට්රාන්ස්ෆෝමර්එක්ස්එල් ආකෘතිය මෙම ස්ථර ගණනාවකින් සමන්විත වේ.

47classTransformerXLLayer(Module):

#

  • d_model ටෝකනය කාවැද්දීමේ ප්රමාණයයි
  • self_attnස්වයං අවධානය මොඩියුලය
  • feed_forward යනු ආහාර ඉදිරි මොඩියුලයයි
  • dropout_prob ස්වයං අවධානයෙන් පසු ඉවත් වීමේ සම්භාවිතාව සහ FFN
53def\_\_init\_\_(self,\*,54d\_model:int,55self\_attn:RelativeMultiHeadAttention,56feed\_forward:FeedForward,57dropout\_prob:float):

#

64super().\_\_init\_\_()65self.size=d\_model66self.self\_attn=self\_attn67self.feed\_forward=feed\_forward68self.dropout=nn.Dropout(dropout\_prob)69self.norm\_self\_attn=nn.LayerNorm([d\_model])70self.norm\_ff=nn.LayerNorm([d\_model])

#

  • x ටෝකන් මට්ටමේ ලක්ෂණය හැඩය දෛශික ක tensor වේ [seq_len, batch_size, d_model]
  • mem යනු අතීත ටෝකන් මට්ටමේ විශේෂාංගයේ හැඩයේ දෛශිකවල ටෙන්සරයකි [mem_len, batch_size, d_model]
  • mask යනු හැඩයේ අනුකෘතියක් [seq_len, mem_len + seq_len, batch_size] හෝ [seq_len, mem_len + seq_len, 1] . mask[i, j] ටෝකන් වලට ටෝකනය දැකිය i හැකි නම් j සත්යයකි.
72defforward(self,\*,73x:torch.Tensor,74mem:Optional[torch.Tensor],75mask:torch.Tensor):

#

ස්වයංඅවධානය යොමු කිරීමට පෙර දෛශික සාමාන්යකරණය කරන්න

83z=self.norm\_self\_attn(x)

#

මතකයක්තිබේ නම්

85ifmemisnotNone:

#

එයසාමාන්යකරණය කරන්න

87mem=self.norm\_self\_attn(mem)

#

සමඟඑකඟ වන්න z

89m\_z=torch.cat((mem,z),dim=0)

#

මතකයක්නොමැති නම් නොසලකා හරින්න

91else:92m\_z=z

#

අවධානය

94self\_attn=self.self\_attn(query=z,key=m\_z,value=m\_z,mask=mask)

#

අවධානයයොමු ප්රතිඵල එකතු කරන්න

96x=x+self.dropout(self\_attn)

#

පෝෂණයසඳහා සාමාන්යකරණය කරන්න

99z=self.norm\_ff(x)

#

Feed-forwardජාලය හරහා ගමන් කරන්න

101ff=self.feed\_forward(z)

#

ප්රතිපෝෂණඉදිරි ප්රති results ල නැවත එක් කරන්න

103x=x+self.dropout(ff)

#

106returnx

#

ට්රාන්ස්ෆෝමර්XL ආකෘතිය

මෙයබහු ට්රාන්ස්ෆෝමර් එක්ස්එල් ස්ථර වලින් සමන්විත වේ

109classTransformerXL(Module):

#

116def\_\_init\_\_(self,layer:TransformerXLLayer,n\_layers:int):117super().\_\_init\_\_()

#

ට්රාන්ස්ෆෝමර්ස්ථරයේ පිටපත් සාදන්න

119self.layers=clone\_module\_list(layer,n\_layers)

#

අවසානසාමාන්යකරණ ස්තරය

121self.norm=nn.LayerNorm([layer.size])

#

  • x යනු හැඩයේ ටෝකන් කාවැද්දීමේ දෛශිකවල ආතකයකි [seq_len, batch_size, d_model]
  • mem යනු එක් එක් ස්තරය [mem_len, batch_size, d_model] සඳහා හැඩයේ දෛශික අතීත ටෝකන් මට්ටමේ ආතති ලැයිස්තුවකි
  • mask ආවරණ අනුකෘතිය වේ
123defforward(self,x:torch.Tensor,mem:List[torch.Tensor],mask:torch.Tensor):

#

ටෝකන්මට්ටමේ විශේෂාංග දෛශික ගබඩා කිරීම සඳහා ලැයිස්තු ගත කරන්න, එය ඊළඟ අනුක්රමික කණ්ඩායම සඳහා මතකයන් බවට පත්වනු ඇත.

132new\_mem=[]

#

එක්එක් ට්රාන්ස්ෆෝමර් ස්ථරය හරහා ධාවනය කරන්න

134fori,layerinenumerate(self.layers):

#

විශේෂාංගදෛශික ලැයිස්තුවට එක් කරන්න

136new\_mem.append(x.detach())

#

මතකය

138m=mem[i]ifmemelseNone

#

ට්රාන්ස්ෆෝමර්XL ස්තරය හරහා ධාවනය කරන්න

140x=layer(x=x,mem=m,mask=mask)

#

අවසානවශයෙන්, දෛශික සාමාන්යකරණය කරන්න

142returnself.norm(x),new\_mem

Trending Research Paperslabml.ai