何时以及为什么 r./sum(r) 不是在 PageRank 计算中重新规范化向量的好方法?

计算科学 收敛
2021-12-06 11:19:15

我尝试了 PageRank 算法。当页数很大时,我遇到一种情况,一个用于重新归一化向量的公式(使其分量之和等于 1;向量的元素保证为正)工作正常,而另一个停止工作并且使用它会导致迭代在一段时间后开始发散(新旧 r 之间的差异开始变大)。

    r = r./sum(r)                  # this does not work
    r = r + (1-sum(r))/N * ones(N) # this works

我的 PageRank 算法看起来像这样 (Julia)

M # M is NxN sparse transition matrix;
  # may contain all-zero columns (sinks); 
beta = 0.8
epsilon = 1e-6

r = 1/N ./ ones(N)
rtm1 = ones(N)
while(sum(abs(r-rtm1)) > epsilon)
  rtm1 = r
  r = beta*M*r
  ######
  # renormalization
  # pick one or the other
  # r = r./sum(r)
  # r = r + (1-sum(r))/N * ones(N)
  ######
end
# now r holds the result

我猜测对于大量页面,r 的元素可能会变得非常小(如 1.0e-7 或更小),然后第一个标准化公式就不能很好地工作。我想听听一个对数字计算有一定经验的人的解释。

1个回答

这两个归一化公式导致了两种不同的算法,它们都“归一化”一个向量并不那么相关。

例如,考虑以下转移矩阵:

M=(0110).
从...开始r=(1,0), 连续的归一化向量r将会(0,1)(1,0),因此该算法显然永远不会收敛。在这种情况下,转移矩阵是不规则的,这不是一个数值问题。

用第二个公式,r将改为(1β2,1+β2)第一次迭代后,和

12(1+(β)k,1(β)k)
k迭代。所以这是计算一个完全不同函数的不动点,它显然收敛(β<1) 其中第一个算法没有。

如果您将其视为基础图上的随机游走,则此行为更容易理解;M对应图12. 第一个算法的随机游走只是简单地沿着图走:这个走走的概率分布不能保证收敛到平稳分布。第二种算法以概率沿着图走β, 并以概率跳到一个随机节点1β:保证此游走收敛到平稳分布。这里的关键属性是M必须具有所有正项才能使第一个算法收敛。