docs/si/transformers/xl/relative_mha.html
මෙයකඩදාසි ට්රාන්ස්ෆෝමර්-එක්ස්එල් වෙතින් සාපේක්ෂ බහු-ශීර්ෂ අවධානය ක්රියාත්මක කිරීම:පයිටෝර්ච් හි ස්ථාවර දිග සන්දර්භයකින් ඔබ්බට අවධානය යොමු කරන භාෂා ආකෘති .
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⊤KjZ
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()