11from labml import experiment
12from labml.configs import calculate
13from labml_nn.experiments.arithmetic_dataset import ArithmeticAutoregression
14from labml_nn.transformers import TransformerConfigs
15from labml_nn.transformers.rope.experiment import Configs as RoPEConfigs

RoPEの実験を継承し算術加算タスクに使用します

以下に注目を変更して、相対距離のある回転式位置埋め込み (RoPer) を使用するようにしました。

18class Configs(RoPEConfigs, ArithmeticAutoregression):
26    pass

相対距離 (RoPER) を考慮した回転式位置埋め込みを使用してください。

29def _rotary_value_pe_mha(c: TransformerConfigs):
33    from labml_nn.transformers.rope.value_pe import RotaryValuePEMultiHeadAttention
34    return RotaryValuePEMultiHeadAttention(c.n_heads, c.d_model, 1., 1.)

設定オプション

38calculate(TransformerConfigs.encoder_attn, 'rotary_value', _rotary_value_pe_mha)
39calculate(TransformerConfigs.decoder_attn, 'rotary_value', _rotary_value_pe_mha)
40calculate(TransformerConfigs.decoder_mem_attn, 'rotary_value', _rotary_value_pe_mha)
43def main():

実験を作成

45    experiment.create(name="roper_addition", comment="rotary value 7", writers={'screen', 'labml'})

コンフィグの作成

47    conf = Configs()

オーバーライド設定

49    experiment.configs(conf, {
50        'max_digits': 7,

固定位置埋め込みなし

53        'transformer.src_embed': 'no_pos',
54        'transformer.tgt_embed': 'no_pos',

ローパーアテンション付きエンコーダ

57        'transformer.encoder_attn': 'rotary_value',

RoPE アテンション付きエンコーダー 'transformer.encoder_attn': 'ロータリー'、

62        'model': 'rotary_pe_transformer',

コンテキストサイズを次の値にしてください

65        'seq_len': 512,

32 エポックのトレーニング

67        'epochs': 20,

バッチサイズ

69        'batch_size': 16,

モデルサイズ

72        'd_model': 128,
73        'transformer.ffn.d_ff': 512,
74        'transformer.n_heads': 4,
75        'transformer.dropout': 0.0,
78        'optimizer.optimizer': 'Adam',
79        'optimizer.learning_rate': 2.5e-4,
80    })

保存および読み込み用のモデルを設定する

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

実験を始める

86    with experiment.start():

トレーニングを実行

88        conf.run()

92if __name__ == '__main__':
93    main()