在 Transformer 模型处理算术运算如多位加法时,核心挑战在于进位(carry)传播的长程依赖:低位结果影响高位,需要模型在序列中维持状态。传统逐字符标记化导致序列冗长,注意力机制负担加重,难以在小型模型上训练稳定。Anadim 的 AdderBoard 项目精炼出 “进位传播标记化” 策略,通过固定长度零填充和输出反转,将问题简化为唯一长程依赖 —— 进位传递,使 6080 参数的微型 Transformer 实现 100% 准确率,无需显式溢出处理逻辑。
这种策略的核心观点是:标记化设计应匹配 Transformer 的自回归生成机制(从左到右),而加法进位天然从低位向高位传播。因此,反转输出序列,使生成从最低有效位(LSB)开始,顺应进位流向;同时零填充输入到固定 10 位,确保位置对齐,消除变长序列的复杂性。结果,模型无需学习停止信号或长度预测,仅专注列加法与进位更新。证据来自 anadim/smallest-addition-transformer-claude-code 仓库:2 层 decoder-only Transformer(d_model=16,heads=2,ff_dim=48),vocab=15(0-9、+、=、PAD、BOS、EOS),固定 seq_len=35。在 30K 步训练(~10 分钟 Apple MPS)后,10K held-out 测试集达 100% exact-match 准确率,展现经典 grokking 现象 —— 前 4K 步准确率近零,后突变至 99%+。
具体实现参数如下:
- 输入格式:两个操作数零填充至 10 位,格式
<bos>XXXXXXXXXX+YYYYYYYYYY=(X/Y 为 0-9 或 PAD)。 - 输出格式:结果反转并零填充至 11 位,后接
<eos>,如 123+45=168 → 输出86100000000<eos>(反转 168 补零)。 - 模型超参:
参数 值 层数 2 d_model 16 heads 2 ff_dim 48 vocab_size 15 seq_len 35 Pre-LN 是 bias 无 权重共享 输入 / 输出嵌入 - 训练设置:batch_size=256,lr=6e-4(cosine decay),warmup=100 步,AdamW(β1=0.9,β2=0.95),clip_grad=1.0。数据:随机生成 10 位加法对,train/val/test 各 100K/10K/10K。
- 监控要点:观察 loss 分解(输入 / 输出),准确率曲线;grokking 前关注 perplexity plateau,后验证泛化(虽固定长度,但测试未见样本)。
可落地复现清单:
- 环境:PyTorch ≥2.0,pip install torch transformers datasets。
- 数据生成:随机 uniform (0, 10^10-1),零垫输入,反转输出。
- 模型构建:GPT-style,无 pos_embed(因固定位置),RoPE 可选但未用。
- 训练脚本:循环至 val_acc >99.9%,保存 best.pt(~22K 步收敛)。
- 评估:
python eval.py --inference A B,输出A + B = RESULT [CORRECT/WRONG]。 - 优化扩展:
- 阈值:参数 <4K 失败,6K 阈值尖锐。
- 回滚:若 grokking 延迟,增 lr 至 1e-3 或 dropout=0.1。
- 泛化:测试 11 位(预期 OOD 失败),改变长需加长度 token。
- 监控:TensorBoard 追踪 train_loss、val_acc、perplexity;警报若 10K 步 acc<10%。
此设计揭示小型 Transformer 的计算极限:通过任务特定标记化,隐式编码进位状态于隐藏表示,注意力头专职传播(可视化可见低位 attend 高位)。风险包括固定长度不适变长输入,及 grokking 非确定性(种子敏感)。相较通用 LLM,此为 “手术刀” 方案,适用于嵌入式 AI 系统如边缘计算器。
资料来源:
- anadim/AdderBoard:挑战 leaderboard。
- smallest-addition-transformer-claude-code:完整代码与报告。
- HN 讨论:社区洞见手码 vs 训练权衡。
(正文字数:1028)