很多实际问题要的并不是矩阵的单个 eigenvalue,而是所有 eigenvalue 的某种汇总。举三个例子:
- 统计物理与贝叶斯推断中,配分函数、Gaussian 分布的归一化常数、模型的 log evidence 都归结为 ;
- 量子信息中,密度矩阵 的 von Neumann 熵 衡量态的混合程度;
- 图论中,图的生成树数目、三角形数目都可以写成 Laplacian 或邻接矩阵 eigenvalue 的函数之和。
这些问题有一个统一的抽象形式:给定维数 的 Hermitian matrix (稀疏、或可以 block-encode),以及一个标量函数 ,估计谱和 (spectral sum)
其中 是 的 eigenvalues(按重数计)。注意我们不要求输出任何 eigenvalue 本身,只要一个标量。这一点至关重要:输出 个 eigenvalue 的经典描述显然需要 时间,而输出一个数没有这种平凡下界,量子加速的空间正来自这里。
本词条讲两条互补的量子路线。第一条基于一个简单观察:maximally mixed state 在 eigenbasis 中是均匀分布,所以对 做 phase estimation 就相当于均匀随机抽取一个 eigenvalue;多次采样后对 取平均即可。第二条用 QSVT 直接构造 的近似 block encoding,再利用 maximally entangled state 把 normalized trace 写成一个 expectation,用 Hadamard test / amplitude estimation 读出。两条路线的思想不同,但共享同一个关键步骤:先把目标归一化为 。
历史上,determinant 与谱和的量子算法长期被视为”看起来该有加速、但细节很微妙”的典型:早期工作(如 determinant estimation 方向)已经指出相位估计可以抽样 eigenvalue,而系统地把谱和作为一类问题处理、并给出 QSVT 与采样两条路线的复杂度刻画,见文末参考文献中 Luongo 与 Shao 的工作(Zoo 编号 527);determinant estimation 的最新进展见 Giovannetti、Lloyd 与 Maccone 2025 年的算法(Zoo 编号 528)。本词条的结论与这些文献一致:归一化谱和通常可以有效估计,而未归一化的谱和、行列式的相对精度估计则可能指数昂贵——理解这一分界是本词条的核心目标。
阅读本词条需要相位估计(相位估计(QPE))、振幅放大与振幅估计(振幅放大)、Hamiltonian simulation 与 block encoding / QSVT(量子奇异值变换(QSVT))的基本结论;我们会引用这些结论但不重新推导。
1. 问题定义:先归一化输出尺度
在开始任何算法之前,先做一件看似琐碎、实则决定成败的事:把输出尺度归一化。定义归一化谱和
其中 表示从 中均匀随机取一个指标。最后一个等号只是把”除以 的求和”重新解读为”均匀分布下的期望”,但它指明了算法的形状:只要能从特征值的经验分布中采样, 就是一个普通的 Monte Carlo 期望。
量子算法(无论哪条路线)自然输出的是 的加性 近似:
由此立刻得到未归一化谱和的误差:
这个 倍的放大是本词条一切”难度声明”的根源。两个极端情形:
- 如果我们只想要归一化的 (例如 per-dimension 的 log-likelihood、平均能量),加性误差 就够了,代价通常关于 多项式;
- 如果我们想要原谱和的 absolute error (例如精确的整数谱和、或行列式的相对精度),就必须取 。由于 ,这意味着精度要随比特数指数提高,而本词条所有算法的代价都含 (或更差)的因子,于是总代价指数膨胀。
因此,文献中凡声称”superpolynomial speedup in dimension”的结果,对应的几乎都是 normalized/additive promise:估计 到加性误差,而不是估计 到与维数无关的绝对误差。这不是技术上的偷懒,而是由上面的简单放缩决定的硬性分界。读任何谱和算法的复杂度声明时,第一件事就是确认它用的是哪一种误差约定。
2. 经典基线:对角化与随机迹估计
评价量子算法之前,先弄清经典算法能做到什么,否则”加速”无从谈起。
2.1 精确对角化
最直接的经典方法:对 做完整的特征分解,得到全部 ,然后逐个算 求和。稠密矩阵的特征分解约需 时间;如果只需要谱和而不需要特征矢量,也仍然需要 量级去读取全部矩阵元。当 时, 关于 是指数的——这正是”superpolynomial in dimension”加速的参照物。
但要小心:这个参照物只在 以某种紧凑隐式形式给出时才有意义。如果 本身就是硬盘上一个 的显式数组,那么任何算法(包括量子算法)光读入数据就要 ,所谓指数加速无从谈起。第 9 节会回到这个输入模型问题。
2.2 Hutchinson 随机迹估计
经典算法并不只有对角化。估计 (取 )有一个著名的随机技巧,通常归于 Hutchinson。取随机矢量 ,其各分量独立、均值为 、方差为 (例如各分量独立取 各半)。则
其中第三个等号用了分量独立性:()且 。所以 是 的无偏估计量,多次采样取平均即可。每次采样只需要一次 matrix-vector product ,成本为 (非零元个数),对稀疏矩阵可以远低于 ,即 subquadratic。
这个基线告诉我们两件事:
- 经典随机迹估计同样是”采样 + 平均”,和本词条的量子采样路线结构平行;比较时必须计一次 matvec 的真实成本与矩阵稀疏度,而不是笼统地说”经典要 ”;
- Hutchinson 估计的是 ,且要求能算 ——对一般的 (如 、),经典计算 本身就要多项式逼近或迭代法,难度同样由谱区间与 condition number 控制。量子路线遇到的 依赖并不是量子特有的缺陷。
3. 核心直觉:最大混态是”特征值上的均匀分布”
在进入形式推导前,先用一句话讲清第一条路线的全部思想:
相位估计需要一个输入态;如果输入态在 eigenbasis 里”均匀涂抹”,那么相位估计的输出就是均匀随机的一个 eigenvalue。
回顾相位估计(相位估计(QPE)):对酉算子 与输入态 ,若 恰是 的 eigenvector(),输出寄存器给出相位 的近似;若 是叠加态,输出以概率 给出 ——测量把叠加”坍缩”到某一支,各支的概率由振幅平方决定。
现在的问题是:我们不知道 的 eigenvectors,无法制备任何一个 。但我们想要的是均匀抽一个 eigenvalue,而这恰好不需要知道 eigenbasis——取 (与 共享 eigenvectors,eigenvalue 为 ),并把输入态取为 maximally mixed state
右边的等号不是近似: 对任何正交归一基成立(完备性关系),所以 在 eigenbasis 中就是”以概率 处于 “的经典混合。对混合态做相位估计,等价于先按混合的概率分布掷骰子选中某个 ,再对它做相位估计——于是输出寄存器以概率 给出 的近似 。均匀性来自单位矩阵的基无关性,这是整条路线唯一”量子”的诀窍;剩下的都是采样统计。
如何制备一个 mixed state?纯态线路无法直接产生混合,标准技巧是纯化 (purification):制备一对最大纠缠态,丢弃(或等价地,从不触碰)其中一半,剩下的一半就是 maximally mixed state。这就是下一节 Bell pairs 的由来。
第二条路线的直觉同样一句话可以说完:
QSVT 把多项式逼近 变成 的矩阵函数 的 block encoding;而最大纠缠态把”矩阵的归一化迹”变成”一个可测量的期望值”。
即恒等式 :左边是一个量子态上的 expectation,可以用 Hadamard test 或振幅估计读出;右边正是我们想要的 (取 )。第 5 节会证明这个恒等式并补全细节。
4. 路线一:最大混态采样 + 相位估计
4.1 Bell 态制备与约化态
取两个各含 个 qubit 的寄存器(每个寄存器维数 ),制备 对 Bell pairs,即
制备线路是标准的:对每对 qubit 先加 Hadamard 再用 CNOT, 对并行共 个门。
我们只对第一个寄存器施加后续操作(相位估计),第二个寄存器全程闲置。形式上,第一个寄存器的状态由约化密度矩阵描述。计算偏迹:
其中第三个等号用了 。再由完备性关系(取 的 eigenbasis ,谱分解 ):
所以”制备 、只对一半动手”与”以概率 随机制备某个 “在一切测量统计上不可区分——尽管我们完全不知道 是什么。
4.2 相位估计输出均匀随机特征值
对第一个寄存器执行以 为目标酉算子的相位估计(受控的 由 Hamiltonian simulation 实现,见 Trotterization)。由于
当第一个寄存器处于 时,相位估计输出 (进而 )的近似 ;而第 4.1 节说明输入等效于以概率 取 。合起来:
其中 eigenvalue 按重数计( 重 eigenvalue 被抽中的概率是 ,因为它在求和 中出现 次)。这正是第 1 节里 的分布。每次实验还顺带消耗 对 Bell pairs 与一次相位估计;重复 次得到独立样本 ,定义估计量
若相位估计完全精确(),则每个 的期望恰为
即估计量无偏。相位估计的分辨率误差会让每个样本的值略有偏移,第 4.5 节处理这部分偏差。
4.3 从采样到估计:样本复杂度
设 在谱区间上有界:。每个样本 是取值于 (区间宽度 )的独立随机变量,均值为 。用 Hoeffding 不等式( 个独立有界变量的均值偏离期望的概率界):
要求右端不超过常数(如 ),解出
逐项解释这个表达式:因子 来自单次样本的(最坏情形)方差量级——样本散布在宽度 的区间里,方差至多与 同阶;因子 是 Monte Carlo 平均的标志: 个独立样本的标准差按 收缩,要把标准差压到 就需要 。
4.4 用振幅估计做二次加速
是经典采样的极限,但量子算法可以把”对采样结果取平均”这一步也相干化,用振幅估计把对 的依赖改进为 (这正是 Grover 型二次加速在估计问题上的版本,见 振幅放大)。
构造分两步。第一步,把 相干地算进振幅。为简单起见先设 (一般情形可把 拆成正负两部分分别处理,或平移缩放后处理)。在相位估计输出 之后,附加一个辅助 qubit,执行受控旋转
即把 的角度转进振幅( 本身若是可有效计算的函数,这一步是标准的相干算术;若 只能以 oracle 形式给出,则计入一次 的查询)。对整个叠加态而言,辅助位测得 的概率是
第二步,对”辅助位为 “这一事件做振幅估计:以 次调用(每次调用含一次相位估计与一次受控旋转)把 估到加性误差 。于是 的误差为 ,要求其不超过 得
对比第 4.3 节的 :对 的依赖从平方改进为线性,这是振幅估计带来的标准二次增益;代价是每次调用的线路更深(需要相干地控制整个”采样 + 求值”过程,不能简单地测量后重来)。
4.5 相位分辨率与总成本
采样路线还有一笔账:相位估计本身的有限分辨率。设相位估计把每个 eigenvalue 定到误差 以内()。为了让函数值的偏移不破坏总精度,需要
若 在谱区间上 -Lipschitz(),取 即可。而相位估计要把相位定到 ,需要演化时间 ——相位估计中受控 的最大幂次反比于分辨率,这是其标准性质。
于是每次”采样”的成本 = Bell 态制备 + Hamiltonian simulation 的成本。对 -sparse 的 ,后者的代价随稀疏度 、演化时间 与 simulation 精度增长(具体依赖所用 simulation 算法,见 Trotterization)。总成本为
注意分辨率要求 把 的光滑性 也带进了复杂度:** 越陡(如 在 小时), 越大,需要的相位分辨率越高,演化时间越长。**这与下一节 QSVT 路线中”多项式次数随奇异性增长”是同一个困难的不同表现形式。
5. 路线二:QSVT + 最大纠缠恒等式
采样路线把谱和化为 Monte Carlo 期望;本节路线更”直接”:先构造矩阵函数 本身(的 block encoding),再测量它的归一化迹。
5.1 Block encoding 与多项式逼近
设已有 的 block encoding( 是归一化因子;block encoding 的构造见 块编码(Block Encoding))。QSVT 的基本结论是:给定在区间 上逼近某个目标函数的奇/偶多项式 ,可以把 实现为新的 block encoding,调用次数正比于多项式次数 (结论的精确表述与证明见 量子奇异值变换(QSVT),此处直接使用)。
要估计 ,取目标函数为 (自变量 把 的谱映回 的谱区间;除以 把值域压进 ,这是 QSVT 对多项式的硬性要求)。选多项式 在谱区间上一致逼近:
QSVT 即给出 的近似 block encoding ,其 block 满足 (逼近误差从逐点函数值传递到算子范数,因为 QSVT 在 eigenbasis 中逐 eigenvalue 地作用多项式)。
多项式次数从哪来? 三条: 的光滑性(越光滑次数越低;在奇点附近,如 、 在 处,次数随奇点的靠近程度——即 condition number ——增长)、谱区间的长度与位置、以及逼近误差 。对光滑且谱区间远离奇点的 (如多项式 ),次数是常数或很低;对 、 这类在 附近奇异、而谱被 promise 在 内的函数,次数随 增大而增大、随 增长——这就是”对 singularity 附近的 复杂度含 condition number”的准确含义。本词条只用这一定性事实,具体次数界见 QSVT 文献。
5.2 最大纠缠恒等式
有了 的 block,如何读出它的迹?关键是一个恒等式。
Lemma 1(最大纠缠恒等式). 设 为两个 维寄存器间的最大纠缠态, 为任意 矩阵。则
证明。直接展开:
由 ,双重求和坍缩为对角项:
最后一步是迹的定义(对任意正交归一基求对角元之和)。Q.E.D.
值得同时记住一个伴生恒等式(习题 1):——算子可以在最大纠缠态的两半之间”转移”,代价是取转置。它说明最大纠缠态把两个寄存器紧密锁定,是这类恒等式成立的结构性原因。
取 ,恒等式给出
即 normalized trace 被精确地写成了一个纯态 expectation。
5.3 期望值读出
剩下的问题是:给定 的 block encoding,如何估计 ?
- 相干 Hadamard test + 经典平均:用受控的 block encoding 与辅助位干涉,把 编成辅助位的测量概率( Hermitian,期望值是实数,只需实部);每次实验是独立样本, 次重复把 估到 (与第 4.3 节同样的 Hoeffding 分析,注意被估的量是 ,乘以 还原)。
- 振幅估计:把 Hadamard test 的概率估计相干化, 次调用,与第 4.4 节同样获得二次加速。
两种读出的 (或 )因子与采样路线一致;差别在于单次调用的成本:采样路线是”演化时间 的 Hamiltonian simulation”,QSVT 路线是” 次 block encoding 调用”。哪条更省取决于 与输入模型: 光滑、谱区间友好时 QSVT 的多项式次数低,且不需要高精度相位估计;反之若已有高效的 simulation,采样路线常常更直接。
6. 应用一:对数行列式
6.1 从 log det 到谱和
设 正定(PSD 且可逆),eigenvalues 。行列式是 eigenvalues 之积,取对数把积变和:
其中 是矩阵函数(在 eigenbasis 中对每个 eigenvalue 取 ),第三个等号是迹在 eigenbasis 中的展开。于是 log-determinant 是 的谱和,本词条的两条路线都适用。
先 rescale:把 换成 (以下仍记为 ),使谱落在
其中 是(rescale 后的)condition number。rescale 只贡献一个可解析加回的常数:。在 上,,所以取 ;同时 在区间左端点附近越来越陡(),多项式逼近次数与相位分辨率要求都随 增长——即复杂度含 或 与到端点的距离,与第 4.5、5.1 节的一般讨论一致。
6.2 误差传播:为什么相对精度难
假设我们把 per-dimension log-determinant
估到加性误差 :。还原成行列式:
也就是说, 的加性误差 经过 倍放大再取指数,变成行列式的乘性因子 ——这不是一个小扰动。若要行列式的 相对精度,需要 ,即 ,也就是
归一化误差要与 成反比,而算法代价含 因子,于是总代价指数增长——行列式的相对精度估计是指数难的(在本词条框架下)。这个结论与第 1 节的一般性观察一致:困难不在 这个函数,而在”还原成未归一化量”这一步。
反过来说,实践中很多时候我们直接要的就是 本身:高维 Gaussian 的 log-likelihood、贝叶斯模型比较中的 log evidence、统计物理中每格点的自由能,天然都是 per-dimension 量。对这些应用,加性 的 就是有用的输出,量子算法多项式可得。讨论 logdet 量子加速时,先确认应用需要的是哪一种量,比纠结复杂度表达式更重要。
6.3 一个可手算的小例子
取 ,(已经满足 ,)。
- eigenvalues:,;
- ;
- 归一化量 。
检验误差传播:设 ,取 。则
而真值 ,乘性偏差 ——归一化误差只有 ,行列式却已偏离 。把 换成 ,同样的 会变成 量级的荒谬因子。这个玩具例子已经把第 6.2 节的机制演示完整了。
再验证采样路线在这个例子上的行为:maximally mixed state 以各 概率抽到 ;样本 等概率取 与 ,均值 ,与理论一致。
6.4 非 PSD 情形
以上都假设 正定。对一般(非 PSD)矩阵,行列式可以是负数甚至复数: 含符号或复相位,而 涉及分支切割,不能直接套用。处理办法是把问题拆开:用 singular values(即对 这个 PSD 矩阵估计 )得到 ;符号或相位部分(如实矩阵负 eigenvalue 的个数的奇偶性)需要另行估计。本词条的基本表述以 PSD 为主,非 PSD 的推广保留这一拆分结构。
7. 应用二:熵、Schatten 范数与逆迹
von Neumann 熵。 对密度矩阵 (PSD、迹为 1),
即 的谱和(差一个符号)。注意 在 上有界(最大值 在 处),所以采样路线直接用 maximally mixed 输入、对抽出的 计算 取平均即可, 是常数。真正的麻烦在小 eigenvalues: 在 处导数发散(不是 Lipschitz 的),多项式逼近在 附近次数膨胀,相位分辨率要求也失控。标准处理是引入 cutoff (把 的项截断,其对熵的总贡献可用秩的 promise 控制)或直接假设秩 且非零 eigenvalues 有下界。这是一个 promise 依赖的结果:没有对谱下端的假设,熵的加性估计没有统一的高效保证。
Schatten -范数。
其中 是 singular values。 在 上光滑有界,对整数 它本身就是 次多项式——QSVT 路线此时没有逼近误差,次数就是 。 即 Frobenius 范数平方 ,是最简单的非平凡谱和。
逆迹。
在 处奇异;若 ,则 、Lipschitz 常数 、多项式次数随 增长——复杂度被 condition number 全面控制。这与 HHL 类线性求解器的 依赖同源(HHL 算法)。
这三个例子共享一个信息:谱和问题的难度由 在谱区间端点附近的行为决定——光滑有界的 (、 的体部)容易,端点奇异或发散的 (、、 在 处)需要 condition number / cutoff / rank 等 promise 来控制。effective resistance(有效电阻,涉及 Laplacian 伪逆的迹)、Gaussian covariance 归一化常数、Bayesian log evidence 等应用量都可以归约到上述谱和,因而继承同样的 promise 结构。
8. 应用三:图谱中的谱和
8.1 生成树计数与 matrix-tree theorem
设 为 个顶点的连通图(此处 是顶点数,别与前面的 qubit 数混淆), 为其 Laplacian。 总有一个 eigenvalue ,对应的 eigenvector 是 (全一向量);记非零 eigenvalues 为 。Matrix-tree theorem 给出图的生成树数目
取对数:
右端的和是 的谱和,但有一个技术性障碍:必须把 zero eigenvalue 排除在外( 发散)。两个办法:把问题投影到 子空间上(在受控操作中以 为标记做排除),或把 regularize 成 之类的可逆矩阵再修正。无论哪种,复杂度都含 (谱隙的倒数,充当 condition number 的角色)——谱隙越小的图越难。
小例子:取三角形图 (3 个顶点两两相连)。其 Laplacian
的 eigenvalues 为 ( 张成零空间;在 上 ,因为 ,而 在 上为零)。代入 matrix-tree theorem:
与直接枚举一致( 的生成树恰是删掉任意一条边,共 3 棵)。进而 ,公式自洽。
8.2 三角形计数
图的三角形数目是另一个多项式谱和:邻接矩阵 的三次幂的迹数的是长度为 3 的闭 walk,而每个三角形贡献 6 条(3 个起点 × 2 个方向),故
这是 的谱和(对 QSVT 路线是精确的次数-3 多项式,无逼近误差),本身很容易估计到加性精度。真正的困难在另一端: 本身可能很小(甚至为 0 或 1),此时有意义的是相对精度,而由第 1 节的分析,相对精度要求绝对误差 ,归一化误差再除以 ,代价随目标量的缩小而上升。这与 Grover 计数中”目标越少越难”的现象完全同构:谱和算法高效估计的是归一化的量,稀有结构仍需额外精度。
9. 什么时候真有量子优势:输入模型与总账
把两条路线的成本放在一起,并补上最容易被忽略的一笔——输入读取。
若 以显式的 稠密数组给出,那么把它加载进量子 oracle / QRAM 的成本本身就可能与经典直接计算同阶甚至指数于 ;此时谈论”指数加速”没有意义。可信的加速场景包括:
- 由 local rule / sparse oracle 隐式定义(如图的邻接关系、局部 Hamiltonian),每次查询只花 ;
- block encoding 来自已有的量子过程(例如 是某个量子线路天然实现的算子、 是某个线路输出的密度矩阵),根本没有”经典读出”这一步;
- 应用只需要 normalized scalar(如 per-dimension 的 ),而非未归一化的谱和或相对精度;
- 谱有 condition / gap promise(、、rank 等有界),端点奇异性受控。
经典一侧的账也要记清楚:Hutchinson 类随机迹估计(第 2.2 节)用随机矢量与 matrix-vector products,每次采样只花 ,总成本可以 subquadratic 于 。因此公平比较的单位是一次 matvec / 一次 oracle 查询的成本与稀疏度,而不是笼统地拿量子算法对比经典对角化的 。量子的结构性优势在两点:其一,采样的是 eigenvalue 分布本身(一次相位估计同时”对角化并抽样”),而 Hutchinson 估计的是 ,对一般 还需先经典地逼近 ;其二,振幅估计把 Monte Carlo 的 降为 。这两点是否转化为端到端加速,取决于上面列出的输入模型与 promise。
10. 小结与习题
小结:
- 谱和 的统一处理分两步:先归一化为 ,再选择采样或 QSVT 路线估计;还原到未归一化量时误差放大 倍,故”superpolynomial in dimension”的加速对应 normalized/additive promise。
- Maximally mixed state 在 eigenbasis 中均匀(完备性关系),对它做 phase estimation 即以 概率抽出每个 eigenvalue(按重数);Monte Carlo 平均需 个样本,振幅估计改进为 次调用,相位分辨率需满足 。
- QSVT 用次数由光滑性/谱区间/逼近误差决定的多项式构造 的 block,最大纠缠恒等式 把 normalized trace 变成可读出的 expectation。
- Log-determinant、entropy、inverse trace、Schatten norms 都是特例;难度由谱区间端点处的奇异性控制(condition number、cutoff、rank promise),这些保留条件不是技术细节而是复杂度声明的一部分。
- 行列式的相对精度、未归一化的整数谱和、稀有结构(如极少的三角形)需要随 缩小的归一化误差,可能指数昂贵;per-dimension 的量(如 )才是量子算法高效输出的自然对象。
习题(难度大致递增):
- 证明伴生恒等式 ,并用它重新证明 Lemma 1。(提示:两边都在基 上展开比较系数。)
- 对 ():(a)计算 与 ;(b)设 有加性误差 ,计算行列式估计的乘性偏差 ;(c) 要取多小,才能保证行列式的相对误差在 以内?
- 设 的各分量独立取 各半。(a)证明 ;(b)证明方差 的量级由 控制,并据此说明 Hutchinson 估计 的样本复杂度为何含 。
- 由 matrix-tree theorem 推导 ,并对 个顶点的完全图 (Laplacian 的非零 eigenvalues 全为 )验证 。
- 比较两条路线的”每次采样成本”:设 为 -sparse、、。(a)采样路线中, 的 Lipschitz 常数是多少?相位分辨率 与演化时间 应如何取?(b)QSVT 路线中,多项式需要在哪个区间上以什么精度逼近什么函数?(c)定性讨论:哪些情形下你预期 QSVT 路线占优,哪些情形下采样路线占优?
- (开放)第 8.2 节指出三角形计数的困难在相对精度。设图有 个三角形,要把 估到 相对精度:用第 1 节的框架写出所需的归一化误差 ,并说明为什么 很小时任何”先归一化再还原”的路线都会失效。经典算法如何绕开这一困难(例如直接抽样边或顶点)?这对你评价量子加速有何启示?
参考文献
- Zoo 编号 527:Luongo 与 Shao, Quantum Algorithms for Spectral Sums.
- Zoo 编号 528:Giovannetti、Lloyd 与 Maccone 关于 determinant estimation 的 2025 算法。
参考资料
- 本词条整理自《量子计算算法教程》原文:ch15-learning-spectral/spectral-sums
- 内容遵循 CC BY-NC-SA 4.0 许可协议