首页 › programming › 让谷歌称王的算法:PageRank拆解

一个矩阵如何给整个互联网排座次:拆解值万亿美金的 PageRank

导语:搜索引擎的"暗黑时代"

如果你用过 1998 年之前的搜索引擎,大概会被那种"搜什么出一堆垃圾"的体验折磨过。当时的 AltaVista、Lycos、Excite 基本只干一件事:数关键词。哪个页面里"数码相机"这个词出现得多、出现在标题里,它就排第一。结果呢?站长们疯狂在网页底部塞一堆白色看不见的"数码相机数码相机数码相机",排名立刻起飞。搜索结果成了垃圾场。

Reducible 频道的这期《PageRank: A Trillion Dollar Algorithm》要讲的,正是当年两个斯坦福博士生——Larry Page 和 Sergey Brin——如何用一个递归的"投票"思想彻底终结了这场混乱。这个名叫 PageRank 的算法(名字巧妙双关:既是 Web Page 的排名,也是 Larry Page 的名字),不仅让 Google 一骑绝尘,更催生了一家市值一度逼近两万亿美金的公司。

这篇文章我会带你从直觉一路下钻到幂迭代公式、马尔可夫链稳态、稀疏矩阵工程实现,最后聊聊为什么一个 1998 年的算法今天仍然活在你的推荐系统、NLP 关键词提取和社交网络里。剧透:它的精髓不是"谁链接多",而是"重要的人投你的票才算数"。

视频背景卡片

项目 内容
视频标题 PageRank: A Trillion Dollar Algorithm
频道 Reducible(算法可视化头部频道,订阅约百万)
时长 约 26 分钟
播放量 约 18.9 万次
发布日期 2022 年 5 月 23 日
核心主题 用矩阵与幂迭代给整个互联网做"重要性"排序

核心内容拆解

一、链接即投票——但票权从来不是平等的

视频开篇用一个非常漂亮的比喻破题:把整个互联网想象成一场巨大的选举。每个网页都是一张选票,它把票投给它超链接指向的那些页面。

这是第一层直觉:被链接得越多,页面越重要。 但视频立刻指出这还不够。如果你门口的小卖部网站链了 10 万个页面,而《纽约时报》只链了 3 个,你能说小卖部那一票的分量和时报一样吗?

这是 PageRank 的灵魂——递归定义的重要性:一个页面的重要性,等于所有指向它的页面"分给"它的票权之和;而每一张票的分量,又取决于投票者自身的重要性,再除以它总共投出去的票数。你被一个重要页面点名,远胜被一万个垃圾页面点名。

视频原话层面强调的是"it's not about how many pages link to you, but about how important those pages are"——这是反直觉的关键一跃。

我的延伸:这套思想其实是把学术界的引用分析(citation analysis)搬到了 Web 上。一篇论文被 Nature 引用一次,权重远超被某个本科生课程作业引用。Page 和 Brin 的天才在于,他们看到了 HTML 的 <a href> 标签本质上就是"零成本的引用"——整个 Web 已经是一个天然的超大规模引文网络,只差有人去算它。

二、把直觉变成矩阵:邻接矩阵与归一化

直觉再好,互联网有几十亿页面,总不能靠人脑去递归。视频进入第二阶段——把它变成线性代数问题。

第一步,构造邻接矩阵 M:如果页面 j 链向页面 i,则 M[i][j] = 1,否则为 0。这是个 N×N 的巨型矩阵(N 是网页总数)。

第二步,按列归一化:把每一列(即每个页面的出链)除以它的出链总数 L(j)。这样每一列的和变成 1,含义变成"页面 j 把它的票权平均分给它指向的所有页面"。归一化后的矩阵记作 A。

第三步,定义重要性向量 r,它是一个长度为 N 的列向量,r[i] 就是页面 i 的 PageRank。

于是递归定义被压成一个优雅的矩阵方程:

r = A · r

我的补充:这其实就是说,PageRank 向量是矩阵 A 的特征向量,对应的特征值为 1。如果你本科线代还记得"特征向量经过线性变换后方向不变"——这里的不动点,恰恰就是"重要性分配的稳态"。Reducible 在视频里用动画把这个收敛过程演示得极其直观:你随便给一个初始重要性,反复左乘 A,几次之后重要性向量就稳定下来了,那个稳定值就是排名。

三、随机冲浪者:另一种等价视角

视频接着抛出第二个理解维度,也是我个人觉得最妙的一个——随机游走(random walk)。

想象一个无聊的网民(random surfer),他永远在上网:当前在某个页面,就随机点击该页面上的某一个链接,跳到下一个页面;如此无限循环。问:长期来看,他停留在每个页面上的概率是多少?

这个概率分布,正好就等于 PageRank 向量 r。

为什么?因为"随机点击链接"的概率转移,恰好就是归一化矩阵 A 描述的操作。停留概率分布的稳态,自然就是 r = A·r 的解。两种视角——代数的特征向量 和 概率的马尔可夫链稳态——殊途同归。

