这个推占据我的时间线一整天了,不过看大多数人都是在感叹它怎么『zero accuracy loss』地去压缩的,没有见到有人讲它背后的 Johnson-Lindenstrauss 定理,睡觉前简单写一下,应该能解答一些人的问题:

1. JL 定理牛逼在哪?
通常我们做降维(比如 PCA 等),一般是和数据相关的,算协方差、找主成分,这个过程重度依赖数据本身,且计算极慢。而 JL 定理非常暴力:不用管数据长什么样,只需要随便(符合正态分布,也没那么随便)构造一个投影矩阵,闭着眼睛把高维数据乘上去,降维后的数据点之间的L2相对距离基本和降维之前是一样的。
这个定理非常牛逼的一点在于,你能这么降维的幅度,跟你原来到底在多高的维度没关系,只取决于你能接受的误差,和所有数据的数量。

2. 『zero accuracy loss』指的是什么的 accuracy?
首先,把高精度的浮点数压缩这件事,绝对是有损的。但这篇博客里的“Zero Loss”指的是宏观的下游任务指标没有掉点。 也就是刚刚我们保证L2距离的前提下,降维带来的误差没怎么影响下游任务的表现。

3. 10000维的向量如果能降到1000维,那为什么不能继续降到100,10维?
这涉及到算法复杂度的“物理下界”。你能从 10000 降到 1000,是因为原来的高维空间太“空旷”了,数据其实高度集中在一个低维流形上,你挤掉的只是“水分”。 但是,JL 定理要求:降维后的目标维度,必须跟“数据点数量的对数 (log N)”成正比,跟“你允许的误差平方”成反比。这也符合压缩越多信息损失越大误差越大的直觉,只不过我们可以做到在可容忍的误差范围内做到最好。

JL定理的证明只涉及到本科的数学知识,建议没看过的人可以都去看看。它还有一些稀疏版本和其他度量下的变体,都挺有意思的,这里空白太小,我写不下。

晚安。
https://x.com/i/status/2036840115159675296

Comments

Be the first to add a comment