9import copy
10
11import torch.nn as nn
12
13from labml.configs import BaseConfigs, option, calculate, aggregate
14from labml_helpers.module import Module
15from .feed_forward import FeedForward
16from .mha import MultiHeadAttention
17from .models import EmbeddingsWithPositionalEncoding, EmbeddingsWithLearnedPositionalEncoding, TransformerLayer, \
18 Encoder, Decoder, Generator, EncoderDecoder
21class FeedForwardConfigs(BaseConfigs):
ස්ථාන-නැණවත්පෝෂක ස්ථරය
31 ffn: FeedForward
කාවැද්දීමේවිශේෂාංග ගණන
33 d_model: int
සැඟවුණුස්ථරයේ ඇති ලක්ෂණ ගණන
35 d_ff: int = 2048
අතහැරදැමීමේ සම්භාවිතාව
37 dropout: float = 0.1
ස්ථාන-නැණවත්පෝෂක ස්ථරයේ සක්රිය කිරීම
39 activation: nn.Module = 'ReLU'
FFNස්තරය ගේට්ටු කළ යුතුද යන්න
41 is_gated: bool = False
පළමුපූර්ණ සම්බන්ධිත ස්ථරයට ඉගෙන ගත හැකි නැඹුරුවක් තිබිය යුතුද යන්න
43 bias1: bool = True
දෙවනපූර්ණ සම්බන්ධිත ස්තරය ඉගෙන ගත හැකි නැඹුරුවක් තිබිය යුතුද යන්න
45 bias2: bool = True
ගේට්ටුවසඳහා පූර්ණ සම්බන්ධිත ස්තරය ඉගෙන ගත හැකි නැඹුරුවක් තිබිය යුතුද යන්න
47 bias_gate: bool = False
පූර්වනිශ්චිත GLU ප්රභේද
49 glu_variant: str = 'none'
52@option(FeedForwardConfigs.activation, 'ReLU')
53def _ffn_activation_relu():
59 return nn.ReLU()
62@option(FeedForwardConfigs.activation, 'GELU')
63def _ffn_activation_gelu():
71 return nn.GELU()
ආහාර ඉදිරි ජාලයක්ආරම්භ කරන්න
74@option(FeedForwardConfigs.ffn, 'default')
75def _feed_forward(c: FeedForwardConfigs):
79 return FeedForward(c.d_model, c.d_ff,
80 dropout=c.dropout,
81 activation=c.activation,
82 is_gated=c.is_gated,
83 bias1=c.bias1,
84 bias2=c.bias2,
85 bias_gate=c.bias_gate)
මේවාකඩදාසි වලින් හඳුන්වා දී ඇති පරිදි එෆ්එෆ්එන් සඳහා ගේට්ටු සැඟවුණු ස්ථර සහිත ප්රභේද වේ GLU ප්රභේද ට්රාන්ස්ෆෝමර් වැඩි දියුණු කරන්න. කඩදාසි වල දක්වා ඇති පරිදි අපි පක්ෂග්රාහී නියමයන් මඟ හැරි ඇත.
95aggregate(FeedForwardConfigs.glu_variant, 'GLU',
96 (FeedForwardConfigs.is_gated, True),
97 (FeedForwardConfigs.bias1, False),
98 (FeedForwardConfigs.bias2, False),
99 (FeedForwardConfigs.bias_gate, False),
100 (FeedForwardConfigs.activation, nn.Sigmoid()))
105aggregate(FeedForwardConfigs.glu_variant, 'Bilinear',
106 (FeedForwardConfigs.is_gated, True),
107 (FeedForwardConfigs.bias1, False),
108 (FeedForwardConfigs.bias2, False),
109 (FeedForwardConfigs.bias_gate, False),
110 (FeedForwardConfigs.activation, nn.Identity()))
115aggregate(FeedForwardConfigs.glu_variant, 'ReGLU',
116 (FeedForwardConfigs.is_gated, True),
117 (FeedForwardConfigs.bias1, False),
118 (FeedForwardConfigs.bias2, False),
119 (FeedForwardConfigs.bias_gate, False),
120 (FeedForwardConfigs.activation, nn.ReLU()))
125aggregate(FeedForwardConfigs.glu_variant, 'GEGLU',
126 (FeedForwardConfigs.is_gated, True),
127 (FeedForwardConfigs.bias1, False),
128 (FeedForwardConfigs.bias2, False),
129 (FeedForwardConfigs.bias_gate, False),
130 (FeedForwardConfigs.activation, nn.GELU()))
136aggregate(FeedForwardConfigs.glu_variant, 'SwiGLU',
137 (FeedForwardConfigs.is_gated, True),
138 (FeedForwardConfigs.bias1, False),
139 (FeedForwardConfigs.bias2, False),
140 (FeedForwardConfigs.bias_gate, False),
141 (FeedForwardConfigs.activation, nn.SiLU()))
මෙයට්රාන්ස්ෆෝමරයක් සඳහා වින්යාසයන් අර්ථ දක්වයි. වින්යාසයන් විකල්ප කාර්යයන් භාවිතා කරමින් ගණනය කරනු ලැබේ. මේවා කම්මැලි ලෙස පටවා ඇති අතර එබැවින් අවශ්ය මොඩියුල පමණක් ගණනය කරනු ලැබේ.
144class TransformerConfigs(BaseConfigs):
අවධානයයොමු ප්රධානීන් ගණන
156 n_heads: int = 8
ට්රාන්ස්ෆෝමර්කාවැද්දීමේ ප්රමාණය
158 d_model: int = 512
ස්ථරගණන
160 n_layers: int = 6
අතහැරදැමීමේ සම්භාවිතාව
162 dropout: float = 0.1
ප්රභවවචන මාලාවේ ටෝකන ගණන (ටෝකන් කාවැද්දීම් සඳහා)
164 n_src_vocab: int
ඉලක්කගතවචන මාලාවේ ටෝකන ගණන (පුරෝකථනය සඳහා පිවිසුම් ජනනය කිරීමට)
166 n_tgt_vocab: int
එන්කෝඩරයස්වයං අවධානය
169 encoder_attn: MultiHeadAttention = 'mha'
විකේතකයස්වයං අවධානය
171 decoder_attn: MultiHeadAttention = 'mha'
විකේතකමතක අවධානය
173 decoder_mem_attn: MultiHeadAttention = 'mha'
වින්යාසගතකළ හැකි ප්රතිපෝෂණ ස්ථරය
176 ffn: FeedForwardConfigs
ආකේතකයස්ථරය
179 encoder_layer: TransformerLayer = 'default'
ස්තරයවිකේතකය
181 decoder_layer: TransformerLayer = 'default'
බහුඑන්කෝඩර් ස්ථර වලින් සමන්විත එන්කෝඩරය
184 encoder: Encoder = 'default'
බහුවිකේතක ස්ථර වලින් සමන්විත එන්කෝඩරය
186 decoder: Decoder = 'default'
ප්රභවයසඳහා ස්තරය කාවැද්දීම
189 src_embed: Module = 'fixed_pos'
ඉලක්කයසඳහා ස්තරය කාවැද්දීම (විකේතකය සඳහා)
191 tgt_embed: Module = 'fixed_pos'
අනාවැකියසඳහා ලොගින් වන්න ජනකය
194 generator: Generator = 'default'
එන්කෝඩරය-විකේතකය
197 encoder_decoder: EncoderDecoder
201def _mha(c: TransformerConfigs):
202 return MultiHeadAttention(c.n_heads, c.d_model, dropout_prob=c.dropout)
203
204
205calculate(TransformerConfigs.encoder_attn, 'mha', _mha)
206calculate(TransformerConfigs.decoder_attn, 'mha', _mha)
207calculate(TransformerConfigs.decoder_mem_attn, 'mha', _mha)
211def _relative_mha(c: TransformerConfigs):
212 from labml_nn.transformers.xl.relative_mha import RelativeMultiHeadAttention
213 return RelativeMultiHeadAttention(c.n_heads, c.d_model)
214
215
216calculate(TransformerConfigs.encoder_attn, 'relative', _relative_mha)
217calculate(TransformerConfigs.decoder_attn, 'relative', _relative_mha)
218calculate(TransformerConfigs.decoder_mem_attn, 'relative', _relative_mha)
ප්රතිපෝෂණස්ථර වින්යාසයන් සාදන්න
221@option(TransformerConfigs.ffn, 'default')
222def _feed_forward(c: TransformerConfigs):
226 conf = FeedForwardConfigs()
227 conf.set_default(FeedForwardConfigs.d_model, func=lambda: c.d_model)
228 conf.set_default(FeedForwardConfigs.dropout, func=lambda: c.dropout)
229 return conf
ආකේතකයස්ථරය
232@option(TransformerConfigs.encoder_layer, 'default')
233def _encoder_layer(c: TransformerConfigs):
237 return TransformerLayer(d_model=c.d_model, self_attn=c.encoder_attn,
238 src_attn=None, feed_forward=copy.deepcopy(c.ffn.ffn),
239 dropout_prob=c.dropout)
ස්තරයවිකේතකය
242@option(TransformerConfigs.decoder_layer, 'default')
243def _decoder_layer(c: TransformerConfigs):
247 return TransformerLayer(d_model=c.d_model, self_attn=c.decoder_attn,
248 src_attn=c.decoder_mem_attn, feed_forward=copy.deepcopy(c.ffn.ffn),
249 dropout_prob=c.dropout)
එන්කෝඩරය
252@option(TransformerConfigs.encoder, 'default')
253def _encoder(c: TransformerConfigs):
257 return Encoder(c.encoder_layer, c.n_layers)
විකේතකය
260@option(TransformerConfigs.decoder, 'default')
261def _decoder(c: TransformerConfigs):
265 return Decoder(c.decoder_layer, c.n_layers)
ලොගින්වන්න ජනකය
268@option(TransformerConfigs.generator, 'default')
269def _generator(c: TransformerConfigs):
273 return Generator(c.n_tgt_vocab, c.d_model)
277@option(TransformerConfigs.src_embed, 'fixed_pos')
278def _src_embed_with_positional(c: TransformerConfigs):
282 return EmbeddingsWithPositionalEncoding(c.d_model, c.n_src_vocab)
ස්ථාවරස්ථානීය කේතන ක්රම සමඟ කාවැද්දීම ඉලක්ක කරන්න
285@option(TransformerConfigs.tgt_embed, 'fixed_pos')
286def _tgt_embed_with_positional(c: TransformerConfigs):
290 return EmbeddingsWithPositionalEncoding(c.d_model, c.n_tgt_vocab)
294@option(TransformerConfigs.src_embed, 'learned_pos')
295def _src_embed_with_learned_positional(c: TransformerConfigs):
299 return EmbeddingsWithLearnedPositionalEncoding(c.d_model, c.n_src_vocab)
උගත්ස්ථානීය කේතන ක්රම සමඟ කාවැද්දීම ඉලක්ක කර ගන්න
302@option(TransformerConfigs.tgt_embed, 'learned_pos')
303def _tgt_embed_with_learned_positional(c: TransformerConfigs):
307 return EmbeddingsWithLearnedPositionalEncoding(c.d_model, c.n_tgt_vocab)
311@option(TransformerConfigs.src_embed, 'no_pos')
312def _src_embed_without_positional(c: TransformerConfigs):
316 return nn.Embedding(c.n_src_vocab, c.d_model)
319@option(TransformerConfigs.tgt_embed, 'no_pos')
320def _tgt_embed_without_positional(c: TransformerConfigs):
321 return nn.Embedding(c.n_tgt_vocab, c.d_model)
322
323
324@option(TransformerConfigs.encoder_decoder, 'default')
325def _encoder_decoder(c: TransformerConfigs):
326 return EncoderDecoder(c.encoder, c.decoder, c.src_embed, c.tgt_embed, c.generator)