【圖機器學習】cs224w Lecture 13 & 14 - 影響力最大化 & 爆發檢測

WineChocolate發表於2020-05-29

轉自本人:https://blog.csdn.net/New2World/article/details/106431424

Influence Maximization

Influence maximization 字面意思,很好理解。比如 Twitter 要推一則廣告,肯定希望這則廣告能被更多的人看到,於是他們會選擇一些使用者投放廣告,讓這些使用者轉發廣告然後推薦給他們的朋友。如何選擇這些初始的使用者才能讓廣告的傳播更廣就是一個影響最大化的問題。也就是說,我現在要選擇 \(k\) 個初始傳播點 \(S\),並且從這些點開始能傳播到的最多的點的期望為 \(f(S)\),那麼 influence maximization 就是一個優化問題 \(\max\limits_{S\ of\ size\ k}f(S)\)。而這個優化問題被證明是 NP-Complete 的,因此我們需要一個有效的 approx. 演算法。

Propagation Models

Linear Threshold Model

任意節點都有一個閾值 \(\theta_v\sim U[0,1]\),且每個節點都受其鄰接點的影響 \(b_{v,w}\)。當且僅當這個影響的累加值大於等於節點閾值時,即 \(\sum\limits_{w\ active\ neighbor\ of\ v}b_{v,w} \geq \theta_v\),這個節點被啟用。

Independent Cascade Model

每對節點間都有一個概率 \(p_{vw}\) 表示啟用概率,被啟用的點按概率啟用其未啟用的鄰接點。這個模型裡的順序不影響結果,比如 \(u,v\) 都是已啟用節點,那麼由誰先嚐試啟用 \(w\) 是無關的。

Greedy Hill Climbing Algorithm

這個演算法理論上能達到 \(f(S) \geq (1-1/e)\times f(OPT) = 0.63 \times f(OPT)\)。它的核心思想是逐個新增節點,每次新增一個能啟用最多點的節點。這裡涉及到一個獨立的數學分支 submodularity,這個玩意兒我做 influence maximization 的時候研究過但沒深入,Stanford 專門有一門講這個的課,可以去看看。不過它的基礎概念很簡單:回報遞減,即 \(f(S\cup\{u\})-f(S) \geq f(T\cup\{u\})-f(T)\),其中 \(S \subseteq T\)。舉個例子:你現在很餓,給你一個漢堡你會非常開心;再給你一杯可樂你也會很開心,畢竟可樂漢堡是“標配”,但沒有剛得到漢堡時那麼開心;現在再給你一包薯條,還是很開心,但此時絕對沒有在極度飢餓的情況下得到漢堡和可樂那麼開心了,因為你可能已經飽了。
我們現在要證明在 influence maximization 中的 \(f(S)\) 是 submodular 的,想偷個懶,這裡我就不寫了,cs224w 有單獨一個 hand-out 可供參考。
以 IC 模型為例,我們可以按概率先 sample 多次得到不同的“平行世界” (realizations),然後找能通過 \(S\) 到達的所有點,即為一個 set cover 問題。根據多個 realization 的平均就能估計 \(f(S)\) 的期望。

然而,這個貪心演算法相當慢,其複雜度為 \(O(knRm)\),其中的符號分別是:初始選定的節點數、圖中總節點數、平行世界個數、圖中邊的條數。

Sketch-Based Algorithm

回顧貪心演算法為什麼慢,因為每次在平行世界中計算影響範圍時都是 \(O(m)\) 的複雜度。由於計算影響範圍是一個不確定的過程,因此我們嘗試用一個 approx. 的方法來估計它,這就成了一個用 approx. 方法來估計 approx. 的過程。

  • 首先得到一個平行世界
  • 給每個節點分配一個 \([0,1]\) 的值
  • 將每個節點的值更新為這個節點能到達的所有點中最小的值

直觀上講如果一個節點傳播的範圍更廣的話,它有更大的概率到達那些值很小的節點。因此我們可以通過對點按更新的值進行升序排序,值越小的節點影響越大。這些步驟都是預處理的步驟,也就是說在排好序後使用 greedy 時就只管查詢就行。因此我們能在 \(O(1)\) 複雜度內找到影響大的節點了。
但只使用一個值可能會導致結果偏差很大,因此我們可以維護多個值來保證演算法的可靠性。我的理解是這樣的,給每個節點分配 rank 值,預處理的時候考慮所有平行世界,對每個節點保留 \(c\) 個最小的 rank (因為不同平行世界節點間的連通性不一定相同,所以可能出現有些世界能到達更小的 rank 而有些不能)。接下來在貪心的時候就能直接選出最小 rank。將新的節點加入 \(S\) 後要刪除所有由這個節點影響的點,並從其他節點中刪除選中這個節點時所用的那個最小 rank 值。

