ARTI

从实测出发

同一计算, 再比较实现。

LoRA 可以表达为 ARTI Formula。先对齐同一计算与权重,核对不同实现;再查看此前改变了公式和挂载位置的中英文阅读实验。

同一公式,三种实现

LoRA, 就是一个 Formula 程序。

标准低秩更新是 ARTI 程序语言可以表达的一种计算。判断实现之前,先对齐这一计算。

y = Wx + (α / r) · B(Ax)

EM 按任务规则完全匹配的答案比例。 F1 预测与参考答案的词语 / 字符重合得分。

同一组已训练权重 · 种子 17 / 29 / 43

SQuAD 1.1

PEFT LoRA
EM ↑
56.77 ± 1.85
F1 ↑
64.22 ± 1.50
ARTI Formula LoRA
EM ↑
56.77 ± 1.85
F1 ↑
64.22 ± 1.50

CMRC2018

PEFT LoRA
EM ↑
46.88 ± 1.95
F1 ↑
70.77 ± 1.40
ARTI Formula LoRA
EM ↑
46.88 ± 1.95
F1 ↑
70.77 ± 1.40

将已训练 PEFT 的同一组 A/B 矩阵绑定到原生 LoRA Formula。保留相同 Qwen 基座、最后两层 v_proj、rank 32、alpha 32、零 dropout、无适配器 bias 与精度策略。宿主保持 BF16,适配器计算使用 FP32。

同一组已训练权重 · 种子 17 / 29 / 43
任务实现EM ↑F1 ↑
SQuAD 1.1PEFT LoRA56.77 ± 1.8564.22 ± 1.50
SQuAD 1.1ARTI Formula LoRA56.77 ± 1.8564.22 ± 1.50
CMRC2018PEFT LoRA46.88 ± 1.9570.77 ± 1.40
CMRC2018ARTI Formula LoRA46.88 ± 1.9570.77 ± 1.40

1,536 个留出生成答案与对应 PEFT 记录逐项相同。这些权重来自已有训练结果,尚未独立重训 ARTI LoRA;这里核对的是该配置的同一计算行为。

训练语义
每种语言、每个种子从同一权重出发,分别在 PEFT、手写 PyTorch 与 ARTI 中执行三次真实阅读任务更新。损失 / 参数梯度 / 更新后参数最大差值:0 / 0 / 0。
程序声明
原生构建器把更新展开为两次 contraction、一次缩放与一次相加。执行之前,通过 FormulaProgram.from_dict 从 JSON 声明重建程序。
Python / 声明 LoRA 程序
from arti import mechanisms as api

program = api.build_lora_program(
    input_dim=1024, output_dim=1024, rank=32,
    source_ref="arti/formula-operand-bank@1",
    dtype="float32",
    contract_accumulation_dtype="float32",
    pointwise_accumulation_dtype="float32",
)

程序接收 x、基座投影结果与 alpha/r;A、B 是 Bank 操作数。可运行脚本展示这些绑定及模型边界。

实际生成的答案

两个任务, 不同的程序选择。

测量日期 / 2026-10-12
英文阅读

SQuAD 1.1

跟着案例动手 ↗

EM 按任务规则完全匹配的答案比例。 F1 预测与参考答案的词语 / 字符重合得分。

SQuAD 1.1 · 256 个固定问题

固定基座

可学习值 · 0

EM ↑
55.08
F1 ↑
62.56
SiLU 残差 · PyTorch

可学习值 · 131,072 · 512.4 KiB

EM ↑
55.60 ± 0.81
F1 ↑
62.43 ± 0.54
LoRA · PEFT

可学习值 · 131,072 · 512.5 KiB

EM ↑
56.77 ± 1.85
F1 ↑
64.22 ± 1.50
SiLU 残差 · ARTI

可学习值 · 131,072 · 545.4 KiB

EM ↑
55.60 ± 0.81
F1 ↑
62.43 ± 0.54
SQuAD 1.1 · 256 个固定留出问题
公式 / 实现参数EM ↑F1 ↑权重文件
固定基座单次固定基座055.08—62.56——
SiLU 残差 · PyTorch3 个随机种子131,07255.60± 0.8162.43± 0.54512.4 KiB
LoRA · PEFT3 个随机种子131,07256.77± 1.8564.22± 1.50512.5 KiB
SiLU 残差 · ARTI3 个随机种子131,07255.60± 0.8162.43± 0.54545.4 KiB

EM、F1 为百分数,越高越好。适配方案报告种子 17 / 29 / 43 的均值和样本标准差;固定基座测量一次。

中文阅读

CMRC2018

跟着案例动手 ↗

EM 按任务规则完全匹配的答案比例。 F1 预测与参考答案的词语 / 字符重合得分。

CMRC2018 · 256 个固定问题

固定基座

可学习值 · 0

EM ↑
46.88
F1 ↑
71.71
SiLU 残差 · PyTorch

可学习值 · 131,072 · 512.4 KiB

EM ↑
48.31 ± 0.23
F1 ↑
72.15 ± 1.23
LoRA · PEFT

可学习值 · 131,072 · 512.5 KiB

