搬家的时候,你站在一屋子杂物面前会怎么选?有人把所有衣服塞进真空压缩袋,一个袋子装下整个衣柜——这是幅度编码;有人为每件易碎品定制独立收纳盒,件件分明互不挤压——这是角度编码;还有人干脆连原包装都不拆,整箱直接抬上车——这是 basis 编码。量子机器学习里,把经典数据“搬”进量子计算机的过程,就叫数据编码,而选择哪种打包方式,直接决定了这趟“搬家”是轻快、稳妥还是原封不动。 量子核方法本质上是一位“相似度鉴定师”,它通过测量两个数据点在量子态空间中的接近程度,来判断它们有多像。而编码策略就是这位鉴定师的专业手艺——同样的数据,用不同的方式映射到量子态上,得出的相似度结论可能截然不同。这篇文章会带你认识三种主流编码方案、它们背后的资源权衡,以及如何在真实场景中选对“打包方式”。

岗位关联

理解数据编码策略,是设计高表达力量子核模型的第一步。掌握“如何根据数据特性选对编码”,你就能在量子机器学习项目中把有限的量子比特花在刀刃上,做出既省资源又性能优异的核心算法选型。

目录
  1. 可视化演示
  2. 编码策略总览
  3. 幅度编码原理
  4. 角度编码机制
  5. Basis编码方法
  6. 编码深度影响
  7. 资源利用率权衡
  8. 核函数性质关联
  9. 场景适用性分析
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示幅度编码将数据映射为量子振幅、角度编码用RY门参数化旋转及三种编码策略的效率对比。

本节配有交互动效(进入视口后自动加载,约 3KB)。

幅度编码Amplitude Encoding 经典数据x 量子振幅α |ψ⟩=Σαᵢ|i⟩ N维数据仅需log₂N个量子比特高效率编码

编码策略总览

搬家师傅的第一件事从来不是动手装箱,而是先摸清家底:有多少大衣、多少易碎品、多少舍不得扔的老物件。一份打包路线图决定了后面每一件物品的归宿。数据编码也是同理——我们手里的经典数据可能是房价、购物记录、图像像素,而量子计算机只懂“量子态”这一种语言。编码策略就是那张从经典世界通往量子世界的路线图。

从数学上讲,编码策略定义了一个映射 $\phi$,它把经典空间中的每个数据点 $x$ 变成一个量子态 $|\phi(x)\rangle$。量子核方法之所以依赖编码,是因为它的全部判断都建立在量子态之间的“相似度”上。类比来说,鉴定师从不出门看实物,只看你寄来的照片——照片怎么拍(编码怎么映射),决定了鉴定结论的可信度。

在量子核方法的框架下,核函数被定义为两个量子态内积模的平方。这相当于鉴定师拿着两个“打包后的包裹”,用一把量子尺子测量它们的重合程度。三种主流编码策略——幅度编码、角度编码和 basis 编码——就是三套截然不同的打包风格:极限压缩、独立分隔、原箱直运。

打包路线图画好了,接下来我们要动手实践三种打包方式。记住一个关键点:不是所有东西都适合塞同一只箱子,同样,不是所有数据都适合同一种编码。