由於這個演算法是貪心的近似,因此它的上界其實是貪心的下界。而這個方法的效果能有多好取決於保留的 rank 數 \(c\)。實驗證明,sketch-based 能比貪心更快地得到和貪心差不多的結果。

OutBreak Detection

Outbreak detection 和 influence maximization 問題很類似,都是在網路中選擇一些節點來達到某個目的。以社交網路為例,influence maximization 是為了通過選中的節點使傳播更廣,而 outbreak detection 是為了通過這些選中的點來及時全面地偵測網路上可能會爆發的話題。這裡要求偵測滿足及時和全面兩個要求,因此選點就得慎重了。我們先規定節點 \(u\) 得知事件 \(i\) 的時間為 \(T(u,i)\),以及通過我們選擇的點偵測到事件 \(i\) 的收益 \(f(S) = \sum_iP(i)f_i(S)\)\(P(i)\) 為事件 \(i\) 發生的概率。當然偵測所有點是最直接的方法,然而偵測一個點都會產生一定的代價。因此 outbreak detection 也是一個帶約束的優化問題。

\[\max\limits_{S\subseteq V}f(S) = \sum_iP(i)f_i(S) \\ s.t.\ cost(S)<B\]

目前還沒解釋的就是這個 reward \(f(S)\) 了。它的定義至關重要,直接關係到及時性和全面性。它需要滿足

  1. 使事件被偵測到的時間要儘量早
  2. 要偵測儘量多的事件
  3. 一旦 outbreak 儘量減小受影響的範圍

