Frequent Directions
概
通过魏老师的分享找了这些论文看了一下, 感觉之后可能会用到.
Frequent Directions
-
FD 的任务是, 希望维护一个 sketch matrix 使得 (),
这几个误差都尽可能小, 其中
是 的 top- 奇异值所对应的右奇异向量. 换言之, 我们通过维护 便保存了 中的大部分信息.
-
这个问题比较有意思的点在于, 如何处理, 通过一行一行的形式得到, 然后我们动态地维护 (否则这个问题就有一般方法了).
-
FD 启发自一个非常经典的问题: 频率估计问题.
- 假设, 我们有 , 其中 . 我们会一个一个地接收到其中的元素, 问题是如何动态估计每个元素出现的频率:
-
Misra-Gries 算法是频率估计的一个最优算法:
- 维护一个长度为 的 counters;
- 新来一个元素 : I) 若已经有 counter 在计数 则, 该 counter 加一; II) 倘若任有 counter 剩余 (即 counter 计数为 0), 则选择其一用于计数 ; III) 倘若没有 counter 剩余, 则所有 counter 递减直到有其中一个 counter 为 0, 将此 counter 用于计数 .
-
容易发现, 由于每次'递减'操作减去的频率为'', 所以最多有 次这种递减操作. 换言之:
于是我们就得到了一个还算可以的频率估计, 实际上, 这个估计是最优的.
-
我们可以把这个推广到矩阵的形式. 假设 的每一行为 , 其中 表示第 个元素为 1, 其余元素为 0 的向量. 此时, 我们有:
我们可以令 的第 行为: , 则有
进一步地:
-
FD 的最终算法就是有这样的一个'减'的操作:
-
具体操作就是, 新来一行 后, 拼接在最后, 然后进行奇异值分解, 然后所有的奇异值减去最小的奇异值, 此时
的最后一行一定为 0. 这相当于我们空出来了一个 'counter'.
-
FD 可以进一步加速:
-
此时, 减去的是排中间的奇异值, 相当于我们会空出一半的 'counters'.
-
最后的 bound 请参考原文.
Frequent Directions over Slidding Windows
-
有些时候, 我们并不希望 去保存过去所有的信息, 而是最近的 N 行, 即逼近 的信息 ( 表示当前的时刻).
-
其实, 这个算法也是启发自基于滑动窗口的频率估计问题:
- 给定阈值 ;
- 按照普通的方式统计每个元素的频率, 此时时刻 来了一个新的元素 , 按照之前的 MG 的方式统计.
- 之后, 如果 的计数 , 则将其归零, 并将 加入一个列表 中.
- 检查 中的时间, 如果时间不在窗口内, 则舍弃.
-
最后, 我们可以以 中的记录以及 counters 中的记录作为频率, 其余不在其中的频率记为 . 容易发现,
- 对于 的:
- 对于 的, 由于舍弃的部分 (就是还在 counters 中的) 不会超过 , 所以也有
- 对于 的:
注: 我不太了解这个算法, 感觉应该是这样的.
- 所以 FD over lisding windows 的算法也是类似的:
-
和普通的 FD 主要有两点不同:
- 需要维护两个额外的列表 , 用于维护超出阈值 的奇异向量;
- 每次经过普通的 FD 操作后, 如果首奇异值超过 , 对应的频谱就被剔除了.
-
此外, 每次更新还需要检查, 保存在 中的奇异向量是否超过了窗口时间.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2023-11-06 Linkless Link Prediction via Relational Distillation
2022-11-06 Diffusion Improves Graph Learning