k(x,x′)=∣⟨ϕ(x)∣ϕ(x′)⟩∣2k(x, x') = \left| \langle \phi(x)|\phi(x')\rangle \right|^2
这个公式是量子核方法的“总开关”:它把经典数据点的相似度,转化为量子态内积的模平方。核值越接近 1,两个数据点在量子特征空间中越“重合”。
  1. 取出两个数据点从数据集中挑选任意两个样本作为输入,它们可以是特征向量、图像或任何经典数据结构。
    x,  x′∈RNx,\; x' \in \mathbb{R}^N
  2. 套用编码映射用选定的编码策略分别把两个数据点变到量子态空间,得到两个归一化的量子态。
    ϕ:x↦∣ϕ(x)⟩\phi: x \mapsto |\phi(x)\rangle
  3. 计算内积用量子线路测量两个量子态的内积,内积越大说明两个态在空间中越接近。
    ⟨ϕ(x)∣ϕ(x′)⟩\langle \phi(x)|\phi(x')\rangle
  4. 取模平方内积是复数,取模平方后得到实数核值,供经典支持向量机等模型直接使用。
    k(x,x′)=∣⟨ϕ(x)∣ϕ(x′)⟩∣2k(x, x') = |\langle \phi(x)|\phi(x')\rangle|^2

幅度编码原理

想象一个极限收纳达人:她把十几件棉衣全部抽成真空,压成豆腐块大小,塞进旅行箱的角落。这就是幅度编码信奉的哲学——把数据的所有信息压缩进量子态的“振幅”里。在量子力学中,振幅可以理解为每个量子态分量上的“音量旋钮”,旋钮拧多大,这个分量就占多重的比例。

幅度编码的做法相当直接:把经典向量 $x$ 的每一个分量直接当作量子态对应基向量上的系数。但量子态必须归一化——就像真空袋不能无限压缩,总有一个体积上限。所以编码前要先把数据向量缩放到“单位长度”,让它的二范数等于 1。这一步相当于把所有衣服压实到同一个标准体积,然后再装入袋中。

这种编码最惊人的地方在于资源效率。一个由 $N$ 个分量组成的经典向量,理论上只需要 $\log_2 N$ 个量子比特就能装下,因为 $N$ 个振幅天然存在于 $2^n$ 维的量子态空间中。这就是指数级负载能力:数据维度翻一倍,需要的量子比特只增加一个。但代价也很明显——把所有信息压进一个袋子,任何微小的噪声扰动都可能让数据严重变形,而且几乎无法“定向取出”某一个特征值。

说到这里你可能会问:既然如此节省空间,为什么不全用幅度编码?因为它的“取出”很麻烦——要把压缩袋重新拆开才能拿到某件特定衣物。在核函数计算中,这种模式会带来高度集中的核值分布,进而影响模型的分辨能力。我们不妨先按下这个悬念,看看另一种更“规矩”的打包法。

∣ϕ(x)⟩=∑i=1Nxi∣i⟩,∥x∥2=1|\phi(x)\rangle = \sum_{i=1}^{N} x_i |i\rangle, \quad \|x\|_2 = 1
幅度编码把数据向量的每个分量直接填入量子态振幅,相当于把整柜衣物压进一个真空袋。空间利用率极高,但精密的压缩也让信息变得脆弱。
  1. 准备基态集合$|i\rangle$ 代表第 $i$ 个计算基态,它们是量子态空间的一组“标准货架”,每个位置收纳一个数据分量。
    {∣1⟩,∣2⟩,…,∣N⟩}\{|1\rangle, |2\rangle, \dots, |N\rangle\}
  2. 填入振幅系数把 $x_i$ 直接作为 $|i\rangle$ 前面的系数,相当于把第 $i$ 件衣物的体积标在对应货架上。
    xi∣i⟩x_i |i\rangle
  3. 归一化约束$\|x\|_2 = 1$ 保证编码后的量子态长度始终为 1,这是量子力学的基本法则,也是压缩袋的“标准体积”。
    ∑i=1N∣xi∣2=1\sum_{i=1}^{N} |x_i|^2 = 1

角度编码机制

比起极限收纳达人,你可能更熟悉另一种人:她们会把每件易碎品分别装进独立的泡沫盒,盒子外还贴好标签。角度编码就是这样的性格——每个特征值有自己专属的量子比特,不跟别人挤。具体来说,每个特征值 $x_i$ 被当作一个旋转角度,让对应的量子比特绕 y 轴转动,转多少度,就由这个特征值决定。

这种“一个特征一个比特”的规则,带来一个显著的好处:特征之间天然独立。数据点各个维度的信息各自占据一个收纳盒,互不干扰。我们想看第 3 个特征,“打开第 3 号盒子”即可,逻辑清晰、实现简单。N 维特征向量就用 N 个量子比特,一一对应,按顺序旋转。

不过,独立也意味着老老实实地线性扩张。维度从 4 变成 8,量子比特就得从 4 个变成 8 个,没有捷径可走。类比来说,独立收纳盒的方案虽然整齐,但占用的货架空间会随物品数量线性增长。在量子比特极为昂贵的 NISQ 时代,这可是一笔不小的开销。但正因为实现简单、抗噪声能力相对强,它成为目前量子核实验中最常用的编码方式。

角度编码的“规矩”让它特别适合稠密的数值型数据——每一维都有真材实料的信息,值得单独开箱。但如果你遇到的是本身就带离散标签的数据,又该用什么打包方式呢?这就是下一位打包师傅的风格了。

∣ϕ(x)⟩=⨂i=1nRy(xi)∣0⟩|\phi(x)\rangle = \bigotimes_{i=1}^{n} R_y(x_i)|0\rangle
角度编码把每个特征值变成一个量子比特绕 y 轴的旋转角,再对所有量子比特做张量积。每个特征独立拥有一个“收纳盒”,简单但按维度线性消耗量子比特。
  1. 定义单比特旋转门$R_y(\theta)$ 表示绕 y 轴旋转 $\theta$ 角度的量子门,旋转角正好可以携带特征值信息。
    Ry(xi)=exp⁡(−ixiY/2)R_y(x_i) = \exp(-i x_i Y / 2)
  2. 逐特征施加旋转对第 $i$ 个量子比特施加 $R_y(x_i)$,相当于把第 $i$ 件物品放进第 $i$ 号盒子并贴好角度标签。
    Ry(xi)∣0⟩R_y(x_i)|0\rangle
  3. 拼接所有比特用张量积 $\bigotimes$ 把所有量子比特组合成完整的 $n$ 比特量子态,每个盒子各就各位。
    ∣ϕ(x)⟩=∣ϕ1(x1)⟩⊗∣ϕ2(x2)⟩⊗⋯⊗∣ϕn(xn)⟩|\phi(x)\rangle = |\phi_1(x_1)\rangle \otimes |\phi_2(x_2)\rangle \otimes \cdots \otimes |\phi_n(x_n)\rangle

Basis编码方法

有这样一种搬家场景:你订了一车新家具,原厂纸箱都没拆,搬运工直接整箱抬进屋里。basis 编码就是这么原汁原味——它不做任何压缩或旋转,把数据的每个特征二值化后,直接映射到量子比特的计算基态上。比如某特征值大于 0 记作 1,小于等于 0 记作 0,一串 0/1 就构成了量子比特的底层状态。

这种编码的初衷是“忠实直译”。它不像幅度编码那样把数值叠加进振幅,也不像角度编码那样加工成旋转角,而是直接告诉量子计算机:这就是比特串,你拿去用吧。因此从经典计算的角度看,它是最容易理解、最容易调试的编码方式。你可以把每个量子比特想象成一个贴了“开/关”标签的灯泡,数据决定每个灯泡亮还是灭。

但直译也意味着“原箱不拆”。连续数值一旦被二值化,就丢失了量的概念——你只知道“收入大于平均水平”,不知道具体高出多少。许多真实任务中,这种粗粒度的信息表达不足以支撑精细的分类边界,所以 basis 编码常与特征工程中的分箱、哈希等预处理手段配合使用,先精炼信息再上车。

三种打包方式的基本手艺我们都会了。但搬家师傅都知道,真正决定搬家成败的细节,往往在于“打包多少层”——是缠一层保鲜膜还是裹三层气泡柱?这就引出了编码深度的完整话题。

∣x⟩=∣b1b2⋯bn⟩,bi∈{0,1}|x\rangle = |b_1 b_2 \cdots b_n\rangle, \quad b_i \in \{0, 1\}
Basis 编码把每个特征与阈值比较后得到二进制位,直接映射到计算基态。相当于原箱搬运,直观可靠但丢失了数值的细腻程度。
  1. 阈值二值化把连续特征值与阈值比较,得到二进制位 $b_i$,这是“开/关”的判断步骤。
    bi={1xi>θi0xi≤θib_i = \begin{cases} 1 & x_i > \theta_i \\ 0 & x_i \leq \theta_i \end{cases}
  2. 拼成基态标签把所有二进制位按顺序排列,得到一个长度为 $n$ 的比特串,它就是量子态的名称标签。
    b1b2⋯bnb_1 b_2 \cdots b_n
  3. 映射到计算基态比特串整体对应量子态空间中的一根坐标轴,量子计算机直接读取这个状态作为输入。
    ∣x⟩=∣b1⟩⊗∣b2⟩⊗⋯⊗∣bn⟩|x\rangle = |b_1\rangle \otimes |b_2\rangle \otimes \cdots \otimes |b_n\rangle

编码深度影响

很多人在打包易碎品时有个朴素经验:多裹几层总没错。但裹得太厚,箱子就塞不进车厢了。编码深度就是那个“裹几层”的旋钮——它决定了量子线路在完成数据编码后,还要叠多少层带纠缠门的变换。叠得越多,量子态之间的纠缠结构越丰富,理论上表达能力越强。

可以在脑海中想象一个“多层三明治”:底层是基础编码(比如角度编码),往上每加一层,就相当于在三明治里多加一片芝士、一片火腿。更多层次意味着更多纠缠路径,量子特征空间也就越复杂,能把更纠缠的数据撕开分类边界。这也是把编码深度调高,模型在小样本上表现更好的原因——表达力上去了。

但量子硬件不是永久免费的三明治材料。每一层门都会引入噪声,线路深度翻倍时,退相干误差可能以更快的速度累积。于是出现了一个“泛化拐点”:深度较浅时,加深线路能提升模型提取特征的能力;翻过某个临界点后,噪声主导了一切,测试误差反而回升。这就像搬家时给箱子缠胶带——一开始越来越牢固,缠到后来变成了解不开的纸团。

打包层数的分寸感,反过来逼我们精打细算货架空间。既然每层缠裹都有成本,那三种编码的基础成本——量子比特消耗,自然就成了先算的账。

Sarray∝dcircuit×nqubitsS_{\text{array}} \propto d_{\text{circuit}} \times n_{\text{qubits}}
线路规模正比于编码深度与量子比特数的乘积。深度越大,纠缠越丰富,但噪声也随之累积,性能会先升后降。
  1. 定义线路总规模$S_{\text{array}}$ 表示整个量子线路的层数规模,它是执行编码与变换所需的全部资源度量。
    Sarray=dcircuit×nqubitsS_{\text{array}} = d_{\text{circuit}} \times n_{\text{qubits}}
  2. 刻画深度维度$d_{\text{circuit}}$ 是线路深度,即连续执行量子门的层数,深度每加 1,纠缠结构就多一层。
    dcircuit=层数d_{\text{circuit}} = \text{层数}
  3. 表明线性放大总规模随深度和比特数线性放大,提醒设计者始终要掂量资源预算。
    Sarray∼O(d⋅n)S_{\text{array}} \sim O(d \cdot n)

资源利用率权衡

搬家公司的报价单上,最醒目的一栏往往是“用车数量”。量子计算中的“车”就是量子比特——由于当今量子硬件只有几十到几百个比特,用量子比特数衡量资源消耗是再自然不过的事。三种编码在这里的分化极其明显,恰好对应三种朴素直觉。

幅度编码是“空间魔术师”。一个 $N$ 维向量按理论只需 $\log_2 N$ 个比特,维度为 16 时只需 4 个比特,维度为 1024 时也只要 10 个比特。这相当于把所有家具拆成木板,用一套积木的逻辑重新组装进一个小柜子,极大提升比特利用率。但代价是,后续要对“木板”做任何微调都得整柜拆开,操作成本极高。

角度编码和 basis 编码则是“老实人”:它们都花 $n$ 个比特来装 $n$ 个特征,一对一,不搞邪门歪道。虽然比特数随维度线性增长,但胜在每一步操作都直观可控,线路实现简单,天然适合在噪声较大的器件上运行。于是资源角度的核心矛盾出现了:幅度编码用复杂度和脆弱性换比特数,角度编码用比特数换稳定性和易用性。

资源账算完,我们需要回到核函数这位“相似度鉴定师”身上——毕竟省下再多比特,最终也得靠核值说出个一二三来。不同编码喂给它的量子态,决定它下判断时的把握和姿势。

log⁡2Nvsnfeatures\log_2 N \quad \text{vs} \quad n_{\text{features}}
幅度编码的量子比特需求是数据维度的对数,角度与 basis 编码是线性。一个是压缩袋,一个是独立盒,资源账单截然不同。
  1. 幅度编码侧$\log_2 N$ 表示一个 $N$ 维向量压进 $n$ 个比特只需满足 $2^n \geq N$,故名对数级。
    log⁡21024=10\log_2 1024 = 10
  2. 角度基础侧$n_{\text{features}}$ 表示每个特征老老实实配一个比特,维度多少比特就多少。
    nqubits=nfeaturesn_{\text{qubits}} = n_{\text{features}}

核函数性质关联

想象鉴定师拿到两个包裹,他关心的不是包裹里有什么,而是两个包裹的开箱指纹有多像。在量子核方法里,这个“指纹”就是量子态的内积几何结构。编码方案不同,指纹的形状就不同——有的指纹方方正正好比对,有的指纹花纹繁复绕眼睛。

角度编码的指纹有一个非常鲜明的特征:周期性。因为旋转角天然以 $2\pi$ 为周期,当两个数据点的对应特征之差恰好等于 $2\pi$ 的倍数时,它们会被判定为“一模一样”。这带来一个有趣的后果——角度编码的量子核函数可以写成一系列余弦函数乘积的闭式形式,本质上等价于一个带周期性扰动的经典核。用得好,它可以捕获经典核无法表达的循环模式;用得不好,周期性会让距离很远的点错误地“撞脸”。

更值得警惕的是核值分布的集中化问题。幅度编码把大量信息压在少数几个振幅上,测量内积时结果往往偏向极端值或挤在一小段区间里,梯度信号微弱,模型很难训练。这就像验钞灯下所有钞票都显示同一种防伪光,鉴定师反而分不出真假。因此,核值在 0 到 1 之间的分布形态,直接决定了量子核模型的分辨能力和可训练性。

现在我们已经集齐了编码家族的全套家底:压缩的、旋转的、直译的,以及深度的分寸和资源的账单。最后一问是实战问题——不同的数据场景,到底该请哪位师傅出场?

kθ(x,x′)=∏i=1ncos⁡2(xi−xi′)k_{\theta}(x, x') = \prod_{i=1}^{n} \cos^2(x_i - x'_i)
角度编码对应的量子核函数是逐特征余弦差的乘积。每个维度贡献一个周期性因子,乘积越接近 1,两个数据点在量子空间越接近。
  1. 聚焦单个特征先看第 $i$ 个特征在编码前后的差异 $(x_i - x'_i)$,差异越小,这个维度对相似度的贡献越大。
    Δi=xi−xi′\Delta_i = x_i - x'_i
  2. 求余弦平方$\cos^2(\Delta_i)$ 来自量子态内积的模平方,它把单个维度的距离转化为 0 到 1 的相似度得分。
    cos⁡2(xi−xi′)∈[0,1]\cos^2(x_i - x'_i) \in [0, 1]
  3. 连乘所有维度乘积形式表明所有维度必须同时接近,核值才不会塌缩到 0。只要有一个特征差异很大,整体相似度就锐减。
    kθ(x,x′)=∏i=1ncos⁡2(Δi)k_{\theta}(x, x') = \prod_{i=1}^{n} \cos^2(\Delta_i)

场景适用性分析

搬家行业有个不成文的规矩:先看东西再谈方案。如果是搬一个图书馆,最重要的是空间利用率;如果是搬一屋子水晶杯,最重要的是防碰撞。数据编码策略的选型逻辑完全一致——没有绝对最优的编码,只有最匹配数据特性的选择。

高维稀疏数据(比如用户-物品推荐矩阵、基因表达特征)是幅度编码的主战场。这类数据很多维度都是 0,可压缩性极强,用对数级比特装载海量维度,性价比无敌。但记得要先做归一化和特征筛选,因为稀疏矩阵中的极端值会主导整个振幅分布。

低维稠密数据(比如房价预测的户型面积、地段评分,或金融风控的客户画像)更适合角度编码。维度不多,比特成本可控,而且逐特征独立的旋转角能够保留数值的细腻梯度,核函数的周期特性还能捕捉经典核看不到的循环模式。至于强离散的类别型特征(比如用户等级、产品类目),直接用 basis 编码配合标签编码器,把类别转成 0/1 码即可,简单高效不折腾。

现实项目中还常出现“混合策略”:一部分特征用角度编码保留连续语义,另一部分特征现做分箱再用 basis 编码贴标签。就像搬家师傅把书装箱、把水晶杯单独裹泡沫,而把原厂大件直接整箱搬——组合拳打好了,才是在真实量子噪声环境下兼顾资源与性能的关键。

打包方案定稿,搬家车才能顺利出发。从路线图到三种打包手艺,再到深度火候、资源账单、内核指纹和场景诊断,这套完整的“数据编码选型心法”就是你踏入量子核方法世界的敲门砖。记住:没有一种编码包打天下,但只要你读懂了数据、看透了资源、算清了权衡,就永远能选出最合适的那个箱子。

enc∗=arg⁡max⁡enc(Expr(enc)−λ⋅Cost(enc))\text{enc}^* = \arg\max_{\text{enc}} \left( \text{Expr}(\text{enc}) - \lambda \cdot \text{Cost}(\text{enc}) \right)
编码选择本质上是一个权衡最优化:表达力减去资源成本,选得分最高的方案。其中 $\lambda$ 是你要自己定的“心疼指数”。
  1. 枚举候选方案对幅度、角度、basis 及其组合逐一打分,每一项都代表一种打包手艺。
    enc∈{amplitude,angle,basis}\text{enc} \in \{\text{amplitude}, \text{angle}, \text{basis}\}
  2. 评估表达力$\text{Expr}(\text{enc})$ 表示该编码在目标数据上提取判别信息的能力,通常用交叉验证核模型的准确率来估。
    Expr(enc)=验证集性能\text{Expr}(\text{enc}) = \text{验证集性能}
  3. 扣除资源成本$\text{Cost}(\text{enc})$ 乘以系数 $\lambda$ 作为惩罚项,比特数越多、线路越深、成本越高,评分越低。
    Cost(enc)=α⋅nqubits+β⋅dcircuit\text{Cost}(\text{enc}) = \alpha \cdot n_{\text{qubits}} + \beta \cdot d_{\text{circuit}}

AI 应用场景

药物筛选中的分子相似度比对

阶段:量子特征工程

解决的问题:药物分子数据库动辄包含数百万个候选分子,经典指纹(如摩根指纹)计算分子间相似度的开销巨大,且难以捕获量子化学层面的电子结构相似性。传统方法往往在“算得动”和“算得准”之间二选一。

具体案例:某 AI 制药初创公司把分子的量子化学描述符(如能量、偶极矩等 128 维向量)用幅度编码压缩到 7 个量子比特上,构建量子核矩阵后送入支持向量机,对候选分子做活性筛选。在 5 万分子的验证集上,top-10 命中率比经典 RBF 核提升了约 18%。

金融风控中的客户画像聚类

阶段:量子数据处理

解决的问题:银行风控系统的客户特征大多是稠密数值(收入、消费频次、负债率等),经典聚类算法对非线性关系和高阶交互不敏感,而全连接深度网络又需要大量标注数据。

具体案例:某股份制银行实验团队采用角度编码,将 12 维客户画像特征逐维旋转到 12 个量子比特上,构建量子核聚类模型识别高风险客群。相比经典高斯核聚类,在精确率上提升约 6 个百分点,同时线路浅、抗噪好,在含噪量子模拟器上依然表现稳定。

高维稀疏特征的量子核分类

阶段:量子模型训练

解决的问题:推荐系统和文本分类中常见的 one-hot 稀疏特征动辄上万维,经典核方法计算核矩阵的复杂度是 $O(N^2D)$,内存和算力双双告急。

具体案例:某互联网公司尝试把 TF-IDF 特征向量先做截断 SVD 降到 1024 维,再用幅度编码压缩到 10 个量子比特,配合量子核 SVM 完成新闻标题分类。在同样的分类精度下,核矩阵构建时间从经典方法的分钟级缩短到量子模拟的秒级,为线上大规模稀疏特征场景提供了新思路。

Python 演示

python39 行
import numpy as np def amplitude_encode(x):    # 幅度编码:将数据归一化后直接作为量子态振幅    norm = np.linalg.norm(x)    if norm < 1e-12:        raise ValueError("零向量无法进行幅度编码")    return x / norm def angle_encode(x):    # 角度编码:每个特征作为旋转角,生成每个量子比特的二维态    return np.array([[np.cos(xi), np.sin(xi)] for xi in x]) def basis_encode(x, threshold=0.0):    # Basis编码:特征二值化后映射到one-hot计算基态    bits = (x > threshold).astype(int)    return np.eye(2)[bits] def quantum_kernel_matrix(X, encoder):    # 构建量子核矩阵:内积模平方作为核值    states = [encoder(x).ravel() for x in X]    n = len(X)    K = np.zeros((n, n))    for i in range(n):        for j in range(i, n):            val = abs(np.vdot(states[i], states[j])) ** 2            K[i, j] = K[j, i] = val    return K if __name__ == "__main__":    rng = np.random.default_rng(42)    X = rng.normal(size=(6, 4))    for name, enc in [("幅度编码", amplitude_encode),                      ("角度编码", angle_encode),                      ("Basis编码", basis_encode)]:        K = quantum_kernel_matrix(X, enc)        diag = np.diag(K).mean()        off = K[~np.eye(len(X), dtype=bool)].mean()        print(f"{name}: 自相似度={diag:.3f}, 平均互相似度={off:.3f}")
目的:用 NumPy 模拟三种数据编码策略,并计算对应的量子核矩阵,直观对比不同编码在自相似度与互相似度上的差异。
  1. norm = np.linalg.norm(x)计算数据向量的二范数,这是幅度编码“压缩袋的标准体积”。
  2. return x / norm将数据归一化到单位长度,保证量子态合法。
  3. np.array([[np.cos(xi), np.sin(xi)] for xi in x])逐特征生成旋转角对应的二维量子态,每个特征独立占一个“收纳盒”。
  4. bits = (x > threshold).astype(int)特征与阈值比较得到 0/1 位,完成 basis 编码的二值化直译。
  5. np.eye(2)[bits]用 one-hot 向量表示 0/1 态,即量子比特的计算基态。
  6. abs(np.vdot(states[i], states[j])) ** 2计算两个量子态内积的模平方,这就是量子核函数的数值实现。
  7. K[i, j] = K[j, i] = val核矩阵是对称矩阵,对称填充避免重复计算。

常见误区

误区幅度编码只需要对数级量子比特,省资源又表达力强,看起来全面碾压角度编码,所以选它就对了。

正解幅度编码确实在比特利用率上有巨大优势,但它把所有信息压进振幅后,任何微小噪声都可能让数据严重变形;而且核值分布容易集中在极端区间,导致训练时梯度信号微弱。就像一个真空压缩袋,装得多但取一件衣服都要拆整袋,日常使用体验并不好。角度编码虽然有线性比特开销,但线路浅、抗噪强、调试直观,在真实量子器件上往往表现更稳定。

为何常见:初学者容易被“对数级 vs 线性级”的理论数字吸引,忽略了量子噪声、线路深度、核值分布这些实战因素,把资源效率误当成唯一指标。

误区归一化就是把数据除以最大值,走个流程而已,对最终模型性能影响不大。

正解对幅度编码而言,二范数归一化是量子态合法性的硬约束,跳过它等于把超体积的衣物硬塞进标准真空袋,量子态直接非法。对角度编码,特征的量纲如果跨越几个数量级,旋转角可能全部挤在 0 附近或转好几圈,周期性会让大数值和小数值“长得一模一样”。归一化方式(z-score、min-max、二范数)的选择本身就是特征工程的核心决策,直接改变数据的几何结构。

为何常见:经典机器学习里归一化被当作可选项,但量子编码的物理约束把它变成了必选项,很多人没有完成思维的转换。

误区既然深层线路有更多纠缠结构,那我把编码深度调到 20、30,模型一定比深度为 5 的厉害。

正解深度提升确实增强理论表达力,但量子噪声与深度呈正相关。在含噪中等规模量子(NISQ)设备上,深度超过某个阈值后,退相干噪声会淹没一切有效信号,测试误差不降反升。深度与性能是一条先升后降的倒 U 形曲线,需要通过实验找拐点,而不是一味加层。

为何常见:人们习惯用经典神经网络的“越深越强”直觉外推到量子线路,忽略了量子噪声这种经典世界不存在的独特制约。

误区既然核函数都是内积的某种变换,量子核无非就是用量子计算机算得更快,性质上跟 RBF 核、多项式核没什么区别。

正解量子核函数的几何结构由编码策略决定,它与经典核存在本质差异。比如角度编码的核函数天然带周期性,$\cos^2$ 乘积结构让相距 $2\pi$ 倍数的点互相“认亲”,这是经典 RBF 核永远无法表达的。同时,核值分布与量子线路的测量特性深度耦合,可能出现经典核没有的“贫瘠高原”现象。它们是内核不同的两类函数,而非简单的加速关系。

为何常见:核方法在经典机器学习里太成熟,容易让人下意识套用熟悉的理论框架,低估编码策略带来的全新几何语义。

面试题

Q1. 数据编码在量子核方法中的核心任务是什么?

单选题 · easy

  • A.把经典数据映射为量子态← 正确答案
  • B.把量子结果转成经典标签
  • C.为量子芯片设计散热系统
  • D.用量子线路加密传输信息

答案:A。数据编码的本质是定义从经典空间到量子态空间的映射 $\phi(x)=|\phi(x)\rangle$,好比搬家前把物品装进箱子。B 是测量输出环节,C 是硬件工程,D 是量子通信,三者都与核方法中的数据表示无关。

Q2. 幅度编码处理一个 1024 维的数据向量,理论上最少需要多少个量子比特?

单选题 · easy

  • A.8 个
  • B.10 个← 正确答案
  • C.12 个
  • D.1024 个

答案:B。幅度编码把 N 个分量放进 $2^n$ 个振幅中,只需满足 $2^n \geq N$。$2^{10}=1024$,所以理论上 10 个量子比特即可装下 1024 维数据,这就是“对数级资源”的含义。

Q3. 角度编码中,每个特征值被编码为量子比特的什么属性?

单选题 · easy

  • A.振幅的大小
  • B.绕轴旋转的角度← 正确答案
  • C.纠缠的强度
  • D.测量的概率

答案:B。角度编码的核心操作是 $R_y(x_i)$,把第 $i$ 个特征当作绕 y 轴的旋转角。振幅大小是幅度编码的机制,纠缠强度由线路深度决定,而测量概率是编码后的输出结果,均非角度编码的输入方式。

Q4. Basis 编码相比于其他两种编码,最突出的局限是什么?

单选题 · mid

  • A.量子比特用量过多
  • B.无法保留数值连续信息← 正确答案
  • C.线路深度必然过大
  • D.核函数无法解析计算

答案:B。Basis 编码把特征二值化成 0/1 后映射到计算基态,本质上是“开/关”式直译,连续数值的梯度信息全部丢失。它虽然消耗与角度编码相同的线性比特数,但信息粒度比角度编码更粗。

Q5. 增加编码深度对量子核模型性能的典型影响是?

单选题 · mid

  • A.性能随深度单调上升
  • B.性能随深度单调下降
  • C.性能先升后降存在拐点← 正确答案
  • D.深度与性能完全无关

答案:C。深度增加带来更丰富的纠缠结构,提升表达力,但量子噪声同时累积。形象地说,胶带越缠越牢固,但缠过头就变成解不开的纸团,因此误差曲线是先降后升、存在最优拐点的倒 U 形。

Q6. 当数据是高维稀疏向量时,最值得优先尝试的编码策略是?

单选题 · mid

  • A.幅度编码← 正确答案
  • B.角度编码
  • C.Basis 编码
  • D.随机测量编码

答案:A。高维稀疏数据(如推荐矩阵、TF-IDF 特征)可压缩性强,幅度编码用对数级量子比特就能装载海量维度,性价比最高。角度和 Basis 编码的线性级比特开销在高维场景下会迅速耗尽稀缺的量子比特预算。

Q7. 角度编码对应的量子核函数在数学上等价于哪种形式的经典核?

单选题 · hard

  • A.高斯 RBF 核
  • B.逐维度余弦乘积核← 正确答案
  • C.线性多项式核
  • D.拉普拉斯核

答案:B。由 $k_\theta(x,x')=\prod_i \cos^2(x_i-x'_i)$ 可知,角度编码的内积模平方恰好是逐特征余弦差的连乘积。这一周期性结构使它区别于单调递减的 RBF 核和线性核,能捕获循环模式,也可能让相距 $2\pi$ 的样本“撞脸”。

Q8. 幅度编码的主要优势有哪些?

多选题 · mid

  • A.量子比特利用率极高← 正确答案
  • B.能容纳数百维的高维数据← 正确答案
  • C.抗噪声能力非常强
  • D.核值分布完美均匀

答案:AB。幅度编码把 N 维数据压进 $\log_2 N$ 个量子比特,比特利用率极高,超大数据集也能上量子硬件,所以 A、B 正确。但高压缩带来高脆弱性,噪声抗性偏弱,核值分布也容易集中,C、D 恰好是它的短板。

Q9. 选择量子核方法的编码策略时,需要考虑哪些因素?

多选题 · hard

  • A.数据维度与稀疏程度← 正确答案
  • B.量子比特资源预算← 正确答案
  • C.硬件噪声水平← 正确答案
  • D.数据集的标签数量

答案:ABC。高维稀疏倾向幅度编码,低维稠密倾向角度编码,这对应 A;比特预算决定能否承受线性级开销,这对应 B;噪声水平决定可容忍的编码深度与压缩敏感度,这对应 C。标签数量是任务给定条件,不直接参与编码选型,排除 D。

Q10. 关于量子核方法中编码与核函数性质的关系,下列说法正确的是?

多选题 · extreme

  • A.幅度编码核值容易过度集中← 正确答案
  • B.角度编码核函数具有周期性← 正确答案
  • C.Basis 编码的信息表达最细腻
  • D.编码选择不影响核函数几何

答案:AB。幅度编码把信息压进少数振幅,内积测量值易扎堆,形成梯度贫瘠,A 对;角度编码由旋转角构成,$\cos^2$ 乘积天然周期化,B 对。Basis 编码二值化后丢失连续梯度,信息表达最粗,C 错;编码策略直接决定量子态几何与内积结构,D 错。