深度学习周报(12.1~12.7)

目录

摘要

Abstract

[1 最优传输基础](#1 最优传输基础)

[2 Grover算法](#2 Grover算法)

[2.1 定义与问题描述](#2.1 定义与问题描述)

[2.2 算法步骤](#2.2 算法步骤)

[2.3 代码示例](#2.3 代码示例)

[3 总结](#3 总结)


摘要

本周首先学习了最优传输的核心思想与部分应用,了解了蒙日问题与康托洛维奇松弛的思想与数学表示;其次学习了Grover算法,了解了其定义、算法步骤与几何表示,还利用代码进行了实现;同时还拓展了无结构搜索问题、Oracle黑盒与单位算子等概念。

Abstract

This week, I first studied the core ideas and some applications of optimal transport, learning about the concepts and mathematical formulations of the Monge problem and Kantorovich relaxation. Secondly, I studied Grover's algorithm, understanding its definition, algorithmic steps, and geometric representation, and also implemented it in code. Additionally, I explored concepts such as the unstructured search problem, the Oracle black box, and unitary operators.

1 最优传输基础

最优传输研究的是如何用最小的成本,把一堆东西从一个地方搬到另一个地方,并变成指定的新形状。它总是涉及两个分布,一个初始,一个目标,它的强大之处在于能知道两个分布有多不同,以及如何以最小的代价从初始分布变为目标分布,而传统的方法无法做到,比如单纯比较均值会完全忽略分布形状。

为了直观理解最优传输,蒙日在1781年提出了沙堆问题,即:

假设有两堆沙土,分别由两个区域(或分布)表示。我们想要将第一堆沙土(源分布)移动到第二堆沙土(目标分布)的位置,并且重新排列成目标分布的形状。每次移动沙土都需要成本,且成本与移动的距离还有沙土的质量有关,问题是如何以最小的总成本完成这个搬运和重塑任务。

这一比喻将抽象的分布转换问题可视化,从而揭示了最优传输的本质,即在质量守恒的约束下,最小化整体转换成本。它的数学表示为:

即寻找一个传输映射 T,能够将分布 转化为分布 ,并且使得在这个过程中产生的总成本最小。

蒙日问题是第一个最优传输问题,提供了分布变换的基本范式,其局限性在于要求每个源点映射到唯一目标点(即T,确定性传输),不允许质量拆分,解可能不存在。

在1942年,列昂尼德·康托洛维奇(Leonid Kantorovich)提出了该问题的松弛形式。他通过引入一个耦合测度 ,不再要求质量必须由一个映射 T 运输,而是允许将一个源点的质量拆分并运送到多个目标点。耦合测度 上的联合概率分布,其边缘分布分别为 ,故该问题的数学表示为:

康托洛维奇问题是线性规划问题(在离散情况下)或无限维线性规划问题(在连续情况下),因此更容易处理。而且它的解总是存在的,并且当存在一个最优的确定性映射时,可以退化为蒙日问题的解。

最优传输的经典应用包括但不限于如下几个:

在图像处理上,把一张彩色图片(分布A)的风格变成另一张油画(分布B)的风格,最优传输可以找到颜色之间的最佳匹配,在改变风格的同时,保持图片结构;

在自然语言领域,可以比较两篇文章的词频分布。传统方法只能看出"都有这些词",但最优传输能看出,第一篇文章的"快乐"一词在含义上更对应第二篇文章的"喜悦"一词;

在机器学习领域,比如让计算机生成人脸,可以把生成的人脸分布,向真实人脸分布进行"最优传输"来优化模型。又比如Wasserstein距离(推土机距离)就是基于最优传输理论定义的,它比传统指标(如KL散度)更平滑、更能反映分布形状的差异。

另外关于最优传输,在后续的学习中可能会有一些误区或者混淆,在此提前说明:

首先最优传输不是简单的最近邻匹配,而是全局优化,需要考虑所有点的协调,有时可能需要舍近求远以达到全局最优;

其次最优传输不是只适用于离散点集,还适用于连续分布(前面的康托洛维奇问题)、图像、文本等任何可以表示为质量分布的东西;

最后,虽然经典的最优传输问题的计算复杂度较高(如线性规划方法),存在不实用的问题,但现代算法如Sinkhorn算法(熵正则化)大大降低了计算复杂度,使其能够应用于大规模实际问题。因此,最优传输近年来得到了广泛应用。

2 Grover算法

2.1 定义与问题描述

Grover算法也被称为量子搜索算法,专门用于处理无结构的搜索问题。

p.s. 无结构搜索问题,即在一个没有任何辅助结构(如排序)的数据库中搜索一个特定的元素。

面对这类问题,由于没有结构可利用,任何未检查的元素都可能是目标元素,因此不管使用何种经典算法,平均情况下都需要检查一半的元素,而最坏情况下需要检查所有元素();但使用Grover算法则可实现平方加速()。

它要解决的问题可被描述为:给定一个包含 个元素的无序数据库与一个 Oracle 函数 f(x),当 x 为目标项时,函数值为1,否则为0。问题的目标就是使用最少的查询次数找到使函数值为1的 x 。

p.s. 在计算复杂性理论中,Oracle(预言机)是一个黑盒,它可以在一步计算中回答某个问题。在经典计算中,Oracle函数通常是一个不知道其内部结构,但可以询问其函数值的布尔函数;在量子计算中,Oracle是一个量子黑盒。

2.2 算法步骤

Grover算法由以下步骤组成:

首先,根据问题确定判断条件或布尔表达式(Oracle),确保它对合法组合返回 True,对不合法组合返回 False;

其次,创建并初始化 n 个量子比特,并逐个应用 Hadamard 变换(H门)以得到所有可能的均匀叠加态;

接着,通过 Oracle 筛选出符合条件的组合,并进行扩散变换,即计算此时的系数平均值,将其乘以2,再减去相应量子态前的系数得到对应的新系数(此时合法的量子态系数会增大,而不合法的会减小);

最后,对量子态进行测量,此时能够以较高的概率得到目标元素。

其中,第三步通过迭代来实现,每次迭代都会包括筛选与扩散变换两个操作。

筛选操作的基本作用是识别、标记目标态,并对其相位进行翻转,用酉算子 表示,其具体数学描述如下:

在几何上,可以想象一个二维平面,横轴代表所有非目标态的均匀叠加,纵轴代表目标态,该操作就是将状态向量关于横轴进行反射。它只是识别与标记,不改变幅度,同时采用的相位翻转能为后续的干涉创造条件。

扩散变换的基本作用则在于以所有态的振幅平均值为轴线进行反射,将高于平均的振幅变得更高,低于平均的变得更低,用酉算子 表示,其具体数学描述如下:

其中 是初始的均匀叠加态,I 是单位算子。

p.s. 单位算子(Identity Operator)在量子力学和量子计算中是一个基本概念。它是一个线性算子,作用在任何量子态上都保持该态不变。

扩散变换相当于关于 的反射,即在二维平面上,将状态向量关于 方向进行反射。

它可以通过以下步骤实现(扩散算子):

首先,将所有量子比特进行 Hadamard 变换;

其次,进行条件相位翻转,即将除全零态以外的所有态乘以-1,其算子为:,可以通过先对所有量子比特应用X门,再应用多控制Z门,最后再次应用X门实现;

最后,将所有量子比特进行 Hadamard 变换以恢复原基。

2.3 代码示例

Grover算法的代码示例如下:

python 复制代码
from qiskit import QuantumCircuit, transpile
from qiskit.providers.basic_provider import BasicSimulator
from qiskit.visualization import plot_histogram
import math

def grover_search(n, oracle_circuit, iterations=None):
    #n: 量子比特数
    #oracle_circuit: 实现Oracle的量子电路
    #iterations: 迭代次数,默认为最优值

    N = 2 ** n

    # 计算最优迭代次数
    if iterations is None:
        theta = math.asin(1 / math.sqrt(N))
        iterations = int(round(math.pi / (4 * theta) - 0.5))

    # 创建量子电路
    qc = QuantumCircuit(n, n)

    # 初始化:应用Hadamard变换
    qc.h(range(n))

    # Grover迭代
    for _ in range(iterations):
        # 应用Oracle
        qc.compose(oracle_circuit, inplace=True)

        # 应用扩散算子
        qc.h(range(n))
        qc.x(range(n))
        qc.h(n - 1)
        qc.mcx(list(range(n - 1)), n - 1)        #当前n-1个比特均为1时,对索引为n-1的比特应用翻转
        qc.h(n - 1)      # 往上三步为多控制Z门的实现
        qc.x(range(n))
        qc.h(range(n))

    # 测量
    qc.measure(range(n), range(n))

    return qc, iterations

# 示例:在4个元素中搜索|11⟩
n = 2
oracle = QuantumCircuit(n)
# 受控Z门,应用在量子比特0和1之间,只涉及两个量子比特
oracle.cz(0, 1)

# 执行Grover搜索
qc, iterations = grover_search(n, oracle)
print(f"最优迭代次数: {iterations}")

# 模拟
simulator = BasicSimulator()
compiled_circuit = transpile(qc, simulator)

job = simulator.run(compiled_circuit, shots=1024)
result = job.result()
counts = result.get_counts(compiled_circuit)

print("测量结果:", counts)
print("量子电路:")
print(qc)

关于代码中的最优迭代次数:

初始均匀叠加态可被表示为:

其中, 为目标态, 为所有非目标态的均匀叠加,。由此,当N很大时,

同时,假设经过k次迭代,那么状态会变为:

为了使目标态概率最大化,则希望 ,即 ​,进而可得:

这也就是最优的迭代次数。如果迭代次数超过该值,状态会旋转过头,目标态概率会下降。这也是Grover算法的特性,即概率随迭代次数呈周期性变化。

上述代码打印得到:

3 总结

本周首先学习了最优传输的基础知识,包括其核心思想及应用,其次学习了Grover算法,了解了其步骤并进行了代码实现。后续学习重心可能在论文的阅读复现、实际调参和画图,量子计算的学习会稍微放一放,只偶尔回顾,最优传输的部分本周初次接触感觉有理解难度,学习速度会比较慢。

相关推荐
AI即插即用1 小时前
即插即用系列 | WPFormer:基于小波与原型增强的双域 Transformer 表面缺陷检测网络
人工智能·深度学习·目标检测·计算机视觉·视觉检测·transformer
roman_日积跬步-终至千里1 小时前
【计算机视觉(2)】图像几何变换基础篇:从平移旋转到投影变换
人工智能·算法·计算机视觉
小oo呆1 小时前
【自然语言处理与大模型】三种实现多模态技术的路线
人工智能·自然语言处理
vi121231 小时前
农业图像预处理技术学习综述:原理、实现与应用
人工智能·学习
亚里随笔1 小时前
SAPO:软自适应策略优化——大语言模型强化学习训练的稳定新范式
人工智能·深度学习·机器学习·语言模型·大语言模型·rlhf
hy15687861 小时前
看好大模型技术,不看好“AI 手机”现状
人工智能·热点乱评
优质网络系统领域创作者1 小时前
华为链路聚合原理
人工智能·华为
围炉聊科技1 小时前
Orchestrator-8B:近期HuggingFace上火热的小型模型
人工智能
shayudiandian1 小时前
Keras深度学习框架入门教程
人工智能·深度学习·keras