├── .gitignore ├── pic └── 2_2_pca.png ├── README.md ├── 四、聚类划分.md ├── 三、机器学习.md ├── 二、数据流.md └── 一、降维.md /.gitignore: -------------------------------------------------------------------------------- 1 | Build/ -------------------------------------------------------------------------------- /pic/2_2_pca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xyxu2033/USTC_AlgorithmForBigData2023/HEAD/pic/2_2_pca.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 中国科学技术大学大数据算法课程笔记2023 2 | *By Dyxx* 3 | 4 | 本笔记是一份中国科学技术大学2023年“大数据算法”课程的笔记,笔记内容与老师上课内容同步。 5 | 6 | 记这份笔记并分享是老师同意后的个人行为,不能保证笔记内容完全正确,笔记内容也不构成任何考试/复习的建议。 7 | 8 | 因为作者已经对整门课有一个完整的了解了,所以可能会对一些自以为很显然的地方不作详细解释。如果有任何看不懂的地方,一定不是读者的问题而是作者的问题,请积极联系作者,谢谢各位读者的配合。 9 | 10 | 笔记中的公式使用了部分 `physics` 宏包的命令,在 Typora 中启用相关选项可以正确渲染。[GitHub Releases](https://github.com/SkiperDyxx/USTC_AlgorithmForBigData2023/releases) 中有 PDF 版本,访问有困难可以直接访问 [简陋的网页版本](http://home.ustc.edu.cn/~skiper/BigData)。 11 | -------------------------------------------------------------------------------- /四、聚类划分.md: -------------------------------------------------------------------------------- 1 | # 聚类划分 2 | 3 | 聚类划分的主要目标是:将数据集 $A$ 划分成 $k$ 个不相交的子集 $C_1, C_2, \cdots, C_k$,满足同一个子集中的点距离比较近,不同子集中的点距离比较远。这时我们将这 $k$ 个子集称为 $k$ 个聚类。这个目标非常宽泛,后文将给出细化解释 4 | 5 | ## 基于中心的聚类划分 6 | 7 | ### $k-$均值/中值/中心 8 | 9 | 给定 $\R^d$ 中包含 $n$ 个点的数据集 $A$,度量函数 $D$(例如 $D$ 可以取二范数 $D(\vec x,\vec y) = \norm{\vec x -\vec y}_2$)与参数 $q\geq 1, k\in\N_+$,基于中心的聚类划分可以被描述为:找到 $k$ 个中心点 $\vec c_1,\vec c_2, \cdots,\vec c_k\in\R^d$,使得 $\sum_{i = 1}^nD(\vec a_i, \set{\vec c_j}_{j = 1}^k)^q$ 最小,其中 $D(\vec a, C)\triangleq \min_{\vec c\in C}D(\vec a, \vec c)$,也就是 $\vec a$ 到点集 $C$ 中点距离的最小值 10 | 11 | * 当 $q = 1$ 的时候,目标函数为最小化 $\sum_{i = 1}^nD\qty(\vec a_i, \set{\vec c_j}_{j = 1}^k)$,被称为 **$k-$中值 ($k-$median)** 12 | * 当 $q = 2$ 的时候,目标函数为最小化 $\sum_{i = 1}^nD\qty(\vec a_i, \set{\vec c_j}_{j = 1}^k)^2$,被称为 **$k-$均值 ($k-$means)** 13 | * 当 $q \to\infty$ 的时候,目标函数为最小化 $\max_{i = 1}^nD\qty(\vec a_i, \set{\vec c_j}_{j = 1}^k)$,被称为 **$k-$中心 ($k-$center)** 14 | 15 | > $k-$中心的目标函数是这样得出的:最小化 $\sum_{i = 1}^nD\qty(\vec a_i, \set{\vec c_j}_{j = 1}^k )^q$ 等价于最小化 $\qty(\sum_{i = 1}^nD\qty(\vec a_i, \set{\vec c_j}_{j = 1}^k)^q)^{\frac 1q}$。当 $q\to\infty$ 的时候,后者就等价于 $\max_{i = 1}^nD\qty(\vec a_i, \set{\vec c_j}_{j = 1}^k)$ 16 | 17 | 对于数据集 $A$,上文定义了目标函数来衡量某 $k$ 个中心点的优劣。当找到了某个目标函数下最优的中心点后,我们将 $A$ 划分成 $k$ 个聚类的无交并 $C_1\sqcup \cdots\sqcup C_k$,满足 $\vec a\in C_i\implies D(\vec a, \vec c_i) \leq D(\vec a, \vec c_j)\forall j = 1, 2, \cdots, n$ 即可 18 | 19 | > 如果有 $\vec a$ 到中心点 $\vec c_i$ 与 $\vec c_j$ 的距离一样近,我们既可以将其放进聚类 $C_i$ 也可以将其放进聚类 $C_j$ 20 | 21 | ### Lloyd 算法 - $k-$均值聚类划分算法 22 | 23 | 对于欧式距离 $D(\vec x, \vec y) = \norm{x - y}_2$,输入数据集 $A\subset \R^d$ 与聚类数目 $k\in\N_+$,Lloyd 算法可以被描述成: 24 | 25 | 1. 随意地选择 $\vec c_1, \cdots, \vec c_k\in\R^d$ 26 | 2. 重复如下两步,直到 $\vec c_1, \cdots, \vec c_k$ 不再改变: 27 | 1. 对于 $i = 1, 2, \cdots, n$,如果点 $\vec a_i$ 所在聚类的中心不是与其最近的中心,那么就取出 $\vec a_i$ 并将其放在其最近的中心点所对应的聚类中 28 | 2. 对于 $i = 1, 2, \cdots, k$,将中心点 $\vec c_i$ 改为 $C_i$ 的重心 $\vec c(C_i)\triangleq \frac 1{\abs{C_i}}\sum_{\vec a\in C_i}\vec a$ 29 | 3. 返回 $k$ 个中心点 $\vec c_1, \cdots, \vec c_k$ 与 $k$ 个聚类 $C_1\sqcup \cdots\sqcup C_k$ 30 | 31 | 在分析 Lloyd 算法之前,首先需要指出的是,$k-$均值问题是 NP-Hard 的。特别地,当 ${\rm P\neq NP}$ 的时候,以下命题成立。这就表明不会有性能特别好、结果质量特别高的算法: 32 | 33 | * $k = 2$ 时不存在时间复杂度为 ${\rm poly}(n, d)$ 的 $k-$均值算法 34 | * $d = 2$ 时不存在时间复杂度为 ${\rm poly}(n, k)$ 的 $k-$均值算法 35 | * 不存在时间复杂度为 ${\rm poly}(n, k, d)$ 的且近似比为 $1.0013$ 的 $k-$均值近似算法 36 | 37 | > $k-$均值问题是一个最小化问题。在一个最小化问题中,近似比为 $\alpha$ 的近似算法,或者说近似算法,被描述为:找到原问题的一个可行解,使得解的值不超过最优解的 $\alpha$ 倍。例如,一个 $1.0013\ k-$均值算法可以被描述为找到一些中心点 $\set{\vec c_i}_{i = 1}^k$ 满足 $\sum_{\vec a\in A}D\qty(\vec a_i, \set{\vec c_i}_{i = 1}^k)\leq 1.0013\sum_{\vec a\in A}D\qty(\vec a_i, \set{\vec c_i}_{i = 1}^k)$ 38 | > 39 | > 思考题:构造一个在 $k = d = 2$ 前提下时间复杂度为 ${\rm poly}(n)$ 的 $k-$均值算法 40 | 41 | Lloyd 算法不能保证得到最优解,仅通过 4 个点就能构造出一种近似比为任意大的反例。但是从直观上能得到一个比较好的解,因为以下引理保证了当 $k = 1$ 的时候 Lloyd 算法一定可以得到最优解 42 | 43 | **引理:**对于任意的 $\vec x\in\R^d$ 与有限集 $A\subset \R^d$,设 $\vec c(A')\triangleq \frac 1{\abs{A'}}\sum_{\vec a\in A'}\vec a$ 被定义为数据集 $A'$ 的重心 44 | $$ 45 | \sum_{\vec a\in A'}\norm{\vec a - \vec x}_2^2 = \sum_{\vec a\in A'}\norm{\vec a - \vec c(A')} + \abs{A'}\norm{\vec c(A') - \vec x} 46 | $$ 47 | **证明:**首先由 $\vec c(A') = \frac 1{\abs{A'}}\sum_{\vec a\in A'}\vec a$ 的定义可以得知 $\sum_{\vec a\in A'}\vec a - \abs{A'}\vec c(A') = \vec 0$,也就是 $\sum_{\vec a\in A'}(\vec a - \vec c(A')) = \vec 0$。所以 48 | $$ 49 | \begin{aligned} 50 | \sum_{\vec a\in A'}\norm{\vec a - \vec x}_2^2 &= \sum_{\vec a\in A'} 51 | \qty(\norm{\vec a - \vec c(A')}_2^2 + \norm{\vec c(A') - \vec x}_2^2 + 2(\vec c(A') - \vec x)^\intercal(\vec a - \vec c(A')))\\ 52 | &= \sum_{\vec a\in A'}\norm{\vec a - \vec c(A')}_2^2 + \abs{A'}\norm{\vec c(A') - \vec x}_2^2 + 2(\vec c(A') - \vec x)^\intercal \sum_{\vec a\in A'}(\vec a - \vec c(A'))\\ 53 | &= \sum_{\vec a\in A'}\norm{\vec a - \vec c(A')}_2^2 + \abs{A'}\norm{\vec c(A') - \vec x}_2^2 + 2(\vec c(A') - \vec x)^\intercal \cdot \vec 0\\ 54 | &= \sum_{\vec a\in A'}\norm{\vec a - \vec c(A')}_2^2 + \abs{A'} \norm{\vec c(A') - \vec x}_2^2 55 | \end{aligned} 56 | $$ 57 | 58 |
59 | 60 | 由二范数的正定性知 $\norm{\vec c(A') - \vec x}_2^2\geq 0$,这也就表明 $\sum_{\vec a\in A'}\norm{\vec a - \vec x}_2^2\geq \sum_{\vec a\in A'}\norm{\vec a - \vec c(A)}_2^2$,说明当 $k = 1$ 的时候 $k-$means 中心就是点集的重心 61 | 62 | 接下来讨论 Lloyd 算法的时间性能。在这里我们能给出 63 | 64 | **定理:**Lloyd 算法可以在有限步内运行结束 65 | 66 | **证明:**首先注意到将 $n$ 个点划分成 $k$ 个(非空)聚类的方案数不超过 $n^k$,所以方案数是有限的。设有 $m$ 种将 $n$ 个结点划分为 $k$ 个(非空)聚类的方案 $\mathcal C_1, \mathcal C_2, \cdots, \mathcal C_m$ 67 | 68 | 在每次循环结束时,Lloyd 算法的 $k$ 个中心点 $\vec c_1, \vec c_2, \cdots, \vec c_k$ 的位置完全是由这 $k$ 个聚类的性质而定的,因为循环的第二步会对每个 $i = 1, 2, \cdots, k$ 将 $\vec c_i$ 设置成聚类 $C_i$ 的重心。设聚类划分方案 $\mathcal C = \set{C_1, C_2, \cdots, C_k}$ 的权值为聚类中心 $\vec c_i$ 为 $C_i$ 重心 $\vec c(C_i)$ 时的 $k-$均值权值(也就是 $\sum_{i = 1}^n D(\vec a_i, \set{\vec c(C_1), \vec c(C_2), \cdots, \vec c(C_k)})^2$),再按照该权值将这 $m$ 个聚类划分方案从小到大排序为 $\mathcal C^{[1]}, \mathcal C^{[2]}, \cdots, \mathcal C^{[m]}$,那么 $\mathcal C^{[i]}$ 的权值小于 $\mathcal C^{[j]}$ 的权值可以推出 $i < j$ 69 | 70 | 每次循环结束时当前的聚类划分方案一定是这 $m$ 个中的一种,设第 $i$ 次迭代结束时的聚类划分方案是 $\mathcal C^{[t_i]}$。在没有收敛的时候,迭代的第 1 步会让目标函数变小,而迭代的第 2 步不会让目标函数变大,所以每次迭代会严格让目标函数变小,这意味着 $t_1 > t_2 > \cdots$ 71 | 72 | 显然 $\set{t_i}$ 是一个自然数序列,所以 $t_2\leq t_1 - 1, t_3\leq t_2 - 1\leq t_1 - 2$,以此类推,这表明 Lloyd 算法的迭代次数必不可能大于 $t_1\leq m\leq n^k$。算法一定在有限的次数内迭代完成 73 | 74 |
75 | 76 | 可以证明,Lloyd 算法的最坏时间复杂度是 $2^{\Omega(\sqrt n)}$ 的 77 | 78 | ### $k-$均值++ 79 | 80 | 与 Lloyd 算法的目标相同,$k-$均值++算法旨在对欧氏距离下的 $k-$均值问题特例求解。首先给出其算法: 81 | 82 | 1. 对 $A$ 使用 *$D^2-$采样* 采样出 $k$ 个点,记为 $C = \set{\vec c_1, \cdots, \vec c_k}$ 83 | 2. 以这个 $C$ 为中心点集合运行 Lloyd 算法 84 | 85 | 算法中提到了 *$D^2-$采样*。在介绍其概念之前,先明确一些记号: 86 | 87 | * $D$ 记为 $D_{\ell_2}$,为欧氏距离,也就是 $D(\vec x, \vec y) = \norm{\vec x - \vec y}_2$ 88 | * 对于点 $\vec a$ 与点集 $C$,$D(\vec a, C)\triangleq \min_{\vec c\in C}D(\vec a, \vec c)$ 89 | * 对于点集 $A$ 与点集 $C$,$\mathcal D^2(A, C)\triangleq \sum_{\vec a\in A}D(\vec a, C)^2 = \sum_{\vec a\in A}\min_{\vec c\in C}D(\vec a, \vec c)^2$,也就是 $k-$均值的目标函数 90 | 91 | 接下来介绍 *$D^2-$采样*。对于任意的有限集 $C\subset \R^d$,$P_C$ 是某个定义在 $A$ 上的概率分布,为: 92 | $$ 93 | P_C(\vec a) = \frac{D(\vec a, C)^2}{\mathcal D^2(A, C)} = \frac{D(\vec a, C)^2}{\sum_{\vec b\in A}D(\vec b, C)^2} = \frac{\min_{\vec c\in C}\norm{\vec a - \vec c}_2^2}{\sum_{\vec b\in A}\min_{\vec c_b\in C}\norm{\vec b - \vec c_b}^2_2}\propto\mathcal D^2(\vec a, C)^2 94 | $$ 95 | 96 | > 这表明点 $\vec a$ 与点集 $C$ 的距离越远就越可能被抽中 97 | 98 | $D^2$ 采样出 $k$ 个点的流程如下: 99 | 100 | 1. 从 $A$ 中均匀地抽样出某个点 $\vec c_1\in A$,记 $C^{(1)} \gets \set{\vec c_1}$ 101 | 2. 循环 $i = 2, 3, \cdots, k$: 102 | 1. 以 $P_{C^{(i - 1)}}$ 为 $D^2$ 采样的概率分布抽取 $\vec c_i$ 103 | 2. 令 $C^{(i)}\gets C^{(i - 1)}\cup\set{\vec c_i}$ 104 | 3. 返回 $C^{(k)}$ 105 | 106 | $D^2$ 采样的性质有理论保证: 107 | 108 | **定理:**设 $C$ 是对数据集 $A$ 与整数 $k$ 通过 $D^2-$采样得出的 $k$ 个点,$C^*$ 是 $k-$均值问题的最优解。那么 109 | $$ 110 | \mathbb E\qty[\mathcal D^2(A, C)]\leq 8(\ln k+2)\mathcal D^2(A, C^*) 111 | $$ 112 | > 下文中 $\vec c$ 与 $\vec c(A)$ 不是相同的记号。$\vec c$ 表示 $D^2$ 采样中抽出的点,$\vec c(A)$ 表示 $A$ 的重心 $\frac 1{\abs{A}}\sum_{\vec a\in A}\vec a$ 113 | 114 | 分析一下算法的正确性。首先讨论 $k = 1$ 的特殊情况。对于最优解 $C^*$,由先前的讨论可以得知 $C^* = \set{\vec c(A)}$,也就是 $A$ 的重心。接下来我们讨论随机抽取 $A$ 中的点 $\vec c$ 组成的 $C$ 与 $A$ 之间的距离,只需要证明以下引理即可: 115 | 116 | **引理:**设 $S\subset \R^d$ 是一个有限集合,设 $\vec c$ 是 $S$ 中的点均匀抽样出的一个点,那么 117 | $$ 118 | \mathbb E\qty[\mathcal D^2(S, \set{\vec c}] = 2\mathcal D^2(S, \set{\vec c(S)}) 119 | $$ 120 | **证明(引理):**因为 $\sum_{\vec a\in S}(\vec a - \vec c(S)) = \vec 0$,所以 121 | $$ 122 | \begin{aligned} 123 | \mathbb E\qty[\mathcal D^2(S, \set{\vec c})] &= \frac 1{\abs{S}}\sum_{\vec b\in S}\mathcal D^2(S, \set{\vec b})\\ 124 | &= \frac 1{\abs{S}}\sum_{\vec b\in S}\sum_{\vec a\in S}\norm{\vec a - \vec b}_2^2\\ 125 | &= \frac 1{\abs{S}}\sum_{\vec b\in S}\sum_{\vec a\in S}\qty(\norm{\vec a - \vec c(S)}_2^2 - (\vec b - \vec c(S))^\intercal(\vec a - \vec c(S)) + \norm{\vec b - \vec c(S)}^2_2)\\ 126 | &= \frac 1{\abs{S}}\sum_{\vec b\in S}\qty(\abs{S}\norm{\vec b - \vec c(S)}_2^2 - (\vec b - \vec c(S))^\intercal \sum_{\vec a\in S}\qty(\vec a - \vec c(S)) + \sum_{\vec a\in S}\norm{\vec a - \vec c(S)}_2^2)\\ 127 | &= \sum_{\vec b\in S}\norm{\vec b - \vec c(S)}_2^2 +\sum_{\vec a\in S}\norm{\vec a - \vec c(S)}_2^2\\ 128 | &= 2\mathcal D^2(S, \set{\vec c(S)}) 129 | \end{aligned} 130 | $$ 131 | 132 | > 这可以得出一个在计算几何中非常有意义的恒等式: 133 | > $$ 134 | > \sum_{\vec a\in S}\norm{\vec a - \vec c(S)}_2^2 = \frac 1{2\abs{S}}\sum_{\vec a\in S}\sum_{\vec b\in S}\norm{\vec a - \vec b}_2^2 135 | > $$ 136 | 137 | 接下来讨论对于任意 $k$ 的正确性。抽取一个新点时有两种可能,一种可能是是抽出来的新点来自最优划分中一个新的聚类,可以由以下引理保证 138 | 139 | **引理:**设 $S\subset\R^d$ 与 $C\subset\R^d$ 是两个有限点集,$\vec x$ 是由 $P_C$ 为概率分布抽样出的点,那么 140 | $$ 141 | \mathbb E\qty[\mathcal D^2(S, C\cup\set{\vec x})]\leq 8\mathcal D^2(S_1, \set{\vec c(S)}) 142 | $$ 143 | 另一种可能是抽出来的新点与原有的某个点来自最优划分的同一个聚类。限于篇幅,引理证明的详情见老师提供的讲义 144 | 145 | #### 局部搜索 146 | 147 | 本课程介绍的最后一种 $k-$均值算法,或者说初始解生成法可以这样描述: 148 | 149 | 1. 任选 $T = \set{\vec c_1, \vec c_2, \cdots, \vec c_k}\subseteq A$ 150 | 2. 如果存在 $\vec c\in T$ 与 $\vec c\in A$ 满足 $\mathcal D^2(A, T + \set{\vec c'} - \set{\vec c})< \mathcal D^2(A, T)$,那么更新 $T\gets T + \set{\vec c'} - \set{\vec c}$ 151 | 3. 返回 $T$ 152 | 153 | 其正确性可以由以下定理保证: 154 | 155 | **定理:**输出的 $T$ 至少是最优解的 50 倍保证,也就是 $D(A, T)\leq 50(D(A, C^*))$ 156 | 157 | ### $k-$均值与降维 158 | 159 | 我们重新表述 $k-$均值问题: 160 | 161 | 给定一个点集 $A$ 与 $k\geq 1$,*基于划分的 (partition-based) $k-$均值问题* 被描述为:找到 $A$ 的一个划分 $A_1, A_2, \cdots, A_k$,使得下式最小化: 162 | $$ 163 | \mathscr D\qty(\set{A_i}_{i = 1}^k)\triangleq\sum_{i = 1}^k\mathcal D^2(A_i, \vec c(A_i)) = \sum_{i = 1}^n\sum_{\vec a\in A_i}\norm{\vec a - \vec c(A_i)}_2^2 164 | $$ 165 | 先前定义的 $k-$均值问题可以看做基于中心的 $k-$均值问题,也就是中心点集 $C$ 可以任意选择,但是聚类方案 $\set{A_i}_{i = 1}^k$ 是被 $C$ 诱导出的,但是这里基于划分的 $k-$均值问题是划分可以任意选择,中心点集被划分方案诱导出 166 | 167 | 由 Lloyd 算法很容易得知,最小化基于中心的 $k-$均值问题与最小化基于划分的 $k-$均值问题是等价的 168 | 169 | 注意到以下等式恒成立 170 | $$ 171 | \mathscr D\qty(\set{A_i}_{i = 1}^k) = \sum_{i = 1}^n\sum_{\vec a\in A_i}\norm{\vec a - \vec c(A_i)}_2^2 = \sum_{i = 1}^n\frac 1{2\abs{A_i}}\sum_{\vec a\in A_i}\sum_{\vec b\in A_i}\norm{\vec a - \vec b}_2^2 172 | $$ 173 | 而如果我们使用 JL 引理对 $A$ 中的点进行随机投影降维可以得知 $\abs{\norm{f(\vec a) - f(\vec b)}_2 - \norm{\vec a - \vec b}_2}\leq \epsilon\norm{\vec a - \vec b}_2$ 会在 $d' =\Omega\qty(\frac{\log n}{\epsilon^2})$ 时以很大的概率成立。不难推出 174 | $$ 175 | \abs{\mathscr D\qty(\set{A_i}_{i = 1}^k) - \mathscr D\qty(\set{f(A_i)}_{i = 1}^k)}\leq\epsilon \mathscr D\qty(\set{A_i}_{i = 1}^k) 176 | $$ 177 | 这样我们就可以得出以下算法,其近似比为 $\alpha + \epsilon$(证明略): 178 | 179 | 1. 计算 $\epsilon' = \frac{\epsilon}{6\alpha}$ 与 $d' = \Omega\qty(\frac{\log n}{\epsilon^2})$ 180 | 2. 以 $\epsilon'$ 与 $d'$ 为参数使用 JL 引理计算随机投影 $f(A)$ 181 | 3. 使用一个 $\alpha$ 近似算法计算投影后的 $k-$均值问题以得到一个聚类划分方案 $\set{F_i}_{i = 1}^k$ 182 | 4. 使用 $\set{F_i}_{i = 1}^k$ 诱导出 $\set{A_i}_{i = 1}^k$,也就是 $A_i = \set{x: f(x)\in F_i, x\in A}$ 183 | 5. 返回 $\set{A_i}_{i = 1}^k$ 184 | 185 | ### $k-$中值 186 | 187 | 关于 $k-$中值问题的讨论也一般是基于欧氏距离的,也就是找到一个中心点集 $C$ 满足 $\abs{C} = k$ 且下式最小化: 188 | $$ 189 | \mathcal D(A, C) \triangleq \sum_{\vec a\in A}D(\vec a, C) = \sum_{\vec a\in A}\min_{\vec c\in C}\norm{\vec a - \vec c}_2 190 | $$ 191 | 这是一个 NP 完全问题。解决这个问题的近似算法主要有两种:线性规划与局部搜索。线性规划可以达到 4 的近似比,但是需要额外添加至多 $k$ 个中心点。局部搜索的近似比可以达到 $6$,且算法与先前类似(证明略): 192 | 193 | 1. 从某个 $S\subseteq A$ 且 $\abs{S} = k$ 开始 194 | 2. 如果存在某个 $\vec a\in A\setminus S$ 与 $\vec r\in S$ 满足 $\mathcal D(A, S - \vec r + \vec a) < \mathcal D(A, S)$,那么就更新 $S\gets S - \vec r + \vec a$,然后重复本步骤 195 | 3. 输出 $S$ 196 | 197 | ### $k-$中心 198 | 199 | 回忆 $k-$中心问题为找到一个中心点集 $C$ 满足 $\abs{C} = k$ 且下式最小化: 200 | $$ 201 | \overline{\mathcal D}(A, C)\triangleq \max_{\vec a\in A}\min_{i = 1}^kD(\vec a, \vec c_i) 202 | $$ 203 | 当 $k = 1$ 的时候,这个问题等价于找到某个点 $\vec c_1$ 满足点集 $A$ 中与其最远点的距离最小,也就是找到点集 $A$ 外接球的球心。但这本身并不是一件容易的事情。基于贪心的思想,对于一般的 $k$,Gonzalez 给出如下算法: 204 | 205 | 1. 任选 $\vec c_1\in A$ 206 | 2. 依次遍历 $i = 2, 3, \cdots, k$。对每个 $i$,找到使得 $\min_{j = 1}^{i - 1}D(\vec x, \vec c_j)$ 最大的点 $\vec x\in A$,并将其记为 $\vec c_i$。也就是 $\vec c_i\gets \arg\max_{x\in A}\min_{j = 1}^{i - 1}D(\vec x, \vec c_j)$ 207 | 3. 输出 $\set{\vec c_i}_{i = 1}^k$ 208 | 209 | **定理:**Gonzalez 算法是一个 2 近似算法,也就是 $\overline{\mathcal D}(A, C)\leq 2\overline{\mathcal D}(A, C^*)$ 210 | 211 | 这里不给出完整的证明,但是给出 $k = 1$ 的特殊情况,也就是任选一个中心点 $\vec c_1\in A$,均有 $\max_{\vec a\in A}D(\vec a, \vec c_1)\leq 2\max_{\vec a\in A}D(\vec a, \vec c^*)$,其中 $\vec c^*$ 是点集 $A$ 的外接球球心,不一定在 $A$ 中。这时由三角不等式可以得出: 212 | 213 | $$ 214 | D(\vec a, \vec c_1)\leq D(\vec a, \vec c^*) + D(\vec c_1, \vec c^*)\leq 2\max_{\vec a\in A}D(\vec a, \vec c^*) 215 | $$ 216 | 左式小于右式恒成立。因为右式是常量,所以左式的最大值也一定小于右式,也就表明 $\max_{\vec a\in A}D(\vec a\in A)\leq 2\max_{\vec a\in A}D(\vec a, \vec c^*)$ 成立 217 | 218 | ### $k-$均值核心集 219 | 220 | 我们首先定义带权重的 $k-$均值距离。对于有限集 $S\subset \R^d$ 与权重函数 $\omega: S\mapsto \R_+$,我们定义 $\mathcal D^2(S, \omega, C)\triangleq \sum_{\vec a\in S}\omega(\vec a)\mathcal D^2(\vec a, C)$。先前讲过的 $k-$均值相当于是 $\omega\equiv 1$ 的特例 221 | 222 | 给定 $k\in\N_+, \epsilon > 0$ 与 $A\subset\R^d, \abs{A} = n$,我们希望找到这样的一个有限集 $S$,使得对于任意大小为 $k$ 的集合 $C\subset\R^d$,都有 $\abs{\mathcal D^2(S, \omega, C) - \mathcal D^2(A, C)} \leq \epsilon \mathcal D^2(A, C)$,也就是说对 $(S, \omega)$ 做 $k-$均值聚类来找出聚类中心点与对 $A$ 做 $k-$均值聚类是差不多的。这时 $S$ 被称为核心集。本节的剩余内容将给出一个大小为 $\order{k\epsilon^{-d}\log n}$ 的核心集 $S$,这在大数据的应用背景下可以在很大程度上减少需要处理的点数 223 | 224 | 在给出这个核心集之前,我们首先需要一些定义与引理。限于篇幅与课程相关度,这里略去证明: 225 | 226 | **定义:**一个半径为 $r$ 的球的 **$\epsilon$ 球覆盖** 被定义为:找到一个点集 $B$,满足该球内的所有点到点集 $B$ 内最近点的距离不超过 $\epsilon r$,也就是以 $B$ 中的点为球心,$\epsilon r$ 为半径画出的球可以完整覆盖原本半径为 $r$ 的球 227 | 228 | 这个定义表明 $\epsilon$ 球覆盖的方案不会随着 $r$ 变化而显著变化(指在 $r$ 变化后相应地对球心进行仿射变换就能得到新的覆盖方案),但是会随着 $\epsilon$ 变化而变化显著。在考虑任意球的 $\epsilon$ 球覆盖方案时,我们只需要考虑对单位球的覆盖方案即可。 229 | 230 | **引理:**存在一个大小不超过 $\qty(1 + \frac 2\epsilon)^d$ 的 $\epsilon$ 球覆盖 231 | 232 | 这里带大家直观理解一下 $d = 1$ 时的证明:一维单位球是数轴上的区间 $[-1, 1]$。显然,在这个区间内选一串数满足相邻两个数的差值恰好为 $\epsilon$(即选 $B = \set{-1 + \epsilon, -1 + \epsilon, 2\cdots, -1 + \left\lfloor\frac 2\epsilon\right\rfloor\epsilon}$)是一个 $\epsilon$ 球覆盖,大小为 $\left\lfloor \frac 2\epsilon\right\rfloor \approx (1 + \epsilon)^1$ 233 | 234 | **定理:**存在一个 $k-$均值问题多项式复杂度的 $10$ 近似算法 235 | 236 | **引理(广义三角不等式):**设 $\vec a, \vec b, \vec c$ 是欧式空间中的 $3$ 个点,。对于任意的 $\epsilon\in(0, 1)$,均有 237 | $$ 238 | \abs{\norm{\vec a- \vec c}_2^2 - \norm{\vec b - \vec c}^2_2}\leq \frac {12}\epsilon\norm{\vec a - \vec b}_2^2 + 2\epsilon\norm{\vec a - \vec c}_2^2\\ 239 | \abs{\mathcal D^2(\vec a, C) - \mathcal D^2(\vec b, C)}\leq\frac{12}{\epsilon}\mathcal D^2(\vec a, \vec b) + 2\epsilon\mathcal D^2(\vec a, C) 240 | $$ 241 | 242 |
243 | 接下来我们给出算法描述: 244 | 245 | **输入:**点集 $A$,聚类数 $k$ 246 | 247 | 1. 使用某个多项式近似算法计算 $A$ 的 $10$ 近似 $k-$均值聚类 $C_1, C_2, \cdots, C_k$,其中心为 $\vec c_1, \vec c_2, \cdots, \vec c_K$ 248 | 2. 令 $j$ 依次遍历 $1, 2, \cdots, k$ 249 | 1. 对 $i = 0, 1, \cdots, \log 10n$,记 $B^{(i)}$ 为半径是 $\sqrt{\frac{2^i}n\sum_{\vec x\in C_j}\norm{\vec x - \vec c_j}^2_2}$,中心在 $\vec c_j$ 处的球 250 | 2. 求得 $B^{(i)}$ 的 $\frac \epsilon{192}$ 球覆盖 $S_j^{(i)}$ 251 | 3. 令 $S_j\gets \bigcup_{i = 0}^{\log 10n}S_j^{(i)}$ 252 | 3. 令 $S\gets \bigcup_{j = 1}^kS_j$ 253 | 4. 对每个 $\vec y\in S$,令 $\omega(\vec y)$ 表示 $A$ 中这样的点的数目:$\vec y$ 是该点在 $S$ 中点的最近邻。也就是 $\omega(\vec y)\gets \abs{\set{\vec a\in A : \norm{\vec a - \vec y}_2^2 = \mathcal D^2(\vec a, S)}}$ 254 | 5. 输出 $(S, \omega)$ 255 | 256 | 接下来给出对这个算法的分析。首先证明: 257 | 258 | **引理:**设 $F$ 是一个大小为 $n$ 的集合,$B^{(i)}$ 是中心在原点,半径为 $r_i \triangleq \sqrt{\frac{2^i}n\sum_{\vec x\in F}\norm{\vec x - \vec c_j}_2^2}$ 的球,$S^{(i)}$ 是 $B^{(i)}$ 的一个 $\frac \epsilon 3$ 球覆盖。记 $S = \bigcup_{i = 1}^{\log 10n}S^{(i)}$,那么 259 | $$ 260 | \sum_{\vec x\in F}\min_{\vec s\in S}\norm{\vec x - \vec s}^2_2\leq \epsilon^2\sum_{\vec x\in F}\norm{\vec x}_2^2 261 | $$ 262 | **证明:**我们将 $F$ 分成两个子集 $F_{\rm close}$ 与 $F_{\rm far}$ 以便于左式求和,其中 $F_{\rm close} = \set{\vec y\in F :\norm{\vec y}_2^2\leq \frac 1n\sum_{\vec x\in F}\norm{\vec x}_2^2}$,而 $F_{\rm far}$ 是 $F_{\rm close}$ 的补集,也就是 $\set{\vec y\in F :\norm{\vec y}_2^2 >\frac 1n\sum_{\vec x\in F}\norm{\vec x}_2^2}$ 263 | 264 | 关于 $F_{\rm close}$,考虑到 $\abs{F_{\rm close}}\leq \abs{F} = n$,我们有 265 | $$ 266 | \sum_{\vec x\in F_{\rm close}}\min_{\vec x\in S^{(0)}}\norm{\vec x - \vec s}_2^2 \leq\abs{F_{\rm close}}\cdot \frac 1n\sum_{\vec x\in F}\norm{\vec x}_2^2\frac{\epsilon^2}9 \leq\sum_{\vec x\in F}\frac{\epsilon^2}9\sum_{\vec x\in F}\norm{\vec x}_2^2 267 | $$ 268 | $F_{\rm far}$ 中的点一定不在 $B^{(0)}$ 中(因为 $B_0$ 的半径 $r_0$ 满足 $r_0^2 = \frac{2^0}n\sum_{\vec x\in F}\norm{\vec x - \vec c_j}_2^2 = \frac 1n\sum_{\vec x\in F}\norm{\vec x - \vec c_j}_2^2$)。设 其在 $B^{(i)}\setminus 269 | -------------------------------------------------------------------------------- /三、机器学习.md: -------------------------------------------------------------------------------- 1 | # 机器学习 2 | 3 | 5 月 9 号到 5 月 24 号的这 5 节课笔记等 XXY “有空”的时候补上,也欢迎同学们联系我来分享笔记。这里先放一个去年记得占位。**请注意笔记中潜在的错误和蹩脚的英语** 4 | 5 | ## The Perceptron Algorithm 6 | 7 | ### Problem 8 | 9 | **Goal: **Finding a linear separator / half-space 10 | 11 | Given $n$ labeled examples $x_1, \cdots, x_n$ in $d-$dimensional space. Each example has label $+1, -1$. The task is to find a weight vector $w\in\R^d$ if one exists a threshold $t$ s.t. 12 | 13 | * $w\cdot x_i > t$ for each $x$ labeled $+1$ 14 | * $w\cdot x_i < t$ for each $x$ labeled $-1$ 15 | 16 | Solutions: 17 | 18 | * Linear Programming algorithms 19 | * The Perception Algorithm 20 | 21 | ### Algorithm Description 22 | 23 | $\widehat{x_i} \triangleq (x_i, 1), \widehat w \triangleq (w, -t)$ 24 | 25 | Then our goal is to find $l_i(w\cdot x_i) > 0, \forall i\in[n]$ 26 | 27 | 1. Initialize $w\gets 0$ 28 | 2. While there exists $x_i$ with $x_il_i\cdot w\leq 0$, update $w\gets w + x_il_i$ 29 | 30 | ### Analysis 31 | 32 | Define the margin as the minimum distance from one vector to the hyperplane, i.e. $\min\dfrac{|w^*x_i|}{\norm{w^*}_2}$. 33 | 34 | Scale $w^*$ so that $(w^*\cdot x_i)\cdot l_i\geq 1$. So the margin is at least $\dfrac 1{\norm{w^*}_2}$. Let $r\triangleq \max\norm{x}_2$ denote the farthest point from the origin. 35 | 36 | **Theorem 1:** If $\exists w^* \text{ s.t. }(w^*\cdot x_i)l_i\geq 1, \forall i\in[n]$, then the perception algorithm finds a solution $w$ such that $(w\cdot x_i)l_i > 0, \forall i\in[n]$ in at most $r^2\norm{w^*}_2^2$ updates. 37 | 38 | **Proof: **Consider $w^\intercal w^*$ and $\norm{w}^2$. 39 | 40 | 1. Each update increases $w^\intercal w^*$ by at least 1. 41 | $$ 42 | (w + x_il_i)\cdot w^* = w\cdot w^* + x_il_i\cdot w^*\geq w\cdot w^* + 1 43 | $$ 44 | 45 | 2. Each update increases $\norm{w}^2$ by at most $r^2$ 46 | $$ 47 | \norm{w +x_il_i}^2 = \norm{w}^2 + 2l_ix_i^Tw + \norm{x_il_i}^2\leq \norm{w}^2 + r^2 48 | $$ 49 | 50 | Let $m$ be the number of updates of the perception algorithm. Then $w^\intercal w^*\geq m, \norm{w}^2\leq mr^2$. 51 | 52 | By Cauchy-Schwartz inequality, $\norm{w}\norm{w^*}\geq m, \norm{w}\leq \sqrt m\cdot r$. 53 | 54 | So $\dfrac{m}{\norm{w^*}}\leq\norm{w}\leq\sqrt{m}\cdot r$. So $m\leq\norm{w^*}^2r^2$. 55 | 56 | ### Kernel 57 | 58 | **Example:** 59 | 60 | For any point $p$ on $x^2 + y^2 = 1$, we have $l_p = 1$. for any point $p$ on $x^2 + y^2 = 4$, we have $l_p = -1$. We want to classify it. 61 | 62 | We can define $\varphi(x_i) = (x_i, \norm{x_i})$ and apply perception algorithm on $\{\varphi(x_1), \cdots, \varphi(x_n)\}$. 63 | 64 | Note that the perceptron algorithm outputs $w$ such that $w = \sum_{i = 1}^nc_i\varphi(x_i)$. then for each $x_i$, to determine if $x_i$ is correctly classified, compute $w^\intercal\varphi(x_i) = \sum_{j = 1}^nc_j\varphi(x_j)^\intercal\varphi(x_i)$. We don't need to know $\varphi(x_i)$ exactly: 65 | 66 | **Lemma: **Define kernel matrix $K = (k_{ij})_{n\times n}$, then exists a function $\varphi$ such that $k_{ij} = \varphi(x_i)^\intercal\varphi(x_j)$ if and only if $K$ is semi-positive definite. 67 | 68 | **Proof: **If $K$ is a kernel matrix then $K = B^\intercal B$ where $B = \begin{bmatrix}\varphi(x_1)\\\varphi(x_2)\\\vdots\\\varphi(x_n)\end{bmatrix}$. 69 | 70 | If $K$ is semi-positive definite then $K$ can be represented as $B^\intercal B$ and thus we can use the $i-$th row of $B$ as $\varphi(x_i)$. 71 | 72 | **Theorem: **Suppose $k_1$ and $k_2$ are kernel functions, then: 73 | 74 | * $ck_1$ is a legal kernel function for all $c\geq 0$ 75 | * $k_1 + k_2$ is a legal function 76 | * $k_1k_2$ is a legal function 77 | 78 | ## PAC Learning 79 | 80 | ### Problem Description 81 | 82 | **Assumption:** There exists a probability distribution $D$ over the instance space $X$ such that: 83 | 84 | * The training set $S$ consists of points drawn independently at random from $D$ 85 | * Our objective is to predict well on new points that are also drawn from $D$ 86 | 87 | **Definitions:** 88 | 89 | * $c^*$ : target concept, a subset of $X$ corresponding to the positive class for binary classification 90 | * $h$ : hypothesis, our estimation of $c^*$ 91 | * $err_D(h)$: true error of hypothesis $h$, defined as $\mathbb P\{X\in h\oplus c^*| X\sim D\}$ 92 | * $err_S(h):$ training error of hypothesis $h$, defined as $\dfrac{|S\cap (h\oplus c^*)|}{|S|}$ 93 | * $\mathcal H$: hypothesis class. every element in $\mathcal H$ is a hypothesis 94 | 95 | ### PAC Learning 96 | 97 | * Let $\mathcal H$ be a hypothesis class and let $\epsilon, \delta\in \R_+$. If a training set $S$ of size $n\geq \dfrac{\ln|\mathcal H| + \ln(1/\delta)}{\epsilon}$ is drawn from distribution $D$, then: 98 | $$ 99 | \mathbb P\{err_S(h) > 0, \forall err_D(h)\geq \epsilon, h\in \mathcal H\}\geq 1 - \delta 100 | $$ 101 | Equivalently: 102 | $$ 103 | \mathbb P\{err_D(h) < \epsilon, \forall err_S(h) = 0, h\in \mathcal H\}\geq 1 - \delta 104 | $$ 105 | **Proof:** Assume hypotheses $h_1, h_2, \cdots h_m$ have $err_D(h)\geq \epsilon$. Since $|S| = n$ elements are drawn from distribution $D$, we have $\mathbb P\{err_S(h_i) = 0\} \leq (1 - \epsilon)^n$. So $\mathbb P\{err_S(h_1) = 0\vee err_S(h_2) = 0\vee \cdots\vee err_S(h_m) = 0\}\leq \sum_{i = 1}^m\mathbb P\{err_S(h_i) = 0\}\leq |\mathcal H|(1 - \epsilon)^n$. And by the fact that $1 - \epsilon\leq e^{-\epsilon}$, we have the theorem. 106 | 107 | * Let $\mathcal H$ be a hypothesis class and let $\epsilon, \delta\in\R_+$. If a training set $S$ of size $n\geq \dfrac{\ln|\mathcal H| + \ln(2/\delta)}{2\epsilon^2}$ we have 108 | $$ 109 | \mathbb P\{\left|err_S(h) - err_D(h)\right|\leq \epsilon, \forall h\in\mathcal H\}\geq 1 - \delta 110 | $$ 111 | 112 | **Proof:** Let $X_j$ be the random variable that hypothesis $h$ make a mistake on $j$^th^ element of $S$. So $\mathbb E(X_j) = err_D(h)$ and $X_j$ can only be $0$ or $1$. By Hoeffding bounds, $\mathbb P\{|err_S(h) - err_D(h)|\geq \epsilon\}\leq 2e^{-2n\epsilon^2}$. By union bounds, $\mathbb P\{|err_S(h) - err_D(h)|\leq \epsilon, \forall h\in\mathcal H\}\leq 2|\mathcal H|e^{-2n\epsilon^2}$, so we have the theorem. 113 | 114 | ### Occam's Razor 115 | 116 | "Simple explanations are better than complicated ones." 117 | 118 | **Theorem: **Fix any description language and consider a training sample $S$ from distribution $D$, then with probability $\geq 1 - \delta$, any rule $h$ with ${\rm err}_S(h) = 0$ that can be described using $b$ bits has ${\rm err}_D(h)\leq\epsilon$ if $|S| = \cfrac 1\epsilon(b\ln 2 + \ln(1 / \delta))$ 119 | 120 | Equivalently, with probability $\geq 1 - \delta$, any rule $h$ with ${\rm err}_S(h)$ that can be described using $ 后文中 $A\triangle B$ 表示 $(A\setminus B)\cup(B\setminus A)$ 349 | 350 | 先前在 PAC Learning 中,我们证明了:设 $\mathcal H$ 是一个假设类,如果 $\mathcal H$ 是有限的,那么当 $n\geq \frac 1{2\epsilon^2}(\ln \abs{\mathcal H} + \ln \frac 1\delta)$ 时以至少 $1 - \delta$ 的概率,真实误差与训练误差的差距不超过 $\epsilon$ 351 | 352 | 如果 $\mathcal H$ 是无限集合,但是它的 VC 维数是有限的,那么我们可以证明:当 $n\geq \frac c{\epsilon^2}\qty({\rm VC}(X, \mathcal H)\cdot\log\frac 1\epsilon + \ln\frac 1\delta)$ 时训练误差与真实误差的差距也不超过 $\epsilon$,其中 $c$ 是某个常数 353 | 354 | 为了证明这个定理,我们首先定义 *碎裂函数* (Shatter Function) $\pi_{\mathcal H}(n)$ 表示对于任意大小为 $n$ 的集合 $A$,$A$ 与 $\mathcal H$ 中的元素相交最多能生成多少个 $A$ 的子集(也就是集族 $\set{A\cap h : h\in \mathcal H}$ 的大小在 $\abs{A} = n$ 的限制下最大是多少) 355 | 356 | 接下来给出这样的一个 *关键定理*: 357 | 358 | **定理:**设 $(X, \mathcal H)$ 是一个集合系统,$D$ 是 $X$ 上的概率分布。设 $n$ 满足 $n\geq\frac 8\epsilon$ 且 $n\geq \frac 2\epsilon\qty(\log_2(2\pi_{\mathcal H}(2n)) + \log_2(\frac 1\delta)))$。设 $S_1$ 包含了 $n$ 个以 $D$ 的概率分布从 $X$ 中抽样的点,那么以至少 $1 - \delta$ 的概率,任意的 $\mathcal H$ 中的集合 $h$ 满足:若 $h$ 在 $D$ 中所占的概率质量超过 $\epsilon$,那么 $h\cap S_1\neq\varnothing$ 359 | 360 | **证明:**设 $A$ 表示这样一个事件:存在某个 $h\in \mathcal H$,满足 $h$ 的概率质量超过了 $\epsilon$,但是 $h$ 与 $S_1$ 无交 361 | 362 | > $A$ 表示定理中描述事件的反命题。只要证明 $\Pr[A]\leq\delta$,那么定理就成立了 363 | 364 | 我们再以 $D$ 的概率分布从 $X$ 中抽取 $n$ 个点来组成集合 $S_2$ 365 | 366 | 设 $B$ 表示这样一个事件:存在 $h\in\mathcal H$ 满足 $h\cap S_1 = \varnothing$ 且 $\abs{h\cap S_2}\geq\frac{\epsilon n}2$。我们首先尝试证明这两件事: 367 | 368 | * $\Pr[B\mid A]\geq\frac 12$(如果 $A$ 发生了那么 $B$ 很可能发生) 369 | * $\Pr[B]\leq\frac \delta 2$($B$ 基本上不可能发生) 370 | 371 | 如果这两件事都成立,那么 372 | $$ 373 | \frac\delta 2\geq \Pr[B]\geq\Pr[A\cap B] = \Pr[B\mid A]\Pr[A]\geq\frac 12\Pr[A] 374 | $$ 375 | 也就表明 $\Pr[A]\leq\delta$,表明原命题成立了 376 | 377 | 接下来我们尝试证明这两点。首先尝试证明 $\Pr[B]\leq \frac\delta 2$ 378 | 379 | 因为 $S_1$ 与 $S_2$ 都是以 $D$ 的概率分布抽取的,所以它们等价于这样构造(联想作业 2 的附加题) 380 | 381 | 1. 抽取一个大小为 $2n$ 的点集 $S_3$ 382 | 2. 将 $S_3$ 均匀等概率划分成两个大小相同的集合 $S_1$ 与 $S_2$ 383 | 384 | 由 *碎裂函数* 的定义,$S_3$ 与 $\mathcal H$ 中集合产生交集的个数 $\abs{\set{S_3\cap h: h\in \mathcal H}}$ 一定小于等于 $\pi_{\mathcal H}(2n)$ 385 | 386 | 对于任意满足概率质量不小于 $\epsilon$ 的集合 $h'\in \mathcal H$,只要我们证明事件 $\abs{S_1\cap h'} = 0$ 且 $\abs{S_2\cap h'}\geq\frac{\epsilon n}2$ 的发生概率不超过 $\frac \delta{2\pi_{\mathcal H}(2n)}$,那么由 Union Bound 知存在 $h\in \mathcal H$ 满足 $\abs{S_1\cap h} = 0$ 且 $\abs{S_2\cap h}\geq\frac{\epsilon n}2$ 的概率不超过 $\frac \delta 2$ 387 | 388 | > 毕竟 $\mathcal H$ 中的元素与 $S_3$ 的交集都只有不超过 $\pi_{\mathcal H}(2n)$ 个。虽然 $\mathcal H$ 中的元素个数可能是无穷多,但是 $\abs{S_1\cap h}$ 与 $\abs{S_2\cap h'}$ 的大小显然只与 $S_3\cap h'$ 有关,毕竟 $S_1\cap h' = S_1\cap (S_3\cap h')$ 389 | 390 | 接下来我们证明对于任意 $h'\in \mathcal H$,$\Pr\qty[\abs{S_1\cap h'} = 0\and \abs{S_2\cap h'}\geq \frac{\epsilon n}2]\leq \frac{\delta}{2\pi_{\mathcal H}(2n)}$: 391 | 392 | * 当 $\abs{S_3\cap h'} < \frac{\epsilon n}2$ 时,显然 $\abs{h'\cap S_2}\geq\frac{\epsilon n}2$ 的概率是 $0$ 393 | * 当 $\abs{S_3\cap h'}\geq\frac{\epsilon n}2$ 时,事件“ $\abs{S_1\cap h'} = 0$ 且 $\abs{S_2\cap h'}\geq\frac{\epsilon n}2$” 等价于 $S_3\cap h'$ 中的所有点在随机划分的时候一个都没落在 $S_1$ 里。第一个点没落在 $S_1$ 里的概率是 $\frac n{2n} = \frac 12$,第二个点没落在 $S_1$ 里的概率是 $\frac{n - 1}{2n - 1} <\frac 12$……这 $\abs{S_3\cap h'}$ 个点都没落在 $S_1$ 里的概率一定不超过 $\qty(\frac 12)^{\abs{S_3\cap h'}}$。因为 $\abs{h'\cap S_3}\geq\frac{\epsilon n}2$,所以事件 $\abs{S_1\cap h'} = 0\and \abs{S_2\cap h'}\geq \frac{\epsilon n}2$ 的概率一定不超过 $\qty(\frac 12)^{\frac{\epsilon n}2}$。代入 $n\geq \frac 2\epsilon\qty(\log_2(2\pi_{\mathcal H}(2n)) + \log_2(\frac 1\delta))$ 知 $\Pr\qty[\abs{S_1\cap h'} = 0\and \abs{S_2\cap h'}\geq\frac{\epsilon n}2\ \big|\ \abs{h'\cap S_3}\geq \frac{\epsilon n}2]\leq \frac\delta{2\pi_{\mathcal H}(2n)}$ 394 | 395 | 在两种情况下目标事件发生的概率都不超过 $\frac{\delta}{2\pi_{\mathcal H}(2n)}$,这就表明 $\abs{S_1\cap h'} = 0\and \abs{S_2\cap h'}\geq\frac{\epsilon n}2$ 的概率确实不超过 $\frac\delta{2\pi_{\mathcal H}(2n)}$,进一步表明 $\Pr\qty[B]\leq \frac\delta 2$ 396 | 397 | 接下来我们证明对于任意的集合 $h'\in\mathcal H$,若 $h'$ 的质量大于等于 $\eta$,那么 $\Pr\qty[B\mid A]\geq \frac 12$ 398 | 399 | 因为 $S_1$ 里点与 $S_2$ 里点都是以 $D$ 为概率分布进行独立随机抽样的,所以 $S_1$ 中的点是否在 $h$ 中与 $S_2$ 中的点是否在 $h$ 中是独立的,也就是表明 $\Pr\qty[\abs{S_1\cap h'} = 0\and \abs{S_2\cap h'}\geq\frac{\epsilon n}2\mid \abs{S_1\cap h'} = 0] = \Pr\qty[\abs{S_2\cap h'}\geq\frac{\epsilon n}2]$。我们计算后者的概率。 400 | 401 | 设 $X_i$ 表示 $S_2$ 中第 $i$ 个点是否在 $h'$ 中这个事件的指示变量,也就是 $X_i = 1$ 这个事件等价于 $S_2$ 中第 $i$ 个点在 $h'$ 中,$X_i = 0$ 这个事件等价于 $S_2$ 中第 $i$ 个点不在 $h'$ 中。那么,$\abs{S_2\cap h'} = \sum_{i = 1}^n X_i$,且 $X_i$ 是 $[0, 1]$ 内独立的随机变量。设 $h'$ 的概率质量是 $\eta$,由假设知所以 $S_2$ 中第 $i$ 个点在 $h'$ 中的概率大于等于 $\epsilon$,也就表明 $\mathbb E[X_i] = \Pr[X_i = 1] = \eta\geq\epsilon$ 且 $\mathbb E[X_i^2] = \eta$ 402 | 403 | 设 $X = \sum_{i = 1}^nX_i$,则 $\mathbb E[X] = \sum_{i = 1}^n\mathbb E[X_i] = \eta n$ 且 ${\rm Var}[X]\leq \mathbb E[X^2] = \sum_{i = 1}^n\mathbb E[X_i^2] = \eta n$ 404 | 405 | 考虑到 $X \geq\frac{\epsilon n}2\implies \abs{X - \mathbb E[X]}\leq\frac{\eta n}2$,再联系到我们假设 $n \geq\frac 8\epsilon$,我们可以得知 406 | $$ 407 | \Pr\qty[X < \frac{\epsilon n}2]\leq \Pr\qty[\abs{X - \mathbb E[X]}>\frac{\eta n}2]\leq \frac{\eta n}{\qty(\frac {\eta n}2)^2}\leq \frac 4{\eta n}\leq \frac \epsilon{2\eta}\leq \frac 12 408 | $$ 409 | 这也就表明了 $\Pr[B\mid A]\geq\frac 12$ 410 | 411 |
412 | 413 | 回到机器学习。设 $(X, \mathcal H)$ 是一个假设类,$C^*\subseteq X$ 是目标集合 414 | 415 | 设 $\mathcal H' = \set{h\triangle C^*: h\in \mathcal H}$,则一个显然的事实是 ${\rm VC}(X, \mathcal H') = {\rm VC}(X, \mathcal H)$,而且它们的 *碎裂函数* $\pi_{\mathcal H}$ 和 $\pi_{\mathcal H'}$ 是相同的 416 | 417 | 有了以上事实,我们可以证明 418 | 419 | **定理:** 420 | 421 | * 对于任意的假设 $\mathcal H$、概率分布 $D$ 和大小至少为 $\frac 2\epsilon \qty(\log_2(2\pi_{\mathcal H}(2n)) + \log_2 \frac 1\delta)$ 的训练集合 $S$,以至少 $1 - \delta$ 的概率 $\mathcal H$ 中训练误差为 $0$ 的样本真实误差不超过 $\epsilon$ 422 | * 对于任意的假设 $\mathcal H$、概率分布 $D$ 和大小至少为 $\frac 8{\epsilon^2}\qty(\ln(2\pi_{\mathcal H}(2n)) +\ln(\frac 1\delta))$,以至少 $1 - \delta$ 的概率 $\mathcal H$ 中任意模型的训练误差和真实误差的差距不超过 $\epsilon$ 423 | 424 | 前者直接对 $\mathcal H'$ 套用 *关键定理* 即可,后者证明类似普通 PAC Learning 的相关证明,使用 Chernoff-Hoeffding Bounds 425 | 426 | $\pi_{\mathcal H}(2n)$ 是一个比较抽象的函数,以上两个定理并不明朗。为了将定理中的训练集大小下界写成 $\order{\frac 1{\epsilon^2}({\rm VC}(X, \mathcal H)\log \frac 1\epsilon + \log \frac 1\delta)}$ 的形式,我们需要以下引理: 427 | 428 | **引理 (Saner):**如果 ${\rm VC}(X, \mathcal H)\leq d$,那么 $\pi_{\mathcal H}(n)\leq\binom{n}{\leq d}$,其中 $\binom{n}{\leq d}\triangleq \sum_{i = 0}^d\binom ni$ 429 | 430 | **证明:**首先注意到当 $n, d\geq 1$ 的时候 $\binom{n}{\leq d} = \binom{n - 1}{\leq d - 1} + \binom{n - 1}{\leq d}$ 431 | 432 | > $\binom{n}{\leq d}$ 表示在 $n$ 个数中选择不超过 $d$ 个数的方案数。对于所有的 $n$ 个数中选择不超过 $d$ 个数的方案,要么选了第一个数,要么不选第一个数。如果选了第一个数,那么需要在剩下的 $n - 1$ 个数中选择不超过 $d - 1$ 个数,有 $\binom{n - 1}{\leq d - 1}$ 种方案;如果没选第一个数,那么需要在剩下的 $n - 1$ 个数中选择不超过 $d$ 个数,有 $\binom{n - 1}{\leq d}$ 种方案。所以 $\binom{n}{\leq d} = \binom{n - 1}{\leq d - 1} + \binom{n - 1}{\leq d}$ 433 | > 434 | > 以上性质与 $\binom{n}{d} = \binom{n - 1}{d - 1} + \binom{n - 1}{d}$ 非常类似。如果对后者感到陌生,可以想想杨辉三角 435 | 436 | 接下来我们尝试使用归纳来证明命题 437 | 438 | * 当 $1\leq n\leq d$ 时:一方面,$\pi_{\mathcal H}(n) = 2^n$,因为存在一个集合 $A$ 满足 $\abs{A} = d$ 且 $A$ 可以被 $\mathcal H$ *碎裂*(回想 VC 维数的定义);另一方面,$\binom{n}{\leq d} = 2^n$,因为 $\binom{n}{\leq d}$ 的组合意义是在 $n$ 个数中选择不超过 $d$ 个数,而 $n$ 个数中不管怎么选都只能选 $n\leq d$ 个数,所以 $\binom{n}{\leq d}$ 表示在 $n$ 个数中任意选择一些数,每个数都有选或者不选两种选择,且每个数选或不选是与其他数无关的,所以有 $2^n$ 中选择方案。这表明 $\pi_{\mathcal H}(n) = 2^n = \binom{n}{\leq d}$ 439 | 440 | * 当 $d = 0$ 时:注意到 $\abs{\mathcal H} = 1$,反证这一点。 441 | 442 | 若 $\abs{\mathcal H}\geq 2$,从 $\abs{\mathcal H}$ 中任取两个集合 $h_1$ 与 $h_2$,那么 $h_1\triangle h_2\neq\varnothing$。任取 $a\in h_1\triangle h_2$,那么要么 $a\in h_1$ 且 $a\notin h_2$,要么 $a\in h_2$ 且 $a\notin h_1$,不失一般性,假设 $a\in h_1$ 且 $a\notin h_2$ 成立 443 | 444 | 取 $A \triangleq \set{a}$,那么 $A\cap h_1 = A$,$A\cap h_2 = \varnothing$。这表明 $A$ 可以被 $\set{h_1, h_2}$ *碎裂*,也就表明 $A$ 可以被 $\mathcal H$ *碎裂*。这表明 $d = {\rm VC}(X, \mathcal H) \geq 1$,与 $d = 0$ 矛盾 445 | 446 | 这表明 $\abs{\mathcal H} = 1$。对于任意大小为 $n$ 个集合 $A$,$A$ 与 $\mathcal H$ 中集合的交集只有一个,也就表明 $\pi_{\mathcal H}(n) = 1$ 447 | 448 | 另一方面,从 $n$ 个数中选择不超过 $0$ 个数只有一种方案(一个数都不选),所以 $\binom{n}{\leq d} = 1 = \pi_{\mathcal H}(n)$ 449 | 450 | 以上是两种基本情况,接下来考虑归纳推理:对于 $1\leq d 这里略去了 $\mathcal H'$ 是定义在 $A$ 上的集族,$\mathcal H_1$ 与 $\mathcal H_2$ 是定义在 $A \setminus\set{n}$ 上的 457 | > 458 | > $\abs{\mathcal H_1} + \abs{\mathcal H_2} = \abs{\mathcal H'}$ 的正确性可以使用组合意义来说明。对于 $A\setminus \set{n}$ 中的所有子集 $h$: 459 | > 460 | > * 如果 $h, h\cup\set{n}\notin \mathcal H'$,那么 $h$ 的存在为等式右边贡献了 $0$;$h\notin \mathcal H_1$ 且 $h\notin \mathcal H_2$,$h$ 为等式左边贡献了 $0$ 461 | > * 如果 $h, h\cup\set{n}\in\mathcal H'$,那么 $h$ 为等式右边贡献了 $2$;$h\in \mathcal H_1$ 且 $h\in \mathcal H_2$,$h$ 为等式左边贡献了 $2$ 462 | > * 如果 $h, h\cup\set{n}$ 里恰有一个 $\mathcal H'$ 中的元素,那么 $h$ 为等式右边贡献了 $1$;$h\in \mathcal H_1$ 且 $h\notin \mathcal H_2$,$h$ 为等式左边贡献了 $1$ 463 | > 464 | > 所以 $A\setminus\set{n}$ 的每个子集对 $\abs{\mathcal H_1} + \abs{\mathcal H_2}$ 的贡献与对 $\abs{\mathcal H'}$ 的贡献是相等的,所以 $\abs{\mathcal H_1} + \abs{\mathcal H_2} = \abs{\mathcal H'}$ 465 | 466 | 同时我们注意到 $\pi_{\mathcal H}(n) = \abs{\mathcal H'} = \abs{\mathcal H_1} + \abs{\mathcal H_2}$。进一步注意到 $\abs{\mathcal H_1} \leq \pi_{\mathcal H_1}(n - 1)$,这是因为 $\mathcal H_1$ 可以把集合 $A\setminus \set{n}$ 给 *碎裂* 成 $\abs{\mathcal H_1}$ 个集合(对于任意的 $h\in \mathcal H_1$,都有 $h\subseteq A\setminus \set{n}$,也就表明 $h\cap (A\setminus\set{n}) = h$),而且 $\abs{A\setminus\set{n}} = n - 1$;同样地 $\abs{H_2}\leq\pi_{\mathcal H_2}(n - 1)$ 467 | 468 | 我们可以用 $\mathcal H$ 的 VC 维数是 $d$ 这个事实来来给出 $\mathcal H_1$ 与 $\mathcal H_2$ 的 VC 维数上界: 469 | 470 | * $\mathcal H_1$ 的 VC 维数不超过 $d$,因为它是 $\mathcal H'$ 的子集 471 | 472 | * $\mathcal H_2$ 的 VC 维数不超过 $d - 1$ 473 | 474 | 如果有大小为 $d$ 的集合 $A'$ 能被 $\mathcal H_2$ *碎裂*,那么: 475 | 476 | 首先 $n\notin A'$,因为 $\mathcal H_2$ 中的所有元素都不含 $n$,若 $n\in A'$ 则 $A$ 所有含 $n$ 的子集都不能与 $\mathcal H_2$ 中的集合求交获得 477 | 478 | 其次 $A'\cup \set{n}$ 可以被 $\mathcal H'$ *碎裂*,也就是可以被 $\mathcal H$ *碎裂*。这是因为 $A'\cup \set{n}$ 所有不含 $n$ 的子集都能被 $\mathcal H_2$ *碎裂*,而所有含 $n$ 的子集能被 $\mathcal H_2\set{n}$ *碎裂*,这里 $\mathcal H_2\set{n}$ 指 $\mathcal H_2$ 中的所有集合中加上元素 $n$。同时由 $\mathcal H_2$ 的定义,$\mathcal H_2$ 与 $\mathcal H_2\set{n}$ 的元素都在 $\mathcal H'$ 中 479 | 480 | 由归纳假设,$\pi_{\mathcal H_1}(n - 1)\leq \binom{n - 1}{\leq d}, \pi_{\mathcal H_2}(n - 1)\leq\binom{n - 1}{\leq d - 1}$。全部代回,得 481 | $$ 482 | \pi_{\mathcal H}(n) = \abs{\mathcal H'} = \abs{\mathcal H_1} + \abs{\mathcal H_2}\leq\pi_{\mathcal H_1}(n - 1) + \pi_{\mathcal H_2}(n - 1) \leq \binom{n - 1}{\leq d} + \binom{n - 1}{\leq d - 1} = \binom{n}{\leq d} 483 | $$ 484 | 由 $\binom n{\leq d}\leq n^d + 1$ 与 Saner 引理知 $\pi_{\mathcal H} (n)\leq n^d + 1$ 485 | -------------------------------------------------------------------------------- /二、数据流.md: -------------------------------------------------------------------------------- 1 | # 数据流 2 | 3 | ## 概率计数 4 | 5 | ### Morris 算法 6 | 7 | 考虑这样一个计数器问题:数据流中只有一种数据,也就是“按动计数器”操作。你的计数器可能随时被查询总共被按了多少次 8 | 9 | 这个问题十分平凡,一个精确算法如下: 10 | 11 | * 维护一个数 $n$,初始时为 0 12 | * 计数器被按动时,令 $n\gets n + 1$ 13 | * 查询时,返回 $n$ 14 | 15 | 显然我们需要 $\Theta(\log n)$ 个比特来维护这个数据 16 | 17 | 但是实际上算法可以使用更少的空间。以下给出一个空间复杂度为 $\order{\log\log n}$ 的算法(Morris) 18 | 19 | * 维护一个数 $X$,初始时为 $0$ 20 | * 计数器被按动时,以 $2^{-X}$ 的概率令 $X\gets X + 1$ 21 | * 查询时,返回 $\tilde n = 2^X - 1$ 22 | 23 | ### 算法分析 24 | 25 | > 一个好的算法需要什么呢?需要以很大的概率给出小误差 26 | > 27 | > 只要 $\mathbb E\qty[\tilde n] = n$ 且 ${\rm Var}\qty[\tilde n]$ 不太大,那么我们可以使用切比雪夫不等式来证明算法以很大的概率相对误差比较小。我们首先证明 $\mathbb E\qty[\tilde n] = n$ 28 | 29 | 设 $X_n$ 是按下计数器 $n$ 次后 $X$ 的值 30 | 31 | **引理:**$\mathbb E\qty[2^{X_n}] = n + 1$ 32 | 33 | > 我们尝试找出 $\mathbb E\qty[2^{X_{n + 1}}]$ 与 $\mathbb E\qty[2^{X_n}]$ 之间的关系 34 | > 35 | > 假如 $X_n = j$,那么我们很容易得出 $X_{n + 1}$ 的分布:有 $2^{-j}$ 的概率变成 $j + 1$,有 $1 - 2^{-j}$ 的概率不变。以此可以求出 $X_n = j$ 的时候 $X_{n + 1}$ 的期望。同时 $X_n = j$ 的时候 $X_n$ 的期望就是 $j$,我们在这个基础上进行递推 36 | 37 | **证明:**考虑到 $X_0 = 0$ 即 $\mathbb E\qty[2^{X_0}] = 1$,而且 38 | $$ 39 | \begin{aligned} 40 | \mathbb E\qty[2^{X_{n + 1}}] &= \sum_{j = 0}^{\infty}\mathbb E\qty[2^{X_{n + 1}} \mid X_n = j]\Pr[X_n = j]\\ 41 | &= \sum_{j = 0}^{\infty} \qty(2^{j + 1}\cdot \Pr\qty[X_{n + 1} = j + 1 \mid X_n = j] + 2^j\cdot\Pr\qty[X_{n + 1} = j \mid X_n = j])\Pr\qty[X_n = j]\\ 42 | &= \sum_{j = 0}^\infty \qty(2^{j + 1}\cdot 2^{-j} + 2^j\cdot (1 - 2^{-j}))\Pr\qty[X_n = j]\\ 43 | &= \sum_{j = 0}^\infty\qty(2^j + 1)\Pr\qty[X_n = j]\\ 44 | &= \sum_{j = 0}^\infty 2^j\Pr\qty[X_n = j] + \sum_{j = 0}^{\infty}\Pr\qty[X_n = j]\\ 45 | &= \mathbb E[2^{X_n}] + 1 46 | \end{aligned} 47 | $$ 48 | 很容易递推得到 $\mathbb E\qty[2^{X_n}] = n + 1$ 49 | 50 | 由以上引理与 $\tilde n = 2^{X_n} - 1$ 可以得知 $\mathbb E\qty[\tilde n] = n$ 51 | 52 | > 然后我们求出 ${\rm Var}\qty[\tilde n]$,使用与前文类似的方法 53 | 54 | 观察到 ${\rm Var}\qty[\tilde n] = {\rm Var}\qty[2^{X_n}] = \mathbb E\qty[\qty(2^{X_n})^2] - \mathbb E^2\qty[2^{X_n}] = \mathbb E\qty[2^{2X_n}] - (n + 1)^2$。我们首先求出 $\mathbb E\qty[2^{2X_n}]$ 55 | 56 | 考虑到 $X_0 = 0$ 即 $\mathbb E\qty[2^{2X_0}] = 1$,而且 57 | $$ 58 | \begin{aligned} 59 | \mathbb E\qty[2^{2X_{n + 1}}] &= \sum_{j = 0}^{\infty}\mathbb E\qty[2^{2X_{n + 1}} \mid X_n = j]\Pr[X_n = j]\\ 60 | &= \sum_{j = 0}^{\infty} \qty(2^{2j + 2}\cdot \Pr\qty[X_{n + 1} = j + 1 \mid X_n = j] + 2^{2j}\cdot\Pr\qty[X_{n + 1} = j \mid X_n = j])\Pr\qty[X_n = j]\\ 61 | &= \sum_{j = 0}^\infty \qty(2^{2j + 2}\cdot 2^{-j} + 2^{2j}\cdot (1 - 2^{-j}))\Pr\qty[X_n = j]\\ 62 | &= \sum_{j = 0}^\infty\qty(2^{2j} + 3\cdot 2^j)\Pr\qty[X_n = j]\\ 63 | &= \sum_{j = 0}^\infty 2^{2j}\Pr\qty[X_n = j] + 3\sum_{j = 0}^\infty2^j\Pr\qty[X_n = j]\\ 64 | &= \mathbb E[2^{2X_n}] + 3\mathbb E\qty[2^{X_n}]\\ 65 | &= \mathbb E\qty[2^{2X_n}] + 3(n + 1) 66 | \end{aligned} 67 | $$ 68 | 易知 69 | $$ 70 | \mathbb E\qty[2^{2X_n}] = \mathbb E\qty[2^{2X_0}] + \sum_{i = 0}^{n - 1}3(i + 1) = \frac 32n^2 + \frac 32n + 1 71 | $$ 72 | 所以 73 | $$ 74 | {\rm Var}\qty[\tilde n] = {\rm Var}\qty[2^{X_n}] = \mathbb E\qty[2^{2X_n}] - \mathbb E^2\qty[2^{X_n}] = \frac 32n^2 + \frac 32 n + 1 - (n + 1)^2 = \frac{n^2}2 - \frac n2< \frac {n^2}2 = \order{n^2} 75 | $$ 76 | 这样切比雪夫不等式就可以估计出相对误差的概率 77 | $$ 78 | \Pr\qty[\abs{\tilde n - n} > \epsilon n]\leq \frac{{\rm Var}\qty[\tilde n]}{\epsilon^2 n^2} < \frac 1{2\epsilon^2}= \order{\epsilon^{-2}} 79 | $$ 80 | 81 | > 很遗憾,这个式子没啥用,代入 $\epsilon = 1$,这个式子不能表明本算法有很大的概率误差小于 100% 82 | 83 | ### Morris+ 算法 84 | 85 | 为了能给出一个有效的随机计数算法,我们对 Morris 算法稍作修改(记作 Morris+ 算法) 86 | 87 | 1. 独立运行 $s$ 次 Morris 算法,设这 $s$ 个 Morris 算法的输出分别是 $\tilde n_1, \tilde n_2, \cdots, \tilde n_s$ 88 | 2. 本算法的输出是这些输出的算术平均 $\tilde n = \frac 1s\sum_{i = 1}^s\tilde n_i$ 89 | 90 | 我们对这个算法进行分析。首先,因为每个子 Morris 算法输出的期望都是 $n$,所以 Morris+ 算法的输出也是 $n$,而方差缩小了 $s^2$ 倍 91 | $$ 92 | \mathbb E\qty[\tilde n] = \mathbb E\qty[\frac 1s\sum_{i = 1}^s\tilde n_i] = \frac 1s\sum_{i = 1}^s\mathbb E\qty[\tilde n_i] = \frac 1s ns = n\\ 93 | {\rm Var}\qty[\tilde n] = {\rm Var}\qty[\frac 1s\sum_{i = 1}^n\tilde n_i] = \frac 1{s^2}\sum_{i = 1}^n{\rm Var}\qty[\tilde n_i] < \frac 1{s^2}s\frac{n^2}2 < \frac{n^2}{2s} 94 | $$ 95 | 由切比雪夫不等式 96 | $$ 97 | \Pr\qty[\abs{\tilde n - n} > \epsilon n] \leq \frac{{\rm Var}\qty[\tilde n]}{\epsilon^2n^2} < \frac{\frac{n^2}{2s}}{\epsilon^2n^2} = \frac 1{2s\epsilon^2} 98 | $$ 99 | 这样只要 $\frac 1{2s\epsilon^2} \leq \delta$,即 $s\geq\frac 1{2\delta\epsilon^2}$,那么 Morris+ 算法就以超过 $1 - \delta$ 的概率相对误差不超过 $\epsilon$ 100 | 101 | ### Morris++ 算法 102 | 103 | 以上算法还有改进空间。算法描述如下: 104 | 105 | 1. 以 $\delta = \frac 13$ 为参数(也就是以 $s = \frac 1{2\cdot\frac 13\epsilon^2}$ 为参数)调用 $t$ 份独立的 Morris+ 算法作为子程序,设 Morris+ 算法的输出分别是 $\tilde n_1, \tilde n_2, \cdots, \tilde n_t$ 106 | 2. 输出 $\tilde n_1, \tilde n_2, \cdots, \tilde n_t$ 的中位数 107 | 108 | > 我们将 $\abs{\tilde n - n}\leq \epsilon n$,也就是相对误差不超过 $\epsilon$ 的概率计数算法输出称为 成功的。我们以 $\delta = \frac 13$ 为参数调用了 Morris+ 算法,也就是以至多 $\frac 13$ 的概率 Morris+ 子程序输出的结果是失败的。Morris+ 算法保证了当 $t$ 非常大的时候,大数定律直观地告诉我们有大约至少 $\frac 23t$ 的 Morris+ 算法子程序是成功的 109 | > 110 | > 而 Morris++ 算法只要有超过 $\frac 12t$ 的 Morris+ 算法子程序是成功就能输出一个成功结果——反着考虑,如果 Morris++ 输出了一个失败的结果,也就是如果 $\abs{\tilde n - n} > \epsilon n$,那么要么 $\tilde n$ 太小了,也就是 $\tilde n - n < -\epsilon n$,要么 $\tilde n$ 太大了,也就是 $\tilde n - n > \epsilon n$。如果 $\tilde n$ 过小,因为 $\tilde n$ 是中位数,所以有 $\frac 12t$ 个 Morris+ 子程序输出比 $\tilde n$ 还小,它们全都是失败的;如果 $\tilde n$ 过大,那么有 $\frac 12t$ 个 Morris+ 子程序输出比 $\tilde n$ 还大,它们也全都是失败的。只要 $\tilde n$ 失败,那么至少有 $\frac 12t$ 个 Morris+ 子程序失败 111 | > 112 | > 这也就表明成功的 Morris+ 算法子程序数 $\abs{\set{i\mid \abs{\tilde n_i - n}\leq\epsilon n}}$ 大于 $\frac 12t$,那么 Morris++ 算法成功,也就是 $\abs{\set{i\mid \abs{\tilde n_i - n}\leq \epsilon n}} > \frac 12t\implies \tilde n - n \leq\epsilon n$,它的逆否命题是 $\tilde n - n > \epsilon n\implies \abs{\set{i\mid\abs{\tilde n_i - n}}}\leq\frac 12t$。这就表明了 $\Pr[\abs{\tilde n - n} > \epsilon]\leq\Pr\qty[\abs{\set{i\mid\abs{\tilde n_i - n}}}\leq\frac t2]$ 113 | 114 | 对于每一个 $i\leq t$,设 $Y_i = \begin{cases}1 & \abs{\tilde n_i - n} \leq\epsilon n\\0 & \abs{\tilde n_i - n} > \epsilon n\end{cases}$ 115 | 116 | 那么由 Morris+ 算法的性质知 $\Pr\qty[Y_i = 1]>\frac 23$,这表明 117 | $$ 118 | \mathbb E\qty[Y_i] = 1\cdot \Pr[Y_i = 1] + 0\cdot\Pr[Y_i = 0] = \Pr\qty[y_i = 1]>\frac 23 119 | $$ 120 | 121 | 设 $Y = \sum_{i = 1}^tY_i$,则 $Y$ 表示有多少个 Morris+ 子程序成功了,也就是 $Y = \abs{\set{i \mid \abs{\tilde n_i - n}\leq\epsilon n}}$。那么就有 122 | $$ 123 | \mathbb E\qty[Y] = \mathbb E\qty[\sum_{i = 1}^tY_i] = \sum_{i = 1}^t\mathbb E\qty[Y_i] >\frac 23t 124 | $$ 125 | 所以 126 | $$ 127 | \Pr\qty[\abs{\tilde n - n}>\epsilon n]\leq \Pr\qty[Y\leq\frac t2] < \Pr\qty[Y -\mathbb E[Y] < -\frac t6]\leq \exp(-2\qty(\frac t6)^2\frac 1t) 128 | $$ 129 | 最后一个不等式成立是 Chernoff Bound 得出的 130 | 131 | 这样,只要 $t\geq 18\ln\frac 1\delta$,Morris++ 算法就能成功 132 | 133 | ### 空间复杂度 134 | 135 | 当相对误差超过 $\epsilon$ 的概率不足 $\delta$ 的时候,Morris+ 算法调用了 $s = \Theta\qty(\frac 1{\delta\epsilon^2})$ 次 Morris 算法,而 Morris++ 算法调用了 $st = \Theta\qty(\frac 1\epsilon^2\ln\frac 1\delta)$ 次 Morris 算法。我们接下来证明:如果调用了 $s^*$ 次 Morris 算法,那么以至少 $\delta^*$ 的概率,在这 $n$ 次计数过程中每一个数都不超过 $\log\qty(\frac{s^*n}{\delta^*})$ 136 | 137 | 假设某个 Morris 算法在过程中达到了 $X = \log(\frac{s^*n}{\delta^*})$,那么它再增加一次的概率是 $\frac 1{2^X}\leq\frac{\delta^*}{s^*n}$。因为 $X$ 总共只有 $n$ 个机会增加,所以 $X$ 在算法结束的时候有至多 $\frac n{2^X}\leq\frac{\delta^*}{s^*}$ 的概率增加。总共有 $s^*$ 个 Morris 算法,至多有 $s^*$ 个数达到了 $\log\qty(\frac{s^*n}{\delta^*})$ 随时准备突破。所以在算法结束的时候有至多 $\delta^*$ 的概率某个 Morris 算法的 $X$ 超过 $\log\qty(\frac{s^*n}{\delta^*})$ 了。这就表明有至少 $1 - \delta^*$ 的概率所有到达过临界值 $\log\qty(\frac{s^*n}{\delta^*})$ 的 $X$ 都不会再增长了,也就表明有至少 $1 - \delta^*$ 的概率所有 Morris 算法中的 $X$ 都不超过 $\log(\frac{s^*n}{\delta^*})$ 138 | 139 | 这就表明 Morris++ 算法以至少 $1 - \delta^*$ 的概率空间复杂度为 140 | $$ 141 | \order{st\log\log(\frac{stn}{\delta^*})} = \order{\qty(\frac 1\epsilon)^2\ln\frac 1\delta\log\log\frac {n\log\frac1\delta}{\epsilon^2\delta^*}} 142 | $$ 143 | 144 | > 以上分析比较粗糙。一些古老的工作将这个复杂度改进到了 $\order{\log\frac 1\epsilon + \log\log n + \log\frac 1\delta}$,一些较新的工作将这个复杂度改进到了 $\Theta\qty(\log\frac 1\epsilon + \log\log n + \log\log\frac 1\delta)$ 145 | 146 | ## 蓄水池抽样 147 | 148 | 你面前有一个数据流,数据在不停地流过——你只能看到每个数据一次并且不能将它们全部存储下来。你在任意时刻都可能被要求:“将刚刚你看到的所有数中均匀随机抽取一个给我。” 149 | 150 | 假设你看到的数依次为 $\set{a_i}_{i = 1, 2, \cdots, \infty}$。类似于 `std::shuffle` 的思想,你可以实现如下地算法: 151 | 152 | * 维护变量 $s$,初始时值未定义 153 | * 当看到数据 $a_m$ 的时候,掷骰子,以 $\frac 1m$ 的概率令 $s\gets a_m$,以 $1 - \frac 1m$ 的概率保持 $s$ 不变 154 | * 查询时,直接输出 $s$ 155 | 156 | 这个算法的正确性比较显然。当数据流中流过 $m$ 个数的时候,如果 $s = a_i$,那么第 $i$ 次掷骰子掷得了 $\frac 1i$ 将 $a_i$ 保留下来,而在第 $i + 1, i + 2, \cdots m$ 的时候掷得了 $1 - \frac 1{i + 1}, 1 - \frac 1{i + 2}, \cdots, 1 - \frac 1m$ 而没有将 $a_i$ 扔掉。这些事件都是随机的,所以 157 | $$ 158 | \Pr\qty[s_m = a_i] = \frac 1i\cdot \frac i{i + 1}\cdot \frac{i + 1}{i + 2}\cdots\frac {m - 1}m = \frac 1m 159 | $$ 160 | 对于任意的 $i = 1, 2, \cdots, m$ 均成立,也就是说 $a_1, a_2, \cdots, a_m$ 能等概率地在第 $m$ 次出现 161 | 162 | 分析一下空间复杂度。我们需要存储被抽样的数与当前经过了多少数。假设所有数都不超过 $n$,那么我们的空间复杂度就是 $\order{\log n + \log m}$ 163 | 164 | ## 估计不同元素个数 165 | 166 | 你需要在任意时刻估计当前数据流中不同元素的个数,并且用尽可能少的事件。设数据流是 $\set{a_i}_{i = 1, 2, \cdots}$ 而且所有数都是整数,你需要在逐一读取这些数据的时候随时准备好回答 $\abs{\set{a_1, a_2, \cdots, a_m}}$ 167 | 168 | 设这个数据流中数的上界是 $n$,你在读取完前 $m$ 个数的时候被要求作答。如果需要求出精确解,有两种方法: 169 | 170 | 1. 维护一个长度为 $n$ 的数组 $v\in\R^n$ 与计数器 $X$。初始时 $v = \vec 0$。读到一个数 $a_i$ 的时候,如果 $v_{a_i} = 0$,那么就令计数器 $X\gets X + 1$,同时令 $v_{a_i}\gets 1$;如果 $v_{a_i} = 1$,表明 $a_i$ 已经出现过了,就什么都不做。这种方法需要 $n$ 个比特。 171 | 2. 直接将读过的数存下来,并维护一个计数器 $X$。当新读到一个数的时候,和之前读过的所有数比较,如果与读过的所有书都不同就令计数器加一。这种方法需要存储 $\order{m\log n}$ 个比特 172 | 173 | 我们想要一个空间复杂度是 $\order{\log nm}$ 的近似算法,也就是需要对任意的参数 $\epsilon, \delta\in(0, 1)$,求出一个 $\tilde t$ 满足 $\Pr\qty[\abs{t - \tilde t} > \epsilon t] < \delta$,其中 $t$ 是数据流中不同元素的个数 174 | 175 | ### 理想 FM 算法 176 | 177 | 理想 FM 算法描述如下: 178 | 179 | 1. 预处理出一个随机函数 $h: \set{1, 2, \cdots, n}\mapsto [0, 1]$ 180 | 2. 维护一个 *计数器* $X$,记录当前看到所有数据被映射到的最小值,也就是 $X = \min_{i\in{\rm stream}}h(i)$ 181 | 3. 输出 $\tilde t = \frac 1X - 1$ 182 | 183 | 在分析这个算法之前,我们先来证明这样一个概率论中常用的性质:若 $X$ 是非负随机变量,则 184 | $$ 185 | \mathbb E[X] = \int_0^\infty\Pr[X\geq\lambda]\dd{\lambda} 186 | $$ 187 | 设 $X$ 的概率密度函数是 $f(x)$,那么 188 | $$ 189 | \begin{aligned} 190 | \mathbb E[X] &= \int_0^{\infty}xf(x)\dd{x}\\ 191 | &= \int_0^\infty\qty(\int_0^x\dd{\lambda})f(x)\dd{x}\\ 192 | &= \iint_{0\leq\lambda\leq x\leq\infty}f(x)\dd{x}\dd{\lambda}\\ 193 | &= \int_0^\infty\qty(\int_\lambda^{\infty}f(x)\dd{x})\dd{\lambda}\\ 194 | &= \int_0^\infty\Pr[X\geq\lambda]\dd{\lambda} 195 | \end{aligned} 196 | $$ 197 | 我们先证明算法期望能输出正确的结果。算法的结果只与 $X$ 相关,所以我们先分析 $X$。先分析期望。假设 $a_1, a_2, \cdots, a_m$ 是数据流,其中有 $t$ 个不同的元素,也就是说 $\abs{\set{a_1, a_2, \cdots, a_m}} = t$ 198 | $$ 199 | \begin{aligned} 200 | \mathbb E[X] &= \int_0^\infty \Pr[X\geq \lambda]\dd{\lambda}\\ 201 | &= \int_0^\infty\Pr\qty[h(a_1)\geq \lambda\and h(a_2)\geq \lambda\and \cdots \and h(a_m)\geq \lambda]\dd{\lambda}\\ 202 | &= \int_0^\infty\Pr\qty[h(a)\geq\lambda]^{\abs{\set{a_1, a_2, \cdots, a_m}}}\dd{\lambda}\\ 203 | &= \int_0^1 (1 - \lambda)^t\dd\lambda\\ 204 | &= \eval{-\frac{(1 - \lambda)^{t + 1}}{t + 1}}_0^1 = \frac 1{t + 1} 205 | \end{aligned} 206 | $$ 207 | 然后我们分析方差,为此我们先计算 $X^2$ 的期望。同样地,有 208 | $$ 209 | \begin{aligned} 210 | \mathbb E\qty[X^2] &= \int_0^{\infty}\Pr\qty[X^2\geq\lambda]\dd{\lambda}\\ 211 | &= \int_0^{\infty}\Pr\qty[X\geq\sqrt\lambda]\dd{\lambda}\\ 212 | &= \int_0^{\infty}\Pr\qty[\bigwedge_{i = 1}^mh(a_i)\geq \sqrt\lambda]\dd{\lambda}\\ 213 | &= \int_0^{\infty}\Pr\qty[h(a)\geq\sqrt \lambda]^{\abs{\set{a_1, a_2, \cdots, a_m}}}\dd{\lambda}\\ 214 | &= \int_0^1\qty(1 - \sqrt\lambda)^t\dd{\lambda}\\ 215 | &= 2\int_0^1\qty(1 - \lambda)^t\lambda\dd{\lambda}\\ 216 | &= 2\qty(\int_0^1(1 - \lambda)^t\dd{\lambda} - \int_0^1(1 - \lambda)^{t + 1}\dd{\lambda})\\ 217 | &= 2\qty(\frac 1{t + 1} - \frac 1{t + 2}) = \frac 2{(t + 1)(t + 2)} 218 | \end{aligned} 219 | $$ 220 | 所以可以算出方差 ${\rm Var}(X) = \mathbb E\qty[X^2] - \mathbb E^2[X] = \frac t{(t + 1)^2(t + 2)} < \frac 1{(t + 1)^2}$ 221 | 222 | ### 理想 FM+ 算法 223 | 224 | 与 Morris+ 算法类似地,我们多跑几遍 FM 就可以让它的精度高一些。FM+ 算法要求精度 $\epsilon \leq \frac 12$ 才能很好地运行。描述如下: 225 | 226 | 1. 独立运行 $s = \frac{25}{\epsilon^2\delta}$ 个 FM 算法,设它们的 *计数器* 返回 $X_1, X_2, \cdots, X_s$ 227 | 2. 输出 $\tilde t = \frac 1{\overline X} - 1$,$\overline X = \frac 1s\sum_{i = 1}^sX_i$ 是这些 FM 算法 *计数器* 的均值 228 | 229 | > 注意,这里是调用 FM 算法的计数器 $X$,而非它们的返回值 $\tilde t$。这是因为我们上面只对 $X$ 的期望和方差做出了分析,但是我们没有分析 $\tilde t$ 的期望和方差。$X$ 的期望是 $\frac 1{t + 1}$ 不能表明 $\frac 1X$ 的期望是 $t + 1$,也就不能表明 $\tilde t = \frac 1X - 1$ 的期望是 $t$ 230 | 231 | 在本节中,我们仅考虑 $t\geq 1$ 的非平凡情况 232 | 233 | > 对于平凡情况 $t = 0$,每个计数器都等于它的初值。只要所有计数器的初值都是 $1$ 就可以在 $t = 0$ 的时候输出正确解 234 | 235 | 我们证明 $\overline X$ 离 $\frac 1{t + 1}$ 足够近。根据 FM 算法的分析,我们知道 $\mathbb E\qty[X_i] = \frac 1{t + 1}$ 与 ${\rm Var}\qty[X_i] < \frac 1{(t + 1)^2}$。所以 236 | $$ 237 | \mathbb E\qty[\overline X] = \frac 1{t + 1}\\ 238 | {\rm Var}\qty[\overline X]< \frac 1s\cdot\frac 1{(t + 1)^2} 239 | $$ 240 | 代入 $s = \frac{25}{\epsilon^2\delta}$,由切比雪夫不等式知 241 | $$ 242 | \Pr\qty[\abs{\overline X - \frac 1{t + 1}} > \frac{\epsilon / 5}{t + 1}] < \frac{{\rm Var}\qty[\overline X]}{\qty(\cfrac{\epsilon / 5}{t + 1})^2} < \delta 243 | $$ 244 | 所以 245 | $$ 246 | \Pr\qty[\frac{1 - \epsilon / 5}{t + 1} < \overline X < \frac{1 + \epsilon / 5}{t + 1}] > 1 - \delta\\ 247 | \Pr\qty[\frac{t + 1}{1 + \epsilon / 5} < \frac 1{\overline X} < \frac{t + 1}{1 - \epsilon / 5}] > 1 - \delta\\ 248 | \Pr\qty[\frac{t - \epsilon / 5}{1 + \epsilon / 5} < \frac 1{\overline X} - 1 < \frac{t + \epsilon / 5}{1 - \epsilon / 5}] > 1 - \delta 249 | $$ 250 | 251 | 首先注意到 252 | $$ 253 | \frac{t - \epsilon / 5}{1 + \epsilon / 5} > (t - \epsilon / 5)(1 - \epsilon / 5) >t - \frac{t + 1}5\epsilon > t - \frac 25\epsilon t > t - \epsilon t 254 | $$ 255 | 256 | 然后回想先前规定 $\epsilon < \frac 12$,也就表明 257 | $$ 258 | \frac{t + \epsilon / 5}{1 - \epsilon / 5} < (t + \epsilon / 5)(1 + 2\epsilon / 5)= t + \frac 25\epsilon t + \frac 15\epsilon + \frac 25\epsilon\cdot\epsilon\leq t + \frac 25\epsilon t + \frac 15\epsilon t + \frac25\epsilon t = t + \epsilon t 259 | $$ 260 | 所以 261 | $$ 262 | \Pr\qty[t - \epsilon t < \frac 1{\overline X} - 1 < t + \epsilon t] \geq \Pr\qty[\frac{t - \epsilon / 5}{1 + \epsilon / 5} < \frac 1{\overline X} - 1 < \frac{t + \epsilon / 5}{1 - \epsilon / 5}] > 1 - \delta\\ 263 | 264 | \Pr\qty[\abs{\qty(\frac 1{\overline X} - 1) - t} > \epsilon t] < \delta 265 | $$ 266 | 267 | ### 理想 FM++ 算法 268 | 269 | 与 Morris++ 算法类似地,我们利用多次运行 FM+ 算法得到的中位数来提高算法的性能 270 | 271 | 1. 独立运行 $q = 18\ln\frac 1\delta$ 次成功率 $\delta_{\rm FM+} = \frac 13$ 的 FM+ 算法,设它们的估计分别为 $\tilde t_1, \tilde t_2, \cdots, \tilde t_q$ 272 | 2. 输出它们的中位数 $\tilde t = {\rm median}(\tilde t_1, \tilde t_2, \cdots, \tilde t_q)$ 273 | 274 | 这一算法的分析与 Morris++ 可以说是一模一样了,可以证明 $\Pr\qty[\abs{\tilde t - t} > \epsilon t] < \delta$ 275 | 276 | 我们首先令 $Y_j \triangleq \qty[\abs{\tilde t_j - t} < \epsilon t] = \begin{cases}1 & \abs{\tilde t_j - t} < \epsilon t\\0 & {\rm otherwise}\end{cases}$,然后令 $Y \triangleq \sum_{i = 1}^q Y_i$。由我们调用 FM+ 子算法时规定失败率至多为 $\delta_{\rm FM+} = \frac 13$,所以 $\mathbb E\qty[Y]\geq\frac 23q$。代入 $q = 18\ln\frac 1\delta$,由 Chernoff Bound 知 277 | $$ 278 | \Pr\qty[\abs{\tilde t - t} > \epsilon t]\leq\Pr\qty[Y\leq\frac q2]\leq\Pr\qty[\abs{Y - \mathbb E[Y} < \frac q6]\leq \exp(-2\qty(\frac 16)^2q)\leq\delta 279 | $$ 280 | 281 | ### 独立哈希函数族 282 | 283 | 如果一个 $\set{1, 2, \cdots, a}\mapsto \set{1, 2, \cdots, b}$ 的哈希函数族 $\mathcal H$ 满足:对于任意的 $j_1, j_2, \cdots, j_k\in\set{1, 2, \cdots, b}$ 与 $i_1, i_2, \cdots, i_k\in\set{1, 2, \cdots, a}$,随机挑选一个哈希函数 $h\in_R\mathcal H$,有 284 | $$ 285 | \Pr\qty[h(i_1) = j_1\and h(i_2) = j_2\and\cdots\and h(i_k) = j_k] = \frac 1{b^k} 286 | $$ 287 | 那么我们称这个函数族是 $k$ 元独立的 288 | 289 | * 如果函数族 $\mathcal H$ 包含了全体 $\set{1, 2, \cdots, a}\mapsto \set{1, 2, \cdots, b}$ 的映射,那么这个 $\mathcal H$ 就是一个 $k$ 元独立的哈希函数。但是存储 $\mathcal H$ 中的元素需要 $a\log_2 b$ 个比特 290 | 291 | * 如果 $q = p^r$ 是质数的幂(也就是有且仅有一个质因数),且 $a = b = q$,在 $q$ 阶有限域中,全体度数不超过 $k - 1$ 的多项式组成的函数族 $\mathcal H_{\rm poly} = \set{h \mid h(x) = d_0 + d_1x + \cdots + d_{k - 1}x^{k - 1}}$ 组成一个独立哈希函数族,而存储这个哈希函数族内的元素仅需要存储这 $k$ 个系数即可,只需要 $k\log q$ 个比特 292 | 293 | > 对于任意的质数 $p$ 与整数 $r$,阶为 $p^r$ 的域是存在且唯一的,[详细证明见这个博客](https://zhuanlan.zhihu.com/p/416128323),需要一些近世代数知识。简单点说就是将 $x^{p^r} - x$ 的所有“根”加入域中。这里给出一个需要一些数论知识能看懂的构造方法 294 | > 295 | > 度数不超过 $r - 1$ 的全体模 $p$ 意义下多项式的集合 $\set{A \mid A(x) = a_0 + a_1x + \cdots + a_{r - 1}x^{r - 1}, \vec a\in\mathbb F_p^r}$ 在以下加法与乘法意义下是一个阶为 $p^r$ 的域 $\mathbb F_{p^r}$: 296 | > 297 | > * 加法 $+$ 是普通多项式的加法: 298 | > $$ 299 | > (A + B)(x) = (a_0 + b_0\bmod p) + (a_1 + b_1\bmod p)x + \cdots + (a_{r - 1} + b_{r - 1}\bmod p)x^{r - 1} 300 | > $$ 301 | > 302 | > * 在定义乘法 $\cdot$ 的时候,需要首先指定多项式环 $\mathbb F_p[x]$ 中的一个 $r$ 次首一不可约多项式 $M$(也就是 $M$ 的次数为 $r$,首项系数为 $1$ 且不存在 $M_1, M_2$ 满足 $M(x) = M_1(x)M_2(x)$ 且 $\deg M_1, \deg M_2 \geq 1$)。当计算 $A\cdot B$ 的时候,首先计算 $\mathbb F_p[x]$ 中的多项式乘法,然后除以 $M(x)$ 并取出余数,也就是 303 | > $$ 304 | > C(x) \gets A(x)B(x) = \sum_{n = 0}^{2r - 2}\qty(\sum_{i + j = n}a_ib_j\bmod p)x^n\\ 305 | > C(x) \to Q(x)M(x) + R(x), \deg R < r, R, Q\in\mathbb F_p\\ 306 | > A\cdot B\gets R 307 | > $$ 308 | > 309 | > 遗憾的是以上构造不能直接用于证明阶为 $p^r$ 域的存在性,这是因为对于任意的质数 $p$ 与整数 $r$,$\mathbb F_p[x]$ 中 $r$ 次首一不可约多项式的存在性是依赖于 $\mathbb F_{p^r}$ 的存在唯一性的 310 | 311 | ### $k-$Minimum Values 算法 312 | 313 | 1. 取出一个 $2$ 元独立的哈希函数 $h:\set{1, 2, \cdots, n}\mapsto \set{1, 2, \cdots, M}$,其中 $M\geq n^3$ 314 | 2. 维护当前看到所有数的哈希值中,最小的 $k$ 个(可以通过用插入排序维护一个有序数组,或者优先级队列实现)。这里 $k = \left\lceil\frac{24}{\epsilon^2}\right\rceil$ 315 | 3. 在查询时 316 | * 如果目前收集到的哈希值不足 $k$ 个,那么输出目前收集到的哈希值 $k$ 个 317 | * 否则,设第 $k$ 小的哈希值为 $X$,那么输出 $\frac{kM}{X}$ 318 | 319 | > 首先解释一下哈希函数的选取。我们选取前文提到的多项式哈希函数。因为这里要求 $2$ 元独立哈希函数,所以取一个线性函数就行了,有两个随机参数。前文提到的多项式函数是 $\set{1, 2, \cdots, p^r}\mapsto\set{1, 2, \cdots, p^r}$ 的——事实上有限域的阶数必须是质数的幂。所以我们选取的 $M$ 是不小于 $n^3$ 的最小质数幂(一定小于 $2n^3$,因为 $n^3, n^3 + 1, \cdots, 2n^3 - 1$ 中一定有一个 $2$ 的幂),并选取相应的随机哈希函数 320 | > 321 | > 在这个算法中,与先前不一样的是,我们不用最小值来估计元素个数,而是用第 $k$ 小的数来估计元素个数 322 | > 323 | > 在理想 FM 算法中,如果我们用第 $k$ 小的数来估计元素个数,那么当数据流中有 $t$ 个不同的数时,最小的数大约是 $\frac 1{t + 1}$,那么从直观的均匀分布取理解,第 $k$ 小的数就是 $\frac k{t + 1}$。直观地,当使用大小为 $M$ 的随机哈希函数时,第 $k$ 小的数是 $\frac{k}{t + 1}M$。这样 324 | > $$ 325 | > X\approx \frac{k}{t + 1}M\\ 326 | > t\approx \frac{kM}X - 1\approx \frac{kM}X 327 | > $$ 328 | 329 | **定理:**如果 $\frac 1{\sqrt n} < \epsilon < \frac 12$,那么以至少 $\frac 23$ 的概率 $\tilde t$ 的相对误差不超过 $\epsilon$,也就是 330 | $$ 331 | \Pr\qty[\abs{\tilde t - t} \leq \epsilon t]\geq\frac 23 332 | $$ 333 | 这个算法需要维护 $k$ 个大小不超过 $n$ 的数与一个随机哈希函数,其中 $k = \order{\frac 1{\epsilon^2}}$。这个随机哈希函数取上一节提到的多项式函数,因为是 $2$ 元独立,所以只需要维护一个线性函数,有两个系数。每个系数的数量级是 $\order{M} = \order{n^3}$,所以每个系数需要占用 $\order{\log M} = \order{\log n}$ 个比特,总空间复杂度是 $k\order{\log n} + 2\order{\log n} = \order{\frac{\log n}{\epsilon^2}}$ 334 | 335 | > 以上算法的成功率只有 $\frac 23$。提高它的成功率可以用前文提到的方法,独立运行 $18\ln \frac 1\delta$ 次取中位数就能让成功率提高到 $1 - \delta$ 336 | 337 | **证明:** 338 | 339 | 我们首先估计 $\Pr\qty[\tilde t > (1 + \epsilon)t]$。首先对事件的表述进行一些转换 340 | $$ 341 | \tilde t > (1 + \epsilon)t 342 | \iff \frac{kM}X > (1 + \epsilon)t 343 | \iff X < \frac{kM}{(1 + \epsilon)t} 344 | $$ 345 | 因为 $X$ 是第 $k$ 小的哈希值,所以 $X < \frac{kM}{(1 + \epsilon)t}$ 等价于在全部 $t$ 个不同的哈希值中,有至少 $k$ 个被哈希到的值小于 $\frac{kM}{(1 + \epsilon)t}$ 的值上 346 | 347 | 与前文类似地,我们设 $t$ 个随机布尔变量 $Y_1, Y_2, \cdots, Y_t$,$Y_i = 1$ 等价于第 $i$ 个数被哈希到了小于 $\frac{kM}{(1 + \epsilon)t}$ 的值上,同时设 $Y = \sum_{i = 1}^tY_i$。我们估计它的期望和方差,然后用切比雪夫不等式估计 $Y\geq k$ 的概率 348 | 349 | 首先估计期望。我们假设 $h$ 是 $2$ 元独立随机哈希函数,所以 $\mathbb E[Y_i] = \Pr\qty[Y_i = 1] < \frac k{(1 + \epsilon)t}$。由期望的可加性,$\mathbb E\qty[Y] = \sum_{i = 1}^t\mathbb E\qty[Y_i] < \frac {tk}{(1 + \epsilon)t} = \frac k{1 + \epsilon}$ 350 | 351 | 然后估计方差。因为 ${\rm Var}\qty[Y_i] = \mathbb E\qty[Y_i^2] - \mathbb E^2\qty[Y_i] < \mathbb E\qty[Y_i^2] = \mathbb E\qty[Y_i] < \frac k{(1 + \epsilon)t}$ 352 | 353 | 因为 $h$ 是 $2$ 元独立哈希函数,也就是说对于任意的 $i\neq j$,$Y_i$ 与 $Y_j$ 是独立的。所以 $\mathbb E\qty[Y_iY_j] = \mathbb E\qty[Y_i]\mathbb E\qty[Y_j]$,也就是说 ${\rm Var}[Y] = \sum_{i = 1}^t{\rm Var}[Y_i] < \frac k{1 + \epsilon}$ 354 | 355 | 联系到定理中的假设 $\epsilon < \frac 12$ 与 $k \geq \frac{24}{\epsilon^2}$,我们有 356 | $$ 357 | \Pr\qty[\tilde t > (1 + \epsilon)t] = \Pr\qty[Y\geq k] \leq\Pr\qty[\abs{Y - \mathbb E[Y]} > k - \frac k{1 + \epsilon}] < \frac k{1 + \epsilon}\frac{(1 + \epsilon)^2}{k^2\epsilon^2} = \frac{1 + \epsilon}{\epsilon^2k} < \frac 16 358 | $$ 359 | 然后我们估计 $\Pr\qty[\tilde t < (1 - \epsilon)t]$。首先也是对事件的表述做一些转换 360 | $$ 361 | \tilde t < (1 - \epsilon)t\iff \frac{kM}X < (1 - \epsilon)t\iff X > \frac{kM}{(1 - \epsilon)t} 362 | $$ 363 | 如果 $X > \frac{kM}{(1 - \epsilon)t}$,那么哈希值小于 $\frac{kM}{(1 - \epsilon)t}$ 的数一定小于 $k$ 个 364 | 365 | 同样地,设 $Z_i$ 表示第 $i$ 个数的哈希值小于 $\frac{kM}{(1 - \epsilon)t}$,再设 $Z = \sum_{i = 1}^tZ_i$ 366 | 367 | 那么 $\Pr\qty[Z_i = 1] = \left\lfloor\frac{k}{(1 - \epsilon)t}\right\rfloor > \frac k{(1 - \epsilon)t} - \frac 1M$。联想到 $M \geq n^3 > \frac{4t}{\epsilon k}$,我们有 $\Pr\qty[Z_i = 1] > \frac {(1 + \epsilon)k}t - \frac{\epsilon k}{4t}$ 368 | 369 | 这样我们可以估计 $\mathbb E[Z]$ 与 ${\rm Var}[Z]$,从而估计出概率 370 | 371 | ## 带修改的数据流 372 | 373 | ### 频繁项 374 | 375 | **输入:**一个整数数据流 $i_1, i_2, \cdots, i_m\in\set{1, 2, \cdots, n}$ 376 | 377 | **查询:**如果当前的数据中有出现次数不少于 $\frac m2$ 次的元素,那么输出它,否则随便输出一个数 378 | 379 | 解决这个问题可以使用 Misra Gries 算法: 380 | 381 | 1. 维护一个数 $I$ 和计数器 $c$。初始时 $c \gets 0$ 382 | 2. 当数据流中流入一个数 $x$ 时 383 | * 如果 $x = I$,那么 $c\gets c + 1$ 384 | * 如果 $x\neq I$ 且 $c = 0$,那么 $I\gets x$ 且 $c\gets 1$ 385 | * 如果 $x\neq I$ 且 $c\neq 0$,那么 $c\gets c - 1$ 386 | 3. 查询时,输出 $I$ 387 | 388 | 以上算法的正确性显然,而且只需要维护两个数,空间复杂度是 $\order{\log n + \log m}$ 389 | 390 | 但是以上算法的应用场景受限,一个数据流中某数出现超过一半确实不是一个常见的情景。我们将问题放松成这样: 391 | 392 | **输入:**一个整数数据流 $i_1, i_2, \cdots, i_m\in\set{1, 2, \cdots, n}$ 393 | 394 | **查询:**输出 $k$ 个数。所有出现次数严格大于 $\frac m{k +1}$ 次的元素必须包含在输出的 $k$ 个数中,但是在这个前提之下可以输出出现次数不超过 $\frac m{k +1}$ 的数 395 | 396 | 解决这个问题可以把前文提到的 Misra Gries 算法修改一下: 397 | 398 | 1. 维护 $k$ 个数 $\vec I$ 和 $k$ 个计数器计数器 $\vec c$。初始时 $\vec c \gets \vec 0$ 399 | 2. 当数据流中流入一个数 $x$ 时 400 | * *自增:*如果 $x = I_j$,那么令其计数器自增 $1$,也就是 $c_j\gets c_j + 1$ 401 | * *自增:*如果 $x$ 不在 $\vec I$ 中但 $c_j = 0$,那么将 $x$ 放在这个位置并将计数器设为 $1$,也就是 $I_j\gets x$, $c_j\gets 1$ 402 | * *全部自减:*如果 $x$ 不在 $\vec I$ 中且 $\vec c$ 中所有的元素都非零,那么让所有计数器的值均减 $1$,也就是 $\vec c\gets \vec c - \vec 1$ 403 | 3. 查询时,输出 $\vec I$ 404 | 405 | **命题:**任意满足 $f_i > \frac{m}{k + 1}$ 的数 $i$ 在算法结束时都在这个数组中 406 | 407 | 为了证明这个命题,我们定义一个辅助变量 $\hat f_i$:如果 $i$ 在算法结束的时候在 $\vec I$ 中,那么 $\hat f_i$ 就是它对应计数器的值;如果 $i$ 不在,那么 $\hat f_i =0$。也就是 $\hat f_i = \begin{cases}c_j & I_j = i\\0 & I_j\neq i , j = 1, 2, \cdots, k\end{cases}$ 408 | 409 | **定理:**$f_i - \frac{m}{k + 1}\leq \hat f_i\leq f_i$ 对任意的数 $i = 1, 2, \cdots, n$ 均成立 410 | 411 | **证明:**我们将算法的描述改成如下等价形式: 412 | 413 | 1. 对每个数 $i = 1, 2, \cdots, n$ 都维护一个计数器 $\hat f_i$,初始时 $\vec{\hat f}\gets \vec 0$ 414 | 2. 当数据流中流入第 $j$ 个数 $i_j$ 时 415 | * *自增:*如果 $\hat f_{i_j} > 0$,那么 $\hat f_{i_j}\gets \hat f_{i_j} + 1$ 416 | * *自增:*如果 $\hat f_{i_j} = 0$ 且当前计数器 $\vec{\hat f}$ 中的正数不足 $k$ 个,那么 $\hat f_{i_j}\gets 1 = \hat f_{i_j} + 1$ 417 | * *全部自减:*如果 $\hat f_{i_j} = 0$ 且当前计数器 $\vec{\hat f}$ 中的正数至少 $k$ 个,那么令 $\vec{\hat f}$ 中所有的正数都自减 $1$ 418 | 419 | 注意到以上过程中,每出现一次 $i$,$\hat f_i$ 至多自增 $1$;在不出现 $i$ 的时候 $\hat f_i$ 一定不会增加,所以由归纳很容易地知道 $\hat f_i \leq f_i$ 对所有的 $i = 1, 2, \cdots, n$ 均成立。接下来证明 $\hat f_i\geq f_i - \frac{m}{k + 1}$,也就是证明 $f_i - \hat f_i\leq \frac{m}{k + 1}$ 420 | 421 | 设 $\alpha_i = f_i - \hat f_i$。数据流初始化没有流入任何数的时候,有 $\alpha = 0$。当流入第 $j$ 个数 $i_j$ 的时候 422 | 423 | * 如果 $i_j = i$,且当前步骤中 $\hat f_i$ 自增了 $1$,那么这对应上述的第 1 种或者第 2 种 *自增* 情况,$\alpha_i$ 不会变化 424 | * 如果 $i_j = i$,且当前步骤中 $\hat f_i$ 没有变化,那么这对应上述的第 3 种 *全部自减* 情况,$\alpha_i$ 增加 $1$ 425 | * 如果 $i_j \neq i$,且当前步骤中 $\hat f_i$ 没有变化,那么很高兴地 $\alpha_i$ 也不会变化 426 | * 如果 $i_j \neq i$,且当前步骤中 $\hat f_i$ 自减了 $1$,那么这一定是上述的第 3 种 *全部自减* 情况导致的,$\alpha_i$ 增加 $1$ 427 | 428 | > 如果 $i_j\neq i$ 且 $\hat f_i$ 没有变化,这不一定意味着本步骤不是 *全部自减*——可能当前 $\hat f_i = 0$,也就是 $\hat f_i$ 减不动了 429 | 430 | 设 *全部自减* 发生了 $l$ 次,从上述证明种我们可以看到每次 $\alpha_i$ 增加 $1$ 都是全部自减导致的,所以 $\alpha_i\leq l$ 431 | 432 | 每一次 *自增* 会让 $\sum\hat f_j$ 增加 $1$,每次 *全部自减* 会让 $\sum\hat f_j$ 减少 $k$ 433 | 434 | *全部自减* 发生了 $l$ 次,数据流种总共流入了 $m$ 个数,所以 *自增* 发生了 $m - l$ 次,*自增* 总共让 $\sum \hat f_j$ 增加了 $m - l$,而 *全部自减* 让 $\sum \hat f_j$ 减少了 $kl$ 435 | 436 | 所以算法结束的时候 $\sum \hat f_j = m - l - kl = m - (k + 1)l$ 437 | 438 | 因为算法的任意时刻对于任意的 $j$ 都有 $\hat f_j\geq 0$,所以算法结束的时候 $m - (k + 1)l = \sum\hat f_j\geq 0$,也就是 $l\leq\frac{m}{(k + 1)l}$ 439 | 440 | 这就表明对于任意的 $i$,均有 $f_i - \hat f_i = \alpha_i\leq l \leq\frac{m}{(k + 1)l}$。证毕 441 | 442 | 设 $k + 1$ 众数集合 ${\rm HH}_{k + 1}(S) = \set{j \mid f_j > \frac{m}{k + 1}}$,Misra Gries 算法输出的集合 $H$ 一定满足 $\abs{H} = k$ 且 $H\supseteq {\rm HH}_{k + 1}$,也就是说 $H$ 是 ${\rm HH}_{k + 1}$ 一个不太大的超集。但是我们不知道 $H$ 中到底有哪些元素不属于 ${\rm HH}_{k + 1}$。我们目前也没有设计出任何只让数据流流过一次就能求出 ${\rm HH}_{k + 1}$ 的算法 443 | 444 | Misra Gries 算法不能处理元素删除。传统数据流确实只有插入操作,但是接下来我们会介绍这种带删除的数据流 445 | 446 | ### Turnstile Streaming Model 447 | 448 | > 不太能翻译这个名词。这个名字的由来是:传统的计数模型就是维护一个水缸,来的数据相当于往某个水缸中倒一点水;这个模型不光能把水给倒到水缸里,还能控制水缸里的水流出来,起到了河道里闸门 (Turnstile) 的作用,水可以双向流。或许可以翻译成 *闸门数据流模型* 449 | 450 | 在经典的数据流模型中,我们会流入一列数据 $i_1, i_2, \cdots, i_m$,并维护这列数据的一些统计信息。设 $\vec x$ 满足 $x_i$ 是数据流中所有等于 $i$ 的元素出现的个数,先前的算法实际上都是维护关于 $\vec x$ 的信息 451 | 452 | 但有的时候我们希望能删除先前输入的一些数据。我们在流入 $i_j\in\set{1, 2, \cdots, n}$ 的时候,同时流入一个辅助变量 $\Delta_j\in\R$。流入 $(i_j, \Delta_j)$ 意味着令 $x_{i_j}\gets x_{i_j} + \Delta_j$ 453 | 454 | Turnstile Streaming Model 不对 $\Delta_j$ 进行任何限制,只要 $\Delta_j\in\R$ 就行。下面列出一些特殊的闸门数据流模型: 455 | 456 | * 传统数据流模型:$\Delta_j = 1$ 457 | * 收银机模型:$\Delta_j > 0$。收银机当然不会对顾客吐出钱 458 | * Strict Turnstile (Streaming) Model:$\Delta_j$ 可正可负,需满足但是任意时刻 $\vec x\in\R_{\geq 0}^n$(也就是 $\Delta_j\geq -x_{i_j}$) 459 | * 图流模型:$\Delta_j =\pm 1$,且任意时刻 $\vec x\in\N^n$。这时 $\set{1, 2, \cdots, n}$ 对应图中潜在边的集合,也就表明动态图问题中可能没有某条边或者关于某条边有很多重边,但是不可能某条边有负数条 460 | 461 | ### 推广的众数查询 462 | 463 | 从本节开始,我们默认使用 Strict Turnstile Streaming Model,而非传统的数据流模型 464 | 465 | $(k, l_1)$ 单点查询问题指:任意时刻询问任意的 $i\in\set{1, 2, \cdots, n}$,需要输出 $\tilde x_i = x_i \pm \frac 1k\norm{\vec x}_1$ 466 | 467 | $(k, l_1)$ 众数查询问题指:任意时刻进行询问,需要输出 $L\subseteq\set{1, 2, \cdots, n}$ 满足: 468 | 469 | * $\abs{L} = \order{k}$ 470 | * 如果 $\abs{x_i} > \frac 1k\norm{\vec x}_1$,那么 $i\in L$ 471 | 472 | > Misra Gries 算法就是在传统数据流模型下解决以上问题的一个算法 473 | 474 | **引理:**设 $\mathcal A$ 是一个 $(3k, l_1)$ 单点查询问题的算法,其失败概率不超过 $\frac \delta n$,且消耗空间为 $s$ 比特。那么可以构造出一种解决 $(k, l_1)$ 众数查询问题的算法 $\mathcal A'$,失败概率不超过 $\delta$,消耗 $s + \order{k\log n}$ 比特 475 | 476 | **证明:** 477 | 478 | > 这个算法简单点说就是:遍历所有元素的出现次数,并找出出现最多的几个。注意到单点查询在这里并不是一个确定算法(因为在数据量很多,数据范围不小的前提下,将所有数记录下来就需要 $n\log n$ 个比特,是一个很大的负担),所以这里不能只找 $k$ 个,顺手多找几个 479 | 480 | 在 $\mathcal A$ 算法的基础上我们这样构造 $\mathcal A'$:查询时,遍历 $i = 1, 2, \cdots, n$,使用 $\mathcal A$ 算法依次单点查询这 $n$ 个点的值,同时记住前 $3k$ 大的数并输出 481 | 482 | 我们证明所有出现次数不低于 $\frac 1k$ 的数都被输出了。因为一个单点查询失败的概率不超过 $\frac \delta n$,所以所有单点查询失败至少一次的概率至多为 $\delta$,这些单点查询全部成功的概率至少为 $1 - \delta$ 483 | 484 | > 设第 $i$ 个单点查询失败的事件为 $A_i$,这 $\Pr\qty[A_i]\leq\frac\delta n$,所以 $\Pr\qty[\bigcup_{i = 1}^nA_i]\leq\sum_{i = 1}^n\Pr\qty[A_i]\leq n\cdot \frac{\delta}n = \delta$ 485 | 486 | 在这些单点查询全部成功的前提下,每个返回的 $\tilde x_i$ 均在 $\qty[x_i - \frac 1{3k}\norm{\vec x}_1, x_i + \frac 1{3k}\norm{\vec x}_1]$ 区间内 487 | 488 | * 如果 $x_i > \frac 1k\norm{\vec x}_1$,那么 $\tilde x_i > \frac 1k\norm{\vec x}_1 - \frac 1{3k}\norm{\vec x}_1 = \frac 2{3k}\norm{\vec x}_1$ 489 | * 如果 $x_i \leq \frac 1{3k}\norm{\vec x}_2$,那么 $\tilde x_i\leq\frac 1{3k}\norm{\vec x}_1 + \frac 1{3k}\norm{\vec x}_1 = \frac2{3k}\norm{\vec x}_1$ 490 | 491 | 以上内容表明:所有 ${\rm HH}_k$ 中的元素 $i$ 都满足 $\tilde x_i > \frac 2{3k}\norm{\vec x}_1$,所有满足 $\tilde x_i > \frac 2{3k}\norm{\vec x}_1$ 的元素 $i$ 都满足 $i$ 是 ${\rm HH}_{3k}$ 中的元素。${\rm HH}_{3k}$ 中的元素至多有 $3k$ 个,所以满足 $\tilde x_i >\frac 2{3k}\norm{\vec x}_1$ 的元素个数一定不超过 $3k$ 个。我们找出前 $3k$ 大的数一定包含所有满足 $\tilde x_i > \frac 2{3k}\norm{\vec x}_1$ 的元素,所以也一定包含 ${\rm HH}_k$ 中的元素 492 | 493 | ### Count Min Sketch 494 | 495 | > 同不太能翻译出来。这里 Sketch 表示草稿,也就是说我们并不完整刻画这一整个数据结构,而是刻画它最显著最重要的特征。这个数据结构的本意是为了统计数据流中每个项的出现频率,目的是为了计数 (Count);而本数据结构使用了求最小值的技巧,为了和另一个使用了中位数技巧的数据结构区分开,在这里加一个 Min 以用于标识。或许可以翻译成 *计数最小草稿* 496 | 497 | 先前的频繁项查询算法需要依赖于单点查询算法。本节我们将针对 Strict Turnstile Streaming Model 来给出一个 $(k, l_1)$ 单点查询算法。回忆一下 Strict Turnstile Streaming Model,该模型要求输入满足任意时刻 $\vec x$ 中的所有元素都是非负 498 | 499 | 先给出算法。设 $w, d$ 是两个参数,我们后面再对其选择: 500 | 501 | 1. 选择 $d$ 个 $2$ 元独立随机哈希函数 $h_1, h_2, \cdots, h_d$,它们将 $\set{1, 2, \cdots, n}$ 均匀地散列到 $\set{1, 2, \cdots, w}$ 上 502 | 2. 维护一个二维数组 $C$,初始化 $C_{i, j} = 0$ 503 | 3. 当数据流中流入 $e_t = (i_t, \Delta_t)$ 的时候,遍历每个哈希函数 $h_1, h_2, \cdots, h_d$。当遍历到函数 $h_l$ 的时候,更新 $C_{l, h_l(i_t)}\gets C_{l, h_l(i_t)} + \Delta_t$ 504 | 4. 记 $\tilde x_i \triangleq \min_{l = 1}^d C_{l, h_l(i)}$,作为查询 $x_i$ 时的输出结果 505 | 506 | **引理:**在 Strict Turnstile Model 下,取 $d \geq \log\frac 1\delta$ 与 $w > 2k$,则 507 | $$ 508 | \Pr\qty[\tilde x_i\geq x_i + \frac{\norm{\vec x}_1}k]\leq\delta, i = 1, 2, \cdots, n 509 | $$ 510 | **证明:**由定义知 $\tilde x_i = \min_{l = 1}^dC_{l, h_l(i)}$。所以我们顺次考虑这 $d$ 个数 $C_{1, h_1(i)}, C_{2, h_2(i)}, \cdots, C_{d, h_d(i)}$ 511 | 512 | 首先注意到 $C_{l, j} = \sum_{h_i(k) = j}x_k$,这是因为 $h_l(k) = j$ 表明数据流中流入与 $x_k$ 相关的更新 $(k, \Delta)$ 的时候,在二维数组的第 $l$ 行实际上只更新了 $C_{l, h_l(k)} = C_{l, j}$ 的元素 513 | 514 | 所以 $C_{l, h_l(i)} = x_i + \sum_{i'\neq i, h_l(i') = h_l(i)}x_{i'}$ 515 | 516 | 在 Strict Turnstile Model 下,$x_{i'}\geq 0$,所以 $C_{l, h_l(i)}\geq x_i$ 517 | 518 | 考虑到 $h_l$ 是 $2$ 元独立哈希函数,所以 519 | $$ 520 | \mathbb E\qty[C_{l, h_l(i)}] 521 | = x_i + \sum_{i'\neq i}\Pr\qty[h_l(i') = h_l(i)] x_{i'} = x + \sum_{i'\neq i}\frac 1w x_i \leq x_i + \frac 1w\sum_{i'\neq i}\abs{x_i}< x_i + \frac{\norm{X}_1}{2k} 522 | $$ 523 | 524 | > 第一个等式成立是因为:当 $h_l(i') = h_l(i)$ 的时候,$x_{i'}$ 的值会贡献到 $C_{l, h_l(i)}$ 中——也就是说有 $\Pr[h_l(i') = h_l(i)]$ 的概率 $x_{i'}$ 对 $C_{l, h_l(i)}$ 产生贡献,有 $\Pr[h_l(i')\neq h_l(i)]$ 的概率没有对 $C_{l, h_l(i)}$ 产生任何贡献 525 | 526 | 这表明 $\mathbb E\qty[C_{l, h_l(i)} - x_i]\leq \frac{\norm{\vec x}_1}{2k}$,而且 $C_{l, h_l(i)} - x_i\geq 0$。由马尔科夫不等式, 527 | $$ 528 | \Pr\qty[C_{l, h_l(i)} - x_i >\frac{\norm{\vec x}_1}{k}] \leq \frac{\mathbb E\qty[C_{l, h_l(i)} - x_i]}{\norm{\vec x}_1 / k} < \frac 12 529 | $$ 530 | 因为这些哈希函数是均匀随机选择的,所以 531 | $$ 532 | \Pr\qty[\tilde x_i\ge x_i +\frac{\norm{X}_1}k] = \Pr\qty[\bigwedge_{l = 1}^d C_{l, h_l(i)}\geq x_i+ \frac{\norm{X}_1}k] = \prod_{l = 1}^d\Pr\qty[C_{l, h_l(i)}\geq x_i + \frac{\norm{x}_1}k] < \qty(\frac 12)^d \leq\delta 533 | $$ 534 | 当 $d = \Theta\qty(\ln n)$ 的时候,也就是 $\delta = n^{\Theta(1)}$ 的时候,算法的正确概率就能相当高。所以 Count Min Sketch 只需要 $\Theta(k\log n)$ 个计数器就可以完成 $(k, l_1)$ 单点查询 535 | 536 | ### Count Sketch 537 | 538 | Count Min Sketch 算法中空间复杂度大约是关于 $k$ 的线性关系,这是因为 $\vec x$ 中比 $\frac 1k\norm{\vec x}_1$ 大的元素少于 $k$ 个。但是 $l_2$ 范数就没有 $l_1$ 范数这么好的性质了,比 $\frac 1{k}\norm{\vec x}_2$ 大的 $\vec x$ 中元素可能达到将近 $k^2$ 个。不过,还是可以使用类似 Count Min Sketch 的算法与分析来求解 $l_2$ 范数中的问题 539 | 540 | 1. 选择 $d$ 个 $2$ 元独立随机哈希函数 $h_1, h_2, \cdots, h_d$,它们将 $\set{1, 2, \cdots, n}$ 均匀地散列到 $\set{1, 2, \cdots, w}$ 上;再选择 $d$ 个 $2$ 元独立随机哈希函数 $g_1, g_2, \cdots, g_d$,它们将 $\set{1, 2, \cdots, n}$ 均匀地散列到 $\set{-1, 1}$ 上 541 | 2. 维护一个二维数组 $C$,初始化 $C_{i, j} = 0$ 542 | 3. 当数据流中流入 $e_t = (i_t, \Delta_t)$ 的时候,遍历每个哈希函数 $h_1, h_2, \cdots, h_d$。当遍历到函数 $h_l$ 的时候,更新 $C_{l, h_l(i_t)}\gets C_{l, h_l(i_t)} + g_l(i_t)\Delta_t$ 543 | 4. 记 $\tilde x_i \triangleq {\rm median}\set{g_l(i)C_{l, h_l(i)}}_{l = 1, 2, \cdots, d}$,作为查询 $x_i$ 时的输出结果 544 | 545 | **引理:**在 Strict Turnstile Model 下,取 $d \geq 18\ln \delta$ 与 $w > 3k^2$,则 546 | $$ 547 | \Pr\qty[\tilde x_i\geq x_i + \frac{\norm{X}_1}k]\leq\delta, i = 1, 2, \cdots, n 548 | $$ 549 | 550 | **证明:**首先固定一组 $l\in\set{1,2, \cdots, d}, i\in\set{1, 2, \cdots, n}$,我们记 $Z_l = g_l(i)C_{l, h_l(i)}$。同时对于每一个 $i' = 1, 2, \cdots, n$,记 $Y_{i'} = \qty[h_l(i) = h_l(i')]$ 551 | 552 | 因为 $Y_{i'}$ 的取值只能是 $0$ 或 $1$,所以 $\mathbb E\qty[Y_{i'}] = \mathbb E\qty[Y_{i'}^2] = \Pr\qty[Y_i = 1] = \Pr\qty[h_l(i) = h_l(i')]$。在前一问中,我们已经分析过当 $i'\neq i$ 的时候 $\Pr\qty[h_l(i) = h_l(i')] = \frac 1w$。所以 553 | $$ 554 | Z_l = g_l(i)C_{l, h_l(i)} = g_l(i)\qty(g_l(i)x_i + \sum_{i'\neq i}\qty[h_l(i)\neq h_l(i')]g_l(i')x_{i'}) = x_i + \sum_{i'\neq i}Y_{i'}g_l(i)g_l(i')x_{i'} 555 | $$ 556 | 再联想到 $Y_{i'}$ 仅与 $h$ 函数相关,与 $g$ 函数是无关的。同时考虑到 $g_l$ 是 $2$ 元独立随机哈希函数,$g_l(i)$ 与 $g_l(i')$ 是独立的。所以: 557 | $$ 558 | \mathbb E[Z_l] = x_i + \sum_{i'\neq i}\mathbb E\qty[Y_{i'}g_l(i)g_l(i')x_{i'}] = x_i+\sum_{i'\neq i}\mathbb E\qty[Y_{i'}]\mathbb E\qty[g_l(i)]\mathbb E\qty[g_l(i')]x_{i'} = x_i 559 | $$ 560 | 注意到 $i'\neq i''$ 的时候 $g_l(i')$ 与 $g_l(i'')$ 是独立的,而 $\qty(g_l(i))^2 = 1$ 一定成立,因为 $g$ 函数的值域是 $\set{-1, 1}$。同时 $Y_{i'}Y_{i''}$ 的值仅与 $f$ 相关,与它们都独立。所以 $i'\neq i''$ 时 $\mathbb E\qty[Y_{i'}Y_{i''}\qty(g_l(i))^2g_l(i')g_l(i'')] = \mathbb E\qty[Y_{i'}Y_{i''}]\mathbb E\qty[g_l(i')]\mathbb E\qty[g_l(i'')] = 0$。所以 561 | $$ 562 | \begin{aligned} 563 | {\rm Var}\qty[Z_l] &= \mathbb E\qty[(Z_l - x_i)^2]\\ 564 | &= \mathbb E\qty[\sum_{i'\neq i}\sum_{i''\neq i}Y_{i'}Y_{i''}\qty(g_l(i))^2g_l(i')g_l(i'')x_{i'}x_{i''}]\\ 565 | &= \sum_{i'\neq i}\mathbb E\qty[Y_{i'}^2\qty(g_l(i))^2\qty(g_l(i'))^2x_{i'}^2]\\ 566 | &= \sum_{i'\neq i}x_{i'}^2\mathbb E\qty[Y_{i'}^2] = \sum_{i'\neq i}\frac {x_{i'}^2}w \leq\frac{\norm{X}_2}{w} 567 | \end{aligned} 568 | $$ 569 | 由切比雪夫不等式, 570 | $$ 571 | \mathbb P\qty[\abs{Z_i - x_i} >\frac{\norm{X}_2} k]\leq\frac{{\rm Var}(Z_i)}{(\norm{X}_2 / k)^2}\leq\frac{k^2}{w}\leq\frac 13 572 | $$ 573 | 请读者仿照 Morris++、FM++ 算法中的中位数技巧完成后续证明 574 | 575 | 这表明当 $d = \Theta(\log n)$, $w = \Theta(k^2)$ 时就可以以很高的概率解决 $2$ 单点查询问题,需要 $\Theta(k^2\log n)$ 个计数器。假设每个计数器的值都不超过 $M$($\norm{\vec x}_1$ 是它的一个上界),那么它的空间复杂度就是 $\order{k^2\log n\log M}$ 576 | 577 | ### Count Min Sketch 和 Count Sketch 的应用 578 | 579 | #### 区间询问 580 | 581 | 在一个 Strict Turnstile Streaming Model 中,每次询问一对数 $i, j$,需要回答 $\sum_{l = i}^jx_l$,也就是下标在区间 $[i, j]$ 内的元素和 582 | 583 | 当然,严格求解这个问题的第一步起码得把这些数都给存下来,这样空间复杂度就会达到大约 $\order{m\log M}$ 了($M$ 与上文一样,是 Count Min Sketch 算法中计数器的最大值),在 $\log n$ 与 $\log m$ 的意义下一定是一个指数复杂度,这是我们不可接受的 584 | 585 | 所以我们将目标放松为:输出某个 $\tilde x_{ij}$ 满足 $\abs{\tilde x_{ij} - \sum_{l = i}^jx_l}\leq \epsilon\norm{x}_1$ 586 | 587 | 这个放松的目的已经非常明显了——我们想用 Count Min Sketch 来求解这个问题。可不可以选择某个 $k$,直接对 $x_i, x_{i +1}, \cdots, x_j$ 进行 $(k, l_1)$ 单点查询呢?因为每次查询 $\tilde x_i$ 都会带来 $\frac 1k\norm{x}_1$ 的误差,所以直接这样进行 $j - i + 1$ 次查询了之后,累计误差可能达到 $(j - i + 1)\cdot\frac 1k\norm{x}_1$。为了保证在最坏情况下算法依然相对误差不超过 $\epsilon$,而最坏情况下 $j - i + 1$ 可以高达 $m$,我们选择的 $k$ 必须满足 $\frac mk\leq\epsilon$,也就是 $k\geq \frac m\epsilon$。回忆 Count Min Sketch 需要维护 $\Theta(k\log n)$ 个计数器,使用这种方法空间复杂度就能达到 $\Theta(\frac m\epsilon\log n)$,甚至比暴力还差了 588 | 589 | 这里使用了一种名为线段树的数据结构的思想。我的文字不能展示它的美感,这里给一个链接:https://blog.csdn.net/litble/article/details/72486558(只用到了前两节单点修改区间查询的方法) 590 | 591 | 线段树是一个树形结构,而 Count Sketch 问题只能存储一个数组——我们不能将指针也一并用 Count Sketch 维护。解决的方法是使用类似非递归线段树的思想将线段树拍扁。思想上是将线段树的根节点(深度为 $0$ 的结点)存在数组的第 $1$ 个位置,深度为 $1$ 的两个结点存储在数组的第 $2$ 到第 $3$ 个位置,深度为 $2$ 的 $4$ 个结点存储在数组的第 $4$ 到第 $7$ 个位置,以此类推。更准确地说,我们不妨假设 $n$ 是 $2$ 的幂,并建立数组 $\set{t_i}_{i = 1, 2, \cdots, 2n - 1}$ 来存储这这棵线段树,其中 $t_1 = t_{(1)_2}$ 存储 $x_{[1, n]}$,也就是线段树的根节点;$t_2 = t_{(10)_2}$ 与 $t_3 = t_{(11)_2}$ 分别存储 $x_{[1, n / 2]}$ 与 $x_{[n / 2 + 1, n]}$,是 $t_{(1)_2} = x_{[1, n]}$ 的两个孩子;$t_4 = t_{(100)_2}$ 与 $t_5 = t_{(101)_2}$ 分别存储 $x_{[1, n / 4]}$ 与 $x_{[n / 4 + 1, n / 2]}$,是 $t_{(10)_2}$ 的两个孩子……这样就可以通过观察下标来得出计算 $x_{[l, r]}$ 时应该对 $t$ 数组中的哪些数求和 592 | 593 | > 为什么不妨假设 $n$ 是 $2$ 的幂?因为 $[n, 2n)$ 中一定有一个 $2$ 的幂。如果 $n$ 不是 $2$ 的幂,那么我们将 $n$ 增加到离它最近的 $2$ 的幂,这只会多维护不超过一倍的节点,不会影响算法的渐进复杂度 594 | > 595 | > 除了使用非递归线段树的思想以外,也可以直接使用树状数组来解决本题的问题 596 | 597 | 在 Strict Turnstile Model 中,观察到 $\norm{\vec T}_1 = \log n\norm{\vec x}_1$,这是因为每个点 $x_i$ 的值除了贡献在叶子结点 $x_{[i, i]}$ 中以外,还贡献在了它的父亲 $\begin{cases}x_{[i, i + 1]} & 2\mid i\\x_{[i - 1, i]} & 2\nmid i\end{cases}$ 中,还贡献在了它的祖父($x_{[i, i + 3]}$ 或 $x_{[i - 1, i + 2]}$ 或 $x_{[i - 2, i +1]}$ 或 $x_{[i - 3, i]}$)中,依次类推,每个祖先都贡献了一遍,总共贡献了 $\log n$ 层 598 | 599 | 同时观察到一次查询需要对 $\order{\log n}$ 个数进行求和,所以使用 Count Min Sketch 算法维护线段树的时候,我们只需要选择 $k$ 满足 $\frac{\order{\log n}}k\leq \frac{\epsilon}{\log n}$ 即可,也就是 $k = \order{\frac{\log^2 n}{\epsilon}}$ 即可。空间复杂度是 $\order{k\log n\log M} = \order{\frac 1\epsilon\log^3 n\log M}$ 600 | 601 | #### 稀疏恢复 602 | 603 | 我们有的时候需要存储一个稀疏的数组——数组中的大部分元素都很小,很接近 $0$,只有少数几个元素有一些比较大的值,例如在统计牛津字典中每个词在某本书中出现次数的时候 604 | 605 | 我们这样形式化地定义稀疏化的过程:给定某个 $\vec x\in\R^n$ 的向量、某个正整数 $k$ 与某个范数 $\norm{\cdot}_p$,我们需要找到一个向量 $\vec z$,使得 $\vec z$ 中的非零元素不超过 $k$ 个(也就是 $\norm{\vec z}_0\leq k$),而且 $\norm{\vec x - \vec z}_p$ 尽可能小 606 | 607 | 假如我们将 $\vec x$ 给严格完整地存储了下来,那么有一种非常简单的做法:选择 $\vec x$ 中绝对值最大的 $k$ 个元素,$\vec z$ 在这些位置与 $\vec x$ 相同,其他位置为 $0$。当然,将 $\vec x$ 严格存储下来需要 $\order{m\log M}$ 的空间,但是我们受到这种离线算法与 Count Min Sketch 的启发,设计这样的在线算法(在 Strict Turnstile 的模型下): 608 | 609 | 1. 取 $w = \frac{3k}{\epsilon^2}$ 与 $d = \Omega(\log n)$ 作为 Count Sketch 算法的参数 610 | 2. 使用 Count Sketch 算法估计出 $\tilde X = \set{\tilde x_i}_{i = 1, 2, \cdots, n}$ 的值 611 | 3. 输出 $\vec z$,满足 $\vec z$ 在 $\tilde X$ 绝对值最大 $k$ 个元素的地方与 $\tilde X$ 相同,其他位置为 $0$ 612 | 613 | 显然这个算法的空间复杂度是 $\order{\frac 1{\epsilon^2}k\log n\log M}$ 的($M$ 是 Count Sketch 算法中计数器的最大可能值)。下面描述它给出的解的质量 614 | 615 | 首先,即便是最好的解也会有一定的误差。我们取误差度量范数 $\norm{\cdot}_p$ 为 $2$ 范数,记最好解的误差是 ${\rm err}_2^k(\vec x) = \min_{\vec z, \norm{\vec z}_0\leq k}\norm{\vec x - \vec z}_2$。我们可以证明: 616 | 617 | **定理:**当 $\epsilon\leq\frac 1{\sqrt 5}$ 的时候(当 $\epsilon$ 充分小的时候),以至少 $\frac 1n$ 的概率本算法输出的 $\vec z$ 满足 $\norm{\vec x - \vec z}_z\leq(1 + 5\epsilon){\rm err}_2^k(\vec x)$ 618 | 619 | > 如果需要相对误差不超过 $\epsilon$,将算法描述中的 $w$ 改成 $\frac{3k}{(\epsilon / 5^2)} = \frac{75k}{\epsilon^2}$ 即可 620 | 621 | 为了证明这个定理,我们只需证明两个引理即可: 622 | 623 | **引理 1:**当 $\epsilon$ 充分小的时候,以至少 $1 - \frac 1n$ 的概率,Count Sketch 算法给出的 $\tilde X$ 能保证对于每一个 $i = 1, 2, \cdots, n$ 都有 $\abs{\tilde x_i - x_i}\leq\frac\epsilon{\sqrt k}{\rm err}_2^k(x)$ 624 | 625 | **引理 2:**如果 $\vec x$ 与 $\vec y$ 满足 $\norm{\vec x - \vec y}_{\infty}\leq\frac{\epsilon}{\sqrt k}{\rm err}_2^k(\vec x)$,设 $T$ 是 $\vec y$ 中最大的 $k$ 个元素对应的下标,设向量 $\vec z$ 满足 $z_i = \begin{cases}Y_i & i\in T\\0 & {\rm otherwise}\end{cases}$,则 $\norm{\vec x - \vec z}\leq(1 + 5\epsilon){\rm err}_2^k(\vec x)$ 626 | 627 | > 回忆无穷范数 $\norm{\vec p}_\infty$ 表示 $\vec p$ 中绝对值最大的数。引理 1 成立表示 $\norm{\vec x - \tilde X}_\infty\leq\frac{\epsilon}{\sqrt k}{\rm err}_2^k(\vec x)$,而引理 $2$ 成立时将 $\vec y\gets \tilde X$ 代入就可以得到定理 628 | 629 | **引理 1 证明:** 630 | 631 | 设 $T_{\rm big}$ 是 $\vec x$ 中最大的 $k$ 个数对应的下标,$T_{\rm small}$ 是所有其他下标 632 | 633 | > $\set{1, 2, \cdots, n} = T_{\rm big}\cup T_{\rm small}$ 634 | > $T_{\rm big}\cap T_{\rm small} = \varnothing$ 635 | > $\abs{T_{\rm big}} = k$ 636 | > $x_i\geq x_j\forall i\in T_{\rm big}, j\in T_{\rm small}$ 637 | 638 | 那么在一个最优的估计中,$\vec z$ 在 $T_{\rm big}$ 对应坐标下与 $\vec x$ 相等,在其他坐标下为 $0$,这就表明 ${\rm err}_2^k(x) = \sum_{i'\in T_{\rm small}}x_{i'}^2$ 639 | 640 | 对于某个固定的 $1\leq i\leq n$ 与 $1\leq l\leq d$,有如下引理 641 | 642 | **引理 1.1:**设 $A_l$ 是存在 $i'$ 满足 $i'\in T_{\rm big}$, $i'\neq i$ 且 $h_l(i') = h_l(i)$ 的事件,则 $\Pr[A_l]\leq\frac{\epsilon^2}3$。这是因为:记 $Y_{i'} = [h_l(i) = h_l(i')]$ 和 $Y = \sum_{i'\in T_{\rm big}\setminus\set{i}}$,则 $\Pr\qty[Y_{i'}] = \frac 1w\leq\frac {\epsilon^2}{3k}$,所以 $\mathbb E[Y] = \sum_{i'\in T_{\rm big}\setminus i}\mathbb E[Y_i]\leq \frac{\epsilon^2}3$,由马尔科夫不等式知命题成立 643 | 644 | **引理 1.2:**设 $Y_{i'} = [h_l(i) = h_l(i')]$,也就是 $i$ 与 $i'$ 在第 $l$ 个哈希函数中哈希冲突的事件,设 $Z_l' = \sum_{i'\in T_{\rm small}\setminus \set{i}}g_l(i)g_l(i')Y_{i'}x_{i'}$,那么 $\Pr\qty[\abs{Z_l'}\geq\frac\epsilon{\sqrt k}{\rm err}_2^k(x)]\leq\frac 13$。这是因为 $\mathbb E\qty[Z_l'] = 0$ 而 ${\rm Var}\qty[Z_l']\leq\frac{\epsilon^2}{3k}$ 645 | 646 | 首先,设 $Z_l = g(i)C\qty[l, h_l(i)]$,也就是 Count Sketch 中第 $l$ 个哈希函数的估计值。考虑到 $C[l, h_l(i)] = \sum_{h_l(i') = h_l(i)}g(i')x_{i'}$,我们有 647 | $$ 648 | Z_l = x_i + \sum_{i'\in T_{\rm big}\setminus\set{i}}g_l(i)g_l(i')Y_{i'}x_{i'} + \sum_{i'\in T_{\rm small}\setminus\set{i}}g_l(i)g_l(i')Y_{i'}x_{i'} = x_i + \sum_{i'\in T_{\rm big}\setminus\set{i}}g_l(i)g_l(i')Y_{i'}x_{i'} + Z_l' 649 | $$ 650 | 引理 1.1 保证了以至少 $1 - \frac{\epsilon^2}3$ 的概率对于所有的 $i'\in T_{\rm big}\setminus\set{i}$ 均有 $h(i')\neq h(i)$。$h(i')\neq h(i)$ 意味着 ${\color{blue}Y_{i'}} = 0$,所有 $i'\in T_{\rm big}\setminus\set{i}$ 均满足 $h(i')\neq h(i)$ 就意味着 $\sum_{i'\in T_{\rm big}\setminus\set{i}}g_l(i)g_l(i'){\color{blue}Y_{i'}}x_i = 0$,也就是以至多 $\frac {\epsilon^2}3$ 的概率有 $\sum_{i'\in T_{\rm big}\setminus\set{i}}g_l(i)g_l(i')Y_{i'}x_i \neq 0$ 651 | 652 | 引理 1.2 保证了以至多 $\frac 13$ 的概率 $\abs{Z_l}\geq\frac\epsilon{\sqrt k}{\rm err}_2^k(x)$ 653 | 654 | 如果 $\abs{Z_l - x_i}\geq\frac\epsilon{\sqrt k}{\rm err}_2^k(x)$,那么引理 1.1 与引理 1.2 中的坏事件至少发生一件。考虑到我们假设 $\epsilon$ 充分小($\epsilon\leq\frac 15$),所以 $\abs{Z_l - x_i}\geq\frac{\epsilon}{\sqrt k}{\rm err}_2^k(x)$ 的概率至多为 $\frac{\epsilon^2}3 + \frac 13\leq\frac 25$ 655 | 656 | 请读者使用中位数的技巧完成剩余证明 657 | 658 | **引理 2 证明:** 659 | 660 | 设 $\vec x$ 中前 $k$ 大元素下标的集合是 $S$,$\vec y$ 中前 $k$ 大元素对应的下标是 $T$,则由 $\vec z$ 仅在 $T$ 中对应位置上与 $\vec y$ 相等,其余位置均为 $0$ 可以得知 661 | $$ 662 | \norm{\vec x -\vec z}_2^2 = \sum_{i\in T}\abs{x_i - y_i}^2 +\sum_{i\in S\setminus T}x_i^2 +\sum_{i\in\set{1, 2, \cdots, n}\setminus(S\cup T)}x_i^2 = \sum_{i\in T}\abs{x_i - y_i}^2 + \sum_{i\in S\setminus T}x_i^2 + \sum_{i\in\set{1, 2, \cdots, n}\setminus(S\cup T)}x_i^2 663 | $$ 664 | 考虑到 $\norm{\vec x - \vec y}_\infty\leq\frac{\epsilon}{\sqrt k}{\rm err}_2^k(x)$,得到 $\abs{x_i - y_i}\leq\norm{\vec x - \vec y}_\infty$,再考虑到 $T$ 中只有 $k$ 个元素(因为这是 $\vec y$ 中的前 $k$ 大元素),所以 665 | $$ 666 | \sum_{i\in T}\abs{x_i - y_i}^2\leq k\qty(\frac{\epsilon}{\sqrt k}{\rm err}_2^k(x))^2 = \epsilon^2{\rm err}_2^k(x) 667 | $$ 668 | 669 | 关于 $\sum_{i\in S\setminus T}\abs{x_i - z_i}^2$ 与 $\sum_{i\in\set{1, 2, \cdots, n}\setminus(S\cup T)}x_i^2$ 的上界估计需要用很多三角不等式的技巧,能估算上界的原理是 $\vec x$ 与 $\vec y$ 相差不太大,详见彭老师的讲义 670 | 671 | ### Matrix Sketch 672 | 673 | > 我很想将这个名词翻译成 *矩阵草图*,因为它就是为矩阵画一个速写,将它最重要的部分给突出出来。但是为了与前文一致(前文中的 Sketch 我全都没有翻译),为了突出知识的相关性,我这里暂不翻译 674 | 675 | 对于一个矩阵 $A\in\R^{n\times d}$,我们希望找到一个矩阵 $B\in\R^{k\times d}$ 满足 $A^\intercal A\approx B^\intercal B$,这样 $B$ 还能保持 $A$ 的一些信息,比如奇异值和右奇异空间 676 | 677 | 如果 $A^\intercal A\approx B^\intercal B$,那么 $x^\intercal A^\intercal Ax\approx x^\intercal B^\intercal Bx$,也就是 $\norm{Ax}_2\approx \norm{Bx}_2$ 678 | 679 | 更准确地说,我们希望我们找到的 $B$ 满足 $0\leq\norm{A\vec x}^2_2 - \norm{B\vec x}_2^2\leq \frac 2k\norm{A}_F^2$,也就是 680 | 681 | * $\norm{A^\intercal A - B^\intercal B}_2\leq\frac{2}k\norm{A}_F^2$ 682 | * $B^\intercal B\preceq A^\intercal A$ 683 | 684 | > 回忆 $A\preceq B$ 表示 $A$ 与 $B$ 都是实对称矩阵,且 $B - A$ 是半正定矩阵 685 | 686 | 回忆 Misra-Gries 算法给出的每个元素频率估计 $\hat f_j$ 满足 $\abs{\hat f_j - f_j}\leq\frac n{k + 1}$,其中 $f_j$ 是数 $j$ 的频率真实值;Misra-Gries 算法能输出 $n$ 个数中出现次数超过 $\frac n{k + 1}$ 的数。 687 | 688 | 频繁项定义可以这样等价地转化:数据流中流入的不是一个单个的数 $x_i$,而是第 $i$ 个标准正交基 $\hat e_{x_i}$。我们把这 $n$ 个向量(转置后)顺着排成一个 $n$ 行的矩阵 $A$,那么数 $j$ 的频率 $f_j = \norm{A\hat e_j}_2$。矩阵 $A$ 中的每一行只有一个 $1$ 其他全是 $0$,说明矩阵的所有元素的平方和是行数 $n$,也就是 $\norm{A}_F^2 = n$。Misra-Gries 算法求解出来了每个向量出现频率的估计值,只有 $k$ 个向量的估计值最后存在数表中,可能非零。将这些估计值数乘上对应的单位向量,顺次排列得到矩阵 $B$,那么 Misra-Gries 能保证 $\norm{B\hat e_j}_2 = \hat f_j$,与 $\norm{A\hat e_j} = f_j$ 的绝对误差不超过 $\frac n{k + 1}$ 689 | 690 | > 举个例子。假如数据流是 $\qty(4, 3, 2, 1, 1, 3, 1, 1, 1)$,那么原矩阵是 691 | > $$ 692 | > A = \begin{bmatrix}0 & 0 & 0 & 1\\0 & 0 & 1 & 0\\0 & 1 & 0 & 0\\1 & 0 & 0 & 0\\1 & 0 & 0 & 0\\0 & 0 & 0 & 1\\1 & 0 & 0 & 0\\1 & 0 & 0 & 0\\1 & 0 & 0 & 0\end{bmatrix} 693 | > $$ 694 | > 运行 $k = 2$ 的 Misra-Gries 算法,得到的结果是 695 | > $$ 696 | > I = \begin{bmatrix}1\\3\end{bmatrix}, c = \begin{bmatrix}5\\1\end{bmatrix}, B = \begin{bmatrix}5\hat e_1 & 1\hat e_3\end{bmatrix}^\intercal = \begin{bmatrix}5 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} 697 | > $$ 698 | > 这个时候 $B$ 就是 $A$ 的一个很好的低维估计 699 | 700 | 我们推广传统的 Misra-Gries 算法来设计一个新算法以解决 Matrix Sketch 问题: 701 | 702 | > 回忆一下 SVD 中的内容。对于任意的 $B\in\R^{k\times d}$,都存在 $B$ 的奇异值分解 $B = \sum_{i = 1}^r \sigma_i\vec u_i\vec v_i^\intercal = \sum_{i = 1}^k\sigma_i\vec u_i\vec v_i^\intercal = U\Sigma V^\intercal$(其中 $\sigma_1 \geq \cdots\geq \sigma_r \geq\sigma_{r +1} = \cdots = \sigma_k = 0$, $U\in\R^{k\times k}$, $\Sigma = {\rm diag}(\sigma_1, \sigma_2, \cdots, \sigma_k)$, $V\in\R^{k\times d}$, $U^\intercal U = V^\intercal V = I_k$) 703 | 704 | 1. 初始化 $B = O_{n\times d}$ 是一个零矩阵 705 | 706 | 2. 依次处理 $\vec a_1, \vec a_2, \cdots, \vec a_n$。当处理到 $\vec a_i$ 的时候: 707 | 708 | 断言此时 $B$ 中一定有某一行全是 $0$。将 $\vec a_i^\intercal$ 插入 $B$ 的某个全是 $0$ 的行中 709 | 710 | 如果插入 $\vec a_i^\intercal$ 之后 $B$ 的所有行都不是 $\vec 0_d^\intercal$,那么: 711 | 712 | * 计算 $B$ 的奇异值分解 $B \to U\Sigma V^\intercal$,令 $C\gets \Sigma V^\intercal$, $\delta\gets\sigma_{k / 2}^2$($C$ 仅供算法分析使用) 713 | * 令 $\tilde\Sigma\gets\sqrt{\max\qty(\Sigma^2 - I_k\delta, 0)}$ 714 | * 令 $B\gets \tilde\Sigma V^\intercal$ 715 | 716 | 3. 返回 $B$ 717 | 718 | **命题:**本算法输出的 $B$ 满足 $0\preceq B^\intercal B\preceq A^\intercal A$ 719 | 720 | **证明:** 721 | 722 | 首先,$\vec x^\intercal B^\intercal B\vec x = (B\vec x)^\intercal (B\vec x)\geq 0$ 对任意 $\vec x\in\R^d$ 成立 723 | 724 | 接下来我们尝试证明 $\vec x^\intercal\qty(A^\intercal A - B^\intercal B)\vec x = \norm{A\vec x}_2^2 - \norm{B\vec x}_2^2\geq 0$ 对任意的 $\vec x\in\R^d$ 成立。归纳: 725 | 726 | 设 $B^{(i)}$ 与 $C^{(i)}$ 依次表示 $B$ 与 $C$ 在算法第 $i$ 次迭代(处理 $A_i$)时的向量。显然 $B^{(0)} = O$, $B^{(n)} = B$ 727 | 728 | > 如果某次插入之后 $B$ 中某一行还全是 $0$,那么这次插入前后 $B^\intercal B$ 相较于 $A^\intercal A$ 无变化。更形式化地说,$\sum_{j = 1}^i \vec a_j\vec a_j^\intercal - {B^{(i)}}^\intercal B^{(i)} = \sum_{j = 1}^{i - 1}\vec a_j\vec a_j^\intercal - {B^{(i - 1)}}^\intercal B^{(i - 1)}$,所以这里只讨论插入了 $\vec a_i$ 导致 $B$ 满了的情况 729 | 730 | 首先观察到 $U^\intercal C^{(i)}$ 是 $B^{(i - 1)}$ 的某个 $\vec 0^\intercal$ 行替换为 $\vec a_i^\intercal$ 的结果,所以 $U^\intercal C^{(i)}\vec x$ 是 $B^{(i - 1)}\vec x$ 的某个 $0$ 元被替换为 $\vec a_i^\intercal\vec x$ 的结果。由勾股定理可知 $\qty(\vec a_i^\intercal x)^2 + \norm{B^{(i - 1)}\vec x}_2^2 = \norm{U^\intercal C^{(i)}\vec x}_2^2$,由 $U\in\R^{k\times k}$ 是正定阵知 $\norm{U^\intercal C^{(i)}\vec x}_2^2 = \norm{C^{(i)}\vec x}_2^2$ 731 | 732 | 然后注意到 $\norm{C^{(i)}\vec x}_2^2 - \norm{B^{(i)}\vec x}_2^2\geq 0$,因为由算法的流程可以知道 $\Sigma^2\succeq \tilde \Sigma^2$ 733 | 734 | 所以 735 | $$ 736 | \begin{aligned} 737 | \norm{A\vec x}_2^2 - \norm{B\vec x}_2^2 &= \sum_{i = 1}^n\qty(\left\langle \vec a_i, \vec x\right\rangle + \norm{B^{(i - 1)}\vec x}_2^2 - \norm{B^{(i)}\vec x}_2^2)\\ 738 | &= \sum_{i = 1}^n\qty(\norm{C^{(i)}\vec x}_2^2 - \norm{B^{(i)}\vec x}_2^2)\geq 0 739 | \end{aligned} 740 | $$ 741 | **命题:**本算法输出的 $B$ 满足 $\norm{A^\intercal A - B^\intercal B}_2\leq\frac 2k\norm{A}_F^2$ 742 | 743 | **证明:**设 $\vec x$ 是 $A^\intercal A - B^\intercal B$ 最大特征值对应的特征向量。实对称矩阵的奇异值分解与特征值分解相同,所以 744 | $$ 745 | \begin{aligned} 746 | \norm{A^\intercal A - B^\intercal B}_2 &= \vec x^\intercal \qty(A^\intercal A - B^\intercal B)\vec x\\ 747 | &= \norm{A\vec x}_2^2 - \norm{B\vec x}_2^2\\ 748 | &= \sum_{i = 1}^n\qty(\norm{C^{(i)}\vec x}_2^2 - \norm{B^{(i)}\vec x}_2^2)\\ 749 | &= \sum_{i = 1}^n\vec x^\intercal \qty({C^{(i)}}^\intercal C^{(i)} - {B^{(i)}}^\intercal B^{(i)})\vec x\\ 750 | &\leq\sum_{i = 1}^n\norm{{C^{(i)}}^\intercal C^{(i)} - {B^{(i)}}^\intercal B^{(i)}}_2\\ 751 | &= \sum_{i = 1}^n\norm{{\Sigma^{(i)}}^2 - {\tilde \Sigma^{(i)}}^2} = \sum_{i = 1}^n\delta^{(i)} 752 | \end{aligned} 753 | $$ 754 | 另一方面 755 | $$ 756 | \begin{aligned} 757 | \norm{B}_F^2 &= \sum_{i = 1}^n\qty(\norm{B^{(i)}}_F^2 - \norm{B^{(i - 1)}}_F^2)\\ 758 | &= \sum_{i = 1}^n\qty[\qty(\norm{C^{(i)}}_F^2 - \norm{B^{(i - 1)}}_F^2) - \qty(\norm{C^{(i)}}_F^2 - \norm{B^{(i)}}_F^2)]\\ 759 | &= \sum_{i = 1}^n\qty[\norm{\vec a_i}_2^2 - \tr({C^{(i)}}^\intercal C^{(i)} - {B^{(i)}}^\intercal B^{(i)})]\\ 760 | &= \sum_{i = 1}^n\qty[\norm{\vec a_i}_2^2 - \tr({\Sigma^{(i)}}^2 - {\tilde \Sigma^{(i)}}^2)]\\ 761 | &\leq\norm{A}_F^2 - \sum_{i = 1}^n\frac k2\delta^{(i)} 762 | \end{aligned} 763 | $$ 764 | 这也就表明 765 | $$ 766 | \sum_{i = 1}^n\delta^{(i)}\leq\frac 2k\qty(\norm{A}_F^2 - \norm{B}_F^2)\leq\frac 2k\norm{A}_F^2 767 | $$ 768 | 由这些不等式可以直接得到结果 $\norm{A^\intercal A - B^\intercal B}_2\leq\frac 2k\norm{A}_F^2$ 769 | 770 | 该算法仅需存储 $B$,所以空间复杂度为 $\order{dk}$ 个字。计算过程中需要进行奇异值分解,所以时间复杂度是 $\order{dkn}$ 771 | -------------------------------------------------------------------------------- /一、降维.md: -------------------------------------------------------------------------------- 1 | # 降维 2 | 3 | ## 奇异值分解 4 | 5 | ### 用向量表示数据 6 | 7 | 数据集通常被表示成矩阵 $A\in\R^{n\times d}$,不妨记 $A = \begin{bmatrix}\vec a_1^\intercal \\\vec a_2^\intercal\\\vdots\\\vec a_n^\intercal\end{bmatrix}$,每个列向量 $\vec a_i\in\R^d$ 都是一个数据 8 | 9 | > 虽然老师上课原话 $\vec a_i$ 是行向量,但是作者认为行向量是一个非常不自然的东西,就擅自将它们都转置为列向量。正好 $\vec{\text{ }}^\intercal$ 记号也能提醒我这个向量是一个行向量 10 | 11 | **奇异值分解**会找到一个 *最适合*("best-fitting")的 $k$ 维 **线性子空间** 12 | 13 | *最适合* 这里指这些点到这个子空间距离的平方和最小,就跟最小二乘法一样。也就是说找到一个线性子空间 $S$,使得: 14 | $$ 15 | S = \arg\min_{S \text{ is a } k-\text{dim subspace }}\sum_{i = 1}^n{\rm dist}^2(\vec a_i, S) 16 | $$ 17 | > $\arg$ 表示主值,这里 $\arg\min_S f(S)$ 表示当 $f(S)$ 取到最小值时 $S$ 的值,有多个最小值时任取一个 18 | 19 | 考虑勾股定理,这里有 ${\rm dist}^2(\vec a_i, S) + {\rm length}^2({\rm proj}(\vec a_i, S)) = {\rm length}^2(\vec a_i)$,而 ${\rm length}(\vec a_i)$ 是固定值,所以 $S$ 的一个等价表述为: 20 | $$ 21 | \begin{aligned} 22 | S &= \arg\min_{S \text{ is a } k-\text{dim subspace }}\sum_{i = 1}^n{\rm dist}^2(\vec a_i, S) \\ 23 | &= \arg\min_{S \text{ is a } k-\text{dim subspace }}\left(\sum_{i = 1}^n{\rm length}^2(a_i) - \sum_{i = 1}^n{\rm length}^2({\rm proj}(\vec a_i, S))\right)\\ 24 | &= \arg\max_{S \text{ is a }k-\text{dim subspace}}\sum_{i = 1}^n{\rm length}^2({\rm proj}(\vec a_i, S)) 25 | \end{aligned} 26 | $$ 27 | 28 | ### 奇异向量与奇异值 29 | 30 | 回忆线性代数中的 **范数**。若 $p\geq 1$,则记 $p$ 范数为 $\norm{\vec a}_p = \left(\sum_{i = 1}^n\abs{\vec a_i}^p\right)^{\frac 1p}$。那么有: 31 | $$ 32 | \norm{\vec a}_2 = \sqrt{\sum_{i = 1}^na_i^2}\\ 33 | \norm{\vec a}_1 = \sum_{i = 1}^n\abs{a_i}\\ 34 | \norm{\vec a}_\infty = \max_{i = 1}^n\abs{a_i}\\ 35 | $$ 36 | 在本章节,范数默认为 $2$ 范数,即默认 $\norm{\vec a} = \norm{\vec a}_2$。 37 | 38 | (额外地,定义 $\norm{\vec a}_0$ 是 $\vec a$ 中非零元的数目) 39 | 40 | 注意到前文奇异值分解要找到的是线性子空间,也就是说这个子空间一定是过原点的 41 | 42 | 当 $k = 1$ 时,任意的一维线性子空间都可以被表述成 $1$ 个非零向量 $\vec v\in\R^d$ 张成的空间,不妨假设 $\vec v$ 的长度 $\norm{\vec v}_2$ 为 $1$。要找到这个子空间,就等价于找到这个单位向量 $\vec v$ 43 | 44 | 记两个列向量 $\vec u, \vec v\in\R^d$ 的内积为 $\vec u^\intercal \vec v$ 或 $\left\langle\vec u, \vec v\right\rangle$ 45 | 46 | 在这里记 ${\rm proj}(\vec a_i, \vec v) = {\rm proj}(\vec a_i, S)$,那么有 ${\rm length}({\rm proj}(\vec a_i, \vec v)) = \left\langle \vec a_i^\intercal, \vec v\right\rangle$(想想内积的几何性质),所以: 47 | $$ 48 | \sum_{i = 1}^n{\rm length}^2({\rm proj}(\vec a_i, S)) = \sum_{i = 1}^n\left\langle \vec a_i^\intercal, \vec v\right\rangle^2 = \sum_{i = 1}^n\left(\sum_{j = 1}^na_{i, j}v_j\right)^2 = \norm{A\vec v}_2^2 49 | $$ 50 | 记 $A$ 的第一个右奇异向量 $\vec v_1 = \arg\max_{\norm{\vec v}_2 = 1}\norm{A\vec v}_2$,同时记 $A$ 的第一个奇异值 $\sigma_1(A) = \norm{A\vec v_1}_2$,那么 $\vec v_1$ 张成的线性子空间即为所求,而且所有数据向量在 $\vec v_1$ 张成的线性子空间上投影平方和为 $\sigma_1^2(A)$ 51 | 52 | 当 $k = 2$ 时,一个 *贪心* 的做法是在 $\vec v_1$ 张成的子空间基础上再新增一个维度,也就是再找一个向量 $\vec v_2\perp \vec v_1$,然后取 $S = {\rm span}(\vec v_1, \vec v_2)$。所以我们先定义 $A$ 的第二个右奇异向量与第二个奇异值: 53 | $$ 54 | \vec v_2 = \arg\max_{\norm{\vec v}_2 = 1, \vec v\perp \vec v_1}\norm{A\vec v}_2\\ 55 | \sigma_2(A) = \norm{A\vec v_2}_2 56 | $$ 57 | 后续再证明这样贪心定义的右奇异向量确实能张成前文中的最优子空间 58 | 59 | 类似地,可以定义第 $i$ 个右奇异向量与第 $i$ 个奇异值: 60 | $$ 61 | \vec v_i = \arg\max_{\norm{\vec v}_2 = 1, \vec v_i \perp \vec v_1, \cdots, \vec v_i\perp \vec v_{i - 1}}\norm{A\vec v}_2\\ 62 | \sigma_i(A) = \norm{A\vec v_i}_2 63 | $$ 64 | 假设已有在任意给定 $\R^d$ 的子空间 $T$ 内求解 $\arg\max_{\norm{\vec v}_2 = 1, \vec v\in T}\norm{A\vec v}_2$ 的(最优化)算法,那么可以很容易地设计一个求解所有右奇异向量的算法 65 | 66 | 接下来证明以上贪心做法的最优性 67 | 68 | **定理 1:**设 $A\in\R^{n\times d}$,贪心定义的右奇异向量为 $\vec v_1, \vec v_2, \cdots, \vec v_r$。对于任意的 $1\leq k\leq r$,取 $V_k = {\rm span}(\vec v_1, \cdots, \vec v_k)$,则 $V_k$ 确实是 *最适合* $k$ 维线性子空间,其中 $r$ 是矩阵 $A$ 的 **秩** 69 | 70 | > 为什么这里会提到秩呢?回忆一个线性代数的性质:矩阵的零空间与行空间互为正交补。倘若定理成立,那么 $V_r$ 一定是 $A$ 的行空间(因为 $A$ 投影到 $A$ 的行空间上是没有任何长度损失的,而 $A$ 行空间的维数是 $A$ 的行秩 $r$)。这就表明所有与 $V_r$ 垂直的向量都在 $A$ 的零空间内 71 | 72 | 在证明这个定理之前,先说明一个子空间内投影的性质: 73 | 74 | 若 $\vec u_1, \vec u_2, \cdots, \vec u_k$ 是 $\R^d$ 的 $k$ 维线性子空间 $S$ 的一组单位正交基,则 75 | $$ 76 | \sum_{i = 1}^n{\rm length}^2({\rm proj}(\vec a_i, S)) = \sum_{i = 1}^n\sum_{j = 1}^k\left\langle \vec a_i, \vec u_k\right\rangle^2 = \sum_{j =1}^k\norm{A\vec u_j}_2^2 77 | $$ 78 | 这两个等号成立的理由与计算 $\vec v_1$ 时的推导类似。 79 | 80 | **证明:** 81 | 82 | 采用数学归纳法 83 | 84 | $k = 1$ 的时候,联想 $\vec v_1$ 的定义我们没有贪心,自然 $V_1$ 是线性子空间 85 | 86 | 下尝试论证 $V_{k - 1}$ 是 *最适合* 线性子空间可以推得 $V_k$ 是 *最适合* 线性子空间。设某个 *最适合* $k$ 维线性子空间是 $W$,接下来尝试证 $V_k = W$ 87 | 88 | 因为 $W$ 是 $k$ 维线性空间,所以 $W$ 存在一组大小为 $k$ 的单位正交基 $\vec w_1, \vec w_2, \cdots, \vec w_k$ 且满足 $\vec w_k\perp \vec v_1, \vec v_2, \cdots, \vec v_{k - 1}$,其中 $\vec v_1, \vec v_2, \cdots, \vec v_{k - 1}$ 是贪心算法算出的前 $k - 1$ 个右奇异向量 89 | 90 | 由归纳假设,因为 $V_{k - 1}$ 是 *最适合* 线性子空间,也就是说 $A$ 在 $V_{k - 1}$ 上的投影不会比 $A$ 在 $\qty{\vec w_1, \vec w_2, \cdots, \vec w_{k - 1}}$ 张成的子空间上的投影更短,联想前文所述投影的性质,有: 91 | $$ 92 | \begin{aligned} 93 | &\norm{A\vec w_1}^2 + \norm{A\vec w_2}^2 + \cdots + \norm{A\vec w_{k - 1}}^2\\ 94 | \leq &\norm{A\vec v_1}^2 + \norm{A\vec v_2}^2 + \cdots + \norm{A\vec v_{k - 1}}^2 95 | \end{aligned} 96 | $$ 97 | 联想为贪心算法构造的第 $k$ 个右奇异向量 $\vec v_k$ 的定义: 98 | $$ 99 | \vec v_k = \arg\max_{\norm{\vec v}_2 = 1, \vec v_i \perp \vec v_1, \cdots, \vec v_i\perp \vec v_{i - 1}}\norm{A\vec v}_2 100 | $$ 101 | $\vec v_k$ 满足 $\norm{A\vec v_k}$ 是所有垂直于 $\vec v_1, \vec v_2, \cdots, \vec v_{k - 1}$ 的单位向量 $\vec v$ 中 $\norm{A\vec v}$ 最大的一个,而且 $\vec w_k$ 也是一个垂直于 $\vec v_1, \vec v_2, \cdots, \vec v_{k - 1}$ 的向量,所以 102 | $$ 103 | \norm{A\vec w_k}_2^2\leq \norm{A\vec v_k}_2^2 104 | $$ 105 | 两个不等式相加知: 106 | $$ 107 | \begin{aligned} 108 | &\norm{A\vec w_1}^2 + \norm{A\vec w_2}^2 + \cdots + \norm{A\vec w_k}^2\\ 109 | \leq &\norm{A\vec v_1}^2 + \norm{A\vec v_2}^2 + \cdots + \norm{A\vec v_k}^2 110 | \end{aligned} 111 | $$ 112 | 联想投影的性质,上式说明 $k$ 维子空间 $V_k$ 不会比 $W$ 更 *不适合*,而 $W$ 已经是 *最适合* 的 $k$ 维子空间了,所以 $V_k$ 也是一个 *最适合* 的 $k$ 维子空间 113 | 114 | ### 奇异值与 Frobenious 范数 115 | 116 | 首先定义矩阵 $A\in\R^{n\times m}$ 的 **Frobenious范数** 为矩阵中所有元素的平方和: 117 | $$ 118 | \norm{A}_F = \sqrt{\sum_{i = 1}^n\sum_{j = 1}^ma_{i, j}^2} 119 | $$ 120 | 那么我们不难证明 121 | 122 | **定理:**矩阵 Frobenious 范数的平方等于其全体奇异值的平方和 123 | $$ 124 | \norm{A}_F^2 = \sum_{i = 1}^r\sigma_i^2(A) 125 | $$ 126 | 127 | **证明:**考虑 $A$ 的 $n$ 个行向量 128 | 129 | 一方面,在自然基下使用勾股定理: 130 | $$ 131 | \sum_{j = 1}^n\norm{\vec a_j}^2 = \sum_{j = 1}^n\sum_{k = 1}^da_{jk}^2 = \norm{A}_F^2 132 | $$ 133 | 另一方面,考虑到 $\vec v_1, \vec v_2, \cdots, \vec v_r$ 是 $A$ 行空间的一组单位正交基,对这组基使用勾股定理: 134 | $$ 135 | \sum_{j = 1}^n\norm{\vec a_j}^2 = \sum_{j = 1}^n\sum_{i = 1}^r\left\langle\vec a_j,\vec v_i\right\rangle^2 = \sum_{i = 1}^r\norm{A\vec v_i}^2 136 | $$ 137 | 138 | 联立以上两式便得到原定理 139 | 140 | ### 奇异值分解 141 | 142 | 设 $A\in\R^{n\times d}$ 有右奇异向量 $\vec v_1, \vec v_2, \cdots, \vec v_r$ 与对应的奇异值 $\sigma_1(A), \sigma_2(A), \cdots, \sigma_r(A)$。定义 $A$ 的 $r$ 个左奇异向量: 143 | $$ 144 | \vec u_i = \frac{A\vec v_i}{\sigma_i(A)} 145 | $$ 146 | 因为奇异值的定义是 $\sigma_i(A) = \norm{A\vec v_i}_2$,所以不难看出左奇异向量也是单位向量 147 | 148 | **引理:**左奇异向量两两正交 149 | 150 | **证明:**反证 151 | 152 | > 我们该从什么角度引出矛盾呢?$\vec u_i$ 是被 $\vec v_i$ 定义的,而 $\vec v_i$ 是被一个函数的最大值点 $\arg\max_{\norm{\vec v_i} = 1, \vec v_i\perp V_{i - 1}}\norm{A\vec v_i}_2$ 定义的,以下便试图从引理不成立推到某 $\vec v_i$ 没有取到最大值点。假如引理不成立可以推得 $\vec v_i$ 确实没有取到函数的最大值点而 $\vec v'$ 才是,考虑到以上最优化问题有约束($\vec v_i$ 被限定在垂直于 $V_{i - 1}$ 的方向上),说明 $\vec v'$ 理应是 $\vec v_{i}, \vec v_{i + 1}, \cdots, \vec v_r$ 的线性组合。而引理不成立能等价于描述一对向量 $\vec u_i, \vec u_j$ 不垂直,并没有提供其他向量的有用信息,所以下文就试图将 $\vec v_i$ 与 $\vec v_j$ 来线性组合出一个 $\vec v'$ 满足 $\norm{A\vec v'}_2 > \norm{A\vec v_i}_2$。 153 | 154 | 假设存在某些左奇异向量两两不正交,那么存在 $1\leq i < j\leq r$ 满足 $\vec u_i\not\perp \vec u_j$ 155 | 156 | **不失一般性**,假设 $\left\langle \vec u_i, \vec u_j\right\rangle > 0$,记 $\delta\triangleq \left\langle\vec u_i, \vec u_j\right\rangle$ 157 | 158 | > 为什么这个假设“不失一般性”呢?读者若不理解,可以将这视为分类讨论,然后尝试用几乎完全相同的方法证明 $\left\langle \vec u_i, \vec u_j\right\rangle < 0$ 的场景,注意后文哪些地方正确性依赖于是否有 $\delta > 0$ 159 | 160 | 对于 $\epsilon\in\R$,设 161 | $$ 162 | \vec v'(\epsilon) = \frac{\vec v_i + \epsilon \vec v_j}{\norm{\vec v_i + \epsilon \vec v_j}_2} 163 | $$ 164 | > 简记 $\vec v'(\epsilon)$ 为 $\vec v'$,但读者请记住 $\vec v'$ 随 $\epsilon$ 变化而变化 165 | 166 | 则有: 167 | 168 | $$ 169 | \norm{\vec v_i + \epsilon\vec v_j} = \sqrt{\left\langle\vec v_i + \epsilon \vec v_j, \vec v_i + \epsilon\vec v_j\right\rangle} = \sqrt{1 + \epsilon^2}\\ 170 | A\vec v' = \frac{A\vec v_i + \epsilon A\vec v_j}{\norm{\vec v_i + \epsilon \vec v_j}_2} = \frac{\sigma_i\vec u_i + \epsilon\sigma_j \vec u_j}{\sqrt{1 + \epsilon^2}} 171 | $$ 172 | 注意到 $\vec u_i$ 是单位向量,而且由柯西不等式有: 173 | $$ 174 | \norm{A\vec v'}_2 = \norm{\vec u_i}_2\norm{A\vec v'}_2 \geq \vec u_i^\intercal A\vec v' 175 | $$ 176 | 再代入上面对 $A\vec v'$ 的分析与反证假设 $\vec u_i^\intercal\vec u_j = \delta > 0$ 有: 177 | $$ 178 | \norm{A\vec v'}_2\geq \vec u_i^\intercal \frac{\sigma_iu_i + \epsilon\sigma_j\vec u_j}{\sqrt{1 + \epsilon^2}} = \frac{\sigma_i + \epsilon\delta\sigma_j}{\sqrt{1 + \epsilon^2}} 179 | $$ 180 | > $\epsilon$ 是我们可以任取的,我们希望取定某个满足 $\norm{A\vec v'} > \norm{A\vec v}$ 的 $\epsilon$。当 $\epsilon\leq 0$ 的时候,聪明的你应该可以看出 $\norm{A\vec v'}_2 \leq \sigma_i$,所以我们限定 $\epsilon > 0$ 再进行进一步分析 181 | 182 | 考虑到 $\sigma_i, \delta, \sigma_j > 0$,当 $\epsilon > 0$ 时,代入不等式 $(1 - \epsilon^2 / 2)^2(1 + \epsilon^2)< 1$ 183 | 184 | > 这个不等式可以由 $(1 + \epsilon^2)^{-\frac 12}$ 在 $\epsilon = 0$ 处泰勒展开得到 185 | 186 | $$ 187 | \norm{A\vec v'}_2\geq \frac{\sigma_i + \epsilon\delta\sigma_j}{\sqrt{1 + \epsilon^2}} > (\sigma_i + \epsilon\delta\sigma_j)\qty(1 - \frac{\epsilon^2}2) = \sigma_i + \epsilon\qty(\sigma_j\delta - \frac{\sigma_i}2\epsilon - \frac{\sigma_j\delta}2\epsilon^2) 188 | $$ 189 | 只要 $\epsilon$ 充分小,$\sigma_j\delta - \frac{\sigma_i}2\epsilon - \frac{\sigma_j\delta}2\epsilon^2$ 总能变成一个正数,这表明 $\epsilon$ 充分小时 $\norm{A\vec v'}_2 > \sigma_i$ 成立,取定一个这样充分小的 $\epsilon$ 与其对应的 $\vec v'$ 190 | 191 | > 当然也可以简单地写:求导得 192 | >$$ 193 | > \eval{\dv{\norm{A\vec v'}_2}{\epsilon}}_{\epsilon = 0} \neq 0 194 | > $$ 195 | > 只要 $\epsilon$ 足够小就有 $\norm{A\vec v'(\epsilon)}_2 > \norm{A\vec v'(0)}_2 = \norm{A\vec v_i}$,取定一个这样的 $\epsilon$ 与 $\vec v'$ 196 | 197 | 另一方面,$\vec v'$ 是 $\vec v_i$ 与 $\vec v_j$ 的线性组合,而 $\vec v_i, \vec v_j$ 均与 $\vec v_1, \vec v_2, \cdots, \vec v_{i - 1}$ 垂直,这就表明 $\vec v'$ 也与 $\vec v_1, \vec v_2, \cdots, \vec v_{i - 1}$ 垂直。而 $\norm{A\vec v'}_2 > \norm{A\vec v_i}_2$,这与 $\vec v_i$ 的定义矛盾 198 | 199 | > $\vec v_i$ 是所有与 $\vec v_1, \vec v_2, \cdots, \vec v_{i - 1}$ 垂直的单位向量 $v$ 中 $\norm{A\vec v}_2$ 最大的一个,然而 $\vec v'$ 不但满足单位向量条件与垂直条件,$\norm{A\vec v'}_2$ 还比 $\norm{A\vec v_i}_2$ 更大 200 | 201 | 故假设不成立 202 | 203 |
204 | 205 | 有了以上的准备工作,接下来我们便可以证明 206 | 207 | **定理:** 208 | $$ 209 | A = \sum_{i = 1}^r\sigma_i\vec u_i\vec v_i^\intercal 210 | $$ 211 | 212 | **证明:** 213 | 214 | > 老师认为这个证明中使用的技巧大家需要掌握 215 | 216 | 首先注意到一个事实:若 $B, C\in\R^{n\times d}$,则: 217 | $$ 218 | B = C\iff B\vec v = C\vec v,\forall v\in\R^d 219 | $$ 220 | 为了证明定理成立,只要证明:对于任意的 $\vec v\in\R^d$,都有 221 | $$ 222 | A\vec v = \qty(\sum_{i = 1}^r\sigma_i\vec u_i\vec v_i^\intercal)\vec v 223 | $$ 224 | 下证明上式。首先注意到对于一类特殊的向量——$A$ 的 $r$ 个右奇异向量均有: 225 | $$ 226 | A\vec v_i = \sigma_i\vec u_i = \qty(\sum_{i = 1}^r\sigma_i\vec u_i\vec v_i^\intercal)\vec v_i 227 | $$ 228 | > 第二个等号成立是因为 $A$ 的右奇异值两两正交 $j\neq i\implies \vec v_j^\intercal \vec v_i = 0$ 229 | 230 | 但是考虑到 $r\leq d$,也就是不一定有 $r = d$。所以我们先补齐右奇异向量,任意地将 $\vec v_1, \vec v_2, \cdots, \vec v_r$ 补齐成 $\R^d$ 的一组单位正交基 $\vec v_1, \vec v_2, \cdots, \vec v_d$,也就是选择单位向量 $\vec v_{r + 1}, \cdots, \vec v_d$ 满足 $\vec v_1, \vec v_2, \cdots, \vec v_d$ 两两正交 231 | 232 | 补齐了之后就可以在这组基上展开 $\vec v$:设 $\left\langle\vec v, \vec v_i\right\rangle = \alpha_i$,则 233 | $$ 234 | \vec v = \sum_{i = 1}^d\alpha_i\vec v_i 235 | $$ 236 | 因为 $A$ 的秩为 $r$,而 $\vec v_1, \vec v_2, \cdots, \vec v_r$ 恰构成 $A$ 的行空间,所以 $A\vec v_{r + 1} = A\vec v_{r + 2} = \cdots = A\vec v_d = \vec 0$。所以 237 | $$ 238 | A\vec v = A\sum_{i = 1}^d\alpha_i\vec v_i = \sum_{i = 1}^d\alpha_iA\vec v_i = \sum_{i = 1}^r\alpha_i\sigma_i\vec u_i\\ 239 | \qty(\sum_{i = 1}^r\sigma_i\vec u_i\vec v_i^\intercal)\vec v = \qty(\sum_{i = 1}^r\sigma_i\vec u_i\vec v_i^\intercal)\qty(\sum_{i = 1}^d\alpha_i\vec v_i) = \sum_{i = 1}^r\sum_{j = 1}^d\sigma_i\alpha_j\vec u_i\vec v_i^\intercal\vec v_j = \sum_{i = 1}^r\sigma_i\alpha_i\vec u_i = A\vec v 240 | $$ 241 | 对于任意的 $\vec v\in\R^d$ 上式均成立,由前文提及的事实,定理证毕 242 | 243 | 记 244 | $$ 245 | U\triangleq \begin{bmatrix}\vec u_1 & \vec u_2 & \cdots & \vec u_r\end{bmatrix}\in\R^{n\times r}, \Sigma \triangleq{\rm diag}\qty(\sigma_1, \sigma_2, \cdots, \sigma_r)\in\R^{r\times r}, V\triangleq\begin{bmatrix}\vec v_1 & \vec v_2 & \cdots & \vec v_r\end{bmatrix}\in \R^{d\times r} 246 | $$ 247 | 由上定理知 248 | $$ 249 | A = U\Sigma V^\intercal 250 | $$ 251 | 这称为矩阵 $A$ 的奇异值分解 252 | 253 | ### 奇异向量与特征向量 254 | 255 | 如果 $B$ 是 $n$ 阶对称方阵,即 $B = B^\intercal, B\in\R^{n\times n}$,则 $B$ 有 $n$ 个单位正交特征向量 $\set{\vec v_i}$ 和它们对应的特征值 $\set{\lambda_i}$ 256 | 257 | 对于一个一般的矩阵 $A\in\R^{n\times d}$,如果 $A$ 的奇异值分解可以写成 $\sum_{i = 1}^r\sigma_i\vec u_i\vec v_i^\intercal$,则: 258 | 259 | * $A\vec v_i = \sigma_i\vec u_i$,因为这是 $\vec u_i$ 的定义 260 | * $A^\intercal \vec u_i = \sigma_i\vec v_i$,因为前文引理得到 $\set{\vec u_i}$ 两两正交,代入奇异值分解表达式即可 261 | 262 | 对于任意矩阵 $A\in\R^{n\times d}$,定义其协方差矩阵 $B = A^\intercal A\in\R^{d\times d}$,则 263 | 264 | $$ 265 | B\vec v_i = A^\intercal A\vec v_i = A^\intercal (A\vec v_i) = A^\intercal(\sigma_i\vec u_i) = \sigma_i^2\vec v_i 266 | $$ 267 | 268 | 这表明 $A$ 的任意右奇异向量 $\vec v_i$ 都是对称方阵 $B = A^\intercal A$ 的特征向量,该特征向量对应的特征值为 $\sigma_i^2$ 269 | 270 | 同样地,$A$ 的任意左奇异向量 $\vec u_i$ 都是对称方阵 $AA^\intercal$ 的特征向量,对应的特征值也是 $\sigma_i^2$ 271 | 272 | ### 低秩近似 273 | 274 | 奇异值分解可以找到一个与原矩阵相近,但秩较低的近似矩阵。 275 | 276 | 为什么要进行低秩近似呢?假设有 $n$ 个客户看过 $d$ 部电影,数据集 $A\in\R^{n\times d}$ 第 $i$ 行第 $j$ 列的元素 $a_{ij}$ 表示第 $i$ 个人给第 $j$ 个电影打多少分。这可能是一个很大的矩阵,但是如果客户给电影的评分只有 $k$ 个因素(例如 HE/BE,电影题材,特效 etc),而每个客户的评分是对这 $k$ 个因素的线性叠加,那么可以认为 $A = XY, X\in\R^{n\times k}, Y\in\R^{k\times d}$,其中 $y_{kj}$ 表示第 $j$ 个电影中含有多少个第 $k$ 种因素,而 $x_{ij}$ 表示第 $i$ 个人有多喜欢第 $j$ 种因素 277 | 278 | 回忆起 $A = \sum_{i = 1}^r\sigma_i\vec u_i\vec v_i^\intercal$,那么我们可以考虑选择 $U_k = \begin{bmatrix}\vec u_1 &\vec u_2 & \cdots &\vec u_k\end{bmatrix},$ $D_k = {\rm diag}(\sigma_1, \sigma_2, \cdots, \sigma_k),$ $ V_k = \begin{bmatrix}\vec v_1 & \vec v_2 & \cdots & \vec v_k\end{bmatrix}$,那么我们取 $X = U_kD_k,$, $Y = V_k^\intercal$,那么 $A_k \triangleq XY = \sum_{i = 1}^k\sigma_iu_iv_i^\intercal$ 可以合理地作为 $A$ 的一个秩为 $k$ 的近似 279 | 280 | 使用奇异值分解进行低秩近似有一些理论意义:设 $B\in\R^{n\times d}$ 是任意秩为 $k$ 的矩阵,如果以 Frobenious 范数 $\norm{A - B}_F$ 来衡量 $B$ 是否是 $A$ 的一个好近似,越低越好,则上述 $A_k$ 就是 $A$ 一个最好的近似。当以 $2$ 范数 $\norm{A - B}_2$ 来衡量时也是 $A_k$ 也时最好的 281 | 282 | 首先我们证明 Frobenious 范数意义下 $A_k$ 是最佳近似 283 | 284 | **引理:**$A_k$ 的第 $i$ 行是 $A$ 第 $i$ 行到 $\text{span}\set{\vec v_1, \vec v_2, \cdots, \vec v_k}$ 的投影 285 | 286 | **证明:**设 $A = \begin{bmatrix}\vec a_1^\intercal\\\vec a_2^\intercal\\\vdots\\\vec a_n^\intercal\end{bmatrix}$,将 $A$ 的第 $i$ 行 $\vec a_i^\intercal$ 投影到 $\text{span}\set{\vec v_1, \vec v_2, \cdots, \vec v_k}$,设投影出向量 $\vec a_i'^\intercal$,则由 $\vec v_1, \vec v_2, \cdots, \vec v_k$ 是单位正交向量知: 287 | $$ 288 | \vec a_i'^\intercal = \sum_{i = 1}^k\left\langle \vec a_i, \vec v_i\right\rangle\vec v_i^\intercal = \sum_{i = 1}^k\vec a_i^\intercal\vec v_i\vec v_i^\intercal = \vec a_i^\intercal\qty(\sum_{i = 1}^k\vec v_i\vec v_i^\intercal) 289 | $$ 290 | 将这些投影向量转置后拼成矩阵 $A'$,则有 291 | $$ 292 | A' = \begin{bmatrix}\vec a_1'^\intercal\\\vec a_2'^\intercal\\\vdots\\\vec a_n'^\intercal\end{bmatrix} = \begin{bmatrix}\vec a_1^\intercal\sum_{i = 1}^k\vec v_i\vec v_i^\intercal\\\vec a_2^\intercal\sum_{i = 1}^k\vec v_i\vec v_i^\intercal\\\vdots\\\vec a_n^\intercal\sum_{i = 1}^k\vec v_i\vec v_i^\intercal\end{bmatrix} = \begin{bmatrix}\vec a_1^\intercal\\\vec a_2^\intercal\\\vdots\\\vec a_n^\intercal\end{bmatrix}\sum_{i = 1}^k\vec v_i\vec v_i^\intercal = A\sum_{i = 1}^k\vec v_i\vec v_i^\intercal = \qty(\sum_{i = 1}^r\sigma_i\vec u_i\vec v_i^\intercal)\qty(\sum_{i = 1}^k\vec v_i\vec v_i^\intercal) = \sum_{i = 1}^k\sigma_i\vec u_i\vec v_i^\intercal 293 | $$ 294 | 引理证毕 295 | 296 | 由以上引理,可以得到 297 | $$ 298 | \norm{A - A_k}_F^2 = \sum_{i = 1}^n\norm{\vec a_i - \vec a_i'}_2^2 = \sum_{i = 1}^n\text{dist}^2(\vec a_i, V_k) 299 | $$ 300 | 因为奇异值分解得到的 $k$ 维子空间是最佳平方逼近的(这是由定义决定的),所以 301 | $$ 302 | \norm{A - A_k}^2_F = \sum_{i = 1}^n\text{dist}^2(\vec a_i, V_k) = \min_{S : \dim(S) = k}\sum_{i = 1}^n\text{dist}^2(\vec a_i, S) 303 | $$ 304 | **定理:**对于任意秩不超过 $k$ 的值 $B$,$\norm{A - A_k}_F \leq \norm{A - B}_F$ 305 | 306 | **证明:**对于任意秩不超过 $k$ 的矩阵 $B$,假设 $B$ 使 $\norm{A - B}_F^2$ 最小 307 | 308 | 设 $V$ 是 $B$ 的行空间,则 $\dim V\leq k$ 309 | 310 | $B$ 的第 $i$ 行一定是 $A$ 的第 $i$ 行到 $V$ 上的投影,下反证这一点。若不然,将 $B$ 的第 $i$ 行改为 $A$ 的第 $i$ 行到 $V$ 的投影,则新矩阵的行空间一定是 $V$ 的线性子空间,而且新矩阵的与原矩阵差值的 Frobenious 范数更小 311 | 312 | > 关于新矩阵行空间是原矩阵行空间的子空间:设原矩阵为 $B = \begin{bmatrix}\vec b_1 & \vec b_2 & \cdots & \vec b_n\end{bmatrix}^\intercal$,新矩阵为 $B' = \begin{bmatrix}\vec b_1' & \vec b_2' & \cdots &\vec b_n'\end{bmatrix}^\intercal$,则 $j\neq i$ 的时候 $\vec b_j' = \vec b_j\in {\rm span}\set{\vec b_1, \vec b_2, \cdots, \vec b_n} = V$,且 $\vec b_{i'} = {\rm proj}(\vec a_i, V)\in V$,所以 $B'$ 的行空间 ${\rm span}\set{\vec b_1', \vec b_2', \cdots, \vec b_n'}$ 是 $B$ 的行空间 $V$ 的子空间,所以新矩阵的秩一定不超过原矩阵的秩 $\dim V$ 313 | > 314 | > 关于新矩阵与原矩阵差值的 Frobenious 范数更小:新矩阵与原矩阵差值唯一变化的就是第 $i$ 行。原矩阵第 $i$ 行 $b_i \in V$,新矩阵第 $i$ 行 ${\rm proj}(\vec a_i, V)\in V$,且在所有 $V$ 中的向量中,与 $\vec a_i$ 最接近的一个(差值模长最小的一个)显然是 $\vec a_i$ 在 $V$ 上的投影 ${\rm proj}(\vec a_i, V)$ 315 | 316 | 所以 $\norm{A - A_k}_F^2 = \min_{S : \dim(S) = k}\sum_{i = 1}^n\text{dist}^2(\vec a_i, S) \leq \text{dist}^2(\vec a_i, V)$ 317 | 318 | 然后我们证明 $A_k$ 是 $2$ 范数意义下的最佳近似 319 | 320 | 首先我们要定义一下矩阵的 $2$ 范数: 321 | $$ 322 | \norm{A}_2\triangleq \max_{\norm{\vec x}_2 = 1}\norm{A\vec x}_2 323 | $$ 324 | 则由奇异值的定义可知 $\norm{A}_2 = \sigma_1(A)$ 325 | 326 | **引理:**$\norm{A - A_k}_2 = \sigma_{k + 1}$ 327 | 328 | **证明:** 329 | $$ 330 | A = \sum_{i = 1}^r\sigma_i\vec u_i\vec v_i^\intercal\\ 331 | A_k = \sum_{i = 1}^k\sigma_i\vec u_i\vec v_i^\intercal\\ 332 | A - A_k = \sum_{i = k + 1}^r\sigma_i\vec u_i\vec v_i^\intercal 333 | $$ 334 | 跟先前一样,我们添加 $\vec v_{r + 1}, \vec v_{r + 2}, \cdots, \vec v_d$ 使得 $\set{\vec v_1, \vec v_2, \cdots, \vec v_d}$ 是 $\R^d$ 的一组单位正交基 335 | 336 | 那么对于任意的单位向量 $\vec v\in\R^d, \norm{\vec v}_2 = 1$,我们在以上的单位正交基下进行分解,设分解成 $\vec v = \sum_{i = 1}^d\alpha_i\vec v_i$,其中 $\alpha_i = \left\langle \vec v, \vec v_i\right\rangle$ 337 | 338 | 则 339 | $$ 340 | (A - A_k)\vec v = \qty(\sum_{i = k + 1}^r\sigma_i\vec u_i\vec v_i^\intercal)\qty(\sum_{j = 1}^r\alpha_i\vec v_j) = \sum_{i = k + 1}^r\alpha_i\sigma_i\vec u_i\\ 341 | \begin{aligned} 342 | \norm{(A - A_k)\vec v}_2 &= \norm{\sum_{i = k + 1}^r\alpha_i\sigma_i\vec u_i}_2 \\&= \sqrt{\sum_{i = k + 1}^r\alpha_i^2\sigma_i^2}\\&\leq\sqrt{\sum_{i = k + 1}^r\alpha_i^2\sigma_{k + 1}^2} \\&= \sigma_{k + 1}\sqrt{\sum_{i = k + 1}^r\alpha_i^2}\\&\leq\sigma_{k + 1}\sqrt{\sum_{i = 1}^d\alpha_i^2} \\&= \sigma_{k + 1} 343 | \end{aligned} 344 | $$ 345 | 而且观察到 $\vec v = \vec v_{k + 1}$ 时上式中的不等号全部都可以变成等于号,这就表明 $\norm{A - A_k}_2 = \max_{\norm{\vec v}_2 = 1}\norm{A\vec v}_2 = \sigma_{k + 1}$ 346 | 347 | **定理:**对于任意秩不超过 $k$ 的矩阵 $B$,$\norm{A - A_k}_2\leq \norm{A - B}_2$ 348 | 349 | **证明:**如果 $\text{rank}(A)\leq k$,则 $A = A_k$,即 $\norm{A - A_k}_2 = 0$,定理自然成立 350 | 351 | 如果 $\text{rank}(A) > k$,考虑 $B$ 的零空间 ${\rm Null}(B) = \set{\vec v \mid B\vec v = 0}$。由零空间与行空间互为正交补知 $\dim({\rm Null}(B))= d - {\rm rank}(B)\geq d - k$ 352 | 353 | 考虑 $A$ 的前 $k + 1$ 个奇异向量张成的空间 ${\rm span}\set{\vec v_1, \vec v_2, \cdots, \vec v_{k + 1}}$,这是一个 $k + 1$ 维线性子空间,其必不与 ${\rm Null}(B)$ 正交 354 | 355 | > 如果正交,则它们可以一起张成一个 $\dim\qty({\rm span}\set{\vec v_1, \vec v_2, \cdots, \vec v_{k + 1}}) + \dim\qty({\rm Null}(B))\geq d + 1$ 维的 $\R^d$ 子空间,这是荒谬的 356 | 357 | 所以 ${\rm Null}(B)\cap {\rm span}\set{\vec v_1, \vec v_2, \cdots, \vec v_{k + 1}}$ 是 $\R^d$ 一个维数大于等于 $1$ 的线性子空间,所以存在一个单位向量 $\vec z\in \R^d, \norm{\vec z}_2 = 1$ 满足 $\vec z\in{\rm Null}(B)$ 且 $\vec z\in{\rm span}\set{\vec v_1, \vec v_2, \cdots, \vec v_{k + 1}}$。因为 $\vec z\in {\rm Null}(B)$,所以 $B\vec z = \vec 0$。因为 $\vec z\in{\rm span}\set{\vec v_1, \vec v_2, \cdots, \vec v_{k + 1}}$,所以存在 $\alpha_1, \alpha_2, \cdots, \alpha_{k + 1}\in\R$ 满足 $\vec z = \sum_{i = 1}^{k + 1}\alpha_i\vec v_i$;因为 $\set{\vec v_1, \vec v_2, \cdots, \vec v_{k + 1}}$ 两两正交,所以由勾股定理知 $\sum_{i = 1}^{k + 1}\alpha_i^2 = \norm{\vec z}_2^2 = 1$。所以: 358 | $$ 359 | \begin{aligned} 360 | \norm{(A - B)\vec z} &= \norm{A\vec z - B\vec z} \\&= \norm{A\vec z} \\&= \norm{\qty(\sum_{i = 1}^r\sigma_i\vec u_i\vec v_i^\intercal)\qty(\sum_{i = 1}^{k + 1}\alpha_i\vec v_i)}\\ 361 | &= \norm{\sum_{i = 1}^{k + 1}\alpha_i\sigma_i\vec u_i}\\ 362 | &= \sqrt{\sum_{i = 1}^{k + 1}\alpha_i^2\sigma_i^2}\\ 363 | &\geq \sqrt{\sum_{i = 1}^{k + 1}\alpha_i^2\sigma_{k + 1}^2}\\ 364 | &= \sigma_{k + 1}\sqrt{\sum_{i = 1}^{k + 1}\alpha_i^2}\\ 365 | &= \sigma_{k + 1}\\ 366 | &= \norm{A - A_k}_2 367 | \end{aligned} 368 | $$ 369 | 370 | > 上式所使用的技巧与证明引理非常类似 371 | 372 | 所以 $\norm{A - B}_2 = \max_{\norm{\vec v}_2 = 1}\norm{(A - B)\vec v}\geq \norm{(A - B)\vec z} = \norm{A - A_k}_2$,定理成立 373 | 374 | ### 幂法 375 | 376 | 上文中描述了奇异值分解的重要性,所以本节给出一个计算奇异向量的方法。对于这个问题,有复杂度为 $O(nd\min(n, d))$ 的算法能求得精确解,但是这个复杂度对于大数据规模来说太高了,这里介绍一种近似算法。 377 | 378 | 我们首先尝试计算 $\vec v_1$。回忆上节课的内容:矩阵 $A$ 的右奇异向量都是矩阵 $B = A^\intercal A$ 的特征向量,奇异值是对应特征值的算术平方根。更进一步地,可以归纳证明: 379 | $$ 380 | B = A^\intercal A = \qty(\sum_{i = 1}^r\sigma_i\vec v_i\vec u_i^\intercal)\qty(\sum_{j = 1}^r\sigma_j\vec u_j\vec v_j^\intercal) = \sum_{i = 1}^r\sigma_i^2\vec v_i\vec v_i^\intercal\\ 381 | B^2 = \qty(\sum_{i = 1}^r\sigma_i^2\vec v_i\vec v_i^\intercal)\qty(\sum_{j = 1}^r\sigma_j^2\vec v_j\vec v_j^\intercal) = \sum_{i = 1}^r\sigma_i^4\vec v_i\vec v_i^\intercal\\ 382 | \vdots\\ 383 | B^k = \sum_{i = 1}^r\sigma_i^{2k}\vec v_i\vec v_i^\intercal 384 | $$ 385 | 前文奇异值的定义中有 $\sigma_1\geq\sigma_2\geq\cdots\geq\sigma_r$。倘若 $\sigma_1 > \sigma_2$,则 $\sigma_1 > \sigma_2\geq\sigma_i\forall2\leq i\leq r$。当 $k$ 充分大时,$\qty(\frac{\sigma_i}{\sigma_1})^k\approx 0\forall 2\leq i\leq r$,所以从直觉上有 $B^k= \sigma_1^{2k}\qty(\vec v_1\vec v_1^\intercal + \sum_{i = 2}^r\qty(\frac{\sigma_i}{\sigma_1})^k\vec v_i\vec v_i^\intercal)\approx \sigma_1^{2k}\vec v_1\vec v_1^\intercal$,而 $\sigma_1^{2k}\vec v_1\vec v_1^\intercal$ 的第一列是 $\vec v_1$ 的 $\sigma_1^{2k}v_{1,1}$ 倍,这里 $v_{1,1}$ 是 $\vec v_1$ 的第一个分量。再考虑到 $\vec v_1$ 是一个单位向量,我们可以得到一个简易的算法: 386 | 387 | 1. 计算 $B = A^\intercal A$ 388 | 2. 找一个充分大的 $k$,计算 $B^k$ 389 | 3. 取出 $B$ 的第一列 $\vec b$,输出 $\vec b /\norm{\vec b}$。 390 | 391 | 但计算 $B^k$ 的代价是昂贵的。为了避免直接计算完整矩阵的幂,我们可以随机取一个向量 $\vec x_0\in\R^d$,然后依次计算 $\vec x_1 = B\vec x_0,$ $\vec x_2 = B\vec x_1,$ $\cdots,$ $\vec x_k = B\vec x_{k - 1}$,最后输出 $\vec x_k / \norm{\vec x_k}$。 392 | 393 | 先对这个算法做一个粗糙的分析。首先,归纳有 $\vec x_k = B^k\vec x_0$。其次,我们将 $\vec x$ 在基 $\text{span}\set{\vec v_1, \vec v_2, \cdots, \vec v_d}$ 下表示成 $\vec x = \sum_i \alpha_i\vec v_i$,便有 $B^k\vec x = \qty(\sum_i\sigma_i^{2k}\vec v_i\vec v_i^\intercal)\qty(\sum_i\alpha_i\vec v_i) = \sum_i\sigma_i^{2k}\alpha_i\vec v_i\approx\sigma_1^{2k}\alpha_1\vec v_1$ 是 $\vec v_1$ 的常数倍 394 | 395 | ### 对幂法的分析 396 | 397 | **定理:** 398 | 399 | 设 $A\in\R^{n\times d},$ $\epsilon\in(0, 1)$ 400 | 401 | 假设 $\vec x\in\R^d$ 是一个单位向量,且 $\abs{\left\langle\vec x, \vec v_1\right\rangle}\geq \delta > 0$ 402 | 403 | 设 $\vec v_1, \vec v_2, \cdots, \vec v_r$ 是 $A$ 的奇异向量,其对应的奇异值 $\sigma_1\geq \sigma_2\geq \cdots \geq \sigma_r$。设 $V = {\rm span}\set{\vec v_1, \vec v_2, \cdots, \vec v_m}$,其中 $m$ 满足 $\sigma_m \geq (1 - \epsilon)\sigma_1 > \sigma_{m + 1}$ 404 | 405 | > 也就是说 $V$ 是 $A$ 中非常接近最大奇异值的右奇异向量所张成的空间 406 | 407 | 设 $k = \frac{\ln{1/\qty(\varepsilon\delta)}}{2\epsilon}$,设 $\vec w = \frac{B^k\vec x}{\norm{B^k\vec x}}$ 408 | 409 | > $\vec w$ 是上文提到的幂法得到的向量 410 | > 411 | > 不好意思,记号不太够用了,这里 $\epsilon$ 和 $\varepsilon$ 看成两个不同的变量 412 | 413 | 那么 $\vec w$ 中垂直于 $V$ 的分量至多为 $\varepsilon$ 414 | 415 | > 也就是说 $\vec w$ 几乎都在 $V$ 中 416 | > 417 | > 如果 $\sigma_1 > \sigma_2$,当 $\epsilon < 1 - \sigma_2 / \sigma_1$ 的时候,$V$ 就是 $\vec v_1$ 张成的向量,$\vec w$ 几乎都在 $V$ 中就表明幂法在足够多的迭代了之后能得到最大的奇异向量 418 | > 419 | > 这个定理也能保证 $\sigma_1 = \sigma_2$ 的时候算法可以求得最大特征值。假设 $\sigma_1 = \sigma_2 = \cdots = \sigma_{m'} > \sigma_{m' + 1}$,那么在这个定理中取 $\epsilon = 1 - \sigma_{m' + 1}/\sigma_{m'}$,定理可以保证幂法得到的向量基本上可以写成 $\vec v_1, \vec v_2, \cdots, \vec v_{m'}$ 的线性组合,而奇异值相等的右奇异向量线性组合依然是该奇异值对应的右奇异向量,这是因为左奇异向量两两正交 420 | 421 | **证明:** 422 | 423 | > 我们的目标是估计当 $k$ 充分大时 $B^k\vec x$ 中各分量的大小 424 | 425 | 将 $A$ 奇异值分解:$A = \sum_{i = 1}^r\sigma_i\vec u_i\vec v_i^\intercal = \sum_{i = 1}^d\sigma_i\vec u_i\vec v_i^\intercal$,这里需要用到前文中将奇异向量补齐成完整 $\R^d$ 单位正交基的技巧。在这组基上展开 $\vec x = \sum_{i = 1}^d\alpha_i\vec v_i$ 426 | 427 | 回忆前文中提到 $B^k = \sum_{i = 1}^d\sigma_i^{2k}\vec v_i\vec v_i^\intercal$,所以 $B^k\vec x = \sum_{i = 1}^d\sigma_i^{2k}\alpha_i\vec v_i$。由柯西不等式: 428 | $$ 429 | \norm{B^k\vec x}_2^2 = \norm{\vec v_1}_2^2\norm{B^k\vec x}_2^2\geq\left\langle\vec v_1, B^k\vec x\right\rangle^2 = \qty(\sigma_1^{2k}\alpha_1)^2 = \sigma_1^{4k}\alpha_1^2 430 | $$ 431 | 回忆起定义中 $\sigma_m \geq(1 - \epsilon)\sigma_1 > \sigma_{m + 1}$,可以给 $B^k\vec x$ 垂直于 $V = {\rm span}\set{\vec v_1, \vec v_2, \cdots, \vec v_m}$ 的分量长度估计一个上界: 432 | $$ 433 | \norm{\sum_{i = m + 1}^d\sigma_i^{2k}\alpha_i\vec v_i}_2^2 = \sum_{i = m + 1}^d\sigma_i^{4k}\alpha_i^2\leq(1 - \epsilon)^{4k}\sigma_1^{4k}\sum_{i = m + 1}^d\alpha_i^2\leq(1 - \epsilon)^{4k}\sigma_1^{4k} 434 | $$ 435 | 再回忆先前的假设中有 $\left\langle\vec x, \vec v_1\right\rangle\geq\delta$,可以得到 $\alpha_1\geq\delta$,这表明: 436 | $$ 437 | \qty(\frac{\norm{\sum_{i = m + 1}^d\sigma_i\alpha_i\vec v_i}_2}{\norm{B^k\vec x}_2})^2\leq\frac{(1 - \epsilon)^{4k}\sigma_1^{4k}}{\sigma_1^{4k}\delta^2} = \frac{(1 - \epsilon)^{4k}}{\delta^2}\leq\frac{e^{-\epsilon\cdot 4k}}{\delta^2} 438 | $$ 439 | 440 | > 最后一个不等号成立是因为 $1 - \epsilon\leq e^{-\epsilon}$ 恒成立 441 | 442 | 代入定理中给定的 $k = \frac{\ln\frac1{\varepsilon\delta}}{2\epsilon}$,证毕 443 | 444 |
445 | 446 | 最后说一下如何选取一个合适的初始向量 $\vec x$——选择一个随机向量即可。具体来说,先从正态分布 $N(0, 1)$ 中独立地进行 $d$ 次采样 $x_1, x_2, \cdots, x_d$,然后取 $\vec x = \begin{bmatrix}\frac{x_1}{\sqrt{\sum_{i = 1}^dx_i^2}}\\\frac{x_2}{\sqrt{\sum_{i = 1}^dx_i^2}}\\\vdots\\\frac {x_d}{\sqrt{\sum_{i = 1}^dx_i^2}}\end{bmatrix}$ 447 | 448 | ### 计算前 $k$ 个奇异向量 449 | 450 | 计算前 $k$ 个奇异向量的方法通常是启发式的,很难得到一个有很强理论保证的算法(正如一般 5 次以上多项式方程没有初等公式解一样)。这里不加分析地给出两个启发式算法: 451 | 452 | **算法 1:** 453 | 454 | 1. 随机选取一个向量 $\vec r$,同时计算 $B = A^\intercal A$ 455 | 456 | 2. 初始化 $\vec u_1\gets \vec r, \vec u_2\gets B\vec r, \cdots, \vec u_k\gets B^{k - 1}r$ 457 | 458 | 3. 不断重复本步骤,直到收敛: 459 | * 对 $\set {\vec u_1, \vec u_2, \cdots, \vec u_k}$ 使用 Gram-Schmidt 正交化方法得到一组单位正交基 $\set{\vec v_1, \vec v_2, \cdots, \vec v_k}$ 460 | * 令 $\vec u_1\gets B\vec v_1,$ $\vec u_2\gets B\vec v_2,$ $\cdots,$ $\vec u_k\gets B\vec v_k$ 461 | 462 | **算法 2:** 463 | 464 | 1. 初始化:随机选择一个矩阵 $V\in\R^{d\times k}$ 满足 $V^\intercal V = I_k$,即 $V$ 的列向量是两两正交的 $\R^d$ 中单位向量 465 | 2. 不断重复本步骤,直至收敛: 466 | 1. $Z\gets BV$ 467 | 2. 对 $Z$ 进行 **QR 分解**,即找到一个 $Q\in\R^{d\times k}, R\in\R^{k\times k}$ 满足 $Q^\intercal Q = I_k$、$R$ 是上三角阵且 $Z = QR$ 468 | 3. $V\gets Q$ 469 | 470 | ### SVD 的应用 471 | 472 | #### 主成分分析 473 | 474 | 奇异值分解找到的是最佳 $k$ 维子空间近似,而子空间一定是过原点的,不总是能对数据进行很好的近似,例如下图: 475 | 476 | ![](pic/2_2_pca.png) 477 | 478 | 为了分析数据的 **主成分**,我们对奇异值分解的算法稍加修改: 479 | 480 | **算法:** 481 | 482 | 输入:$A' = \qty(a'_{ij})_{n\times d}\in\R^{n\times d}$ 483 | 484 | 1. 设 $A = \qty(a'_{ij} - \overline{a'_j})_{n\times d}$,其中 $\overline{a_j'} = \frac 1n\sum_{i = 1}^na_{ij}'$ 485 | 2. 计算 $A$ 的奇异值分解 486 | 487 | > 算法的第一步将每一个元素减去其所在列的平均值,也就是说第一步结束后每一列的和为 $0$ 488 | 489 | $A'$ 的主方向就是 $A$ 的各个奇异向量 490 | 491 | #### 插播几条概率论基础 492 | 493 | 对于任意给定的随机事件 $E_1, E_2, \cdots, E_n$,无论它们是否独立,均有 494 | $$ 495 | \Pr\qty[\bigcup_{i = 1}^nE_i] \leq \sum_{i = 1}^n\Pr\qty[E_i]\\ 496 | \Pr\qty[\bigcup_{i = 1}^nE_i] = \sum_{i = 1}^n\Pr(E_i)\iff E_i\cap E_j = \varnothing\forall i\neq j 497 | $$ 498 | 随机变量的期望满足线性可加性。对于任意随机变量 $X$ 与 $Y$,无论它们是否独立,均有 499 | $$ 500 | \mathbb E\qty[X + Y] = \mathbb EX + \mathbb EY 501 | $$ 502 | 如果随机变量 $X$ 与 $Y$ 独立,那么 503 | $$ 504 | \mathbb E\qty[XY] = \mathbb EX\cdot\mathbb EY\\ 505 | {\rm Var}[X+Y] = {\rm Var}[X]+{\rm Var}[Y] 506 | $$ 507 | 下面给出三个被称为 *集中界* (Concentration Bound) 的概率不等式,这些不等式表明一些随机变量在它们期望附近的概率 508 | 509 | **马尔可夫不等式:**设 $X$ 是任一取值非负的随机变量,则对于任意的正实数 $t$,均有 510 | $$ 511 | \Pr\qty[X\geq t]\leq \frac{\mathbb EX}t 512 | $$ 513 | **切比雪夫不等式:**设 $X$ 是任一随机变量,则对于任意的实数 $t$,均有 514 | $$ 515 | \Pr\qty[\abs{X - \mathbb E[X]} \geq t]\leq\frac{{\rm Var}[X]}{t^2}\\ 516 | $$ 517 | **Chernoff - Hoeffding Bounds:**设 $X_1, X_2, \cdots, X_n$ 是独立的随机变量,且 $X_i\in[0, 1]$。设 $X = \sum_{i = 1}^nX_i$,则 518 | $$ 519 | \Pr\qty[X > \mathbb E[X] + a]\leq\exp(-2a^2/n)\\ 520 | \Pr\qty[X < \mathbb E[X] - a]\leq\exp(-2a^2/n)\\ 521 | \Pr\qty[X > (1 + \epsilon)\mathbb E[X]]\leq\exp\qty(-\frac{\mathbb E[X]\epsilon^2}3)\\ 522 | \Pr\qty[X < (1 - \epsilon)\mathbb E[X]]\leq\exp\qty(-\frac{\mathbb E[X]\epsilon^2}3) 523 | $$ 524 | 再复习一下高斯分布 $N(\mu, \sigma^2)$ 的性质: 525 | 526 | * 取值范围是 $(-\infty, +\infty)$ 527 | * 密度函数是 $p(x) = \frac1{\sqrt{2\pi}\sigma}\exp(-\frac 12\cdot\qty(\frac{x - \mu}{\sigma})^2)$ 528 | * 期望是 $\mu$ 529 | * 方差是 $\sigma$ 530 | * 若 $X, Y$ 独立,且 $X\sim N(\mu_1, \sigma_1^2), Y\sim N(\mu _2, \sigma_2^2)$,则 $X + Y\sim N(\mu_1 + \mu_2, \sigma_1 + \sigma_2^2)$ 531 | 532 | $d$ 维高斯球分布指的是一个 $d$ 维的随机向量 $\vec X$,其各分量独立,且 $X_i\sim N(\mu_i, \sigma^2)$。此时它的密度函数为 533 | $$ 534 | p(\vec x) = (2\pi)^{-d/2}\sigma^{-d}\exp(-\frac{\norm{\vec x - \vec \mu}_2^2}{2\sigma^2}) 535 | $$ 536 | 如果 $\sigma = 1, \mu = 0$,那么我们称它为标准的 $d$ 维高斯球分布,方差为 $1$,均值为 $0$ 537 | 538 | #### 对高斯球分布的混合分布进行聚类划分 539 | 540 | 设 $p_1, p_2, \cdots, p_k$ 是 $k$ 个分布的密度函数,$w_i > 0, \sum_{i = 1}^kw_i = 1$,则 $f = \sum_{i = 1}^kw_ip_i$ 是它们一个**混合分布**的密度函数 541 | 542 | 现在假设 $p_1, p_2, \cdots, p_k$ 是 $k$ 个不同的高斯球分布,其方差相同。我们知道 $f$ 是关于它们的混合分布,但是我们不知道权重 $w_i$ 和 $p_i$ 参数 $\vec \mu_i$ 的具体值,现在我们需要把 $p_i$ 给学出来 543 | 544 | 第一步是抽样,从这个混合分布中抽取 $n$ 个样本。我们可以用两种方法解释这些样本: 545 | 546 | * 每个样本是根据密度函数 $f$ 抽样而来的 547 | * 我们首先以 $w_i$ 的概率抽取标签 $i$,再从密度函数 $p_i$ 中抽取样本 548 | 549 | 为了还原 $p_i$,我们先还原这 $n$ 个样本的标签,再根据每个标签内的样本对 $p_i$ 进行还原。也就是说,我们需要将这 $n$ 个样本的划分称 $k$ 个聚类 $C_1, C_2, \cdots, C_k$,其中聚类 $C_i$ 是我们认为标签是 $i$ 的样本 550 | 551 | 我们假定 $p_1, p_2, \cdots, p_k$ 两两间隔很远,也就是表明同一聚类中的点距离大概率比较近,不同聚类中的点距离大概率比较远。我们不难设计出如下“算法”: 552 | 553 | 1. 以某种方法生成一个阈值 $t$ 554 | 2. 对于每一对样本 $\vec x, \vec y$,计算它们的距离 $\norm{x - y}_2$。如果 $\norm{x - y}_2\leq t$,那么将 $x$ 与 $y$ 放到同一聚类中 555 | 556 | 到底分布之间要间隔多远才能使用以上算法呢?我们首先研究一下高斯球分布的性质: 557 | 558 | * 如果 $\vec X, \vec Y$ 是同一高斯球分布 $N(\vec\mu, \sigma)$ 的两个独立随机变量,那么 $\norm{\vec X - \vec Y}_2^2\approx 2\qty(\sqrt d + \order{1})^2\sigma^2$ 559 | * 如果 $\vec X, \vec Y$ 是方差相同但期望不同的高斯球分布的两个独立随机变量,设 $\vec X\sim N(\vec \mu_1, \sigma), \vec Y\sim N(\vec \mu_2, \sigma)$,记 $\Delta = \norm{\vec \mu_2 - \vec \mu_1}_2$,则 $\norm{\vec X - \vec Y}_2^2\approx 2(\sqrt d + \order{1})^2\sigma^2 + \Delta^2$。 560 | 561 | 如果希望后者稳定大于前者,那么: 562 | $$ 563 | 2\qty(\sqrt{d} + \order{1})^2\sigma^2 + \Delta^2\geq 2\qty(\sqrt{d} + \order{1})^2\sigma^2\\ 564 | \Delta^2 \geq \qty(4\sqrt d\order{1} + 2\order{1} - 4\sqrt{d}\order{1} - 2\order{1})\sigma^2\\ 565 | \Delta\geq \sqrt{\sqrt d\order{1}\sigma^2} = \order{1}d^{1/4}\sigma 566 | $$ 567 | 也就是表明存在常数 $c$,使得对于任意的 $d\in \N_+$,当距离最近的两个高斯球分布的球心距离 $\Delta \geq cd^{1/4}\sigma$ 时以上算法性能比较好 568 | 569 | 如果我们可以将 $d$ 维数据投影到 $d'$ 维,那么只要投影后的高斯球分布球心距离 $\Delta'\geq c{d'}^{1/4}\sigma$ 的时候之前的算法的性能就会比较好。也就是说,如果这个投影满足高斯球球心的距离($\Delta$ 与 $\Delta'$ 之间)变化不大,但是维数变化($d$ 与 $d'$ 之间)变化比较大,投影后再使用这个算法性能将会提升。当确定要降低到 $d'$ 维的时候,为了尽量减小 $\Delta$ 的变化,一个很自然的想法是让点在投影前后位置的变化尽可能小,也就是每个点都要与这个被投影的 $d'$ 维子空间尽可能近,也就是将这些点投影到 *最适合* 的 $d'$ 维线性子空间上,使用奇异值分解。这样就能设计出如下算法: 570 | 571 | 1. 抽取 $n$ 个样本 572 | 2. 使用 SVD 将这 $n$ 个样本从 $d$ 维降低为 $k$ 维 573 | 3. 以某种方式生成一个阈值 $t$ 574 | 4. 将所有距离小于 $t$ 的点加入同一聚类 575 | 576 | > 我们假设 $k\ll d$,这是因为 $k$ 通常是数据集中标签的个数,而 $d$ 是数据集的维数。以 MNIST 数据集举例,它的维数 $d = 784$,标签个数 $k = 10$ 577 | 578 | “定理”:如果这 $k$ 个高斯球分布两两球心距离最小值 $\Delta_{\min}\geq ck^{1/4}\sigma$,则以至少 $1 - n^{-c}$ 的概率以上算法可以正确地对这 $n$ 个数据分类 579 | 580 | 这个“定理”成立的主要原因是: 581 | 582 | * 抽取的样本越多,样本越能逼近概率密度函数 583 | * 对于 $k$ 个高斯球分布的混合分布,其 *最合适* 的 $k$ 维子空间过这 $k$ 个球的球心 584 | * 将 $d$ 维高斯球 $N^d(\vec \mu, \sigma^2)$ 投影到 $d'$ 维得到一个方差相同的高斯球 $N^{d'}(\vec\mu', \sigma^2)$ 585 | 586 | > 什么是概率分布的最合适子空间呢?以最合适一维子空间举例。奇异值分解中我们有最合适的一维子空间的基向量 $\vec v_1$ 为 587 | > $$ 588 | > \vec v_1 = \arg\max_{\norm{\vec v}_2 = 1}\norm{A\vec v}_2 = \arg\max_{\norm{\vec v}_2 = 1}\frac{\norm{A\vec v}_2^2}n 589 | > $$ 590 | > 这是使得 $A$ 中 $n$ 条数据投影长度的平均值最大的向量 591 | > 592 | > 对于概率分布 $P$,它最合适的的一位子空间的基向量自然而然可以定义成: 593 | > $$ 594 | > \vec v_1 = \arg\max_{\norm{\vec v}_2 = 1}\mathbb E_{\vec X\sim P}\abs{\left\langle \vec X, \vec v\right\rangle}^2 595 | > $$ 596 | 597 | ## 随机投影 598 | 599 | ### JL 引理与证明 600 | 601 | 从上面的例子中,我们可以体会到:一个好的降维投影需要能很好地保持数据集中点与点之间的距离。本节内容将以找到这样的一个投影为目标。这一节中我们会假定 $d$ 很大,数据集非常需要降维,具体来说是 $d\gg \log n$ 602 | 603 | **引理(Johnson-Lindenstrauss):**对于任意的 $0 < \epsilon < 1$ 与 $n\in\N_+$,设 $k\in \left[\frac{3\ln n}{c\epsilon^2},\frac{d}{25\epsilon^2}\right)$ 是一个正整数,$c = \frac 15$。对于任意的 $n$ 个 $\R^d$ 中的点,随机取 $k$ 个 $d$ 维向量 $\vec u_1, \vec u_2, \cdots, \vec u_k\sim N^d(\vec 0, 1)$ 服从标准的高斯球分布。定义如下从 $\R^d\to\R^k$ 的投影 604 | $$ 605 | f(\vec a) = \frac 1{\sqrt k}\begin{bmatrix}\left\langle\vec a, \vec u_1\right\rangle & \left\langle\vec a, \vec u_2\right\rangle & \cdots &\left\langle\vec a, \vec u_k\right\rangle \end{bmatrix}^\intercal 606 | $$ 607 | 则以至少 $1 - \frac 1n$ 的概率,对于任意的点对 $\vec a_i, \vec a_j$ 608 | $$ 609 | (1 - \epsilon)\norm{\vec a_i - \vec a_j}_2\leq \norm{f(\vec a_i) - f(\vec a_j)}_2\leq(1 + \epsilon)\norm{\vec a_i - \vec a_j}_2 610 | $$ 611 | 612 | 以上命题的一个等价形式是:定义随机投影 613 | $$ 614 | F(\vec a) = \begin{bmatrix}\left\langle\vec a, \vec u_1\right\rangle & \left\langle\vec a, \vec u_2\right\rangle & \cdots &\left\langle\vec a, \vec u_k\right\rangle \end{bmatrix}^\intercal 615 | $$ 616 | 则以至少 $1 - \frac 1n$ 的概率,对于任意的点对 $\vec a_i, \vec a_j$ 617 | $$ 618 | (1 - \epsilon)\sqrt k\norm{\vec a_i - \vec a_j}_2\leq \norm{F(\vec a_i) - F(\vec a_j)}_2\leq(1 + \epsilon)\sqrt k\norm{\vec a_i - \vec a_j}_2 619 | $$ 620 | 621 | > 回忆起高斯球分布的每一维都是独立的高斯分布,所以原命题等价于: 622 | > 623 | > $F\in\R^{k\times d}$ 是一个随机矩阵,每一个元素都是独立的高斯分布 $N(0, 1)$ 的样本,而随机投影映射就是矩阵乘法 $F(\vec a) = F\vec a$ 624 | > 625 | > 原命题的 $c$ 比较令人迷惑。在我的表述中,$c = \frac 15$,也就是说投影到 $\left\lceil\frac{15\ln n}{\epsilon^2}\right\rceil$ 维时两点之间的距离从 *理论* 上几乎一定保持得很好。一些更强的结论要求 $c = \frac 1{96}$ 才能在 *理论* 上达到。如此巨大的常数使得对于实际应用中的 $d$,随机投影的目标维数 $k$ 可能比 $d$ 还要大才能给出数据集随机投影的 *理论* 保证(比如 MNIST 中的 $d = 784, n = 60000$,如果这里取 $\epsilon = 0.1$ 则需要投影到 $k = 3\times 10^5$ 维才能有理论保证) 626 | > 627 | > 但在工程实践中不一定要这么死板,JL 引理只是关于概率下界的,用了大量的放缩,即使维数少个几百倍,从 *实践* 上依然能有很好的结果。本命题的意义在于,对于任意的原数据维数 $d$,只要随机投影到大概 $\order{\left\lceil\frac{3\ln n}{c\epsilon^2}\right\rceil} = \order{\frac {\log n}{\epsilon^2}}$ 维,任意两点之间的距离就可以保持了。也就是说可以逐一增加随机投影的维数,直到距离保持特性比较好时停止,停止时投影的维数只有 $\order{\frac{\log n}{\epsilon^2}}$ 628 | 629 | 为了证明以上引理,我们先考虑证明以下命题: 630 | 631 | **定理:**设 $\vec a\in\R^d$ 是任意 $d$ 维实向量,$k$ 是小于 $\frac d{25\epsilon^2}$ 的任意正整数,随机投影映射 $F(\vec a)$ 和常数 $c$ 与先前的定义一样。则对任意 $0 < \epsilon < 1$ 632 | $$ 633 | \Pr\qty[\abs{\norm{F(\vec a)}_2 - \sqrt k\norm{\vec a}_2}\geq\epsilon\sqrt k\norm{\vec a}_2]\leq 2e^{-ck\epsilon^2} 634 | $$ 635 | 若以上定理得证,则 JL 引理得证。这是因为在以上不等式中代入 JL 引理中的假设 $k\geq \frac{\ln n}{c\epsilon^2}$,就对于任意的 $\vec a\in\R^d$ 均有 636 | $$ 637 | \Pr\qty[\abs{\norm{F(\vec a)}_2 - \sqrt k\norm{\vec a}_2}\geq \epsilon\sqrt k\norm{\vec a}_2]\leq 2e^{-ck\epsilon^2}\leq 2e^{-c\frac{3\ln n}{c\epsilon^2}\epsilon^2} = \frac 2{n^3} 638 | $$ 639 | 对于任意一对向量 $\vec a_i, \vec a_j$,将 $\vec a_i - \vec a_j$ 代入以上公式的 $\vec a$,有: 640 | $$ 641 | \begin{aligned} 642 | &\Pr\qty[\abs{\norm{F(\vec a_i) - F(\vec a_j)}_2 - \sqrt k\norm{\vec a_i - \vec a_j}_2}\geq \epsilon\sqrt k\norm{\vec a_i - \vec a_j}_2]\\ 643 | =\ &\Pr\qty[\abs{\norm{F(\vec a_i - \vec a_j)}_2 - \sqrt k\norm{\vec a_i - \vec a_j}_2}\geq \epsilon\sqrt k\norm{\vec a_i - \vec a_j}_2]\leq\frac 2{n^3} 644 | \end{aligned} 645 | $$ 646 | 647 | > 这里用到了 $F(\vec a_i) - F(\vec a_j) = F(\vec a_i - \vec a_j)$,因为 $F(\vec a_i) = F\vec a_i$ 是线性函数 648 | 649 | 设 $E_{ij}$ 表示 $\abs{\norm{F(\vec a_i) - F(\vec a_j)}_2 - \sqrt k\norm{\vec a_i - \vec a_j}_2}\geq \epsilon\sqrt k\norm{\vec a_i - \vec a_j}_2$ 这样一个事件,所以 $P\qty[E_{ij}]\leq \frac 2{n^3}$,所以 650 | $$ 651 | \Pr\qty[\bigcup_{1\leq i < j\leq n}E_{ij}]\leq\sum_{1\leq i < j\leq n}\Pr\qty[E_{ij}]\leq \binom n2\frac 2{n^3} < \frac 1n\\ 652 | \Pr\qty[\abs{\norm{F(\vec a_i) - F(\vec a_j)}_2 - \sqrt k\norm{\vec a_i - \vec a_j}_2} < \epsilon\sqrt k\norm{\vec a_i - \vec a_j}_2\forall 1\leq i < j\leq n] = \Pr\qty[\bigcap_{1\leq i < j\leq n}\overline{E_{ij}}] > 1 - \frac 1n 653 | $$ 654 | 这表明 JL 引理得证 655 | 656 | **定理(Gaussian Annulus):**设随机向量 $\vec X$ 服从 $d$ 维标准高斯球分布,对于任意 $\beta\leq\frac{\sqrt d}5$, 657 | $$ 658 | \Pr\set{\sqrt d - \beta\leq\norm{\vec X}_2\leq \sqrt d + \beta}\geq 1 - 2e^{-c\beta^2} 659 | $$ 660 | 若高斯环定理成立,则先前定理亦成立。先证明这一点。不失一般性,假设 $\norm{\vec a} = 1$,这样我们的证明目标就变成了 661 | 662 | $$ 663 | \Pr\qty[\abs{\norm{F(\vec a)}_2 - \sqrt k} > \epsilon\sqrt k]\leq 2e^{-ck\epsilon^2} 664 | $$ 665 | 666 | > 如果 $\norm{\vec a}_2\neq 1$,则取 $\vec a' = \frac{\vec a}{\norm{\vec a}}$,然后用 $\vec a'$ 代替 $\vec a$ 完成剩余证明 667 | 668 | 回忆起 669 | 670 | $$ 671 | F(\vec a) = \begin{bmatrix}\left\langle\vec a, \vec u_1\right\rangle & \left\langle\vec a, \vec u_2\right\rangle & \cdots &\left\langle\vec a, \vec u_k\right\rangle \end{bmatrix}^\intercal\\ 672 | \left\langle\vec a, \vec u_i\right\rangle = \sum_{j = 1}^da_ju_{ij}, u_{ij}\sim N(0, 1) 673 | $$ 674 | 675 | 再回忆正态分布的性质 676 | $$ 677 | X\sim N(\mu_1, \sigma_1^2), Y\sim N(\mu_2, \sigma_2^2) 678 | \implies X + Y\sim N(\mu_1 + \mu_2, \sigma_1^2 + \sigma_2^2) 679 | $$ 680 | 681 | 而 $u_{ij}$ 服从标准正态分布,期望为 $0$,方差为 $1$,所以 682 | $$ 683 | \left\langle \vec a, \vec u_i\right\rangle\sim N\qty(0, \sum_{j = 1}^da_j^2\cdot 1^2) = N\qty(0, \sum_{j = 1}^da_j^2) = N(0, 1) 684 | $$ 685 | 而 $\vec u_1, \vec u_2, \cdots, \vec u_k$ 是两两独立的,所以 $F(\vec a)$ 的各分量均独立服从正态分布。这样就可以使用高斯环定理。我们用 $k$ 来代替 $d$,然后用 $\epsilon\sqrt k$ 代替 $\beta$,用 $F(\vec a)$ 代替 $\vec X$,就有 686 | $$ 687 | \Pr\set{\sqrt k - \epsilon \sqrt k\leq\norm{F(\vec a)}_2\leq\sqrt k + \epsilon\sqrt k}\geq 1 - 2e^{-ck\epsilon^2}\\ 688 | \Pr\set{\abs{\norm{F(\vec a)}_2 - \sqrt k} > \epsilon\sqrt k} \leq 2e^{-ck\epsilon^2} 689 | $$ 690 | 691 | 进而目标命题得证 692 | 693 | 所以为了证明 JL Lemma,我们只需证明高斯环定理即可 694 | 695 | **证明:** 696 | 697 | 首先,观察到 $\vec X$ 是标准的 $d$ 维高斯球分布,也就是说 $X_1, X_2, \cdots, X_d$ 是服从 $N(0, 1)$ 的正态分布,所以 698 | $$ 699 | \mathbb E\qty[X_i^2] = 1\\ 700 | \mathbb E\qty[\sum_{i = 1}^dX_i^2] = d\\ 701 | \mathbb E\qty[\norm{\vec X}_2^2] = d\\ 702 | \norm{\vec X}_2^2\sim \chi^2_d(0, 1) 703 | $$ 704 | > 不过值得注意的是 $\mathbb E\qty[\norm{\vec X}_2] = \frac{\sqrt 2\Gamma\qty(\frac{d + 1}2)}{\Gamma\qty(\frac d2)}$ 而非 $\sqrt d$ 705 | 706 | 我们对高斯环定理的一些表述做一些转化。高斯环定理是估计某一事件的概率,我们首先对事件的表述进行等价转化: 707 | $$ 708 | \sqrt d - \beta\leq \norm{\vec X}_2\leq \sqrt d + \beta\\\iff \abs{\norm{\vec X}_2 - \sqrt d}\leq \beta\\\iff \abs{\norm{\vec X}_2^2 - d} = \abs{\norm{\vec X}_2 - \sqrt d}\qty(\norm{\vec X}_2 + \sqrt d)\leq \beta\qty(\norm{\vec X}_2 + \sqrt d) 709 | $$ 710 | 我们需要估算该事件概率的上界。其本身不是很好估算,我们考虑把它松弛一下,也就是估算一个比它更大的事件的概率: 711 | $$ 712 | \Pr\qty[\sqrt d - \beta\leq\norm{\vec X}_2\leq \sqrt d + \beta]\geq 1 - 2e^{-c\beta^2}\\ 713 | \iff \Pr\qty[\abs{\norm{\vec X}_2^2 - d} > \beta(r + \sqrt d)]\leq 2e^{-c\beta^2}\\ 714 | \impliedby \Pr\qty[\abs{\norm{\vec X}_2^2 - d} > \beta\sqrt d]\leq 2e^{-c\beta^2}\\ 715 | \impliedby \Pr\qty[\norm{\vec X}_2^2 > d + \beta\sqrt d]\leq e^{-c\beta^2}\wedge\Pr\qty[\norm{\vec X}_2^2 < d - \beta\sqrt d]\leq e^{-c\beta^2} 716 | $$ 717 | 这里需要用到这样一个事实:随机变量 $X$ 的矩母函数定义为 $M_X(t) = \mathbb E\qty[e^{tX}], t\in\R$。若 $X\sim N(0, 1)$,则 $M_X(t) = (1 - 2t)^{-\frac 12}$ 718 | 719 | 然后我们证明上面列出的最后一个命题的前一半。对于任意的 $\lambda\in\qty(0, \frac 1{10})$,我们有 720 | $$ 721 | \begin{aligned} 722 | \Pr\qty[X\geq d + \beta\sqrt d] &= \Pr\qty[e^{\lambda X}\geq e^{\lambda\qty(d + \beta\sqrt d)}]\\ 723 | &\leq \frac{\mathbb E\qty[e^{\lambda X}]}{e^{\lambda\qty(d + \beta\sqrt d)}} & \text{Markov's inequality}\\ 724 | &= \frac{\mathbb E\qty[e^{\lambda \sum_{i = 1}^dX_i^2}]}{e^{\lambda\qty(d + \beta\sqrt d)}}\\ 725 | &= \frac{\mathbb E\qty[\prod_{i = 1}^de^{\lambda X_i^2}]}{e^{\lambda\qty(d + \beta\sqrt d)}}\\ 726 | &= \frac{\prod_{i = 1}^d\mathbb E\qty[e^{\lambda X_i^2}]}{e^{\lambda\qty(d + \beta\sqrt d)}}\\ 727 | &= \frac{\prod_{i = 1}^d\mathbb E\qty[e^{\lambda X_i^2}]}{e^{\lambda\qty(d + \beta\sqrt d)}}\\ 728 | &= \frac{\qty(1 - 2\lambda)^{-\frac d2}}{e^{\lambda\qty(d + \beta\sqrt d)}}\\ 729 | &= \frac{e^{-\frac d2\ln(1 - 2\lambda)}}{e^{\lambda\qty(d + \beta\sqrt d)}}\\ 730 | &\leq \frac{e^{d\qty(\lambda + \lambda^2 + 2\lambda^3)}}{e^{\lambda\qty(d + \beta\sqrt d)}} & \ln(1 - x)\geq -x - \frac {x^2}2 - \frac{x^3}2\forall 0 < x < \frac 15\\ 731 | &= e^{d\qty(\lambda^2 + 2\lambda^3) - \lambda \beta\sqrt d} 732 | \end{aligned} 733 | $$ 734 | 对于任意的 $\lambda\in\qty(0, \frac 1{10})$ 上式都需要成立,为了给出强的约束我们取 $\lambda$ 使得上式右端尽可能小。联系到 $\beta\leq \frac{\sqrt d}5$ 知 $\frac{\beta}{\sqrt d}\in\qty(0, \frac15)$,表明我们可以将 $\lambda = \frac{\beta}{2\sqrt d}$ 即 $2\lambda = \frac\beta{\sqrt d}$ 代入上式,代入后得到 735 | $$ 736 | \Pr\qty[r^2\geq d + \beta\sqrt d]\leq e^{d\qty(\frac{\beta^2}{4d} + 2\frac{\beta^3}{8d^{3/2}}) - \frac{\beta}{2\sqrt d}\beta\sqrt d} = e^{-\qty(\frac{\beta^2}4 - \frac{\beta^3}{4\sqrt d})}\leq e^{-\frac{\beta^2}5} 737 | $$ 738 | 使用类似的方法,可以得到 739 | $$ 740 | \Pr\qty[r^2\leq d - \beta\sqrt d]\leq e^{-\frac{\beta^2}5} 741 | $$ 742 | 743 | 这便说明高斯环定理成立,进而说明 JL 引理成立 744 | 745 | ### JL 引理的性质 746 | 747 | * JL 引理给出 **所有** 点对距离保持不变的概率下界,大多数其他类似定理只能估计大多数点对距离不变的概率下界 748 | 749 | * JL 引理给出的随机投影引理维数 $k = \Omega\qty(\frac{\log n}{\epsilon^2})$,与原数据维数 $d$ 无关 750 | 751 | * JL 引理给出的随机投影矩阵每一维都是独立同分布的,而且与原始数据无关(不像某一矩阵的 SVD 是对该矩阵量身定制的) 752 | 753 | * JL 引理给出的随机投影算法时间复杂度为 $\Theta(ndk) = \Theta(nd\epsilon^{-2}\log n)$。投影每一条数据都需要 $\Theta(dk) = \Theta(d\epsilon^{-2}\log n)$ 的时间。一些工作将其改进为 $\order{d\log d + \frac{\log^{\order{1}}n}{\epsilon^2}}$ 754 | 755 | * 随机投影的矩阵中每个元素除了可以是正态分布以外,还可以是 756 | $$ 757 | \begin{cases} 758 | \Pr\qty[f_{ij} = 1] &= \frac 12\\ 759 | \Pr\qty[f_{ij} = -1] &= \frac 12 760 | \end{cases} 761 | , 762 | \begin{cases} 763 | \Pr\qty[f_{ij} = 1] &= \frac 16\\ 764 | \Pr\qty[f_{ij} = 0] &= \frac 23\\ 765 | \Pr\qty[f_{ij} = -1] &= \frac 16 766 | \end{cases} 767 | $$ 768 | 这时随机投影的维数还是 $\Omega\qty(\frac{\log n}{\epsilon^2})$ 769 | 770 | * 随机投影所需要的维数下界是 $\Omega\qty(\frac{\log n}{\epsilon^2})$,也就是说 JL 引理给出的随机投影维数已经是最优的了 771 | 772 | ## 最近邻搜索 773 | 774 | ### 问题描述 775 | 776 | 最近邻搜索问题需要维护一个数据集 $A$,数据集内包含 $n$ 个数据点 $\vec a_1, \vec a_2, \cdots, \vec a_n\in\R^d$。数据集同时还需要处理询问。每个询问输入一个 $\vec x\in\R^d$,数据集需要输出与 $\vec x$ 距离最近的点 777 | $$ 778 | \vec a^* = \arg\min_{\vec a\in\set{\vec a_i}}d(\vec x, \vec a) 779 | $$ 780 | 其中 $d$ 是一个距离函数,包括但不限于 781 | 782 | * 欧氏距离 $d(\vec x, \vec y) = \norm{\vec x - \vec y}_2 = \sqrt{\sum_{i = 1}^d(x_i - y_i)^2}$ 783 | * $l_1$ 范数距离 $d(\vec x, \vec y) = \norm{\vec x - \vec y}_1 = \sum_{i = 1}^d\abs{x_i - y_i}$ 784 | * 汉明距离 $d(\vec x, \vec y) = \norm{\vec x - \vec y}_0$,这边汉明距离一般定义在 $\mathbb F_2^d = \set{0, 1}^d$ 上,为 $\vec x$ 与 $\vec y$ 中不同的元素个数 785 | 786 | > 凡是满足以下性质的二元函数 $d(x, y)$ 均可被视作距离函数: 787 | > 788 | > * 对称性:$d(x, y) = d(y, x)$ 789 | > * 非负性:$d(x, y)\geq 0, d(x, y) = 0\iff x = y$ 790 | > * 三角不等式 :$d(x, y) + d(y, z)\geq d(x, z)$ 791 | > 792 | > $\mathbb F_2$ 是模 2 意义下的域:加法可以被视作异或,也就是 $0 + 0 = 1 + 1 = 0, 0 + 1 = 1 + 0 = 0$;乘法可以被视作与,也就是 $0\times x = 0, 1\times 1 = 1$ 793 | > 794 | > 在 $\mathbb F_2$ 上定义序关系比较别扭,也就是 $\mathbb F_2$ 上一般不定义 $>$ 之类的关系运算符。$\mathbb F_2^d$ 上的距离函数不是 $\mathbb F_2^d\times \mathbb F_2^d\mapsto \mathbb F_2$ 的,因为所有这样的函数与所有 $\mathbb F_2$ 上的偏序关系都不会满足距离函数的三条性质。这里汉明距离实际上是 $\mathbb F_2^d\times \mathbb F_2^d\mapsto \N$ 的。 795 | > 796 | > $\mathbb F_2^d$ 上的汉明距离实际上与 $\mathbb F_2^d$ 上的 $l_1$ 范数距离等价 797 | 798 | 解决这个问题一般分为两步: 799 | 800 | * 预处理这个数据集,存储在某种数据结构里 801 | * 对于每个输入 $\vec x$,在这个数据结构里查询 $\vec x$ 802 | 803 | 我们的目标是: 804 | 805 | * 查询的时间复杂度需要尽可能快,最好是 $\order{{\rm poly}(\log n, \log d)} = \order{\log^{\order{1}} n\log^{\order{1}} d}$,也就是时间上界是关于 $\log n$ 和 $\log d$ 的多项式 806 | * 空间复杂度要尽可能低。精确地存储这些数据至少需要 $nd\log\abs{a_{ij}}$ 比特的空间,也就是 $nd$ 个字,但是我们想达到的更低 807 | * 预处理时间是 $\order{{\rm poly}(n,d)}$ 808 | 809 | ### 精确解 810 | 811 | 一个非常朴素且暴力的做法是: 812 | 813 | 1. 直接存储所有数据 814 | 2. 查询时,直接检索所有数据并找到与询问最近的点 815 | 816 | 预处理复杂度 $\Theta(nd)$ 817 | 818 | 空间复杂度 $\Theta(nd)$ 个字 819 | 820 | 单次查询时间 $\Theta(nd)$ 821 | 822 |
823 | 824 | 当 $d = 1$ 的时候,所有的数据都在实数轴上,可以有一种特殊的做法 825 | 826 | 1. 将所有数据放在一棵自平衡二叉搜索树中 827 | 2. 查询时,在平衡树中检索它的最近邻 828 | 829 | 预处理复杂度 $\Theta(n\log n)$ 830 | 831 | 空间复杂度 $\Theta(n)$ 个字 832 | 833 | 单次查询时间 $\Theta(\log n)$ 834 | 835 | 当 $d > 1$ 的时候,可以类似地使用 [k-D Tree](https://oi-wiki.org/ds/kdt/)(一种摊还平衡树的高维扩展,暴力且繁琐)来维护数据,预处理复杂度为 $\Theta(nd\log n)$,空间复杂度为 $\Theta(nd)$ 个字,单次查询时间为 $\Theta(d\max(n^{1 - 1/d}, \log n))$ 836 | 837 | ### 近似解 838 | 839 | 对于点 $\vec x$ 与一个常数 $c > 1$,我们将数据集 $A$ 中所有与 $\vec x$ 相距不超过最近距离 $c$ 倍的点称为 $c$ 最近邻,也就是说如果 $\vec a_i\in A$ 满足 840 | $$ 841 | d(\vec x, \vec a_i)\leq c\min_{\vec a_j\in A}d(x, \vec a_j) 842 | $$ 843 | 则 $\vec a_i$ 是点 $\vec x$ 在数据集 $A$ 中的 $c-$近似最近邻($c-$Approximate Nearest Neighbor,以下简称 $c-$ANN),一个 $c-$ANN 算法只需要找到任一 $c-$ANN 844 | 845 | 对于点 $\vec x$ 与一个常数 $c > 1, r>0$,一个 $(c, r)-$ANN 算法满足: 846 | 847 | * 当 $\min d(\vec x, \vec a_j)\leq r$ 时一定需要返回某点 $\vec a_i$ 满足 $d(\vec x, \vec a_i)\leq cr$ 848 | * 当 $\min d(\vec x, \vec a_j) > r$ 的时候算法返回 *失败* 即可(当然也可以返回某个满足 $d(\vec x, \vec a_i)\leq cr$ 的点 $\vec a_i$) 849 | 850 | 如果我们能给出一个 $(c, r)-$ANN 算法,那么我们可以基于它给出一个 $c-$ANN 算法: 851 | 852 | * 预处理数据集时,计算出 $D_{\min} = \min_{\vec a_i\neq\vec a_j}d(\vec a_i, \vec a_j)$ 与 $D_{\max} = \max_{\vec a_i\neq \vec a_j}d(\vec a_i, \vec a_j)$。令 $r_i = c^{i/2}\frac{D_{\min}}{1 + c^{1/2}}, i = 0, 1, \cdots, \left\lfloor\log_c\frac{D_{\max}\qty(c^{1/2} + 1)}{D_{\min}\qty(c^{1/2} - 1)}\right\rfloor$,并对 $(c^{1/2}, r_0)-$ANN、$(c^{1/2}, r_1)-$ANN……预处理 853 | * 查询点 $\vec x$ 的 $c-$ANN 时,依次查询 $(c^{1/2}, r_0)-$ANN、$(c^{1/2}, r_1)-$ANN…… 854 | * 如果 $(c^{1/2}, r_i)-$ANN 给出了一个有效解而 $(c^{1/2}, r_0), (c^{1/2}, r_1), \cdots, (c^{1/2}, r_{i - 1})$ 均 *失败*,那么输出 $(c^{1/2}, r_i)-$ANN 的解 855 | * 如果所有的 $(c^{1/2}, r_*)-$ANN 都 *失败* 了,那么输出数据集 $A$ 中的任意一点 856 | 857 | 858 | 本节剩余内容将讨论解决 $(c, r)-$ANN 的算法。先前讲到的理论都是对各种数据集、各种距离通用的,但是剩余内容将锁定 $\mathbb F_2^d$ 上的汉明距离为目标 859 | 860 | ### 近似算法一:随机投影 861 | 862 | 本节将给出这样一个数据结构:空间复杂度为 $n^{\order{1}}$,查询时间 $\order{d\ln n}$,以高概率能解决 $\mathbb F_2^d$ 中 $d(\vec x, \vec y) = {\rm Ham}(\vec x, \vec y)$ $(c, r)-$ANN 问题(概率至少为 $1 - \frac 1{n^2}$) 863 | 864 | > 这里只需要考虑 $d \leq n$ 的情况,事实上在整个降维话题中我们都很少讨论 $d > n$ 的情况。$d > n$ 时可以通过 SVD 降维成 $d \leq n$ 865 | 866 | 预处理时需要: 867 | 1. 找出三个常数 $k, p, s$ 868 | 869 | 2. 独立采样出这样的一个随机矩阵 $U$ 870 | 871 | 3. 对于每个 $i\leq n$,计算 $\vec z_i = U\vec a_i$ 872 | 873 | 4. 对于每一个 $\vec u\in\mathbb F_2^k$,维护这样的一个球集: 874 | $$ 875 | B_S(\vec u) = \set{\vec a_i \mid {\rm Ham}(\vec u, U\vec a_i)\leq s} 876 | $$ 877 | 878 | 查询点 $\vec x\in\mathbb F_2^k$ 时: 879 | 880 | * 计算 $U\vec x$,并找到其所在集合 $B_s(U\vec x)$ 881 | * 如果 $B_S(U\vec x)$ 是空集,则返回“失败”,否则返回其中任意元素 882 | 883 | 可以看出它的空间复杂度为 $\order{2^knd}$,查询的时候需要做一次矩阵乘法,时间复杂度为 $\order{kd}$ 884 | 885 | 为了让它有一个好的复杂度与高的正确率,我们选择 886 | $$ 887 | k = \frac{\log_2 n}{\qty(\frac 18 - 2^{-c - 2})^2}, p = \frac 12 - 2^{-1 - \frac 1r}, s = \qty(\frac 38 - 2^{-c - 2})k 888 | $$ 889 | 以上算法正确性证明的思路是: 890 | 891 | 对于任意的 $\vec x,\vec y\in\mathbb F_2^d$,若记 $\qty(U\vec x)_i, \qty(U\vec y)_i$ 为 $U\vec x, U\vec y$ 中的第 $i$ 个元素,且记 892 | $$ 893 | X_i \triangleq \begin{cases} 1 & \qty(U\vec x)_i\neq \qty(U\vec y)_i\\0 & {\rm otherwise}\end{cases} 894 | $$ 895 | 则 896 | $$ 897 | {\rm Ham}\qty(U\vec x, U\vec y) = \sum_{i = 1}^kX_i 898 | $$ 899 | 先证明 900 | $$ 901 | \Pr\qty[\qty(U\vec x)_i\neq \qty(U\vec y)_i] = \frac 12\qty(1 - (1 - 2p)^{{\rm Ham}(x, y)}) 902 | $$ 903 | 然后可以使用 *集中不等式* 证明 904 | $$ 905 | {\rm Ham}\qty(\vec x, \vec y)\leq r\implies \Pr\qty[{\rm Ham}(U\vec x, U\vec y)\geq s]\leq e^{-\Omega(k)}\\ 906 | {\rm Ham}\qty(\vec x, \vec y) > cr\implies \Pr\qty[{\rm Ham}(U\vec x, U\vec y) < s] < e^{-\Omega(k)} 907 | $$ 908 | 909 | ### 近似算法二:局部敏感哈希 910 | 911 | #### 局部敏感哈希的定义与性质 912 | 913 | **定义(局部敏感哈希):**给定常数 $p_1, p_2\in(0, 1)$,如果一个随机函数 $h:\mathbb F_2^d\mapsto\mathbb F_2^k$ 满足以下两点: 914 | 915 | * 若 ${\rm Ham}(\vec x,\vec y)\leq r$,则 $\Pr\qty[h(\vec x) = h(\vec y)]\geq p_1$ 916 | * 若 ${\rm Ham}(\vec x, \vec y) > cr$,则 $\Pr\qty[h(\vec x) = h(\vec y)]\leq p_2$ 917 | 918 | 则 $h$ 被称作一个 **局部敏感哈希**(Locality Sensitive Hashing)函数 919 | 920 | > 也就是说我们希望距离近的点更倾向于哈希冲突 921 | 922 | 考虑这样的一类哈希函数(一个哈希函数集族): 923 | $$ 924 | \mathcal H = \set{ f : \mathbb F_2^d\mapsto \mathbb F_2^k\ \mid\ f(\vec p) = \begin{bmatrix}p_{j_1} & p_{j_2} & \cdots & p_{j_k}\end{bmatrix}^\intercal, j_1, j_2, \cdots, j_k\in\set{1, 2, \cdots, d} } 925 | $$ 926 | $\mathcal H$ 中的每个哈希函数都保留了输入 $\vec p$ 中 $k$ 个位置上的元素(可能重复)。我们设 $g$ 是一个关于 $\mathcal H$ 的一个随机函数 927 | 928 | > 这里指:当我们需要一个关于 $\mathcal H$ 的随机函数 $g$ 时,我们从 $\mathcal H$ 中等概率随机挑一个 $g$,然后 $g$ 就不会变了。一开始选择的时候 $g$ 时随机的,但是选定了之后无论多少次调用 $g$,$g$ 都不会改变 929 | 930 | 为了研究 $g$ 的性质,我们从 $g$ 的每一维下手,也就是把 $g$ 的每一维给拿出来。考虑随机哈希函数 $h:\mathbb F_2^d\mapsto \mathbb F_2$ 满足 $h(\vec p) = p_j$,其中 $j$ 是 $\set{1, 2, \cdots, d}$ 中的随机数 931 | 932 | > 这里指随机函数 $h$ 与这样的一个哈希函数集族关联 $\set{f : \mathbb F_2^d\mapsto \mathbb F_2\ \mid \ f(\vec p) = p_j, j\in\set{1, 2, \cdots, d}}$ 933 | 934 | 这样 $g$ 就是 $k$ 个无关的 $h$ 组成的向量。为了探究 $g$ 与 $h$ 的关系,我们定义局部敏感哈希函数的参数 $\rho = \frac{\log(1 / p_1)}{\log(1/p_2)} = \frac{\log p_1}{\log p_2}$ 935 | 936 | > 也就是说对于随机函数 $f$,如果存在 $p_{1, f}, p_{2, f}\in(0, 1)$ 满足那两个局部敏感哈希函数条件,那么 $\rho_f = \frac{\log(1/ p_1)}{\log(1/ p_2)}$ 就是 $f$ 的一个参数。但是显然 $p_{1, f}, p_{2, f}$ 不唯一,也就表明 $\rho$ 参数是不唯一的,本质上应被视作集合,但是本文提到 $\rho$ 实际上指的是 $\rho$ 的最大值,也就是 $p_{1, f}$ 要尽可能大,$p_{2, f}$ 要尽可能小 937 | > 938 | > 这个参数可以视作是凭空冒出来的——它恰好满足下面这个非常简洁的关系 939 | 940 | 下证明 $\rho_g = \rho_h$: 941 | $$ 942 | p_{1, g} = \Pr\qty[g(\vec p) = g(\vec q)] = \prod_{i = 1}^k\Pr\qty[h_i(\vec p) = h_i(\vec q)] = p_{1, k}^k\\ 943 | p_{2, g} = p_{2, k}^k\\ 944 | \rho_g = \frac{\log p_{1, g}}{\log p_{2, g}} = \frac{k\log p_{1, k}}{k\log p_{2, k}} = \rho_h 945 | $$ 946 | 接下来证明命题:$\rho_g = \rho_h\leq \frac 1c$ 947 | 948 | 证明:对于 $p, q\in\set{0, 1}^d$,有 949 | $$ 950 | \Pr\qty[h(\vec p) = h(\vec q)] = \frac{d - {\rm Ham}(\vec p, \vec q)}d = 1 - \frac{{\rm Ham}(\vec p, \vec q)}d 951 | $$ 952 | 953 | > 在 $\vec p$ 与 $\vec q$ 之间,有 ${\rm Ham}(\vec p, \vec q)$ 个分量不相同,而剩下的 $d - {\rm Ham}(\vec p, \vec q)$ 个分量相同。$h$ 是随机选择 $d$ 个分量中的某个,所以 $h(\vec p) = h(\vec q)$ 表明恰好选到了 $d - {\rm Ham}(\vec p, \vec q)$ 个分量之一,所以上式成立 954 | 955 | 如果 ${\rm Ham}(\vec p, \vec q)\leq r$,那么 $\Pr\qty[h_i(\vec p) = h_i(\vec q)]\geq 1 - \frac rd$,也就表明 $p_{1, h} = 1 - \frac rd$; 956 | 957 | 如果 ${\rm Ham}(\vec p, \vec q) > cr$,那么 $\Pr\qty[h_i(\vec p) = h_i(\vec q)] < 1 - \frac{cr}d$,也就表明 $p_{2, h} = 1 - \frac{cr}d$ 958 | 959 | 所以 960 | $$ 961 | \rho_g = \rho_h = \frac{\log p_{1, h}}{\log p_{2, h}} = \frac{\log\qty(1 - \frac rd)}{\log\qty(1 - \frac{cr}d)}\leq \frac 1c 962 | $$ 963 | 964 | #### 算法描述 965 | 966 | 预处理的流程如下: 967 | 968 | 1. 设置随机哈希函数的维数 $k = \frac{\log n}{\log(1 / p_{2, h})}$,个数 $L = 2n^{\rho_g}$ 969 | 2. 随机选择 $L$ 个哈希函数 $g_1, g_2, \cdots, g_L$,以此制作 $L$ 个(链地址)哈希表 $A_1, A_2, \cdots, A_L$ 970 | 3. 将数据集 $\vec a_1, \vec a_2, \cdots, \vec a_n$ 中的每个点插入每一个哈希表中 971 | 972 | > 回忆起前文说过 $p_{2, g} = p_{2, h}^k$,这里的 $k = \frac{\log n}{\log(1 / p_{2, h})}$,所以有 $p_{2, g} = \frac 1n$ 973 | 974 | 查询点 $\vec x$ 的 $(c, r)-$ANN 的流程如下: 975 | 976 | 按序遍历 $A_1[g_1(\vec x)], A_2[g_2(\vec x)], \cdots, A_L[g_L(\vec x)]$ 中的元素: 977 | 978 | * 如果找到某个元素与 $\vec x$ 的距离小于 $cr$,那么返回它 979 | * 如果遍历了 $4L$ 个元素依然没有找到与 $\vec x$ 距离小于 $cr$ 的元素,那么直接中断遍历并返回“失败” 980 | 981 | > 如果遍历了 $4L$ 个元素依然没有找到的话,说明选择随机哈希函数的时候选得不好,哈希冲突特别多,继续找会花费特别高的代价,就干脆不找了说找不到 982 | 983 | #### 正确性 984 | 985 | 我们证明:这个算法以至少 $0.6$ 的概率解决 $(c, r)-$ANN 986 | 987 | > 考虑到算法的流程是以检测所有满足 $g_1(\vec a) = g_1(\vec x)$ 或 $g_2(\vec a) = g_2(\vec x)$ 或……或 $g_L(\vec a) = g_L(\vec x)$ 的点 $\vec a$,但是在某些情况下会中途放弃。我们只需要证明以很大的概率算法不会中途放弃,同时一个距离不超过 $cr$ 的点 $\vec a^*$ 以很大概率与 $\vec x$ 在某些哈希函数上冲突即可。我们首先证明后者,同时加强命题,证明一个距离不超过 $r$ 的点以很大概率与 $\vec x$ 在某些哈希函数上冲突 988 | 989 | 如果 $\vec a^*$ 是满足 ${\rm Ham}(\vec x, \vec a^*)\leq r$ 的点,我们认为 $\vec a^*$ 很可能与 $\vec x$ 被某个哈希函数哈希到同一个值,进而与 $\vec x$ 在某个哈希表的同一个位置。我们来估计一下概率。因为这 $L$ 个哈希函数都是独立随机选择的,而且都是局部敏感哈希函数,所以: 990 | $$ 991 | \frac{\log(1/p_{1, g})}{\log(1/p_{2, g})} = \rho_g\\ 992 | p_{1, g} = p_{2, g}^{\rho_g} = \qty(\frac 1n)^{\rho_g} = n^{-\rho_g} 993 | $$ 994 | $$ 995 | \begin{aligned} 996 | &\Pr\qty[\vec a^*\notin A_1[g_1(\vec x)]\cup A_2[g_2(\vec x)]\cup\cdots\cup A_L[g_L(\vec x)]]\\ 997 | =\ &\Pr\qty[\vec a^*\notin A_1[g_1(\vec x)]]\Pr\qty[\vec a^*\notin A_2(g_2(\vec x))]\cdots\Pr\qty[\vec a^*\notin A_L(g_L(\vec x))]\\ 998 | =\ & \prod_{i = 1}^L\Pr\qty[g_i(\vec x)\neq g_i(\vec a^*)]\\ 999 | \leq\ & \qty(1 - p_{1, g})^L\\ 1000 | =\ & \qty(1 - n^{-\rho_g})^{2n^{\rho_g}}\\ 1001 | \leq\ &e^{-2} < \frac 17 1002 | \end{aligned} 1003 | $$ 1004 | 1005 | > 然后我们证明前者。什么时候会中途放弃呢?有超过 $4L$ 个点与 $\vec x$ 距离超过 $cr$ 且哈希冲突。我们知道对于某个的随即哈希函数,一个与 $\vec x$ 距离超过 $cr$ 的点哈希冲突概率的上界,所以我们考虑用概率不等式估计这个事件发生 $4L$ 次以上的概率。我们选择马尔可夫不等式: 1006 | 1007 | 设 $Y = \abs{\set{(\vec a, g) \mid {\rm Ham}(\vec a, \vec x) > cr, g(\vec a) = g(\vec x)}}$ 表示与 $\vec x$ 距离超过 $cr$ 的点在这 $L$ 个哈希函数中与 $\vec x$ 冲突了多少次,那么 1008 | $$ 1009 | \begin{aligned} 1010 | \mathbb E[Y] &= \sum_{\vec a\in A}\sum_{i = 1}^L\Pr\qty[{\rm Ham}(\vec a, \vec x) > cr, g_i(\vec a) = g_i(\vec x)]\\ 1011 | &\leq \sum_{\vec a\in A}\sum_{i = 1}^L\Pr\qty[g_i(\vec a) = g_i(\vec x) \mid {\rm Ham}(\vec a, \vec x) > cr]\\ 1012 | &\leq \sum_{\vec a\in A}\sum_{i = 1}^Lp_{2, g}\\ 1013 | &= nLp_{2, g} = L 1014 | \end{aligned} 1015 | $$ 1016 | 由马尔可夫不等式 1017 | $$ 1018 | \Pr[Y\geq 4L]\leq \frac{\mathbb E[Y]}{4L}\leq\frac 14 1019 | $$ 1020 | 所以算法在 ${\rm Ham}(\vec x, \vec a^*)\leq r$ 的时候成功找到某个满足 ${\rm Ham}(\vec x, \vec a)\leq cr$ 的点的概率至少为 $1 - \frac 17 - \frac 14 > 0.6$ 1021 | --------------------------------------------------------------------------------