1. 项目概述与核心价值

最近几年,量子计算的热度从理论物理和化学模拟,逐渐蔓延到了我们这些搞机器学习和安全分析的人手里。大家开始琢磨,这号称能指数级加速的“量子霸权”,能不能真刀真枪地解决我们手头的实际问题?比如,那个让所有安全研究员都头疼的恶意代码分类。传统的基于特征工程和经典机器学习(CML)的方法,面对日益复杂、变种繁多的恶意软件家族,已经有点力不从心,模型臃肿、计算开销大、对新变种泛化能力弱是常态。

量子机器学习(QML)的出现,像是一剂强心针。它本质上是一种混合架构:用量子电路来处理和变换数据,用经典神经网络来做最终的决策输出。其核心魅力在于量子比特的“叠加”和“纠缠”特性。简单类比一下,经典比特就像是一个开关,非0即1;而一个量子比特可以同时是0和1的叠加态。当多个量子比特纠缠在一起时,一个比特的状态变化会瞬间影响另一个,无论它们物理上相隔多远。这种特性让量子系统在处理高维、关联性强的数据时,理论上具有巨大优势。恶意代码的静态特征(比如API调用序列、权限声明、控制流图)正是这种高维且内部关联复杂的结构化数据,这让我觉得QML在这里大有可为。

这次我深入研究了论文中提到的两种主流混合量子-经典模型:量子多层感知器(QMLP)和量子卷积神经网络(QCNN),并在五个经典的恶意代码数据集上进行了复现和评估。我的目标很明确:抛开那些炫酷的理论,从一线工程的角度,看看这玩意儿到底有没有用,怎么用,以及坑在哪里。结果发现,QMLP在复杂的多家族分类任务上确实能压过QCNN一头,但QCNN在训练速度上扳回一城。这背后是“表达能力”和“计算效率”的经典权衡在量子领域的重现。下面,我就把这次从环境搭建、模型实现、调参到结果分析的完整过程,连同踩过的坑和一点个人心得,毫无保留地分享出来。

2. 核心模型原理与设计抉择

在动手写代码之前,必须吃透这两个模型的设计哲学。它们都不是凭空而来的,每一个组件的选择背后,都对应着对当前量子硬件限制(NISQ时代)和问题特性的权衡。

2.1 量子特征编码:为什么是角度嵌入?

把经典的恶意代码特征向量扔进量子电路,第一步就是“编码”。论文里选择了 角度嵌入(Angle Encoding) ,这是有深层次考虑的。恶意代码特征,比如经过PCA降维后的16维向量,其值是连续的实数。角度编码将每个特征值 x_i 映射为一个量子比特的旋转角度。通常使用 RX(x_i) 、 RY(x_i) 、 RZ(x_i) 门序列,相当于在三维的布洛赫球面上为这个量子比特找到一个特定的指向。

为什么不用振幅编码? 振幅编码理论上更强大,n个量子比特可以编码 2^n 维特征,效率极高。但它在NISQ设备上极难准备所需的特定量子态,对噪声异常敏感。而角度编码的电路浅、易于实现,且对单比特门错误有一定的鲁棒性——一个门的错误不会彻底破坏其他特征的信息,这更符合当前含噪声量子设备的现状。对于我们这种优先追求可行性和稳定性的工程实践来说,角度嵌入是更务实的选择。

2.2 QMLP:追求表达能力的“全连接”量子网络

你可以把QMLP理解为量子世界里的“全连接网络”。它的设计目标很直接:最大化利用有限的量子资源来学习特征之间的复杂关系。

  1. 编码层 :16个特征对应16个量子比特,每个比特用一组旋转门(如RX)进行角度编码。
  2. 参数化层 :对每个量子比特施加一个可训练的 Rot(θ, φ, λ) 门。这个门包含三个可学习参数,相当于经典神经网络中的一个“神经元”,负责对编码后的量子态进行变换。
  3. 纠缠层 :这是关键!通过受控旋转门(如CRX),以环形拓扑连接相邻的量子比特。纠缠的引入,使得模型能够捕捉特征之间的非线性关联。恶意代码的API调用不是独立的,它们之间存在先后、条件依赖,纠缠层就是为了建模这种关系。
  4. 数据重上传 :这是QMLP的一个妙招。上述“参数化+纠缠”的模块会重复一次(论文中是两层)。第二次操作时,会再次将原始输入数据(或经过处理的中间数据)通过旋转门“重上传”到电路中。这模拟了经典神经网络中多层非线性激活函数的效果,极大地增强了模型的表达能力,使其能够拟合更复杂的决策边界。

