news 2026/8/27 17:13:12

Lite Transformer模型架构全解析:内核尺寸调度3-7-15-31与编码器解码器设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Lite Transformer模型架构全解析:内核尺寸调度3-7-15-31与编码器解码器设计

Lite Transformer模型架构全解析:内核尺寸调度3-7-15-31与编码器解码器设计

【免费下载链接】lite-transformer[ICLR 2020] Lite Transformer with Long-Short Range Attention项目地址: https://gitcode.com/gh_mirrors/li/lite-transformer

Lite Transformer(LSRA,Long-Short Range Attention,长短期范围注意力)是 MIT Han Lab 提出、发表于 ICLR 2020 的高效 Transformer 变体。它在保留标准 Transformer 翻译精度的前提下,把自注意力拆分为"全局注意力 + 局部卷积"多分支结构,并按 3-7-15-31 的调度逐层放大卷积内核尺寸,从而在相同 BLEU 分数下实现约 2.5 倍的速度提升。本文带你完整读懂它的编码器解码器设计与内核调度机制。

为什么要"长短程"注意力:冗余从哪里来

标准 Transformer 的自注意力对每个词都要扫描整句,但研究表明:靠近对角线(即局部相邻位置)的注意力权重其实是高度冗余的,真正有信息量的长程关系只占少数。LSRA 的思路很直接——让注意力只负责"长程",让卷积负责"短程"

  • 全局提取器(Global Extractor):标准多头注意力,捕捉远离对角线的长距离依赖
  • 局部提取器(Local Extractor):轻量卷积(Conv + FC + GLU),以极低成本建模局部语境

下面这张官方总览图(左:Lite Transformer 单块结构;中:传统注意力的冗余对角线权重;右:LSRA 专门化于长程关系的稀疏权重)直观展示了这一设计:

多分支自注意力:把嵌入维度"对半切"

Lite Transformer 的核心实现是transformer_multibranch_v2模型,主文件在 fairseq/models/transformer_multibranch_v2.py。每一层的自注意力由MultiBranch模块(fairseq/modules/multibranch.py)组装,工作方式:

  1. 将总嵌入维度(如 496)按分支切分,每个分支只操作自己的切片,各分支维度之和必须等于总维度
  2. 各分支并行前向,输出在最后一维上**拼接(concat)**回完整维度

分支类型通过配置字符串类型:内核:维度:头数声明,例如官方 WMT 配置:

encoder-branch-type: [attn:1:248:4, dynamic:default:248:4] decoder-branch-type: [attn:1:248:4, dynamic:default:248:4]

📌 解读:496 维被切成两个 248 维分支,一半走标准多头注意力(4 头),另一半走动态卷积(default表示内核尺寸取本层的调度值)。三种可选分支:

分支类型说明源码
attn标准多头自注意力,负责长程建模fairseq/modules/multihead_attention.py
dynamic动态卷积,权重随输入动态生成,支持 GLU 门控fairseq/modules/dynamic_convolution.py
lightweight轻量静态卷积,每个头共享一组(num_heads, 1, K)的可学习权重fairseq/modules/lightweight_convolution.py

这种分工的回报非常直接——在 WMT'14 En-Fr 翻译任务上,Lite Transformer 达到相同甚至更优 BLEU 所需的乘加运算量仅约为 Transformer 的 1/2.5,语言模型任务(WIKITEXT-103)上 perplexity 同样以更少的计算量胜出:

内核尺寸调度 3-7-15-31:每层怎么选卷积窗口

这是本架构最巧妙的设计之一。编码器/解码器默认有 6 层,每层的卷积内核尺寸按列表调度:

[3, 7, 15, 31, 31, 31]

在 fairseq/models/transformer_multibranch_v2.py 中,--encoder-kernel-size-list--decoder-kernel-size-list定义了该列表;分支配置里写default时,get_layer会取kernel_size_list[index]作为该层卷积的窗口大小。

123456
内核尺寸3715313131

