权重保存与酉矩阵拟合

适用版本 · ArcQML 0.1.0

本页目录

11.1 权重检查点的文件契约

save_weights 写入格式化 JSON,固定 format 为 arcqml/weights。每个参数记录 name、dtype 与 value;记录先按名称排序,使相同状态得到稳定顺序。写入只接受 numel=1 的 F32/F64 Circuit Parameter。

json
{
  "format": "arcqml/weights",
  "num_qubits": 2,
  "parameters": [
    {"name": "ry_q0_theta_0", "dtype": "f64", "value": 0.36154268969437336}
  ]
}

load_weights 在写入任何参数前完整校验 format、量子比特数、参数名集合、重复名称、dtype 和有限 value;随后才构造替换 Tensor 并写入 Parameter,成功写入后清空各参数梯度。校验失败不会留下半恢复电路。它不会比对门拓扑,因此调用方必须以预期的同构 Circuit 重建模型。

11.2 DenseUnitary 的数据契约

DenseUnitary 保存 num_qubitsdimension 和 row-major C64 数据。dimension 必须是 2 的幂;公开数据先使用输出计算基索引,再使用输入计算基索引。DenseUnitary::from_tensor 只检查 C64、二维方阵、连续复制后的长度和有限性;公共 unitary_from_tensor 在此基础上使用以下默认容差完整验证酉性:

εunitary=1010.\varepsilon_{\mathrm{unitary}}=10^{-10}.

unitary_from_circuit 通过对所有计算基初态组成的内部 batch 执行 Circuit,再转置为公开 row-major 布局。对于 n 个量子比特,其空间复杂度为:

O(4n).O(4^n).

因此,该功能限定为小规模电路比较和综合。

11.3 酉保真度、损失与解析梯度

目标整体酉矩阵与当前电路整体酉矩阵的迹重叠、整体酉保真度和损失分别定义为:

s=Tr ⁣(UtargetU(θ)),FU=clamp ⁣(s2d2,0,1),LU=1FU.\begin{aligned} s&=\operatorname{Tr}\!\left(U_{\mathrm{target}}^{\dagger}U(\boldsymbol{\theta})\right),\\ F_U&=\operatorname{clamp}\!\left(\frac{\lvert s\rvert^2}{d^2},0,1\right),\\ L_U&=1-F_U. \end{aligned}

第 9 章的纯态 fidelity 不同,此处会显式执行从 0 到 1 的区间截断,以限制数值舍入造成的越界。

unitary_loss 返回可纳入统一自动微分的 F64 标量。其反向先按逆序恢复前向 StateBatch,再按照下式累积每个参数的梯度,并乘上外层标量上游梯度:

LUp=2d2Re ⁣(ssp).\frac{\partial L_U}{\partial p} =-\frac{2}{d^2} \operatorname{Re}\!\left( s^*\frac{\partial s}{\partial p} \right).