我的延伸:这就是著名的 Perron–Frobenius 定理的舞台。对于一个各列和为 1、且不可约非周期的非负矩阵,最大特征值 1 对应的特征向量存在且唯一(差一个归一化常数),而且幂迭代 r_{k+1} = A·r_k 必然收敛到它。换句话说,PageRank 之所以能算得出来、而且算得稳,是有严格数学保证的,不是拍脑袋。这也是为什么它能在数十亿规模的图上工程落地——你不需要解方程,只需要反复做矩阵-向量乘法。

四、阻尼因子 d=0.85:为什么冲浪者要"传送"

如果故事停在这里,PageRank 会立刻翻车。视频用了两个反例——死胡同(dangling node) 和 蜘蛛陷阱(spider trap)——来解释为什么必须引入阻尼因子(damping factor)。

Brin 和 Page 的解法优雅得像作弊:引入一个"传送(teleport)"机制。冲浪者在任何一步,有 (1-d) 的概率不再点链接,而是随机"传送"到全网任意一个页面。d 就是"继续点击"的概率,通常取 0.85。

更新后的公式变成:

r(i) = (1-d)/N  +  d · Σ_{j→i} [ r(j) / L(j) ]

(1-d)/N 这一项就是"被随机传送击中"的基础概率,它保证了:没有任何页面会真的归零,也没有任何陷阱能囚禁概率。整个系统重新变得不可约、非周期,Perron–Frobenius 再次适用。

我的延伸——0.85 的物理含义:1/(1-0.85) ≈ 6.67。这意味着平均而言,一个用户在"传送"走之前,会连续点击约 6~7 个链接。这个数字是 Page 和 Brin 当年根据用户行为经验选的。d 太大(如 0.99),迭代收敛慢、陷阱风险高;d 太小(如 0.5),链接结构传递的重要性被稀释,排名区分度下降。0.85 是工程上的甜蜜点,沿用至今。

五、悬挂节点:工程上的隐藏地雷

视频点到为止,但我想展开一个实战中最常被忽略的坑——悬挂节点(dangling nodes)的处理。

互联网上有海量的页面没有出链:纯图片页、PDF、被 robots 屏蔽的链接、JS 动态生成的链接爬虫抓不到。这些节点在矩阵 A 里对应一列全 0,会破坏"列和为 1"的性质,导致概率泄漏。

标准解法是:把悬挂节点视为"链向全网所有页面",即让它均匀分配 (1-d) 之外的传播。等价地,在迭代时对每一个悬挂节点 j,额外加上 r(j)/N 到所有页面。这个细节不处理好,迭代结果会肉眼可见地错——很多教科书版 PageRank 实现的 bug 就藏在这里。

如果你用过 Python 的 NetworkX,它的 pagerank() 默认就妥善处理了悬挂节点;但如果你自己手撸一遍,这是第一个会踩的雷。

六、幂迭代:几十亿页面怎么算得动

这是视频后半段最硬核、也最"值钱"的部分——工程实现。

公式 r = A·r 你千万别去"解方程"。N=数十亿时,A 是个数十亿×数十亿、装满内存要几百 TB 的矩阵,直接求逆是天文数字的运算量。正确做法是幂迭代(power iteration):

1. 随机初始化 r_0(比如所有分量 = 1/N)
2. 重复:r_{k+1} = (1-d)/N · 1 + d · A · r_k   (并处理悬挂节点)
3. 直到 ||r_{k+1} - r_k|| 很小(收敛)

每一步只是一次稀疏矩阵-向量乘法。关键洞察:互联网链接是极其稀疏的——平均每个页面只有几十个出链,而矩阵有数十亿列。所以 A 里 99.9999% 是 0,你只存非零元(出链)即可,存储从 O(N²) 压到 O(网页平均出链数 × N)。

实测中,幂迭代通常 50~100 次就收敛到满意精度。Google 早期正是用 MapReduce 把这个稀疏乘法分发到成百上千台机器上,几小时算完整个 Web 的排名。

我的观点:这段是整个视频最该反复看的地方。它揭示了一个普适的工程范式——当问题大到装不下时,不要硬解,要迭代;当矩阵稀疏时,不要存,只存关系。这套"稀疏 + 迭代"思路后来统治了整个大规模图计算领域:Google 的 Pregel、Apache Spark 的 GraphX、做推荐的 GraphSAGE,骨子里都是这一套。

七、为什么它"值万亿美金"——以及它今天还剩多少

视频标题里的 "Trillion Dollar" 绝非夸张。PageRank 让 Google 的搜索结果质量在 2000 年前后碾压所有对手:用户用脚投票涌入 → 流量暴涨 → AdWords 广告系统精准变现 → 印钞机启动。可以说没有 PageRank 就没有 Google 帝国。

但视频也诚实地指出一个反高潮的事实:今天的 Google 排名,早已不只是 PageRank。因为 PageRank 一火,立刻催生了 SEO 军备竞赛——链接农场(link farms):站长们互相疯狂加链接、买链接来灌水抬高排名。Google 现在使用 200+ 种信号(内容质量、用户行为、新鲜度、位置、HTTPS、移动友好……)来排名,公开的 PageRank 权重早就被稀释和隐藏。

