Skip to content

算法Algorithm

随机超平面角度指纹

Random hyperplane angular sketch · Random hyperplane fingerprint

在共享超平面配置下把非零方向编码为规范位串,以失配比例估计归一化夹角,并区分固定对象保证与自适应重用。

形式陈述 ​

一个指纹必须连同哪份配置一起解释 ​

给定整数 d,q≥1。输入是实内积空间 Rd 中的非零有限向量 x;数学对象是方向 x¯=x/‖x‖2,两个对象间的角度为

θ(x,y)=arccos⁡⟨x,y⟩‖x‖2‖y‖2∈[0,π].

零向量没有这个方向,接口拒绝它。这里保留正负方向的区别,x 与 −x 的夹角是 π,不是同一条无向直线。

一次建立共享配置 G=(g0,…,gq−1),定义

bi(x)=1{⟨gi,x⟩≥0},BG(x)=(b0(x),…,bq−1(x)).

边界上的零内积统一编码为 1。对同一配置编码的两个向量,输出失配数 H 和归一化角度估计

H=∑i=0q−11{bi(x)≠bi(y)},a^=H/q.

这里真正计算的是等长字串的Hamming 距离;不能把两份各自重新抽样的指纹逐位比较。

公开参考规定第 i 位放入第 ⌊i/8⌋ 个字节的第 7−(imod8) 位,末字节低端未使用位全部为零。载荷长度恰为 ⌈q/8⌉ 字节。指纹还持有不可变配置的共享句柄,比较时要求句柄是同一个对象;即使两份独立配置碰巧有相同系数,也保守地拒绝跨句柄比较。载荷本身不包含维数、位数或超平面,重载字节必须另外提供同一配置。长度与填充检查只能证明语法规范,不能证明这些字节确实由某个宣称的向量生成。

概率结论的抽样条件 ​

保证要求 gi 是相互独立的标准多元正态向量 N(0,Id),并且待比较的 x,y 在抽取 G 之前已固定。更一般地,独立且方向在球面上均匀的非零法向量也够用;长度不影响符号。独立不等于各向同性,给各坐标不同方差通常改变角度度量。

随机超平面分离引理已经给出单次失配概率 a=θ/π。本接口把同一对向量放进 q 个独立副本,于是

H∼Bin(q,a),E[a^]=a,Var(a^)=a(1−a)q.

同一位上的两个符号共享一张平面;不同位的失配指标才独立。由Hoeffding 不等式,对 ε>0,

Pr(|a^−a|≥ε)≤2e−2qε2.

若事先固定了 m≥1 对向量,取

q≥log⁡(2m/δ)2ε2,0<δ<1,

可使这 m 对的误差同时小于 ε,失败概率至多 δ。这里对各对使用并集界,不要求不同向量对的误差独立。如果固定 n 个向量并要求所有两两距离,可取 m=(n2);n<2 时没有待保证的不同对象对,不使用这个对数式。

编码、比较与费用 ​

编码逐行算点积,把符号置入相应字节。已经处理前 i 行时,前 i 个有效位与定义完全一致,其余位保持零;一次置位建立下一步不变量,结束后得到规范载荷。比较逐字节异或,再累计置位数。由于无效填充位都为零,它们不会增加失配数。

稠密实数算术模型下,一次编码需 O(qd) 运算,共享配置占 O(qd) 个系数。每个指纹另占 ⌈q/8⌉ 个字节和一个句柄;存 n 个指纹不能把共享配置重复算 n 次,也不能把配置完全删去。公开实现先形成 q 个符号,临时工作空间为 O(q+d),不是只有输出位串那么多。比较两份已验证指纹需 O(⌈q/8⌉) 时间,估计值可作为分数 H/q 精确输出。

参考程序只接受整数向量和整数法向量,以 Python 整数精确判定正、负、零。这是可复核的给定配置执行器,没有把有限整数法向量称为连续各向同性抽样器。它对点积的运算次数仍是 O(qd),大整数乘加的位成本另计。理论上的归一化不必在此真的求平方根,因为除以正的 ‖x‖2 不改变符号。把实现换成浮点数时,溢出、消去和临近零的符号误判需要单独的数值策略,不能用本整数实验替它作保证。

