分享小記 社交網路中的資訊傳播

2022-05-20 09:00:24 字數 3506 閱讀 3296

第一次參加實驗室的組會,實驗室的史學長給大家簡單分享了乙個研究方向:社交網路中的資訊傳播,感覺講得非常棒。這裡簡單記錄一下這個方向的要解決的問題與解決方案。

社交網路中資訊傳播的背景就是我們所處的社交環境。包含複雜社會結構的社交網路對於資訊的傳播和擴散起著至關重要的作用,而基於「口碑」效應的病毒式營銷受到越來越廣泛的關注,社交網路上的影響力傳播被日益重視。社交網路中的資訊傳播就將這個現象抽象成了乙個問題:在一張社交網路圖上,初時刻啟用 $k$ 個種子節點,使得隨後的時間裡,隨著網路的擴散效應,資訊能被更多的人所知。這就是資訊傳播的目標:影響力最大化。

這個問題最為常用的模型稱為獨立級聯模型(independent cascade model,ic 模型):用節點代表社交網路中的人,一條從點 a 到點 b 的、邊權為 $p$ ($0 \le p \le 1$) 的有向邊表示 a 知道乙個資訊之後,會以 $p$ 的概率告訴 b。在初始時刻,有 $k$ 個種子節點被啟用(也就是說,一開始把訊息告訴社交網路裡的 $k$ 個人);此後每個時刻,被啟用的節點以概率 $p$ 啟用其相鄰的非啟用節點,無論成功與否,啟用動作只做一次,此後的任何時間都不再嘗試。顯然,當某個時刻沒有新的節點被啟用,那麼資訊傳播過程結束。

下圖就是 ic 模型的乙個示意。紅色節點代表已啟用的節點,綠色節點代表未啟用的節點,紅色邊代表啟用成功的邊,綠色虛線邊代表啟用失敗的邊,綠色實線邊代表還沒有進行嘗試的邊。

用數學公式表述,社交網路中的資訊傳播希望得到下面這個式子的最優解:$$\max_ \sigma(s_0) \\ \text \quad |s_0| \le k$$ 其中 $s_0$ 就是最開始啟用的 $k$ 個種子節點,$\sigma(s_0)$ 表示以 $s_0$ 作為種子節點集時,最終啟用節點數的期望。

然而這個問題並不是那麼好解決的(否則也不用研究啦- -),因為這是乙個 np-hard 問題,另乙個 np-hard 問題 maximum coverage problem 可以規約到 ic 模型。maximum coverage problem 是說:給出全集 $u = \$,再給出一些子集 $a_1, a_2, \dots, a_m$,$a_i \subset u$(也就是說每個 $a_i$ 包含一些 $e_j$)。現在要選出 $k$ 個子集,使得它們的並集包含最多的元素。我們只要把子集 $a_i$ 和元素 $e_j$ 都看成節點,如果 $a_i$ 包含 $e_j$ 則從 $a_i$ 向 $e_j$ 連一條權值為 1 的有向邊,就能把 maximum coverage problem 看作 ic 模型的特例了。

事實上,就連計算 $\sigma(s_0)$ 也不是那麼好解決的,這是乙個 #p-hard 問題。另乙個 #p 問題(簡單來說就是問乙個 np 問題的解有幾個,或者說求方案數)s-t connectivity problem 可以規約到這個問題。s-t connectivity problem 求的是包含從 s 到 t 路徑的生成子圖的數量。顯然,我們只要讓每條邊的邊權都是 0.5,就能把 s-t connectivity problem 看作求 $\sigma(s_0)$ 的特例。

既然是 np-hard 問題,大家當然只能想辦法去找近似解了...對於求 $\sigma$ 這個問題,比較樸實的想法就是進行大量的模擬實驗(就像 ic 模型描述的一樣,一開始啟用選定的 $k$ 個節點,然後每個時刻進行一次啟用嘗試,直到沒有節點被啟用為止),最後取實驗結果的均值。而對於影響力最大化這個問題,乙個比較直接的想法就是使用貪心:迴圈 $k$ 次,每次列舉所有未被選為種子節點的點,計算一下它也成為種子節點後,答案的增幅有多少,把讓答案增加最多的點加入種子節點集。

在 maximizing the spread of influence through a social network 這篇文章中,作者們利用了單調子模的特性證明了這個貪心演算法的近似比為 $1-\frac$,其中 $e$ 是自然對數的底(不過至於怎麼證的我也不知道- -沒有讀過文章...)。單調子模指的是:設原圖頂點集為 $v$,$v \in v$。若 $s \subset t \subset v$ 且 $v \notin t$,那麼 $\sigma(s \cup \) - \sigma(s) \ge \sigma(t \cup \) - \sigma(t)$。這個東西具體怎麼證我也不太清楚- -但是直觀上來理解,初始節點越多,每增加乙個新節點為最終結果帶來的增幅應該越小(因為總的頂點就那麼多個),這還是很有道理的- -