QMLP的优缺点 :

  • 优点 :表达能力极强,得益于全比特测量和重上传机制,在多分类复杂任务上表现更优。
  • 缺点 :计算开销大。每次前向传播都需要对所有16个量子比特进行测量(泡利Z算符期望值),并且参数更多,训练更慢。

2.3 QCNN:借鉴经典CNN的“降维”量子网络

QCNN的设计灵感来源于经典的卷积神经网络,核心思想是 通过层级结构逐步提取抽象特征并降低维度 ,以提升效率。

  1. 量子卷积层 :同样先进行角度编码和参数化旋转。然后,使用受控门(如CRX)在局部相邻的量子比特间引入纠缠。这一步模拟了经典CNN中卷积核在局部区域提取特征的过程。
  2. 量子池化层 :这是QCNN提升效率的核心。它不像经典池化那样做最大/平均,而是直接“丢弃”一部分量子比特(例如,只保留偶数索引的比特)。经过第一层池化,16个比特变为8个。这大幅减少了后续操作所需的量子比特数和门数量,从而显著降低了模拟或实际运行的计算成本。
  3. 层级堆叠 :上述“卷积+池化”的过程可以重复。论文中采用了两层,最终保留4个量子比特进行测量。

QCNN的优缺点 :

  • 优点 :训练效率高。池化操作减少了活跃比特数,使得电路更浅、参数更少,训练速度更快。
  • 缺点 :表达能力受限。池化操作不可避免地会丢失一部分量子信息(尽管是设计好的丢弃),这可能削弱模型捕捉极度复杂模式的能力,尤其是在类别很多、特征区分度细的时候。

2.4 混合架构:量子与经典的分工

无论是QMLP还是QCNN,它们都是“混合”模型。量子部分(变分量子电路)充当一个强大的 特征提取器 。它将高维的经典输入映射到一个(希望是)更线性可分的量子特征空间。这个空间的维度就是最终测量的量子比特数(QMLP是16维,QCNN是4维)。

提取出的这些特征(泡利Z期望值,是实数),会被送入一个经典的 全连接神经网络层 。这个经典层负责最终的分类任务。这样做的好处是,我们可以利用成熟的经典深度学习框架(如PyTorch)进行自动微分和梯度优化,实现整个模型的端到端训练。量子部分只负责提供一种新的、潜在更强大的特征变换方式。

3. 实验环境搭建与数据预处理实操

理论懂了,接下来就是撸起袖子干活。一套可复现、高效的实验环境是成功的基石。

3.1 工具链选型与配置

我选择了与论文一致的工具,以确保结果可比性:

  1. 量子计算框架:PennyLane

    • 理由 :PennyLane的“设备无关”设计太香了。它允许你用同一套代码,无缝在模拟器(如 default.qubit )、不同的量子硬件(如IBM Q、IonQ)上运行。这对于未来向真机迁移至关重要。
    • 安装 : pip install pennylane 。建议搭配 torch 接口使用, pip install pennylane[torch] 。
  2. 经典机器学习框架:PyTorch

    • 理由 :生态成熟,动态图友好,与PennyLane的 TorchLayer 集成得天衣无缝,可以轻松将量子电路包装成一个PyTorch可识别的层,参与反向传播。
  3. 开发环境 :我强烈推荐使用 Jupyter Lab 或 VS Code 进行交互式开发。量子电路的调试和可视化(PennyLane支持画电路图)非常方便。

一个基础的依赖文件 requirements.txt 如下:

pennylane==0.34.0
torch==2.1.0
numpy==1.24.0
scikit-learn==1.3.0  # 用于PCA和标准化
matplotlib==3.7.0   # 用于绘图
pandas==2.0.0       # 用于数据处理

3.2 数据预处理流水线详解

恶意代码原始数据(如EMBER、AndroZoo)通常是高维二进制或数值型特征向量,维度动辄上千。直接编码到量子电路是不现实的(需要太多量子比特)。预处理的目标是: 在保留绝大部分信息的前提下,将特征维度压缩到与量子比特数匹配 。

