可执行声明
由类型化 Add、Scale、sigmoid、tanh 组成的递推,拥有命名 carry 与 Bank 操作数。
Python 源码看一看,试一试,再改成自己的。
英文和中文 Transformer 阅读问答案例、可复现的比较,以及一个看得懂的神经程序。
01 / SHARED NEURAL PROGRAM
同一个公开 FormulaScan 在 PyTorch 与原生 JAX 中执行五步,返回隐藏状态与累计状态。所选 Bank 值获得有限、非零梯度。
工作负载与评价
01 / LOCAL PYTHON · CPU
运行阅读上手包后,可以在这个小型 CPU 程序中检查可学习数值操作数与返回状态。它展示机制,不代表任务效果。
程序原理说明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))读出对权重的 VJP 为 2。原始 carry 保持不变,程序返回新的 carry。
{
"readout": 3.5,
"next_carry": [
4.0,
-0.5
],
"weight_vjp": 2.0
}这个例子只运行一次前向与 VJP,没有优化器更新。后续调用是否采用新 carry,由调用方决定。
02 / PUBLIC SOURCE
这些链接指向本网站使用的精确公开源码提交。