圍繞以上幾個條件展開討論,首先定義幾個符號,\(\pi_i(t)\) 表示在時刻 \(t\) 偵測到事件 \(i\) 的懲罰。

  1. time to detection (DT): \(\pi_i(t)=t\)
  2. detection likelihood (DL): \(\pi_i(t)=0, \pi_i(\infty)=1\)
  3. population affected (PA): \(\pi_i(t)=\{\#\ of\ infected\ nodes\ in\ outbreak\ i\ by\ time\ t \}\)

那麼我們用 penalty reduction 的思路來定義 reward 即 \(f_i(S)=\pi_i(\infty)-\pi_i(T(S,i))\)。這裡又出現了 submodular 的身影。把網路設想為一個黑暗的房間,偵測點是一個光源,那麼放的第一個光源對這個黑暗房間的意義應該是最大的,因為你從伸手不見五指到能看清房間的一部分了。放第二個的時候你能看到的地方更多了,但它的效果明顯沒有第一個光源那麼有意義。而當我們放入更多光源到一定程度後,整個房間都亮了,再放入光源已經完全沒有必要了。抽象一下,可由符號表述為

\[f(A\cup{x})-f(A) \geq f(B\cup{x})-f(B),\ A\subseteq B\subseteq V,\ x\in V\backslash B \]

如下為證明,不感興趣的朋友可以跳過。要證明這個需要分 3 種情況討論點 \(x\) 偵測到事件 \(i\) 的時間。

  1. \(T(B,i)\leq T(A,i) < T(x,i)\),即 \(x\) 比 A 和 B 更晚偵測到。所以 \(f_i(A\cup{x})=f_i(A)\), \(f_i(B\cup{x})=f_i(B)\)

\[f_i(A\cup{x})-f_i(A)=0=f_i(B\cup{x})-f_i(B) \]
  1. \(T(B,i)\leq T(x,i) < T(A,i)\),即 \(x\) 比 B 早,比 A 晚。如此便有

\[f_i(A\cup{x})-f_i(A)\geq 0=f_i(B\cup{x})-f_i(B) \]
  1. \(T(x,i) < T(B,i)\leq T(A,i)\),即 \(x\) 比 A 和 B 都更早偵測到。所以

\[\begin{aligned} f_i(A\cup{x})-f_i(A)&=[\pi_i(\infty)-\pi_i(T(x,i))]-f_i(A) \\ f_i(B\cup{x})-f_i(B)&=[\pi_i(\infty)-\pi_i(T(x,i))]-f_i(B) \end{aligned}\]

由於 \(f_i(A)\leq f_i(B)\),所以 \(f_i(A\cup{x})-f_i(A)\geqf_i(B\cup{x})-f_i(B)\)

綜上,\(f_i(\cdot)\) 是 submodular,因此 \(f(\cdot)=\sum_iP(i)f_i(\cdot)\) 也是 submodular。那麼根據 influence maximization 的經驗,submodular 可以用貪心的方法做到 \((1-1/e)\cdot OPT\)。然而這隻對 unit cost 有效,當每個偵測點的代價不同時,貪心就不適用了。

CELF: Cost-Effective Lazy Forward-selection

Benefit-Cost Greedy

為什麼忽略 cost 會出問題?假設,我們的預算為 \(B\),而現在有兩種感應器各無數個

  • s1: reward \(r\), cost \(B\)
  • s2: reward \(r-\epsilon\), cost \(1\)

忽略 cost 的情況下我們會首選 s1,這樣一來預算消耗完了,我們得到了 \(r\) 的收益。然而如果我們用 s2,我們可以裝 \(B\) 個上去,得到的收益為 \(B(r-\epsilon)\)

Unit-Cost Greedy

那麼如果我們考慮價效比呢?回答還是否定的。考慮一個很極端的情況,預算為 \(B\),但我們只有兩個感應器

  • s1: reward \(2\epsilon\), cost \(\epsilon\)
  • s2: reward \(B\), cost \(B\)

光看價效比肯定選 s1,然而這樣一來我們預算就不夠裝 s2 了,最終的 reward 就只有 \(2\epsilon\)

那麼,怎麼解決這個問題?很簡單,兩個方法一起用,取最優唄!這就是 CELF 的精髓,即

  • S': use benefit-cost greedy
  • S'': use unit-cost greedy

然後通過取最大得到最終結果 \(S=\arg\max(f(S'),f(S''))\)。那這個方法能做到什麼程度呢?\(\frac12(1-1/e)\cdot OPT\)。驚人吧,兩個 arbitrary bad 的方法能做到這麼好的結果,我感覺類似 boosting 的本質:多個 suboptimal 可以提升為更好的結果。

Lazy Evaluation

Greedy 效果挺好,但速度太慢。Influence maximization 中我們希望網路中的傳播範圍更大因此可以通過 rank 值來加速,但這裡不行啊。我們需要充分利用 submodular 的性質。假設在一次迭代中,我們選擇了點 \(x\),那麼這次我們通過 \(x\) 得到的收益一定是最多的。而且對於其它所有點,這次的回報一定比以後得到的更多。於是我們將所有點的收益排成遞減序列,然後每次取首位的最大值就好。下一次迭代時按上次的順序更新收益值,如果某個點的新收益值大於等於上次收益比這個點小且最接近的值,那麼就能確定這個點就是這次的最大值;不然就得將更新後的值插入到正確位置以保證序列為降序。這裡借用一個圖[1]來說明

lazy evaluation

Data Dependent Bound

上面提到的貪心演算法的結果的下界是獨立於資料的理論分析,相對來說可能很寬鬆。如果根據資料來估計能否得到一個更緊湊的界限。我們在每一次迭代時都會計算收益,如果將收益降序排列,我們能得到基於資料的估計 \(f(OPT)\leq f(S)+\sum\limits_{i=1}^k\delta(i)\),其中 \(\delta\) 是收益,\(k\) 是我們要選取的點的個數。至於為什麼,我們來看看證明,假設 $S_{OPT}={t_1, t_2, ..., t_k}

\[\begin{aligned} f(OPT)&\leq f(OPT\cup S) \\ &= f(S)+f(OPT\cup S)-f(S) \\ &\leq f(S)+\sum\limits_{i=1}^k[f(S\cup{t_i})-f(S)] \\ &= f(S)+\sum\limits_{i=1}^k\delta(t_i) \\ &\leq f(S)+\sum\limits_{i=1}^k\delta(i) \end{aligned}\]

後面還有一些 case study 來證明上面的理論是正確的。因為大多是圖,這裡就不貼了,感興趣的話可以去看 slides。


  1. 圖來自於 https://www.cnblogs.com/aaronhoo/p/6548760.html ↩︎

相關文章