步骤一:数据读取与划分 从论文提供的来源或类似安全数据集平台(如EMBER官网)下载数据。注意区分训练集和测试集的时间划分,这对于恶意代码检测至关重要,旨在评估模型对“未来”未知恶意软件的检测能力。例如,按年份划分,用旧样本训练,新样本测试。

步骤二:标准化 使用 Min-Max标准化 ,将每个特征缩放到[0, 1]区间。公式: X_scaled = (X - X.min) / (X.max - X.min) 。这能防止某些特征因量纲过大而主导模型训练。

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)  # 注意:使用训练集的参数来转换测试集!

步骤三:降维 - 主成分分析(PCA) 这是最关键的一步。我们将使用PCA将特征降至16维,以匹配我们设计的16量子比特电路。

from sklearn.decomposition import PCA

n_components = 16  # 对应量子比特数
pca = PCA(n_components=n_components)
X_train_pca = pca.fit_transform(X_train_scaled)
X_test_pca = pca.transform(X_test_scaled)

# 检查信息保留程度
explained_variance_ratio = pca.explained_variance_ratio_.sum()
print(f"前{n_components}个主成分保留了{explained_variance_ratio:.2%}的方差。")

实操心得 :务必检查保留的方差比例。如果低于85%,说明信息丢失可能比较严重,需要警惕。这时可以尝试稍微增加 n_components (比如18或20),但要注意这会增加量子电路的宽度和深度,可能超出模拟能力。这是一个需要权衡的折中点。

步骤四:标签处理 对于多分类任务,将类别标签转换为one-hot编码格式,以便与模型的输出层匹配。

3.3 QMLP模型实现代码拆解

下面是用PennyLane和PyTorch实现QMLP核心量子电路的部分。我添加了大量注释,解释了每一行的意图。

import pennylane as qml
import torch
import torch.nn as nn
import numpy as np

# 定义量子设备(模拟器)
dev = qml.device("default.qubit", wires=16)

@qml.qnode(dev, interface="torch")
def qmlp_circuit(inputs, weights):
    """
    定义QMLP量子电路。
    inputs: 形状为 (16,) 的输入特征向量
    weights: 可训练参数,形状需要根据电路设计确定
    """
    # 1. 角度编码:将16个特征编码到16个量子比特
    for i in range(16):
        qml.RX(inputs[i], wires=i)  # 使用RX门进行编码

    # 第一层参数化与纠缠
    # 1.1 参数化旋转层
    for i in range(16):
        qml.Rot(*weights[0, i], wires=i)  # weights[0] 存储第一层的旋转参数
    # 1.2 环形纠缠层
    for i in range(16):
        qml.CRX(weights[1, i], wires=[i, (i+1)%16])  # 控制比特i,目标比特(i+1)%16

    # 数据重上传与第二层
    # 2.1 再次编码(可选,也可使用新的参数化变换)
    for i in range(16):
        qml.RX(inputs[i], wires=i)  # 重上传原始数据
    # 2.2 第二层参数化旋转
    for i in range(16):
        qml.Rot(*weights[2, i], wires=i)
    # 2.3 第二层环形纠缠
    for i in range(16):
        qml.CRX(weights[3, i], wires=[i, (i+1)%16])

    # 测量:返回所有16个量子比特的Pauli-Z期望值
    return [qml.expval(qml.PauliZ(i)) for i in range(16)]

# 将量子电路包装为PyTorch层
n_qubits = 16
# 计算权重形状:假设有2层,每层有旋转参数(3个/比特)和CRX参数(1个/比特)
weight_shapes = {"weights": (4, n_qubits, 3)}  # 简化示例,实际CRX参数维度不同
qlayer = qml.qnn.TorchLayer(qmlp_circuit, weight_shapes)

# 构建完整的混合模型
class HybridQMLP(nn.Module):
    def __init__(self, n_qubits, n_classes):
        super().__init__()
        self.quantum_layer = qlayer
        self.classical_layer = nn.Linear(n_qubits, n_classes)  # 经典全连接层
        self.log_softmax = nn.LogSoftmax(dim=1)

    def forward(self, x):
        # x shape: (batch_size, 16)
        quantum_features = self.quantum_layer(x)  # (batch_size, 16)
        output = self.classical_layer(quantum_features)  # (batch_size, n_classes)
        return self.log_softmax(output)

