资讯详情

使用 Fairseq 训练门控卷积网络语言模型(Gated Convolutional LM)实战指南

📅 2026/9/19 8:32:01 | 华诺云谱 👁 阅读
使用 Fairseq 训练门控卷积网络语言模型(Gated Convolutional LM)实战指南
使用 Fairseq 训练门控卷积网络语言模型Gated Convolutional LM实战指南【免费下载链接】fairseqFacebook AI Research Sequence-to-Sequence Toolkit written in Python.项目地址: https://gitcode.com/gh_mirrors/fa/fairseq本篇指南基于 fairseq 仓库中的 examples/language_model/README.conv.md完整讲解如何复现 Dauphin et al. (2017) 提出的门控卷积语言模型Gated Convolutional Network Language Model即 fconv_lm在 WikiText-103 数据集上的训练与评估流程。你将掌握fairseq-train与fairseq-eval-lm两条核心命令的完整用法、fconv_lm_dauphin_wikitext103架构的每一层配置含义、自适应 SoftmaxAdaptive Softmax与adaptive_loss准则的配合方式以及 NAG 优化器与reduce_lr_on_plateau学习率调度器的底层原理。背景为什么用卷积做语言建模门控卷积语言模型Gated Convolutional Network for Language Modeling由 Dauphin 等人于 2017 年提出论文发表于 ICML 2017引用信息见下文。与循环神经网络RNN不同卷积语言模型沿时间维度对序列并行计算每个位置的输出只依赖其左侧固定窗口内的历史 token通过卷积核宽度保证因果性因此训练吞吐更高同时通过门控线性单元GLU实现对长距离依赖的建模能力。在 fairseq 中这一模型以fconv_lm为注册名见 fairseq/models/fconv_lm.py 的register_model(fconv_lm)与FConvLanguageModel类它复用了序列到序列卷积模型fconv中的FConvDecoder定义于 fairseq/models/fconv.py只是不再使用编码器、关闭位置编码与注意力构成一个纯粹的自回归卷积语言模型。一、准备数据先完成 WikiText-103 的下载与二值化README.conv.md明确指出训练前需要先按照主语言建模文档完成数据的下载与预处理。完整步骤在 examples/language_model/README.md 中这里给出可直接执行的完整链路。第 1 步下载并解压 WikiText-103仓库提供了现成脚本 examples/language_model/prepare-wikitext-103.sh它会从公开数据源下载wikitext-103-v1.zip并解压产出wiki.train.tokens、wiki.valid.tokens、wiki.test.tokens三个文件cd examples/language_model/ bash prepare-wikitext-103.sh cd ../..第 2 步二值化binarize数据TEXTexamples/language_model/wikitext-103 fairseq-preprocess \ --only-source \ --trainpref $TEXT/wiki.train.tokens \ --validpref $TEXT/wiki.valid.tokens \ --testpref $TEXT/wiki.test.tokens \ --destdir>fairseq-train --task language_modeling \ >layers [(850, 6)] * 3 layers [(850, 1)] * 1 layers [(850, 5)] * 4 layers [(850, 1)] * 1 layers [(850, 4)] * 3 layers [(1024, 4)] * 1 layers [(2048, 4)] * 1即共 13 个卷积层前面 3 层核宽 6850 通道、接着 1 层核宽 1、再 4 层核宽 5、再 1 层核宽 1、再 3 层核宽 4、随后 1 层 1024 通道核宽 4、最后 1 层 2048 通道核宽 4。同时该架构把decoder_embed_dim设为 280、decoder_attention设为False、adaptive_softmax_cutoff默认设为10000,20000,200000。核宽为 1 的层相当于逐位置线性变换用于在深层之间调整通道维度。层规格三元组(out_channels, kernel_size, residual)中的第三项residual表示回看多少层做残差连接若省略则默认为 1即相邻层残差。该默认行为由 fairseq/models/fconv.py 中的extend_conv_spec统一补齐。2.2 自适应 Softmax--adaptive-softmax-cutoff与--criterion adaptive_lossWikiText-103 词表约 26 万词直接在输出层做全词表 Softmax 计算量巨大。fairseq 采用 Graves et al. (2016) 的自适应 Softmax论文 Efficient softmax approximation for GPUs实现位于 fairseq/modules/adaptive_softmax.py把词表按词频分成若干频带高频词由 head 网络直接打分低频词先投影到更小维度再经各自的 tail 网络打分从而大幅压缩计算量。--adaptive-softmax-cutoff 10000,20000,200000三个切分点把词表划分为 4 个频带最终总词数由模型构造时以cutoff [vocab_size]补齐见AdaptiveSoftmax.__init__。每个低频尾部的隐层维度按input_dim / factor^i默认factor4.0逐级缩小。--criterion adaptive_loss必须与自适应 Softmax 配合使用。对应 fairseq/criterions/adaptive_loss.py 中的AdaptiveLoss其forward会断言模型解码器确实挂载了adaptive_softmax然后对每个频带分别计算交叉熵并求和。重要兼容性约束AdaptiveLoss.build_criterion会显式拒绝 PyTorch 原生 DDPc10d/pytorch_ddp因此训练命令中必须带--ddp-backend legacy_ddp。若省略该参数训练会在启动时直接抛出异常——这也是README.conv.md的命令中特意保留它的原因。2.3 优化器与学习率NAG、reduce_lr_on_plateau与lr-shrink--optimizer nag使用带 Nesterov 动量的 SGD对应 fairseq/optim/nag.py 中的FairseqNAG其默认momentum0.99。--clip-norm 0.1梯度范数裁剪阈值防止长序列训练中梯度爆炸。--weight-decay 5e-06权重衰减系数。--lr 1.0初始学习率。注意卷积 LM 惯用较大的学习率与 Transformer LM 常用的0.0005量级不同。--lr-scheduler reduce_lr_on_plateau当验证集指标停止改善时按因子缩小学习率对应 fairseq/optim/lr_scheduler/reduce_lr_on_plateau.py内部封装了 PyTorch 的ReduceLROnPlateau。--lr-shrink 0.5每次触发时学习率乘以的收缩因子覆盖该调度器默认的lr_shrink0.1。也就是说验证指标每进入一次平台期学习率就减半直到训练完成。2.4 数据切块与批量大小--max-tokens 1024每个 batch 最多容纳的 token 总数跨样本累计是显存占用与 batch 规模的主要控制项。--tokens-per-sample 1024单条样本的最大 token 数。在LanguageModelingTask中它决定了TokenBlockDataset的切块长度见 fairseq/tasks/language_modeling.py 的参数定义与build_dataset_for_inference中的用法该值同时是卷积解码器max_positions的上限来源FConvLanguageModel.build_model会把max_target_positions回填为tokens_per_sample。--max-epoch 35最多训练 35 个 epoch 后停止。此外--dropout 0.2作用于嵌入、每个卷积层之前以及输出投影对应FConvDecoder内部的FairseqDropout与各Linear/Conv构造时的 dropout 参数。2.5 卷积层内部的实现细节从源码层面看FConvDecoderfairseq/models/fconv.py的每一层卷积输出通道数是配置值的2 倍LinearizedConv1d(in_channels, out_channels * 2, kernel_size)随后立即执行F.glu(x, dim2)门控——前一半通道经 sigmoid 作为门、后一半作为候选值二者逐元素相乘即得到 GLU 输出。这正是门控卷积Gated Convolution名称的来源。解码器各层残差连接后还会乘以sqrt(0.5)以稳定训练所有卷积与线性层均采用权重归一化weight normalization并配套特定的初始化策略见同文件底部的LinearizedConv1d、ConvTBC等辅助工厂函数。三、评估fairseq-eval-lm 计算困惑度Perplexity训练完成后用以下命令在测试集上评估困惑度fairseq-eval-lm>inproceedings{dauphin2017language, title{Language Modeling with Gated Convolutional Networks}, author{Dauphin, Yann N and Fan, Angela and Auli, Michael and Grangier, David}, booktitle{Proceedings of the 34th International Conference on Machine Learning-Volume 70}, pages{933--941}, year{2017}, organization{JMLR} }自适应 Softmax 对应的原始文献为 Graves et al., Efficient softmax approximation for GPUs其实现与引用说明同时出现在 fairseq/modules/adaptive_softmax.py 与 fairseq/criterions/adaptive_loss.py 的 docstring 中。延伸阅读主语言建模文档含 Transformer LM 训练、预训练模型与 PyTorch Hub 采样examples/language_model/README.md自适应输入Adaptive Inputs进阶用法examples/language_model/README.adaptive_inputs.md通用卷积序列模型fconv编码器-解码器形态源码fairseq/models/fconv.py【免费下载链接】fairseqFacebook AI Research Sequence-to-Sequence Toolkit written in Python.项目地址: https://gitcode.com/gh_mirrors/fa/fairseq创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。