量子机器学习中的隐藏瓶颈:如何将数据送入量子计算机

TL;DR · AI 摘要
量子机器学习面临的核心瓶颈是将经典数据高效编码进量子态,当前缺乏通用高效的加载方法。
核心要点
- 量子计算机无法直接读取经典比特,需先进行量子态嵌入。
- 现有量子数据加载方式随数据规模指数级增长,效率低下。
- 研究者正探索新型编码策略如量子特征映射和混合算法来突破瓶颈。
结构提纲
按章节快速跳转。
量子机器学习首要挑战是将经典数据转换为量子态表示。
传统神经网络通过向量化处理图像、文本等多种类型的数据。
量子计算基于叠加态和纠缠原理,不能直接访问经典内存中的数据。
目前常用的方法包括幅度编码、角度编码和量子特征映射等。
- ·瓶颈分析
随着输入维度增加,制备量子态的成本呈指数增长趋势。
研究人员正在开发混合模型与近似编码方案以缓解该问题。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- Quantum Machine Learning Data Bottleneck
- Classical Data Types
- Images
- Text
- Audio Signals
- Quantum State Preparation
- Amplitude Encoding
- Angle Encoding
- Feature Maps
- Research Approaches
- Hybrid Models
- Approximate Methods
金句 / Highlights
值得收藏与分享的关键句。
目前尚无一种普适有效的方法能够将任意经典数据载入到量子系统中。
当数据大小和复杂度上升时,准备这些量子态所需成本可能呈指数增长。
一个量子比特可以同时处于两种状态的叠加态:|ψ⟩ = α |0⟩ + β |1⟩。
标题:量子机器学习中的隐藏瓶颈:将数据输入量子计算机
URL 来源:https://towardsdatascience.com/the-hidden-bottleneck-in-quantum-machine-learning-getting-data-into-a-quantum-computer/
发布时间:2026-05-22T13:30:00+00:00
Markdown 内容:
- 经典神经网络如何读取数据
- 量子计算机无法读取比特
- 将经典数据嵌入到量子态中
- 量子机器学习中的数据加载瓶颈
- 结论
现代人工智能(AI)和机器学习(ML)严重依赖于处理大量数据并从中学习模式。通常来说,随着可用数据量的增加,模型的泛化能力也会提高。然而,当我们从经典机器学习转向量子机器学习(QML)时,遇到的第一个主要挑战就是量子计算机无法直接读取经典比特。在进行任何计算之前,必须首先将数据嵌入到量子态(量子比特)中。
这听起来似乎很简单,但实际上却出奇地困难。随着数据规模和复杂性的增加,准备这些量子态的成本可能会呈指数级增长。事实上,目前尚未发现一种通用且高效的方法可以将任意的经典数据加载到量子系统中。
在本文中,我们将探讨这个问题存在的原因,介绍一些常见的量子数据嵌入技术,并最终讨论研究人员正在探索的一些现代方法来克服这些限制。
经典神经网络如何读取数据
神经网络(NN)是现代机器学习的基础构建模块之一。它们的成功很大程度上归功于我们日益增强的数据收集、存储和处理能力。
本质上,神经网络是一种旨在从数据中学习模式的数学系统。在训练过程中,它们会逐步调整内部参数以捕捉生成数据的关系。这使得它们能够执行预测、生成和分类等任务。
例如:
- 根据历史趋势预测未来股价,
- 生成类似人类的文本,
- 识别图像中的物体,
- 或区分不同类别的数据。
经典神经网络的最大优势之一在于其灵活性。它们可以处理多种不同类型的数据,并学习其中存在的关系:
- 序列数据 → 语言、金融时间序列、音频信号
- 空间数据 → 图像、视频、地理地图
- 概率性或噪声数据 → 传感器测量值、放射性衰变、实验观测结果
尽管能处理多种类型的数据,但神经网络并不像人类那样直接“看到”图像、音频或文本。实际上,在底层所有内容最终都会转换成数值向量或张量,然后由网络进行处理。
例如:
- 图像可以表示为像素强度值的网格
- 句子可以转换为词元嵌入
- 音频信号可以表示为随时间采样的幅度序列
对神经网络而言,这些都是简单的结构化数值表示。

