Back to Annotated Deep Learning Paper Implementations

MLPs(GMLP) වෙත අවධානය යොමු කරන්න

docs/si/transformers/gmlp/index.html

latest9.2 KB
Original Source

hometransformersgmlp

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

#

MLPs(GMLP) වෙත අවධානය යොමු කරන්න

මෙය PyTorch කඩදාසි ක්රියාත්මක කිරීම MLPs වෙත අවධානය යොමු කරන්න .

මෙමලිපිය බහු ස්ථර පර්සෙප්ට්රෝන් (එම්එල්පී) පදනම් කරගත් ගෘහ නිර්මාණ ශිල්පයක් ගේටින් සමඟ හඳුන්වා දෙන අතර ඒවා ජීඑම්එල්පී ලෙස නම් කරයි. එය L GMLP කුට්ටි තොගයකින් සමන්විත වේ.

GMLPආකෘතිය මත පදනම් වූ ස්වයංක්රීය ප්රතිගාමී ආකෘතියක් සඳහා පුහුණු කේතය මෙන්න.

21fromtypingimportOptional2223importtorch24fromtorchimportnn

#

ජීඑම්එල්පීබ්ලොක්

සෑමබ්ලොක් එකක්ම ආදාන X∈Rn×d කාවැද්දීම් සඳහා පහත දැක්වෙන පරිවර්තනයන් සිදු කරයි අනුක්රමික දිග සහ කාවැද්දීම් වල මානයන් d වේ: n

ZZY​=σ(XU)=s(Z)=ZV​

ඉගෙන U ගත හැකි ප්රක්ෂේපණ බර කොහේද V සහ ඇත. s(⋅) පහත අර්ථ දක්වා ඇති අභ්යවකාශ ගේටින් ඒකකය වේ. නිමැවුම් මානයන් අඩක් s(⋅) වනු ඇත Z. σ GeLuවැනි සක්රිය කිරීමේ කාර්යයකි.

27classGMLPBlock(nn.Module):

#

  • d_model යනු මානයන් (d) X
  • d_ffn හි මානයන් වේ Z
  • seq_len ටෝකන් අනුක්රමයේ දිග (n)
48def\_\_init\_\_(self,d\_model:int,d\_ffn:int,seq\_len:int):

#

54super().\_\_init\_\_()

#

පෙර-වැඩෙන්නේසිට සාමාන්යකරණය ස්ථරය

56self.norm=nn.LayerNorm([d\_model])

#

සක්රියකිරීමේ කාර්යය σ

58self.activation=nn.GELU()

#

සඳහාප්රක්ෂේපනය ස්ථරය Z=σ(XU)

60self.proj1=nn.Linear(d\_model,d\_ffn)

#

අභ්යවකාශගේටින් ඒකකය s(⋅)

62self.sgu=SpacialGatingUnit(d\_ffn,seq\_len)

#

සඳහාප්රක්ෂේපනය ස්ථරය Y=Z~V