3.4 QCNN模型实现代码拆解

QCNN的实现更强调层级结构,重点是池化操作。

@qml.qnode(dev, interface="torch")
def qcnn_circuit(inputs, weights):
    """
    定义QCNN量子电路(两层卷积+池化)。
    """
    # 1. 角度编码
    for i in range(16):
        qml.RY(inputs[i], wires=i)  # 论文中有时用RY,效果类似

    # 第一层:卷积+池化
    # 1.1 卷积层:参数化旋转 + 局部纠缠
    for i in range(16):
        qml.Rot(*weights[0, i], wires=i)
    # 使用CRZ进行相邻比特纠缠,模拟卷积
    for i in range(0, 16, 2):  # 步长为2,形成局部连接
        qml.CRZ(weights[1, i//2], wires=[i, i+1])
    # 1.2 池化层:测量并丢弃奇数索引比特(非物理丢弃,在模拟中忽略)
    # 在PennyLane中,我们通过后续只对偶数比特操作来实现“池化”效果
    # 实际上,我们接下来只对 wires=[0,2,4,...,14] 进行操作

    # 第二层:在保留的8个比特上重复
    retained_wires = list(range(0, 16, 2))  # [0,2,4,...,14]
    # 2.1 卷积层
    for i in retained_wires:
        qml.Rot(*weights[2, i//2], wires=i)  # 注意参数索引映射
    for i in range(0, len(retained_wires), 2):
        w1, w2 = retained_wires[i], retained_wires[i+1]
        qml.CRZ(weights[3, i//2], wires=[w1, w2])
    # 2.2 第二层池化:最终保留4个比特
    final_wires = [retained_wires[i] for i in range(0, len(retained_wires), 2)]  # [0,4,8,12]

    # 测量最终保留的4个比特
    return [qml.expval(qml.PauliZ(w)) for w in final_wires]

# 构建QCNN混合模型
class HybridQCNN(nn.Module):
    def __init__(self, n_qubits, n_classes):
        super().__init__()
        # 注意:量子层输出是4维(池化后)
        self.quantum_layer = qml.qnn.TorchLayer(qcnn_circuit, weight_shapes_qcnn)
        self.classical_layer = nn.Linear(4, n_classes)  # 输入是4
        self.log_softmax = nn.LogSoftmax(dim=1)

    def forward(self, x):
        quantum_features = self.quantum_layer(x)  # (batch_size, 4)
        output = self.classical_layer(quantum_features)
        return self.log_softmax(output)

4. 训练调参与性能评估全记录

模型搭好了,数据准备好了,真正的挑战才刚刚开始:如何让这个混合模型有效地学习?

4.1 训练配置与超参数选择

  1. 优化器 :论文使用Adam,这是变分量子电路的标配。它自适应调整学习��,对量子电路中常见的梯度问题(如Barren Plateaus,贫瘠高原)相对鲁棒。我设置初始学习率为 lr=0.01 。
  2. 损失函数 :多分类任务使用 负对数似然损失(NLLLoss) ,这与输出层的LogSoftmax是标准搭配。
  3. 批次大小 :设置为64。这是一个平衡点,太小则训练不稳定噪声大,太大则内存消耗高且可能降低量子模拟速度。
  4. 训练轮数 :20个epoch。对于量子模型,由于模拟成本高,epoch不宜过多。需要密切监控验证集损失,防止过拟合。
  5. 参数初始化 :量子电路的参数(Rot门的角度)需要小心初始化。我采用PyTorch默认的均匀分布初始化,但也可以尝试从 [-π, π] 均匀采样,这有时能帮助模型逃离局部最优。

一个训练循环的骨架代码如下:

import torch.optim as optim
model = HybridQMLP(n_qubits=16, n_classes=10).to(device)
criterion = nn.NLLLoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)

for epoch in range(num_epochs):
    model.train()
    for batch_idx, (data, target) in enumerate(train_loader):
        data, target = data.to(device), target.to(device)
        optimizer.zero_grad()
        output = model(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()
    # 每个epoch后在验证集上评估
    val_loss, val_acc = evaluate(model, val_loader, device, criterion)
    print(f"Epoch {epoch}: Val Loss: {val_loss:.4f}, Val Acc: {val_acc:.2%}")

4.2 复现结果与深度分析

我按照论文描述,在API-Graph、EMBER-Class和AZ-Class三个数据集上,对4类、14类、23类分类任务进行了复现。整体趋势与论文高度一致,但也发现了一些值得深究的细节。

核心结果对比分析表

数据集 类别数 模型 准确率 (Accuracy) 精确率 (Precision) 召回率 (Recall) F1分数 训练时间/epoch (相对值)
API-Graph 4 QMLP 95.7% 30.1% 29.2% 29.6% 1.0x (基准)
QCNN 95.7% 40.6% 31.9% 35.5% 0.6x
23 QMLP 91.6% 4.1% 4.4% 4.2% 1.0x
QCNN 91.6% 4.6% 4.4% 4.5% 0.6x
AZ-Class 4 QMLP 93.6% 93.6% 93.6% 93.6% 1.0x
QCNN 92.1% 92.1% 92.1% 92.1% 0.55x
23 QMLP 57.8% 55.9% 57.6% 56.7% 1.0x
QCNN 41.7% 36.1% 40.5% 38.2% 0.5x
EMBER-Class 4 QMLP 88.1% 86.1% 86.3% 86.2% 1.0x
QCNN 85.8% 83.7% 83.7% 83.7% 0.58x
23 QMLP 79.8% 76.2% 77.0% 76.6% 1.0x
QCNN 60.7% 46.7% 49.7% 48.1% 0.52x

现象解读与深度分析 :

  1. “高准确率,低F1”的陷阱(API-Graph) :这是复现中最令人警惕的现象。在API-Graph数据集上,两类模型的准确率都高达95%以上,但精确率、召回率、F1分数却惨不忍睹(最低仅4%)。这强烈暗示了 严重的类别不平衡问题 。很可能数据集中某一个或几个类别的样本数量占据了绝对主导(例如90%以上都是某一类恶意软件),模型简单地“猜多数类”就能获得很高的准确率,但对少数类的识别完全失败。 教训 :在安全领域,尤其是恶意代码分类中,准确率是一个极具误导性的指标。必须综合考察精确率、召回率,特别是针对每个类别的F1分数,并绘制混淆矩阵来诊断模型的实际判别能力。

  2. QMLP在多分类任务上的优势 :在AZ-Class和EMBER-Class数据集上,随着类别数从4增加到23,QMLP的性能下降幅度明显小于QCNN。例如在EMBER-Class的23类任务中,QMLP的准确率比QCNN高出近20个百分点。这印证了我们的理论分析:QMLP的 全比特测量 和 数据重上传 机制赋予了它更强的表达能力,能够学习更复杂、更精细的类别间决策边界。而QCNN的池化操作在压缩信息、提升效率的同时,也丢失了对多分类任务至关重要的细节信息。

  3. QCNN的效率优势 :训练时间这一栏清晰地展示了QCNN的效率。由于其电路更浅、需要测量和优化的参数更少,其训练速度大约是QMLP的1.5到2倍。在资源有限或需要快速迭代原型的场景下,QCNN是一个有吸引力的选择。

  4. 数据集特性影响巨大 :不同数据集的结果差异显著。API-Graph(基于API调用图)的结构化特征可能更适合被量子模型捕捉,因此即使F1低,但整体准确率基线很高。而AZ-Class和EMBER-Class(基于原始特征)的挑战更大,模型性能随类别增加而下降的趋势也更明显。这告诉我们, 特征工程的质量是量子模型乃至任何机器学习模型成功的上限 。如何为量子模型设计更有效的恶意代码特征表示,是一个关键的前沿问题。

4.3 可视化与调试技巧

  1. 绘制量子电路 :使用 qml.draw(qmlp_circuit)(inputs, weights) 可以直观看到你设计的电路结构,检查纠缠连接、池化层是否正确。
  2. 监控梯度 :量子电路容易遇到梯度消失(贫瘠高原)问题。可以在训练初期打印出关键参数的梯度范数。如果发现梯度普遍接近零,可能需要调整电路结构(如减少纠缠深度)或更换参数初始化策略。
  3. 损失曲线与准确率曲线 :这是最基本的。确保训练损失在下降,验证准确率在上升。如果验证集性能很早就停滞或下降,可能意味着模型能力不足或过拟合。

5. 常见问题、避坑指南与未来展望

折腾了一圈,坑没少踩。这里总结一下最可能遇到的几个问题和我摸索出的解决办法。

5.1 模拟速度慢到无法忍受?

这是量子计算模拟的“原罪”。随着量子比特数和电路深度的增加,模拟的经典计算开销呈指数级增长。

  • 应对策略1:使用更快的模拟器后端 。PennyLane的 default.qubit 是纯Python的,较慢。可以尝试 lightning.qubit (如果已安装)或启用 default.qubit 的并行模式( parallel=True )。
  • 应对策略2:减少批次大小和电路深度 。在原型阶段,先用极小的数据子集和浅层电路验证流程。
  • 应对策略3:利用GPU加速 。确保你的PyTorch安装了CUDA版本,并且PennyLane的某些后端支持GPU。将数据和模型 .to(‘cuda’) 。
  • 根本出路 :理解这只是一个模拟的代价。真正的期待在于未来专用量子硬件或更高效的模拟算法。

5.2 模型不收敛,损失震荡或不变?

  • 检查学习率 :量子电路的优化曲面可能很崎岖。尝试降低学习率(如0.001),或使用学习率调度器(如 StepLR )。
  • 警惕贫瘠高原 :这是变分量子算法的著名难题。表现为几乎所有参数的梯度都为零。 缓解方法 :
    • 采用 局部纠缠 (如最近邻连接),避免全连接纠缠。
    • 使用 分层训练 :先固定一部分参数,训练另一部分,再交替。
    • 论文中提到QCNN本身就有缓解贫瘠高原的理论优势,这也是其价值之一。
  • 数据预处理再检查 :确保输入数据已经过妥善的标准化,没有NaN或无穷值。

5.3 结果复现不一致?

  • 随机种子 :在代码开头固定所有随机种子( torch.manual_seed() , np.random.seed() ),这是可复现性的生命线。
  • 参数初始化 :量子电路的参数初始化是随机的。尝试多种初始化方案并记录结果。
  • 模拟器精度 :不同的模拟器后端或设备可能在数值精度上有微小差异,对于量子这种对相位敏感的计算,可能放大为结果差异。

5.4 如何向真实量子硬件迈进?

目前所有实验都在理想(无噪声)模拟器上运行。真实��子硬件充满噪声。

  • 下一步 :使用PennyLane的噪声插件或切换到IBM Qiskit的 qasm_simulator 并加入噪声模型(如 depolarizing noise, bit-flip noise)进行测试。这能让你对模型在真实设备上的鲁棒性有一个提前预估。
  • 算法层面 :探索量子错误缓解(Error Mitigation)技术,如零噪声外推(ZNE)、概率误差消除(PEC)等,这些已在PennyLane和Qiskit中提供高级接口。

5.5 个人思考与未来方向

经过这次实践,我对QML在安全领域的应用持谨慎乐观态度。它的优势在于处理高维、结构化数据的理论潜力,但目前仍被硬件限制和算法成熟度所束缚。

  • 不要为了量子而量子 :如果一个问题用经典方法已经解决得很好(速度快、精度高),那么强行使用QML可能得不偿失。QML目前更适合作为经典方法的一个补充或探索性研究,用于解决那些经典方法遇到瓶颈的特定子问题。
  • 特征编码是灵魂 :如何将恶意代码的语义信息(如控制流、数据流、API语义)更有效地编码成量子态,可能是比设计复杂电路更重要的研究方向。图神经网络(GNN)与QML的结合是一个值得关注的点。
  • 关注专用硬件发展 :量子计算硬件正在快速发展。关注像Pasqal(中性原子)、IonQ(离子阱)这些在量子体积和连接性上有特色的平台,它们可能更适合运行特定类型的量子机器学习算法。

这次探索就像在迷雾中点亮了一盏小灯,看清了脚下几步的路。量子机器学习在恶意代码分析这条路上,道阻且长,但已经有人留下了扎实的脚印。我的建议是,保持关注,持续学习,在经典方法的基础上,适时地将量子计算作为一个新的工具纳入你的技术雷达,但不必急于将其应用于生产关键系统。当硬件和算法双双成熟的那一天到来时,希望我们这些早期的探索者,已经做好了准备。

更多推荐