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

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

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

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

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

Open In Colab View Run

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 FeedForward

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

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

47class TransformerXLLayer(Module):
  • d_model ටෝකනය කාවැද්දීමේ ප්රමාණයයි
  • self_attn ස්වයං අවධානය මොඩියුලය
  • feed_forward යනු ආහාර ඉදිරි මොඩියුලයයි
  • dropout_prob ස්වයං අවධානයෙන් පසු ඉවත් වීමේ සම්භාවිතාව සහ FFN
53    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 x

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

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

109class 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