64self.proj2=nn.Linear(d\_ffn//2,d\_model)

#

කාවැද්දීමේප්රමාණය ( එන්කෝඩරයඅවශ්ය වේ. අපි ට්රාන්ස්ෆෝමර් ගෘහ නිර්මාණ ශිල්පයෙන් එන්කෝඩර් මොඩියුලය භාවිතා කරන අතර ට්රාන්ස්ෆෝමර් ස්ථරයවෙනුවට ආදේශකයක් ලෙස ජීඑම්එල්පී බ්ලොක් ප්ලග් කරමු.

68self.size=d\_model

#

  • x හැඩයේ ආදාන කාවැද්දීම X වේ [seq_len, batch_size, d_model]
  • mask යනු එකිනෙකා අතර ටෝකන වල දෘශ්යතාව පාලනය [seq_len, seq_len, 1] කරන හැඩයේ බූලියන් වෙස් මුහුණකි.
70defforward(self,\*,x:torch.Tensor,mask:Optional[torch.Tensor]=None):

#

කෙටිමංසම්බන්ධතාවය සඳහා පිටපතක් තබා ගන්න

77shortcut=x

#

සාමාන්‍යකරන්න X

79x=self.norm(x)

#

ප්රක්ෂේපණයසහ සක්රිය කිරීම Z=σ(XU)

81z=self.activation(self.proj1(x))

#

අභ්යවකාශගේටින් ඒකකය Z~=s(Z)

83z=self.sgu(z,mask)

#

අවසානප්රක්ෂේපණය Y=Z~V

85z=self.proj2(z)

#

කෙටිමංසම්බන්ධතාවය එක් කරන්න

88returnz+shortcut

#

අවකාශීයගේටින් ඒකකය

s(Z)=Z1​⊙fW,b​(Z2​)

අනුක්රමිකමානය ඔස්සේ රේඛීය පරිවර්තනයක් වන අතර ⊙ එය මූලද්රව්ය අනුව ගුණ කිරීමකි. fW,b​(Z)=WZ+b Z සමාන ප්රමාණයේ කොටස් වලට Z1​ සහ නාලිකා මානය Z2​ ඔස්සේ (කාවැද්දීමේ මානය) බෙදා ඇත.

91classSpacialGatingUnit(nn.Module):

#

  • d_z හි මානයන් වේ Z
  • seq_len අනුක්රමය දිග වේ
101def\_\_init\_\_(self,d\_z:int,seq\_len:int):

#

106super().\_\_init\_\_()

#

අයදුම්කිරීමට පෙර සාමාන්යකරණය ස්ථරය fW,b​(⋅)

108self.norm=nn.LayerNorm([d\_z//2])

#

W සිරුරේ බර fW,b​(⋅).

කුඩාඅගයන් හා නැඹුරුව සඳහා බර ආරම්භ කිරීම වැදගත් බව කඩදාසි සටහන් කරයි 1, එවිට මූලික පුහුණුව තුළ අනන්යතාවයට සමීප s(⋅) වේ (භේදය හැරුණු විට).

113self.weight=nn.Parameter(torch.zeros(seq\_len,seq\_len).uniform\_(-0.01,0.01),requires\_grad=True)

#

සිරුරේබර b fW,b​(⋅)

පක්ෂග්රාහීවආරම්භ කිරීම වැදගත් බව කඩදාසි සටහන් 1කරයි.

117self.bias=nn.Parameter(torch.ones(seq\_len),requires\_grad=True)

#

  • z හැඩයේ Z ආදානය වේ [seq_len, batch_size, d_z]
  • mask යනු එකිනෙකා අතර ටෝකන වල දෘශ්යතාව පාලනය [seq_len, seq_len, 1] කරන හැඩයේ බූලියන් වෙස් මුහුණකි. ප්රමාණයේ අවසාන මානය 1 වන්නේ වෙනත් ට්රාන්ස්ෆෝමර් ක්රියාත්මක කිරීම් වලදී අප සතුව ඇති අතර අනුකූලතාව සඳහා ඉතිරිව ඇති කණ්ඩායමයි.
119defforward(self,z:torch.Tensor,mask:Optional[torch.Tensor]=None):

#

අනුක්රමිකදිග ලබා ගන්න

128seq\_len=z.shape[0]

#

Z බෙදන්න Z1​ සහ Z2​

130z1,z2=torch.chunk(z,2,dim=-1)

#

ආවරණපරීක්ෂා කරන්න

133ifmaskisnotNone:

#

mask හැඩය ඇත [seq_len_q, seq_len_k, batch_size] . මෙම ක්රියාත්මක කිරීම කණ්ඩායමේ සියලුම සාම්පල සඳහා එකම වෙස් මුහුණක් පමණක් සහාය වන 1 බැවින් කණ්ඩායම් මානය ප්රමාණයෙන් යුක්ත විය යුතුය.

137assertmask.shape[0]==1ormask.shape[0]==seq\_len138assertmask.shape[1]==seq\_len

#

මෙන්නඅපි සහාය දෙන්නේ සියලුම සාම්පල සඳහා එකම වෙස් මුහුණක් පමණි

140assertmask.shape[2]==1

#

කණ්ඩායම්මානය ඉවත් කරන්න

142mask=mask[:,:,0]

#

Z2​ පෙර සාමාන්යකරණය fW,b​(⋅)

145z2=self.norm(z2)

#

බරඅනුකෘතිය ලබා ගන්න; වඩා විශාල නම් ට්රන්කේට් කරන්න seq_len

147weight=self.weight[:seq\_len,:seq\_len]

#

පඩිසඳහා ආවරණ යොදන්න.

එසේ Wi,j​ 0 නම් fW,b​(Z2​)i​ ටෝකනයෙන් කිසිදු තොරතුරක් ලබා jනොගනී.

152ifmaskisnotNone:153weight=weight\*mask

#

fW,b​(Z2​)=WZ2​+b

156z2=torch.einsum('ij,jbd-\>ibd',weight,z2)+self.bias[:seq\_len,None,None]

#

Z1​⊙fW,b​(Z2​)

159returnz1\*z2

Trending Research Paperslabml.ai