文章目录
转载请注明出处:https://blog.csdn.net/New2World/article/details/106431424
Influence Maximization
Influence maximization 字面意思,很好理解。比如 Twitter 要推一则广告,肯定希望这则广告能被更多的人看到,于是他们会选择一些用户投放广告,让这些用户转发广告然后推荐给他们的朋友。如何选择这些初始的用户才能让广告的传播更广就是一个影响最大化的问题。也就是说,我现在要选择 k k k 个初始传播点 S S S,并且从这些点开始能传播到的最多的点的期望为 f ( S ) f(S) f(S),那么 influence maximization 就是一个优化问题 max S o f s i z e k f ( S ) \max\limits_{S\ of\ size\ k}f(S) S of size kmaxf(S)。而这个优化问题被证明是 NP-Complete 的,因此我们需要一个有效的 approx. 算法。
Propagation Models
Linear Threshold Model
任意节点都有一个阈值 θ v ∼ U [ 0 , 1 ] \theta_v\sim U[0,1] θv∼U[0,1],且每个节点都受其邻接点的影响 b v , w b_{v,w} bv,w。当且仅当这个影响的累加值大于等于节点阈值时,即 ∑ w a c t i v e n e i g h b o r o f v b v , w ≥ θ v \sum\limits_{w\ active\ neighbor\ of\ v}b_{v,w} \geq \theta_v w active neighbor of v∑bv,w≥θv,这个节点被激活。
Independent Cascade Model
每对节点间都有一个概率 p v w p_{vw} pvw 表示激活概率,被激活的点按概率激活其未激活的邻接点。这个模型里的顺序不影响结果,比如 u , v u,v u,v 都是已激活节点,那么由谁先尝试激活 w w w 是无关的。
Greedy Hill Climbing Algorithm
这个算法理论上能达到 f ( S ) ≥ ( 1 − 1 / e ) × f ( O P T ) = 0.63 × f ( O P T ) f(S) \geq (1-1/e)\times f(OPT) = 0.63 \times f(OPT) f(S)≥(1−1/e)×f(OPT)=0.63×f(OPT)。它的核心思想是逐个添加节点,每次添加一个能激活最多点的节点。这里涉及到一个独立的数学分支 submodularity,这个玩意儿我做 influence maximization 的时候研究过但没深入,Stanford 专门有一门讲这个的课,可以去看看。不过它的基础概念很简单:回报递减,即 f ( S ∪ { u } ) − f ( S ) ≥ f ( T ∪ { u } ) − f ( T ) f(S\cup\{u\})-f(S) \geq f(T\cup\{u\})-f(T) f(S∪{
u})−f(S)≥f(T∪{
u})−f(T),其中 S ⊆ T S \subseteq T S⊆T。举个例子:你现在很饿,给你一个汉堡你会非常开心;再给你一杯可乐你也会很开心,毕竟可乐汉堡是“标配”,但没有刚得到汉堡时那么开心;现在再给你一包薯条,还是很开心,但此时绝对没有在极度饥饿的情况下得到汉堡和可乐那么开心了,因为你可能已经饱了。
我们现在要证明在 influence maximization 中的 f ( S ) f(S) f(S) 是 submodular 的,想偷个懒,这里我就不写了,cs224w 有单独一个 hand-out 可供参考。
以 IC 模型为例,我们可以按概率先 sample 多次得到不同的“平行世界” (realizations),然后找能通过 S S S 到达的所有点,即为一个 set cover 问题。根据多个 realization 的平均就能估计 f ( S ) f(S) f(S) 的期望。
然而,这个贪心算法相当慢,其复杂度为 O ( k n R m ) O(knRm) O(knRm),其中的符号分别是:初始选定的节点数、图中总节点数、平行世界个数、图中边的条数。
Sketch-Based Algorithm
回顾贪心算法为什么慢,因为每次在平行世界中计算影响范围时都是 O ( m ) O(m) O(m) 的复杂度。由于计算影响范围是一个不确定的过程,因此我们尝试用一个 approx. 的方法来估计它,这就成了一个用 approx. 方法来估计 approx. 的过程。
- 首先得到一个平行世界
- 给每个节点分配一个 [ 0 , 1 ] [0,1] [0,1] 的值
- 将每个节点的值更新为这个节点能到达的所有点中最小的值
直观上讲如果一个节点传播的范围更广的话,它有更大的概率到达那些值很小的节点。因此我们可以通过对点按更新的值进行升序排序,值越小的节点影响越大。这些步骤都是预处理的步骤,也就是说在排好序后使用 greedy 时就只管查询就行。因此我们能在 O ( 1 ) O(1) O(1) 复杂度内找到影响大的节点了。
但只使用一个值可能会导致结果偏差很大,因此我们可以维护多个值来保证算法的可靠性。我的理解是这样的,给每个节点分配 rank 值,预处理的时候考虑所有平行世界,对每个节点保留 c c c 个最小的 rank (因为不同平行世界节点间的连通性不一定相同,所以可能出现有些世界能到达更小的 rank 而有些不能)。接下来在贪心的时候就能直接选出最小 rank。将新的节点加入 S S S 后要删除所有由这个节点影响的点,并从其他节点中删除选中这个节点时所用的那个最小 rank 值。
由于这个算法是贪心的近似,因此它的上界其实是贪心的下界。而这个方法的效果能有多好取决于保留的 rank 数 c c c。实验证明,sketch-based 能比贪心更快地得到和贪心差不多的结果。
OutBreak Detection
Outbreak detection 和 influence maximization 问题很类似,都是在网络中选择一些节点来达到某个目的。以社交网络为例,influence maximization 是为了通过选中的节点使传播更广,而 outbreak detection 是为了通过这些选中的点来及时全面地侦测网络上可能会爆发的话题。这里要求侦测满足及时和全面两个要求,因此选点就得慎重了。我们先规定节点 u u u 得知事件 i i i 的时间为 T ( u , i ) T(u,i) T(u,i),以及通过我们选择的点侦测到事件 i i