Back to Annotated Deep Learning Paper Implementations

සාපේක්ෂබහු-ශීර්ෂ අවධානය

docs/si/transformers/xl/relative_mha.html

latest7.0 KB
Original Source

hometransformersxl

View code on Github

#

සාපේක්ෂබහු-ශීර්ෂ අවධානය

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

16importtorch17fromtorchimportnn1819fromlabml.loggerimportinspect20fromlabml\_nn.transformers.mhaimportMultiHeadAttention

#

මෙමක්රමය i තීරු මගින් අනුකෘතියක ith පේළිය මාරු කරයි.

ආදානයනම් [[1, 2 ,3], [4, 5 ,6], [7, 8, 9]] , මාරු කළ ප්රති result ලය වනු [[1, 2 ,3], [0, 4, 5], [9, 0, 7]] ඇත. ඉතාමැනවින් අපි පහළ ත්රිකෝණය වසං කළ යුතු නමුත් එය අපගේ අරමුණ සඳහා හරි.

23defshift\_right(x:torch.Tensor):

#

ශුන්යතීරුවක් සංයුක්ත කරන්න

33zero\_pad=x.new\_zeros(x.shape[0],1,\*x.shape[2:])34x\_padded=torch.cat([x,zero\_pad],dim=1)

#

අවසානයේසිට අතිරික්ත මූලද්රව්ය නැවත සකස් කර ඉවත් කරන්න

37x\_padded=x\_padded.view(x.shape[1]+1,x.shape[0],\*x.shape[2:])38x=x\_padded[:-1].view\_as(x)

#

41returnx

#

සාපේක්ෂබහු-හිස අවධානය මොඩියුලය

අපි බහු-ප්රධාන අවධානය මොඩියුලය අභිබවා යන බැවින් අපට අවශ්ය වන්නේ get_scores ක්රමය ලිවීමට පමණි.

44classRelativeMultiHeadAttention(MultiHeadAttention):

#

52def\_\_init\_\_(self,heads:int,d\_model:int,dropout\_prob:float=0.1):

#

ලකුණුගණනය කිරීමේදී අපි පැහැදිලිවම එය ඇතුළත් කර ඇති බැවින් රේඛීය පරිවර්තනයන්ට නැඹුරුවක් අවශ්ය නොවේ. කෙසේ වෙතත් පක්ෂග්රාහීව සිටීම අර්ථවත් value විය හැකිය.

56super().\_\_init\_\_(heads,d\_model,dropout\_prob,bias=False)

#

සාපේක්ෂතනතුරු ගණන

59self.P=2\*\*12

#

විමසුමටසාපේක්ෂව යතුර සඳහා සාපේක්ෂ ස්ථානීය කාවැද්දීම්. අපට 2P කාවැද්දීම් අවශ්ය වන්නේ යතුරු විමසීමට පෙර හෝ පසුව විය හැකි බැවිනි.

63self.key\_pos\_embeddings=nn.Parameter(torch.zeros((self.P\*2,heads,self.d\_k)),requires\_grad=True)

#

විමසුමටසාපේක්ෂව යතුර සඳහා සාපේක්ෂ ස්ථානීය කාවැද්දීමේ නැඹුරුව.

65self.key\_pos\_bias=nn.Parameter(torch.zeros((self.P\*2,heads)),requires\_grad=True)

#

විමසුමසඳහා ස්ථානීය කාවැද්දීම් විමසුමේ පිහිටුමෙන් ස්වාධීන වේ

67self.query\_pos\_bias=nn.Parameter(torch.zeros((heads,self.d\_k)),requires\_grad=True)

#

සාපේක්ෂඅවධානය ලකුණු ලබා ගන්න

නිරපේක්ෂඅවධානයෙන්

Ajabs​​=linq​(Xiq​+Pi​)⊤link​(Xjk​+Pj​)=AQi⊤​Kj​​+BQi⊤​UjK​​+CUiQ​⊤Kj​​+DUiQ​⊤UjK​​​

මුල්කාවැද්දීම් වල රේඛීය පරිවර්තනයන් UiQ​,UjK​ වන Xiq​,Xjk​ අතර නිරපේක්ෂ ස්ථානීය කේතීකරණයේ රේඛීය පරිවර්තනයන් වේ Qi​,Kj​ Pi​,Pj​.

විමසුම්තත්ත්වය නොසලකා දී ඇති යතුරක් කෙරෙහි අවධානය යොමු කිරීම සමාන විය යුතු බව ඔවුහු පෙන්වා දෙති. එබැවින් නියතයක් CUiQ​⊤Kj​​ සමඟ ප්රතිස්ථාපනය කරන්න Cv⊤Kj​​.

දෙවනහා තෙවන කොන්දේසි සඳහා සාපේක්ෂ ස්ථානීය කේතන හඳුන්වා දෙනු ලැබේ. ඒ BQi⊤​UjK​​ නිසා BQi⊤​Ri−j​​ හා DUiQ​⊤UjK​​ සමඟ ප්රතිස්ථාපනය DSi−j​​වේ.

Ai,jrel​​=AQi⊤​Kj​​+BQi⊤​Ri−j​​+Cv⊤Kj​​+DSi−j​​​

69defget\_scores(self,query:torch.Tensor,key:torch.Tensor):

#

Rk​

108key\_pos\_emb=self.key\_pos\_embeddings[self.P-key.shape[0]:self.P+query.shape[0]]

#

Sk​

110key\_pos\_bias=self.key\_pos\_bias[self.P-key.shape[0]:self.P+query.shape[0]]

#

v⊤

112query\_pos\_bias=self.query\_pos\_bias[None,None,:,:]

#

(A+C)i,j​=Qi⊤​Kj​+v⊤Kj​Z

117ac=torch.einsum('ibhd,jbhd-\>ijbh',query+query\_pos\_bias,key)

#

B′i,k​=Qi⊤​Rk​

119b=torch.einsum('ibhd,jhd-\>ijbh',query,key\_pos\_emb)

#

D′i,k​=Sk​

121d=key\_pos\_bias[None,:,None,:]

#

ලබාගැනීමට පේළි මාරු (B′+D′)i,k​ කරන්න (B+D)i,j​=(B′+D′)i,i−j​

124bd=shift\_right(b+d)

#

අමතරතනතුරු ඉවත් කරන්න

126bd=bd[:,-key.shape[0]:]

#

මුදලආපසු දෙන්න AQi⊤​Kj​​+BQi⊤​Ri−j​​+Cv⊤Kj​​+DSi−j​​

134returnac+bd

#

137def\_test\_shift\_right():138x=torch.tensor([[1,2,3],[4,5,6],[7,8,9]])139inspect(x)140inspect(shift\_right(x))141142x=torch.arange(1,6)[None,:,None,None].repeat(5,1,1,1)143inspect(x[:,:,0,0])144inspect(shift\_right(x)[:,:,0,0])145146x=torch.arange(1,6)[None,:,None,None].repeat(3,1,1,1)147inspect(x[:,:,0,0])148inspect(shift\_right(x)[:,:,0,0])149150151if\_\_name\_\_=='\_\_main\_\_':152\_test\_shift\_right()

Trending Research Paperslabml.ai