用向量表示的不同数据模态。作者使用Gemini创建的插图
量子计算机无法读取比特
量子计算机是一种根本不同的信息处理方式。它们不是基于经典比特操作,而是使用遵循量子力学原理(如叠加和纠缠)的量子比特(qubit)。
经典比特是一个二进制值,要么是0,要么是1。
而一个量子比特则可以同时处于两种状态的叠加之中。一般情况下,量子比特的状态写作:
|ψ⟩ = α |0⟩ + β |1⟩ 其中 α 和 β 是满足约束条件 |α|² + |β|² = 1 的复数概率幅。
如果某些概念对你来说不太熟悉,你可以参考我写的面向初学者的量子计算文章这里。不过对于这篇文章来说,重要的是理解一点:量子计算机存储信息的方式与经典计算机截然不同。
由于我们生活在经典世界中,我们的大部分数据天然就以存储在经典内存中的比特形式存在。运行在GPU上的神经网络可以直接读取图像、句子或音频波形,而量子处理器却做不到这一点。在进行任何量子计算之前,这种经典信息必须先编码到量子比特中——这项任务远比听起来要困难得多。
将经典数据嵌入到量子态中
经典信息必须以某种方式转化为量子态。这个过程被称为量子数据嵌入或量子态准备。实现这一目标的方法包括利用量子比特的振幅、相位或旋转角度。
多年来,研究人员提出了多种将经典数据嵌入到量子系统中的方法。最常用的两种技术是:
- 基于角度的编码
- 振幅编码
每种方法都有各自的优势、局限性和计算成本。
基于角度的编码
最简单也是应用最为广泛的量子数据嵌入方法之一是角度编码(也称为基于旋转的嵌入)。
在这种方法中,经典特征通过量子门(如 R-X、R-Y 和 R-Z)作为旋转角度应用于量子比特,分别绕X轴、Y轴和Z轴旋转量子比特。
例如,一个经典向量:X = [x₁, x₂, x₃] 可以通过对不同量子比特根据每个特征值进行旋转的方式嵌入到量子电路中。
让我们来看一个在 PennyLane 中基于旋转编码的简单实现:
import pennylane as qml
import numpy as np
# 经典输入向量
x = np.array([0.2, 0.7, 1.1])
n_qubits = len(x)
dev = qml.device("default.qubit", wires=n_qubits)
@qml.qnode(dev)
def rotational_embedding_circuit(x):
# 每个特征 x_i 控制一个量子比特的旋转角度
qml.AngleEmbedding(
features=x,
wires=range(n_qubits),
rotation="Y" # 也可以是 "X" 或 "Z"
)
return qml.state()
state = rotational_embedding_circuit(x)
qml.draw_mpl(rotational_embedding_circuit, style='pennylane_sketch')(x)
print(state)
每个经典特征控制一个量子比特的旋转角度。该量子电路由作者使用 PennyLane 生成
基于旋转的编码的一个主要缺点是 其在量子比特数量方面的可扩展性较差。通常情况下,我们需要与输入向量中的特征数一样多的量子比特。
基于振幅的编码
基于振幅的编码是另一种将经典数据嵌入到量子系统中的技术。不同于基于旋转的编码中每个特征控制一个量子比特的旋转,在振幅编码中,信息直接存储在量子态的振幅中,例如在 ∣ψ⟩ = α ∣0⟩ + β ∣1⟩ 中的 α 和 β 项。
例如:
X = [x₁, x₂, x₃, x₄] 可以用 log₂(|X|) = 2 个量子比特进行编码:
∣ψ(x)⟩= x₁∣00⟩ + x₂∣01⟩ + x₃∣10⟩ + x₄∣11⟩.
这相比于我们之前看到的基于旋转的编码方式显著更加紧凑。
事实上,这是量子计算中最引人入胜的想法之一,因为振幅的数量随着量子比特数量呈指数增长。
例如:
- 2 个量子比特 → 2² = 4 个振幅
- 10 个量子比特 → 2¹⁰ = 1024 个振幅
- 20 个量子比特 → 超过一百万个振幅
这意味着一个 n 量子比特的系统由 2ⁿ 个振幅描述,导致状态空间呈指数级增长。
因此,振幅编码在空间效率上比基于旋转的编码高指数倍。它不需要每个特征对应一个量子比特,而只需要大约 log₂(n) 个量子比特来表示 n 个特征。
现在让我们来看一个在 PennyLane 中基于振幅编码的简单实现:
import pennylane as qml
import numpy as np
# 经典输入向量
x = np.array([0.2, 0.4, 0.6, 0.8])
# 振幅编码需要归一化向量
x = x / np.linalg.norm(x)
# 所需的量子比特数:
# 2 个量子比特可以表示 2^2 = 4 个振幅
n_qubits = int(np.log2(len(x)))
dev = qml.device("default.qubit", wires=n_qubits)
@qml.qnode(dev)
def amplitude_encoding_circuit(x):
qml.AmplitudeEmbedding(
features=x,
wires=range(n_qubits),
normalize=True
)
return qml.state()
state = amplitude_encoding_circuit(x)
qml.draw_mpl(amplitude_encoding_circuit, style='pennylane_sketch')(x)
print(state)
振幅编码将数据存储在量子振幅中。该量子电路由作者使用 PennyLane 生成
如果你像我一样多疑,可能已经在想:
_“这看起来好得不像真的。”_
你是对的。虽然振幅编码相比角度编码能表示指数级更多的数据,但实际准备这样的量子态通常需要指数级的操作次数。
表示方法是指数级紧凑的。
加载过程通常不是。
下表比较了这两种编码方法:

基于旋转和振幅编码的比较。插图由作者使用 Gemini 创建
量子机器学习中的数据加载瓶颈
现代机器学习系统处理的是极其庞大且高维的数据。图像可能包含数百万像素,音频信号可以跨越数千个时间步长,而现代语言模型则运行在巨大的嵌入向量之上。
我们研究了两种将经典数据嵌入到量子系统的基本方法。尽管振幅编码由于其指数级紧凑性在理论上具有吸引力,但随着数据规模的增长,实际准备这些量子态的过程变得越来越困难。
这造成了量子机器学习中最大的实践瓶颈之一:
_将经典信息加载到量子系统本身可能会变得计算代价高昂。_
在许多情况下,状态准备的成本可能会部分或完全抵消量子算法所承诺的理论优势。
这是量子机器学习讨论中经常被忽视的重要细节。许多研究论文很少关注这样一个事实:
_量子模型可能在一个指数级大的希尔伯特空间中处理信息,但在任何计算发生之前,必须首先高效地将数据嵌入到那个空间中。_
而这恰好是一个极其困难的问题。
对于任意的经典数据,目前尚未发现通用高效的量子态准备方法。实际上,准备一个完全通用的量子态往往需要指数级的量子操作次数。
这就产生了一个有趣的权衡:
- 基于旋转的编码相对容易实现,但在量子比特数量方面扩展性差。
- 振幅编码是指数级紧凑的,但准备起来可能是指数级昂贵的。
换句话说:
_表示问题和加载问题是不同的两回事。_
一台量子计算机或许能够表示指数级大量的信息,但高效地将这些信息加载到量子系统中则是完全不同的挑战。
此外,在嵌入过程中,原始数据中存在的重要的结构关系——例如图像中的空间关系或序列数据中的时间依赖性——也可能难以在量子表示中自然地保留。
结论
量子机器学习承诺可以访问指数级大的表示空间,但在进行任何计算之前,必须首先将经典信息高效地嵌入到量子系统中。
正如我们在本文中所探讨的那样,这比最初看起来要困难得多。虽然振幅编码等方法提供了极其紧凑的表示,但准备任意量子态的过程本身可能会变得计算成本高昂。
这使得量子数据加载成为现代量子机器学习研究中的核心实际瓶颈之一。许多关于量子机器学习的讨论都过分强调指数级大的希尔伯特空间的力量,而对实际到达这些状态的成本关注较少——几乎就像在说:
_"我们可以在山顶上泡茶,但我们如何到达那里是另一个问题。"_
研究人员现在正在积极探索新的方法,如学习型量子嵌入、数据重新上传技术和结构保持嵌入,以克服其中一些限制。甚至像Google Quantum AI这样的大公司最近也探索了更高效的量子机器学习系统的嵌入和表示策略。
我们可能会在未来文章中探讨其中一些方法。
_感谢您的阅读!_
免责声明:
本文在大型语言模型(LLM)的协助下进行了语法优化。本文中的所有插图均由作者使用GPT和Gemini图像生成工具创建,而量子电路图则是使用PennyLane生成的。
_版本1.1_