图的示例:将Web当作是一个图,其中Web中的网页作为图的节点,Web中的超链接作为图的边。
为什么排序:从直观上看所有的节点并不是同等重要的,我们需要给各个节点的重要性打个分。 例如thispersondoesnotexist.com vs. Stanford University 一个是斯坦福大学的网站,一个是个空白网页显然这两个网页不是同等重要的。
如何对节点重要性排序,这肯定要使用图的结构。下面开始我们的节点排序吧!
我们要讲如何使用以下连接分析的方法来计算图中节点的重要性。
- 网页排序
- 个性化的网页排序
- 重新开始的随机游走
边投票(Link As Votes)
边投票:如果一个节点拥有越多的边,那么它就越重要。
- 我们需要更多的in-coming links还是更多的out-going links?
考虑一个实际情况:
http://www.stanford.edu 拥有23400条in-links,而thispersondoesnotexist.com仅拥有1条。如果按照指入边数量计算,很明显Stanford University 更加重要,这也符合我们原来的设想。
此外,我们还有一个问题,如果只计算in-links那就意味着我们将所有的边都视为都等重要,实际情况不是如此。
- 重要的节点拥有的out-links更加重要。
- 而重要的in-links指向的节点也更加重要,这就变成了一个递归问题。
PageRank:The ‘flow‘ Model
节点投票的性质:
- 每个链接的投票与其来源页面的重要性成正比。
- 如果网页
的重要性为
拥有
个out-links,每一out-links边得到的投票权重为
- 网页
的重要性
是它所有in-links 的和,即
上面的线性方程组,我们最直接的想法是使用高斯消元法来计算,但是此方法的算法时间复杂度为. 我们一般采用迭代的方式进行求解[1]。
PageRank的矩阵形式
随机邻接矩阵(Stochastic adjacency matrix)
- 我们假设
有
个out-links
- 如果
存在边,那么权重邻接矩阵
- 即
的列之和为1.
- 即
- Rank Vector
:An entry per page
是网页
的重要性分数
- 我们可以得到下面的等式(r是矩阵M的特征向量
下面是一个示例:
将随机游走应用到其中
首先想象一个随机的网络冲浪:
- 在t时刻,冲浪者在网页
处
- 在
时刻,冲浪者按照网页
的out-link随机访问其中一个网页;
- 最终在与网页
有关的一些网页
处结束;
- 多次重复上述过程
让
是一个概率向量,其中向量元素
表示冲浪者在
时刻处在网页
的概率。
- 所以说
是一个关于冲浪者在
时刻处在各个网页的概率分布。
有了这些概率分布,我们如何进一步研究冲浪者在时刻所处的位置?
- 我们利用邻接矩阵得到下一时刻节点位置的概率
- 我们假设随机游走到达一个平稳状态,即
,
是随机游走的平稳分布。
- 我们原来的排序向量
满足
按照矩阵论中的知识,我们可以将等式解释为,
的特征向量为
,特征值为1。现在需要确定的是,矩阵
的特征值是否为1,其中
的列之和为1,所以
的特征值包含1.
综上可以将排序向量解释为随机邻接矩阵
的特征值为1的特征向量。我们可以从任一个向量
开始,
是冲浪者的长期分布。
- 网页排序=极限分布=
的主特征向量
- 注意如果
是乘积
的极限,那么
满足
我们可以使用迭代的形式求出特征向量
,即
- 给向量
随机设置非零值
- 更新参数:
或者
- 如果
满足,则结束;否则继续重新到2.
- 注意如果
网页排序小节:
- 使用图的边结构测量图中节点的重要性
- 使用随机邻接矩阵建模一个随机网上冲浪者
- 求解等式
,其中向量
被认为是就是随机游走的平稳分布。
下面讨论这里面涉及的三个问题:
- 使用上述的迭代方式求解向量
的算法是否收链?
- 是否收敛到我们想要的?
- 得到的结果是否是合理的?
我们分析一些特殊问题:
- 一些网页处在dead ends,即没有out-links不指向其他的网页
- 这样的网页会导致重要性“泄露”
- Spider trap即
- 这样的网页将会吸收所有的重要性
Spider trap
Dead end
解决Spider solution的方法:
- 在每一次迭代中随机冲浪者有两个选择
- 以概率
执行自己的一个连接(如果只有一个连接,且连接到自身同样执行)
- 以概率
跳到其他的连接;一般情况下
的范围为0.8到0.9.
- 以概率
- 最终冲浪者将在几步内跑出spider solution.
解决Dead ends的方法:
Teleport: 以总概率1跑出Dead ends.
我们已经知道可以用Teleport方法解决dead-ends和spider traps的问题。但是我需要考虑为什么这个两个是个问题?以及为什么Teleport可以解决上述问题?
- Spider-traps并不是一个问题,但是我们得到的traps PageRank scores并不是我们想要的。
- 解决方法:在有限的步骤中转移至其他点。
- Dead-ends 是一个问题。矩阵的列并不是列随机的,不满足我们的假设。(这里的列随机(column stochastic)指列之和不等于1).
- 解决方法:当无节点可去的时候,通过teleporting使列满足column stochastic.
随机Teleport:
在每一迭代中,随机冲浪者有两个选择(Google’s solution):
- 以概率
停留在原点
- 以概率
跳到其他随机节点处
Google 矩阵G(上述等式的矩阵表示):
同样,我们拥有一个递归的等式,在实际中
求解 Pagerank小结:
- PageRank 求解
,并且我们可以通过迭代高效地计算向量
- 添加随机均匀teleporation能够解决dead-ends和spider traps问题。
重新开始的随机游走以及个性化排序
推荐系统示例:
目标:图邻近。
- 我们应该给接触了物品
的用户推荐哪些物品?
- 直觉上来看,如果物品
通过许多相似的用户与
产生联系,那么当另一个用户选择物品
的时候,我们就可以推荐
.
下面的二部图将是我们讲述推荐系统的基础,现在我们需要判定是关联度高还是
关联度高。
Proximity on graph
PageRank:
- 通过重要性来对节点进行排序
- 以均匀概率传送到网络中的任何节点
Personalized PageRank:
- 排列节点与传送节点的相似程度
Proximity on graphs
- Q: 哪些节点是物品
的对邻近节点?
- 带有Restarts的随机游走
- 传送回初始节点:
(后面将详细说明这个)
- 传送回初始节点:
主要思路:随机游走
Idea:
- 每一个节点都有重要性
- 重要性在所有边缘之间平均分配,并推到相邻的边缘
给定一个请求节点集,模拟一个随机游走:
- 向随机邻居迈出一步并记录访问(访问计数)
- 以概率alpha在请求节点集中某个节点重新开始这个随机游走
- 最高访问数量的节点表示对这个访问节点有最高的相似性。
随机游走算法:
首先给出访问节点集, 设置好这个alpha,具体算法如下,简单来说就是从query_nodes 得到user的集合,然后从user集合中抽取一个用户,再从用户得到nodes集合;这样循环多次,其中这里还涉及到restart的判断,即取一随机数判断这个数是否小于设定的alpha,以确定是否重新开始游走。
下图是随机游走得到的结果:
- 为什么这是个好的解?
- 因为这个相似性考虑了:
- 多重连接
- 多重路径
- 直接和非直接路径
- 节点度
网页排序的变体
- 网页排序
- 传送到其他点
- 节点
- 特定主题网页排名 又名 个性化网页排序
- 传送到一组特定的节点
- 冲浪者节点可以有不同的概率降落在不同的节点上。
- 带有Restart的随机游走
- Topic-Specific PageRank,传送总是到相同的节点;
总结
- 一个图自然表示成一个矩阵
- 我们定义了图上的随机游走过程
- 随机冲浪者通过链接和随机传送来移动
- 随机邻接矩阵(stochastic adjacency matrix)
- 网页排序=冲浪者位置的极限分布表示节点的重要性
- 对应于变换邻接矩阵M的主特征向量
矩阵分解和节点嵌入
Recall:编码器作为嵌入查找
节点嵌入与矩阵分解的联系:
- 最简单的节点相似:节点
是相似的,如果他们之间有边相连接。
- 这意味着:
表示图邻接矩阵中第
位置的元素
- 因此
矩阵分解:
- 嵌入维度
,即
的行数,要比节点
的个数小的多。
- 精确的分解
通常是不可能的
- 然而,我们可以学习
的近似分解
- 目标:
- 我们最优化
以至于它能最小化
的
范数
- 在第三章中,我们使用了softmax函数而不是
范数,不过目标是相同的都是
逼近
.
- 我们最优化
- 结论:与边相关的节点相似性的内积解码等价于
的矩阵分解。