我的判断:PageRank 的历史价值在于它第一次证明"结构(谁连谁)比内容(写了什么)更能反映价值"——这个哲学洞察至今未过时。它从搜索排名"退役"后,反而以一种更隐蔽的方式活得更好。

知识结构图

flowchart TD
    A["Web: 数十亿页面<br/>互相超链接"] --> B["邻接矩阵 M<br/>M[i,j]=1 若 j→i"]
    B --> C["列归一化 → A<br/>每列和为1"]
    C --> D{"核心方程<br/>r = A·r"}
    D --> E["视角1: 代数<br/>A的特征向量(特征值1)"]
    D --> F["视角2: 概率<br/>随机冲浪者的稳态分布"]
    F --> G["问题: 死胡同 / 蜘蛛陷阱<br/>概率泄漏或被困"]
    G --> H["引入阻尼因子 d=0.85<br/>+ 传送项 (1-d)/N"]
    H --> I["修正方程:<br/>r_i=(1-d)/N + d·Σ r_j/L_j"]
    I --> J["幂迭代求解<br/>稀疏矩阵×向量, 50~100次收敛"]
    J --> K["Perron-Frobenius定理<br/>保证存在·唯一·收敛"]
    J --> L["应用: 搜索排名(历史)<br/>推荐系统·TextRank<br/>社交网络·生物网络"]
    style D fill:#ffd54f,stroke:#f57c00,stroke-width:2px
    style J fill:#81d4fa,stroke:#0277bd,stroke-width:2px

实战启示:一个 1998 年的算法,今天怎么用

1. 推荐系统的"暗器"——Personalized PageRank 把"随机传送"的均匀分布,换成一个偏好向量(比如只传送到你朋友或你点过赞的内容),跑出来的稳态就是"围绕你的个人兴趣的相关性排名"。Pinterest、Twitter 早期都用它做"你可能感兴趣的人/内容"。你今天在 App 里看到的"相关推荐",很大概率有 PageRank 变体的影子。

2. NLP 零样本神器——TextRank 把句子或词当成"页面",把它们的语义相似度或共现关系当成"链接",跑一遍 PageRank,得分最高的就是摘要的关键句或关键词。完全无需训练数据,论文 Rada Mihalcea 的 TextRank 至今是文本摘要的经典 baseline。

3. 系统设计面试的"杀招" 面试官问"如何给一个社交图谱找出最有影响力的人/做好友推荐"——别只答 BFS/DFS。答 PageRank / Personalized PageRank + 稀疏幂迭代 + MapReduce/Spark GraphX 分布式,瞬间拉开和"背题党"的差距。要点是强调稀疏存储 + 迭代收敛这两个工程细节。

4. 反直觉的认知升级 PageRank 教会我一件事:重要性是涌现的,不是自封的。没有一个页面能靠修改自己变重要——重要性是整个网络结构对你"投票"的结果。这个哲学套用到职场、品牌、甚至科研影响力上都成立:你拼命自我标榜没用,得让"重要节点"愿意链接你。

延伸学习路径

  1. 原始论文:《The PageRank Citation Ranking: Bringing Order to the Web》(Page & Brin, 1999)——不到 20 页,看天才想法的本来面目。
  2. Reducible 频道:本视频所属频道,A* 寻路、DFT、PNG 压缩等算法的可视化都是同类顶级水准,强烈建议订阅。
  3. 《Mining of Massive Datasets》(MMDS) 第 5 章 "Link Analysis"——Jure Leskovec 等人写的免费教材,把 PageRank、Topic-Specific PageRank、MapReduce 实现讲得最透彻。
  4. 动手实现:用 Python NetworkX 的 nx.pagerank() 在小图上跑,再尝试不调库、手写幂迭代并处理悬挂节点——这是检验你是否真懂的最佳方式。
  5. TextRank 论文(Mihalcea & Tarau, 2004):看 PageRank 如何跨界应用到 NLP,体会"算法迁移"的思维方式。

一句话总结

PageRank 的真正威力,不在于"数链接",而在于把整个互联网当成一个稀疏矩阵,用幂迭代算出一份"重要节点说了算"的递归排名——这套"稀疏 + 迭代 + 稳态"的工程哲学,至今仍是推荐系统、图计算和大规模 AI 的底层范式。


参考来源

  1. PageRank: A Trillion Dollar Algorithm — Reducible — 本文分析的核心视频(经 RSS 与 oEmbed 双重验证,真实存在,约 18.9 万播放)
  2. The PageRank Citation Ranking: Bringing Order to the Web — Page & Brin (1999) — PageRank 原始论文
  3. Mining of Massive Datasets, Ch.5 Link Analysis — Leskovec, Rajaraman, Ullman — 大规模数据挖掘权威教材的链接分析章节
  4. TextRank: Bringing Order into Texts — Mihalcea & Tarau (2004) — PageRank 在 NLP 中的跨界应用
  5. NetworkX PageRank 文档 — 工程实现参考,含悬挂节点处理

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入