මෙය ට්රාන්ස්ෆෝමර්-එක්ස්එල් ක්රියාත්මක කිරීමයි: PyTorch හි ස්ථාවර දිග සන්දර්භයකින් ඔබ්බට අවධානය යොමු කරන භාෂා ආකෘති .
ට්රාන්ස්ෆෝමර්සමාන්තරව පුහුණු කරන ලද අනුක්රමයේ දිගට සමාන සීමිත අවධානයක් ඇත. මෙම සියලු තනතුරු ස්ථාවර ස්ථානීය කේතන ඇත. ට්රාන්ස්ෆෝමර් එක්ස්එල් මෙම අවධානය පරතරය වැඩි කරන්නේ එක් එක් තනතුරු පූර්ව ගණනය කළ අතීත කාවැද්දීම් කෙරෙහි අවධානය යොමු කිරීමට ඉඩ දීමෙනි. නිදසුනක් ලෙස සන්දර්භය දිග නම් , එය පෙර දිග කණ්ඩායම සඳහා සියලු ස්ථරවල කාවැද්දීම් තබා ඒවා වර්තමාන පියවරට පෝෂණය කරනු ඇත. අපි ස්ථාවර ස්ථානීය කේතීකරණ භාවිතා කරන්නේ නම් මෙම පූර්ව ගණනය කරන ලද කාවැද්දීම් වර්තමාන සන්දර්භයට සමාන ස්ථාන ඇත. ඔවුන් සාපේක්ෂ ස්ථානීය කේතන ක්රමයක් හඳුන්වා දෙන අතර එහිදී අවධානය ගණනය කිරීමේදී ස්ථානීය කේතීකරණ හඳුන්වා දෙනු ලැබේ.
සාපේක්ෂබහු ශීර්ෂ අවධානය යොමු කිරීම ක්රියාත්මක කිරීම ක්රියාත්මක වේ relative_mha.py
.
මෙන්නකුඩා ෂේක්ස්පියර් දත්ත කට්ටලය පිළිබඳ ට්රාන්ස්ෆෝමර් එක්ස්එල් ආකෘතියක් පුහුණු කිරීම සඳහා පුහුණු කේතය සහ සටහන් පොතක්.
36from typing import List, Optional
37
38import torch
39import torch.nn as nn
40
41from labml_helpers.module import Module
42from labml_nn.utils import clone_module_list
43from .relative_mha import RelativeMultiHeadAttention
44from ..feed_forward import FeedForward47class TransformerXLLayer(Module):d_model
ටෝකනය කාවැද්දීමේ ප්රමාණයයි self_attn
ස්වයං අවධානය මොඩියුලය feed_forward
යනු ආහාර ඉදිරි මොඩියුලයයි dropout_prob
ස්වයං අවධානයෙන් පසු ඉවත් වීමේ සම්භාවිතාව සහ FFN53 def __init__(self, *,
54 d_model: int,
55 self_attn: RelativeMultiHeadAttention,
56 feed_forward: FeedForward,
57 dropout_prob: float):64 super().__init__()
65 self.size = d_model
66 self.self_attn = self_attn
67 self.feed_forward = feed_forward
68 self.dropout = nn.Dropout(dropout_prob)
69 self.norm_self_attn = nn.LayerNorm([d_model])
70 self.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
සත්යයකි. 72 def forward(self, *,
73 x: torch.Tensor,
74 mem: Optional[torch.Tensor],
75 mask: torch.Tensor):ස්වයංඅවධානය යොමු කිරීමට පෙර දෛශික සාමාන්යකරණය කරන්න
83 z = self.norm_self_attn(x)මතකයක්තිබේ නම්
85 if mem is not None:එයසාමාන්යකරණය කරන්න
87 mem = self.norm_self_attn(mem)සමඟඑකඟ වන්න z
89 m_z = torch.cat((mem, z), dim=0)මතකයක්නොමැති නම් නොසලකා හරින්න
91 else:
92 m_z = zඅවධානය
94 self_attn = self.self_attn(query=z, key=m_z, value=m_z, mask=mask)අවධානයයොමු ප්රතිඵල එකතු කරන්න
96 x = x + self.dropout(self_attn)පෝෂණයසඳහා සාමාන්යකරණය කරන්න
99 z = self.norm_ff(x)Feed-forwardජාලය හරහා ගමන් කරන්න
101 ff = self.feed_forward(z)ප්රතිපෝෂණඉදිරි ප්රති results ල නැවත එක් කරන්න
103 x = x + self.dropout(ff)106 return x109class TransformerXL(Module):116 def __init__(self, layer: TransformerXLLayer, n_layers: int):
117 super().__init__()ට්රාන්ස්ෆෝමර්ස්ථරයේ පිටපත් සාදන්න
119 self.layers = clone_module_list(layer, n_layers)අවසානසාමාන්යකරණ ස්තරය
121 self.norm = nn.LayerNorm([layer.size])x
යනු හැඩයේ ටෝකන් කාවැද්දීමේ දෛශිකවල ආතකයකි [seq_len, batch_size, d_model]
mem
යනු එක් එක් ස්තරය [mem_len, batch_size, d_model]
සඳහා හැඩයේ දෛශික අතීත ටෝකන් මට්ටමේ ආතති ලැයිස්තුවකි mask
ආවරණ අනුකෘතිය වේ123 def forward(self, x: torch.Tensor, mem: List[torch.Tensor], mask: torch.Tensor):ටෝකන්මට්ටමේ විශේෂාංග දෛශික ගබඩා කිරීම සඳහා ලැයිස්තු ගත කරන්න, එය ඊළඟ අනුක්රමික කණ්ඩායම සඳහා මතකයන් බවට පත්වනු ඇත.
132 new_mem = []එක්එක් ට්රාන්ස්ෆෝමර් ස්ථරය හරහා ධාවනය කරන්න
134 for i, layer in enumerate(self.layers):විශේෂාංගදෛශික ලැයිස්තුවට එක් කරන්න
136 new_mem.append(x.detach())මතකය
138 m = mem[i] if mem else Noneට්රාන්ස්ෆෝමර්XL ස්තරය හරහා ධාවනය කරන්න
140 x = layer(x=x, mem=m, mask=mask)අවසානවශයෙන්, දෛශික සාමාන්යකරණය කරන්න
142 return self.norm(x), new_mem