⚡ 调度逻辑:

  • 前 3 层近似倍增(3→7→15):感受野随深度呈对数增长,浅层看近邻、深层看更远,与 Transformer 逐层抽象的规律吻合
  • 后段钳制在 31:窗口继续翻倍会带来过度平滑和训练不稳定,31 是精度与效率的经验平衡点
  • 编码器用对称填充(左、右各K//2),解码器用因果填充(padding_l = K-1),保证自回归推理时不泄露未来信息
  • 解码器在增量推理时通过incremental_state缓存卷积窗口,避免每步重复卷积

该列表还支持"单值复制 / 超长截断"的写法,并强制校验列表长度与层数一致(见base_architecture)。

编码器解码器结构与关键超参

整体仍是标准编码器-解码器(Encoder-Decoder)结构:6 层编码器 + 6 层解码器,每层内部为LayerNorm → 多分支自注意力 → 残差 → FFN → 残差 → LayerNorm,解码器额外保留标准 Transformer 的编码器-解码器注意力(它不参与多分支拆分,仍为全局注意力)。

以官方 WMT 配置 configs/wmt14.en-fr/attention/multibranch_v2/embed496.yml 为例:

参数取值说明
embed-dim496嵌入维度,按 248+248 切给两个分支
ffn-embed-dim496FFN 与嵌入同宽,进一步压参数
encoder/decoder-layers6编解码层数(base_architecture默认值)
attention-heads4每个分支 4 个头
kernel-size-list[3,7,15,31,31,31]逐层内核调度
share-all-embeddingsTrue编码器/解码器/输出共享词表嵌入

不同任务有不同预设:IWSLT'14 的轻量版用 160 维嵌入 +lightweight分支(见 configs/iwslt14.de-en/attention/multibranch_v2/embed160.yml),WMT'16 En-De 则提供 200/408/496 三档规模(configs/wmt16.en-de/attention/multibranch_v2/)。

实测效率:训练成本与模型压缩

在 IWSLT 德英翻译任务上,与 Transformer 和 AutoML 搜索出的 Evolved Transformer 相比,Lite Transformer 的 GPU 时数、CO₂ 排放和云成本几乎降到同一量级,BLEU 反而最高——相对 AutoML 方案的训练开销可缩减约 20000 倍:

架构本身更小的 FLOPs 还叠加了部署侧的红利:176MB 的 Transformer 压缩为 69MB 的 Lite Transformer 后,再经 8-bit 量化 + 剪枝可压到 9.7MB(18.2 倍),BLEU 仅从 39.9 微降到 39.5:

快速上手:训练与评测 Lite Transformer

git clone https://gitcode.com/gh_mirrors/li/lite-transformer cd lite-transformer pip install --editable . # 构建 GPU 卷积内核(lightconv 与 dynamicconv) cd fairseq/modules/lightconv_layer && python cuda_function_gen.py && python setup.py install && cd ../../.. cd fairseq/modules/dynamicconv_layer && python cuda_function_gen.py && python setup.py install && cd ../../..

数据准备与评测只需一行:

bash configs/wmt14.en-fr/prepare.sh # 准备数据 configs/wmt14.en-fr/test.sh embed496/ 0 test # 评测 checkpoint

训练入口为 train.py,示例:

python train.py data/binary/wmt14_en_fr --configs configs/wmt14.en-fr/attention/multibranch_v2/embed496.yml

其余常用入口:preprocess.py(分词/词表)、generate.py(推理生成)、validate.py(验证集检查),多分支相关算子均位于 fairseq/modules/ 目录下。

总结

Lite Transformer 用三个设计回答了"Transformer 如何又快又好":

  1. 多分支分工:注意力管长程、卷积管短程,消除冗余计算
  2. 3-7-15-31 内核调度:感受野随深度对数扩张,浅快深稳
  3. 编码器解码器轻量化:FFN 与嵌入同宽、嵌入共享、496 维双 248 分支切分

这套 LSRA 思想至今仍是"用局部卷积替代全局注意力"类高效架构的经典参照。如果你想深入源码,建议从 fairseq/models/transformer_multibranch_v2.py 的get_layer与 fairseq/modules/multibranch.py 的MultiBranch.forward两处读起。

【免费下载链接】lite-transformer[ICLR 2020] Lite Transformer with Long-Short Range Attention项目地址: https://gitcode.com/gh_mirrors/li/lite-transformer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 17:01:18

Python实现TOPSIS多属性决策分析:从原理到实战应用

1. 项目概述:用Python量化决策,告别“拍脑袋” 在数据分析、项目管理、产品选型甚至个人决策中,我们常常面临一个经典难题:面对一堆各有优劣的选项,到底哪个才是“最好”的?比如,要从几个供应商…

作者头像 李华