EM ↑
46.88 ± 1.95
F1 ↑
70.77 ± 1.40
SiLU 残差 · ARTI

可学习值 · 131,072 · 545.4 KiB

EM ↑
48.31 ± 0.23
F1 ↑
72.15 ± 1.23
CMRC2018 · 256 个固定留出问题
公式 / 实现参数EM ↑F1 ↑权重文件
固定基座单次固定基座046.88—71.71——
SiLU 残差 · PyTorch3 个随机种子131,07248.31± 0.2372.15± 1.23512.4 KiB
LoRA · PEFT3 个随机种子131,07246.88± 1.9570.77± 1.40512.5 KiB
SiLU 残差 · ARTI3 个随机种子131,07248.31± 0.2372.15± 1.23545.4 KiB

EM、F1 为百分数,越高越好。适配方案报告种子 17 / 29 / 43 的均值和样本标准差;固定基座测量一次。

权重文件大小包含推理张量与 ARTI 图状态旁文件,不含分词器、JSON/TOML 声明和训练检查点。这份比较报告回答效果与保存资产大小,不声明速度或硬件效率优势。

此前实验实际测量了什么

SiLU 残差与 value projection 上的 LoRA,在这些固定任务上分数不同。公式、激活与挂载位置同时改变,无法据此分离框架影响,更不能推断 ARTI 无法表达 LoRA。

ARTI 与手写 PyTorch SiLU 程序生成相同答案,这是该公式的实现核对。PEFT 的 LoRA 行是另一种程序选择,已测量的输出继续保留供核对。

分数之外

先看清, 再选择。

PyTorch

亲手写出函数。

最后两层 MLP 后的 rank-32 down → SiLU → up → residual 模块。匹配 ARTI 的函数、初始值和数据顺序。脚本保存权重,模块重建逻辑保留在 Python 源码中。

PEFT LoRA

选择成熟的低秩适配器。

最后两层方形 value projection 上的 rank 32 / alpha 32 LoRA,无 bias、dropout。PEFT 保存权重和挂载配置。线性更新的挂载位置和激活,与残差程序不同。

PEFT LoRA 契约 ↗
ARTI Formula

把计算,和数值一起保存。

非线性残差声明为类型化 FormulaProgram,包含 Bank 操作数与命名输入输出资源。导出保留计算与可训练值;内置加载器从资产重建这个程序。

公开 Qwen recipe ↗

训练之后,也实际验证。

独立重载
独立进程加载 ARTI 资产后,复现 512 个留出答案。
受控续训
3 次更新的连续路径,与保存、重载再继续的路径具有相同参数和数据游标。

本地检查限定于这个公开 Qwen Formula 配置。PyTorch、PEFT 也能配合训练流程工具;本脚本没有声称它们缺少恢复能力。

已执行的协议

把已做的实验, 清楚留下。

基座与精度
Qwen/Qwen3-0.6B,固定提交 c1899de…e47ca。固定 BF16 宿主与 FP32 适配器。PyTorch 匹配 ARTI 初始化的 BF16 往返转换与共享 FP32 输入转换。
数据与切分
每种语言 512 个训练、128 个验证、256 个留出合格问题。按材料 SHA256 排序,从训练移除验证材料,留出来自公开 dev。保留原始 ID 和独立参考答案。
入选规则
完整原生 chat 与答案不超过 384 tokens,首个答案不超过 32 tokens。不静默截断。这是短上下文子集,尤其中文;排除数量也是记录的一部分。
优化
AdamW,lr 0.001,weight decay 0.01,clip 1。批量 8、200 次更新、固定学习率。每个种子使用相同长度分组顺序。选择最后检查点,不用留出集调参。
监督
仅监督最终 assistant 答案到原生 EOS;屏蔽 user、system 和 padding。原生模板使用 enable_thinking=false。PAD 与 EOS 相同时,真实 EOS 仍参与监督。
生成与评分
贪心生成最多 32 个新 token,保持相同左侧补齐与 EOS。SQuAD 使用官方可回答问题 EM / token F1,对参考取最大值;CMRC 使用官方 Python 3 v6 混合分词 / 最长公共子串 F1。训练损失仅用于诊断。
复现依赖
Torch 2.11.0 · Transformers 5.13.0 · PEFT 0.19.1 · ARTI 3.3.0

固定公开 dev 切片,不是官方隐藏测试榜成绩或生产 SLO。

查看全部入选与排除数量

SQuAD 1.1

来源总数合格超长答案 >32
train87,59984,6882,707204
dev10,57010,1693947

CMRC2018

来源总数合格超长答案 >32
train10,1424,3805,181581
dev3,2191,4221,76235

打开记录

带走脚本, 核对答案。

按任一上手案例安装固定版本依赖,再在本地运行全部方案和种子。所有运行复用首次下载。

终端 / 完整比较
python reading_qa.py all --work reading-qa-work
python reading_verify.py --work reading-qa-work
python formula_lora.py --work reading-qa-work

每份 CSV 包含一次固定基座与九次适配运行,每次 256 个问题。数据摘录和参考保留 CC BY-SA 4.0 归属;Qwen 权重按 Apache 2.0 单独下载。