直觉

每一张过原点的平面问同一个二选一问题:“这个方向落在哪一侧?”相近方向较少给出不同答案,背向方向较多。单次回答只有一位,难以判断一次不同究竟是距离大还是抽样偶然;共享的多张独立平面把问题变成可计数的失配比例。

指纹保存的是方向关系,不保存长度、坐标或完整距离矩阵。同一组位可以供许多对象重用,但重用并不会自动把“某个预定对象对”的概率结论升级为“看完这些位后任意挑对象都正确”。

角度指纹:配置、有效位和保证范围
例子与边界

五张确定平面的完整编码 ​

按顺序取

g0=(1,0),g1=(0,1),g2=(1,1),g3=(1,−1),g4=(−2,3).

对 A=(2,1)、B=(1,2),逐行得到

行 i ⟨gi,A⟩ ⟨gi,B⟩ 两个符号
0 2 1 1,1
1 1 2 1,1
2 3 3 1,1
3 1 −1 1,0
4 −1 4 0,1

所以 A 的有效位是 11110,填充后为 11110000,十六进制 f0;B 是 11101,载荷 e8。异或 00011000 有两位为一,故 H=2、a^=2/5。真实余弦是 4/5,真实归一化角度约为 0.2048。这五张手选平面用于核对编码,不是验证其输出已满足某个随机置信界。

−A 的载荷是 08,在五个有效位上恰好与 A 互补。T=(1,1) 却在第四行点积为零,按约定编码 11111,载荷 f8;−T 的第四位也为一。因此“负向量一定逐位取反”只有在全部点积非零时才成立。对固定非零向量和连续 Gaussian 平面,零事件概率为零;对给定整数平面或自适应选择的向量,它可以确实发生。

角度无偏,余弦未必无偏 ​

可用 c^=cos⁡(πa^) 报告余弦估计。由余弦的 Lipschitz 界,|a^−a|≤ε 蕴含 |c^−cos⁡θ|≤πε;但非线性变换不保留无偏性。取 q=1、θ=π/3,c^ 以概率 2/3 取 1、以概率 1/3 取 −1,期望 1/3,不同于真实余弦 1/2。

另外,Hamming 比例不等于未经归一化的欧氏距离。A 与 100A 的指纹完全相同,欧氏距离却很大。对单位向量才有 ‖x¯−y¯‖22=2−2cos⁡θ;若应用关心幅度,必须另外保留并使用长度。

看过配置再挑向量 ​

设 q<d。看见所有法向量后,可以取它们共同正交补中的非零 z。此时 z 与 −z 的所有点积均为零,按约定都得到全一指纹,估计角度为零,真实夹角却是 π。例如 d=3、两张平面的法向量为 (1,0,0),(0,1,0),选 z=(0,0,1) 即可。

这不反驳固定对象定理:对象是依赖已抽出的 G 选出来的。只在实验后说“实际只查询了一对”并取 m=1,也不能补上抽样前固定的条件。若全部潜在查询预先来自有限集合,可以对那个集合做同时保证;任意实向量的自适应重用需要别的论证。

独立但不各向同性仍然不够 ​

若每个法向量都固定为 (1,0),向量 (1,0) 与 (1,1) 永远同号,失配率为零,真实夹角却是 π/4。复制这张平面再多次也不会改善。类似地,用独立但偏向某些方向的法向量,只会精确估计那个偏置分布下的分离概率;不能无条件乘上 π 当作原来的夹角。

推论与应用

角度指纹可作为方向相似性的紧凑比较接口:输入维数 d 很大时,编码完成后每次比较只遍历 q 位,不再读取全部坐标。这个收益发生在编码和共享配置存储已经付费之后,且精度控制的是事先指定对象对的归一化角度。

若目标是从大量记录中找候选,只给每条记录一份短指纹还不够;逐条比较仍会访问全部 n 条记录。LSH 放大候选索引进一步把若干基础碰撞合成键、建立多张桶表,再对命中的记录做原始相似度核验。这里的单比特相等概率 1−θ/π 是它的一种输入,编码/估计与候选检索是两个不同的输出合同。

参考资料
关系图谱13 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系