4. 经典数据到量子态的编码范式

把经典数据送进量子线路,第一步不是设计变分电路,而是决定“数据以什么形式落在量子态上”。同一个长度为 N 的经典向量,可以被写成计算基态的组合、振幅的系数、旋转门的转角,或者只体现在相对相位里。编码方式一旦确定,后续可用的量子操作、测量方式、所需量子比特数和线路深度都被同时锁定。本节按“占用资源—表达能力—实现代价”三条线索,梳理五种主流编码范式,并给出统一的描述框架。

一、五种编码范式的定义与资源对照

设经典数据向量为 x = (x₀, x₁, …, x_{N-1}),量子比特数为 n,则 Hilbert 空间维度为 2ⁿ。五种编码的核心区别在于:数据被放在量子态的哪个自由度上。

  • 基态编码(Basis Encoding):把经典比特串直接映射为计算基态,如 x = 1011 → |1011⟩。数据只出现在基态标签上,振幅恒为 1。它本质是“把经典比特搬到量子寄存器”,不产生叠加。
  • 振幅编码(Amplitude Encoding):令 |ψ⟩ = Σᵢ xᵢ|i⟩,数据成为各基态的振幅。要求 ‖x‖ = 1,否则需先归一化。用 n 个量子比特即可承载 2ⁿ 个数据点,是资源效率最高的方案。
  • 角度编码(Angle Encoding):每个量子比特承载一个数据分量,通过 R_y(θᵢ) 或 R_x(θᵢ) 把 xᵢ 变成旋转角,如 θᵢ = xᵢ 或 θᵢ = arctan(xᵢ)。数据落在布洛赫球的极角上,n 个比特承载 n 个分量。
  • 相位编码(Phase Encoding):数据只写入相对相位,如 |ψ⟩ = (|0⟩ + e^{iφ(x)}|1⟩)/√2,其中 φ(x) 由数据决定。振幅不变,信息藏在相位中,必须通过干涉才能读出。
  • 统一编码框架(Unified/Data Re-uploading):把编码视为一个含参酉算子 U(x),上述四种都是它的特例。数据可以在多层线路中反复“重上传”,使量子态对 x 的依赖从线性扩展到高次多项式。

下表给出关键资源对照,其中 N 为数据维度,n 为量子比特数,d 为线路深度量级。

编码方式量子比特数数据落点典型线路深度读出方式
基态编码n = N基态标签O(1)直接测量
振幅编码n = log₂N振幅系数O(N) 或 O(poly n)态层析/干涉
角度编码n = N布洛赫极角O(1)测量期望值
相位编码n = N相对相位O(1)干涉测量
统一编码n 可调U(x) 整体O(L) 层依任务而定

二、统一编码框架:把编码写成含参酉算子

与其把五种方式当成互不相干的技巧,不如统一写成:

|ψ(x)⟩ = U(x) |0…0⟩
U(x) = U_L(x_L) · … · U_2(x_2) · U_1(x_1)

其中每一层 U_k(x_k) 由单比特旋转和固定纠缠门组成,x_k 是该层用到的数据子集。基态编码对应 U(x) 为把 x 的比特翻转到 |1⟩ 的 X 门序列;角度编码对应每层只含 R_y(xᵢ);相位编码对应 R_z(φ(xᵢ));振幅编码则对应一个把 |0…0⟩ 映射到目标振幅向量的制备线路。统一框架的价值在于:它让“编码”和“变分线路”不再割裂,数据重上传次数 L 直接决定模型可表达的函数阶数。

判断该用哪种编码,先问三个问题:数据维度 N 与可用量子比特数 n 的关系是什么?任务需要读取的是振幅、相位还是期望值?硬件允许的线路深度是多少?

三、实现要点与示例参数