顯然,這個演算法主要的瓶頸在於對 $\sigma$ 的估計。**中指出,設節點數為 $n$,邊數為 $m$,如果通過大量模擬實驗估計 $\sigma$,則以 $1-\frac$ 的概率獲得 $1-\frac-\epsilon$ 的近似解,其時間複雜度為 $o(\epsilon^k^3n^2m\textn)$

(據史學長說)這個貪心演算法已經是 $\sigma$ 已知的情況下最好的演算法,所以對演算法的改進都針對如何更快求 $\sigma$。

首先有一種「剪枝」的方法:假設在當前迴圈開始之前,種子節點集為 $s$,在之前的某次迴圈開始之前,種子節點集為 $s'$,顯然 $s' \subset s$。如果對於兩個節點 $x, y \notin s$,有 $\sigma(s \cup \) - \sigma(s) \ge \sigma(s' \cup \) - \sigma(s')$,那麼 $y$ 在當前迴圈中可以不用考慮。因為根據單調子模的性質,$\sigma(s' \cup \) - \sigma(s') \ge \sigma(s \cup \) - \sigma(s)$,所以點 $x$ 必然不劣於點 $y$。雖然估計 $\sigma$ 的方法仍然是進行大量模擬實驗,在最差情況下複雜度不變,但是這個剪枝據說可以將實際執行效率提高 700 倍。

另一種改進方法改進的是模擬實驗的方式。乙個節點 $v$ 被種子節點集 $s$ 啟用的概率,等於把所有邊反向,然後只啟用 $v$,最後 $s$ 裡有節點被啟用的概率。$v$ 反向啟用的節點集被成為 $v$ 的 rr-set (reverse reachable set)。這個事實用數學公式表述如下:$$\mathbb(\sigma(s)) = \frac\mathbb(\sum_^\theta \mathbb(s \cap \text(x_i) \ne \emptyset))$$ 其中 $\mathbb$ 表示期望,$\mathbb$ 是指示函式(括號內表示式為真時取 1,為假時取 0),rr 就表示 $x_i$ 的 rr-set。

為了計算等號右邊的期望,我們仍然進行模擬實驗:迴圈 $\theta$ 次,每次隨機選擇乙個節點 $x_i$,隨機計算它的乙個 rr-set(當然,每次隨機的結果不同,同乙個節點的 rr-set 也會不同),看看 $s$ 中是否有節點位於 rr-set 裡,如果有則結果為 1,否則結果為 0。最後取結果的均值乘以總節點數 $n$ 即可。在貪心演算法中,我們每次只要選擇被最多 rr-set 覆蓋的節點加入種子節點集即可。$\theta$ 好像最好是乙個 $o(nm)$ 級別的數,但是由於在現實的圖中,乙個點的 rr-set 不會很大,所以這個方法的效率更高。

我們還可以給 rr-set 這個方法設定乙個閾值。只要在隨機的過程中,有乙個點被超過閾值個 rr-set 覆蓋,我們就將它選入種子節點集中。這個閾值的理論值很大,但是在實驗中取 16 就能獲得較好的效果。比隨機 $\theta$ 次的效率更高。

深度網路中的正向傳播

如何在深度網路中靈活應用正向和反向傳播 先看對其中乙個訓練樣本x,該怎麼應用正向傳播,之後討論向量化的版本 在第一層裡需要計算 z 1 w 1 x b 1 z 1 w 1 a 0 b 1 w 1 和b 1 就是會影響在第一層的啟用單元的引數 a 1 g 1 z 1 啟用函式 在第二層裡需要計算 z ...

神經網路中,前向傳播和反向傳播 矩陣維度的問題

以1個輸入層 1個隱藏層和1個輸出層為例,分析程式設計中變數的維度。初始化 w1的維度 隱藏層節點個數 特徵個數 b1的維度 1 隱藏層節點個數 w2的維度 輸出層節點個數 隱藏層節點個數 b2的維度 1 輸出層節點個數 前向傳播 train data 特徵數量 樣本數量 z1 w1 train d...

網路推廣中的資訊保安

今天看到乙個對網路推廣很重視的同行公司在其 貼出一則宣告,譴責有黑客潛入 的後台管理系統,竊取客戶資料,並委託律師事務所調查云云,不禁笑了起來 原以為只有我動過這個念頭,沒想到人家已經成功實施了,聰明人不少啊 把重要的客戶資料放在網上本身就是錯誤,網際網路是開放性的,所謂 安全 從來都只是一種理想。...