නොපැහැදිලි ටයිල් සක්රීය කිරීමේ අත්හදා බැලීම

Open In Colab Open In Comet

මෙන්නඅපි Feed-Forward ජාලයේ Fuzzy Tiling Activation භාවිතා කරන ට්රාන්ස්ෆෝමරයක් පුහුණු කරමු. අපි එය භාෂා ආකෘතියක් සඳහා භාවිතා කරන අතර නිරූපණය සඳහා කුඩා ෂේක්ස්පියර් දත්ත කට්ටලය මත එය පුහුණු කරමු.

කෙසේවෙතත්, මෙය බොහෝ විට FTA සඳහා සුදුසුම කාර්යය නොවන අතර අඛණ්ඩ විචල්යයන් සහිත දත්ත ආකෘතිකරණය සඳහා FTA වඩාත් සුදුසු යැයි අපි විශ්වාස කරමු.

22import copy
23
24import torch
25import torch.nn as nn
26
27from labml import experiment
28from labml.configs import option
29from labml_helpers.module import Module
30from labml_nn.activations.fta import FTA
31from labml_nn.experiments.nlp_autoregression import NLPAutoRegressionConfigs
32from labml_nn.transformers import MultiHeadAttention, TransformerLayer
33from labml_nn.transformers.utils import subsequent_mask
36class FeedForwardFTA(nn.Module):
  • d_model යනු ටෝකන කාවැද්දීම තුළ ඇති විශේෂාංග ගණන
  • d_ff යනු FFN හි සැඟවුණු ස්ථරයේ ඇති ලක්ෂණ ගණන
  • activation FTA සක්රිය කිරීමේ මොඩියුලය
  • dropout සැඟවුණු ස්තරය සඳහා අතහැර දැමීමේ සම්භාවිතාව
41    def __init__(self, d_model: int, d_ff: int,
42                 activation: FTA,
43                 dropout: float = 0.1):
50        super().__init__()

බර හා නැඹුරුව අනුව පරාමිතිකරණය කරන ලද එක් ස්ථරය

52        self.layer1 = nn.Linear(d_model, d_ff)

බර හා නැඹුරුව අනුව පරාමිතිකරණය කරන ලද ස්ථර දෙකක්

54        self.layer2 = nn.Linear(d_ff * activation.expansion_factor, d_model)

සැඟවුණුස්ථර හැලීම

56        self.dropout = nn.Dropout(dropout)

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

58        self.activation = activation
60    def forward(self, x: torch.Tensor):

62        x = self.activation(self.layer1(x))

අතහැරදැමීම යොදන්න

64        x = self.dropout(x)

66        return self.layer2(x)

ස්වයංක්රීයප්රතිගාමී ආකෘතිය

මෙය(නොපැහැදිලි ටයිලිං ඇක්ටිවේෂන්) (index.html) සමඟ ෆීඩ්-ෆෝවර්ඩ් නෙට්වර්ක් භාවිතා කරන ස්වයංක්රීය ප්රතිගාමී ට්රාන්ස්ෆෝමර් ආකෘතියකි.

69class AutoregressiveTransformer(Module):
  • n_tokens යනු වචන මාලාවේ ටෝකන ගණන
  • d_model කාවැද්දීම ප්රමාණය වේ
  • n_layers ට්රාන්ස්ෆෝමර් ස්ථර ගණන
  • layer ස්තරය වේ. අපි ට්රාන්ස්ෆෝමර් සඳහා මෙහි n_layers පිටපත් භාවිතා කරමු.
77    def __init__(self, n_tokens: int, d_model: int, n_layers: int, layer: TransformerLayer):
84        super().__init__()

n_layers ස්ථර සහිත ට්රාන්ස්ෆෝමර්

86        self.transformer_layers = nn.ModuleList([copy.deepcopy(layer) for _ in range(n_layers)])

ටෝකන්කාවැද්දීම ස්ථරය

89        self.emb = nn.Embedding(n_tokens, d_model)

කියවීමේස්ථරය

91        self.readout = nn.Linear(d_model, n_tokens)

පළමුඇමතුමෙන් වෙස්මුහුණ ආරම්භ කරනු ඇත

94        self.mask = None
  • x හැඩයේ ආදාන ටෝකන වේ [seq_len, batch_size]
96    def forward(self, x: torch.Tensor):

ස්වයංක්රීයප්රතිගාමී වෙස් මුහුණක් සාදන්න

101        if self.mask is None or self.mask.size(0) != len(x):