以 N = 4 的向量 x = (0.5, 0.5, 0.5, 0.5) 为例,它已归一化,可直接做振幅编码:用 n = 2 个量子比特制备 |ψ⟩ = 0.5|00⟩ + 0.5|01⟩ + 0.5|10⟩ + 0.5|11⟩,即 H⊗H|00⟩。若改用角度编码,则需 n = 4 个量子比特,每个执行 R_y(0.5),得到 ⊗ᵢ (cos0.25|0⟩ + sin0.25|1⟩)。两者承载同一份数据,但前者省比特、制备线路深,后者费比特、线路浅。

相位编码的典型用法是:先制备 |+⟩,再施加 R_z(φ(xᵢ)),最后用 H 门干涉后测量。若 φ(xᵢ) = 2xᵢ,测量 |0⟩ 的概率为 cos²(xᵢ),据此可反推数据。注意相位编码的读出必须依赖干涉,单独测量 Z 基无法看到相位信息。

振幅编码要求向量归一化,且制备任意 N 维态一般需要 O(N) 个门;若数据维度很大而线路深度受限,应优先考虑角度编码或数据重上传方案,而不是强行做全振幅制备。

四、编码选择与数据流关系

下图把五种编码放在同一张“数据流—资源”关系图中:左侧是经典数据进入点,中间是数据在量子态上的落点,右侧是读出路径与资源代价。它帮助你在设计线路前快速定位该选哪条路径。

经典数据 → 量子态编码:数据落点与资源关系 经典数据 x 维度 N 归一化? 比特串 / 实数 相位参数 φ(x) 可用比特 n 深度预算 d 编码范式(数据落点) 基态编码 x → |x⟩,振幅=1,n=N 振幅编码 |ψ⟩=Σxᵢ|i⟩,n=log₂N 角度编码 R_y(xᵢ),数据在极角,n=N 相位编码 R_z(φ(xᵢ)),信息在相对相位 统一编码框架 |ψ(x)⟩=U(x)|0…0⟩,可重上传 L 层 读出路径与代价 直接测量 Z 基 基态编码 / 角度编码 干涉后测量 相位编码 / 振幅编码 态层析 / 影子层析 振幅编码完整读出 期望值估计 统一编码 / 变分任务 代价权衡 比特数 ↔ 线路深度 ↔ 读出次数 选择顺序:先看 n 与 N 的关系,再看读出方式,最后受线路深度约束

五、选择策略与常见误区

实际工程中,编码选择通常遵循以下判断顺序。第一,若数据本身就是离散标签或比特串,且任务只需分类判别,基态编码最直接,线路几乎无制备开销。第二,若数据维度 N 远大于可用比特数 2ⁿ,振幅编码是唯一能在多项式比特内承载指数级数据的方案,但必须接受 O(N) 量级的制备深度,或使用带结构的制备线路。第三,若硬件是近期含噪设备、深度预算紧张,角度编码和相位编码更实用,代价是比特数随 N 线性增长。第四,若任务需要模型表达高次非线性函数,应在统一框架下增加数据重上传层数 L,而不是单纯堆叠变分层。

常见误区有三个。其一,把角度编码的转角直接取为原始数据而不做缩放,导致 xᵢ 超出 [0, 2π) 后出现周期性混叠,不同数据映射到同一量子态。其二,认为相位编码可以像角度编码一样直接测量,忽略了相位必须通过干涉转化为振幅差才能读出。其三,在振幅编码前忘记归一化,导致制备出的态并非目标向量,后续所有测量结果都失去意义。

工程建议:在代码中把编码层单独封装为函数 encode(x, mode),并固定记录 mode、n、归一化常数与缩放因子。这样在更换编码方式或调整数据范围时,可以快速定位是编码环节还是变分环节导致结果变化。

把五种编码放在统一框架下理解后,后续设计特征映射时就有了明确的坐标系:先确定数据落在振幅、角度还是相位上,再确定需要多少量子比特和多少层重上传,最后才进入具体的门序列实现。编码不是预处理步骤,而是量子模型表达能力的第一道决定因素。