ARTI

看一看,试一试,再改成自己的。

程序与工作负载。

英文和中文 Transformer 阅读问答案例、可复现的比较,以及一个看得懂的神经程序。

01 / SHARED NEURAL PROGRAM

Bank 门控神经递推。

同一个公开 FormulaScan 在 PyTorch 与原生 JAX 中执行五步,返回隐藏状态与累计状态。所选 Bank 值获得有限、非零梯度。

可执行声明

由类型化 Add、Scale、sigmoid、tanh 组成的递推,拥有命名 carry 与 Bank 操作数。

Python 源码

已观测执行

输入、轨迹输出、返回 carry、所选梯度与有界 CPU JAX jit 对照。

记录

工作负载与评价

从具体工作负载, 检验所选配置。

查看比较结果

01 / LOCAL PYTHON · CPU

检查一个小型 Formula 机制。

运行阅读上手包后,可以在这个小型 CPU 程序中检查可学习数值操作数与返回状态。它展示机制,不代表任务效果。

程序原理说明
resource-program.py
from json import dumps
from torch import autograd, nn, tensor
from arti import mechanisms as api

pair = api.TensorType(("C",), (2,), dtype="float32")
signal = api.InputBinding("signal", pair)
carry = api.InputBinding("carry", pair)
bank = api.BankBinding("weight", "tutorial/carry-weight@1", "weight", api.TensorType((), (), dtype="float32"))
transition = api.add(carry, api.scale(signal, bank))
summary = api.reduce_tensor(transition, axis="C", mode="sum")
program = api.FormulaProgram.build(outputs=(summary, transition))
parameter = nn.Parameter(tensor(0.75))
provided = dict(signal=tensor([4.0, -2.0]), carry=tensor([1.0, 1.0]))
emitted = api.FormulaFabricV2(program)(inputs=provided, banks=dict(weight=bank.bind(parameter)))
readout, returned_carry = emitted.values
gradient = autograd.grad(readout, parameter)[0]
record = dict(readout=readout.item(), next_carry=returned_carry.detach().tolist(), weight_vjp=gradient.item())
print(dumps(record))

下载 Python 文件 ↗python resource-program.py
本地 CPU 运行结果

读出对权重的 VJP 为 2。原始 carry 保持不变,程序返回新的 carry。

{
  "readout": 3.5,
  "next_carry": [
    4.0,
    -0.5
  ],
  "weight_vjp": 2.0
}

这个例子只运行一次前向与 VJP,没有优化器更新。后续调用是否采用新 carry,由调用方决定。

02 / PUBLIC SOURCE

继续阅读源码。

这些链接指向本网站使用的精确公开源码提交。

数值组合

类型化操作数、可训练 Bank 值与梯度。

源码

显式递推

沿有界 FormulaScan 观察调用方拥有的 carry。

源码

应用任务

覆盖检查点、结果提交与离线移交的项目教程。

教程

原生回归任务

使用原生资源图、原始标签与任务自有损失的官方非语言示例。scikit-learn 数据依赖仅属于示例。

源码

训练恢复

检查已保存运行,恢复原始目标,或明确完成评价与导出。

源码