පසුකාලීනවෙස්මුහුණ, අනාගත ටෝකන දැකීමෙන් ටෝකන වසං කරනු ඇත

103            self.mask = subsequent_mask(len(x)).to(x.device)

ටෝකන්කාවැද්දීම් ලබා ගන්න

106        x = self.emb(x)

ට්රාන්ස්ෆෝමර්එන්කෝඩරය

108        for layer in self.transformer_layers:
109            x = layer(x=x, mask=self.mask)

පිවිසුම්ලබා ගන්න

111        x = self.readout(x)

ආපසුප්රතිඵල

114        return x, None

වින්යාසකිරීම්

මෙයඋරුම වන්නේ NLPAutoRegressionConfigs

117class Configs(NLPAutoRegressionConfigs):

ආකෘතිය

126    model: AutoregressiveTransformer

ස්ථරගණන

129    n_layers: int = 4

සහ ගැඹුරු සම්මතය සඳහා

132    deep_norm_alpha: float
133    deep_norm_beta: float

අවධානයයොමු කරන හිස් ගණන

136    n_heads: int = 4

කාවැද්දීමප්රමාණය

138    d_model: int = 256

එක්එක් අවධානය හිස ප්රමාණය

140    d_k: int = 16

ඉදිරිස්ථරයේ ප්රමාණය පෝෂණය කරන්න

142    d_ff: int = 256

FTA

145    fta_lower_limit: float = -1.
146    fta_upper_limit: float = +1.
147    fta_delta: float = 0.2
148    fta_eta: float = 0.05

ආකෘතියආරම්භ කරන්න

151@option(Configs.model)
152def _model(c: Configs):

FTAසක්රිය කිරීමේ මොඩියුලය සාදන්න

158    fta = FTA(c.fta_lower_limit, c.fta_upper_limit, c.fta_delta, c.fta_eta)

ට්රාන්ස්ෆෝමරයසාදන්න. අපි නැවත භාවිතා කිරීම TransformerLayer MultiHeadAttention සහ ක්රියාත්මක කිරීම.

162    m = AutoregressiveTransformer(c.n_tokens, c.d_model, c.n_layers,
163                                  TransformerLayer(d_model=c.d_model,
164                                                   feed_forward=FeedForwardFTA(d_model=c.d_model,
165                                                                               d_ff=c.d_ff,
166                                                                               activation=fta,
167                                                                               dropout=0.1),
168                                                   self_attn=MultiHeadAttention(c.n_heads, c.d_model,
169                                                                                dropout_prob=0.0),
170                                                   dropout_prob=0.0))

උපාංගයවෙත ගෙන යන්න

173    return m.to(c.device)

අත්හදාබැලීම නිර්මාණය කර ක්රියාත්මක කරන්න

176def main():

අත්හදාබැලීම සාදන්න

181    experiment.create(name="fta", writers={'screen',  'comet', 'labml'})

වින්යාසසාදන්න

183    conf = Configs()

වින්යාසයන්අභිබවා යන්න

185    experiment.configs(conf, {

අක්ෂරමට්ටමේ ටෝකනයිසර් භාවිතා කරන්න

187        'tokenizer': 'character',

කඩිනම්බෙදුම්කරු හිස් ය

189        'prompt_separator': '',

නියැදීමසඳහා විමසුමක් ආරම්භ කිරීම

191        'prompt': 'It is ',

කුඩාෂේක්ස්පියර් දත්ත කට්ටලය භාවිතා කරන්න

193        'text': 'tiny_shakespeare',

කසන්දර්භය ප්රමාණය භාවිතා

196        'seq_len': 256,

32වයස අවුරුදු සඳහා දුම්රිය

198        'epochs': 32,

කණ්ඩායම්ප්රමාණය

200        'batch_size': 16,

එක් යුගයකට වරක් පුහුණුව සහ වලංගු කිරීම අතර මාරු වන්න

202        'inner_iterations': 10,

උනුසුම්වීමක් නොමැති ආදම් ප්රශස්තකරණය

205        'optimizer.optimizer': 'Adam',
206        'optimizer.learning_rate': 3e-4,
207    })

ඉතිරිකිරීම සහ පැටවීම සඳහා ආකෘතිය (ය) සකසන්න

210    experiment.add_pytorch_models({'model': conf.model})

අත්හදාබැලීම ආරම්භ කරන්න

213    with experiment.start():

පුහුණුධාවනය

215        conf.run()

219if __name__ == '__main__':
220    main()