1. 程式人生 > >圖神經網路入門

圖神經網路入門

拜讀了Jure Leskovec的《Representation Learning on Networks》才明白圖神經網路到底在學什麼,是如何學的,不同GNN模型之間的關係是什麼。總的來說,不同型別的模型都是在探討**如何利用圖的節點資訊去生成節點(圖)的embedding表示**。 圖表示學習的兩大主流思想 - 線性化思想 - Deepwalk,Node2vec,LINE - 圖神經網路 - GCN,GraphSAGE,Gated GNN,subgraph embedding [TOC] ## Node embedding ![image-20201122094426114](https://gitee.com/gongyanzh/blogpic/raw/master/pictures/20201122094911.png) **目標**:編碼節點使其在embedding空間的相似性**近似**為在原網路的相似性 - 定義編碼器encoder - 定義節點相似性函式 - 優化引數使 $similarity(u, v) \approx z_v^Tz_u$ 可以看出,前兩步是node embedding的核心。 **第一個問題:如何對映節點到低維空間?** 參考word2vec,藉助embedding-lookup就可以 ![image-20201122101546380](https://gitee.com/gongyanzh/blogpic/raw/master/pictures/20201122101547.png)![image-20201122101605110](https://gitee.com/gongyanzh/blogpic/raw/master/pictures/20201122101607.png) **第二個問題:如何定義節點相似性?** #### 1. Adjacency-based similarity - Similarity function 定義為原網路中兩節點之間的邊的權重 - 用點積近似邊是否存在 ![image-20201122100458809](https://gitee.com/gongyanzh/blogpic/raw/master/pictures/20201122100459.png) - 找到使損失最小化的 embedding matrix $Z \in R^{d*|V|}$ #### 2. Multi-hop similarity **考慮 k-hop 節點** 上述方法的大致思想都是: 1. 定義節點對的相似性 2. 優化embedding去近似它們的相似性 #### 3.Random walk approaches DeepWalk,Node2vec ## Graph neural networks 圖G: - V 頂點集 - A 鄰接矩陣 - $X\in R^{m*|V|}$為節點特徵矩陣 - 文字、影象,例如社交網路中人口學資訊 - 節點的度,聚類係數等 **如何表示節點** - 核心思想:根據鄰居節點生成節點的embedding ![image-20201122111304416](https://gitee.com/gongyanzh/blogpic/raw/master/pictures/20201122111308.png) 每個節點擁有獨立的計算圖 - how to aggregate information across the layers - 最簡單的方法就是 求均值 ![image-20201122112219124](https://gitee.com/gongyanzh/blogpic/raw/master/pictures/20201122112220.png) ![image-20201122112247138](https://gitee.com/gongyanzh/blogpic/raw/master/pictures/20201122112248.png) - 其他方法...... - 定義loss訓練模型 - 無監督 - 有監督 下面不同的GNN演算法都是在**探索如何利用鄰域節點生成當前節點的embedding表示** - **GNN基礎思想** $$ \mathbf{h}_{v}^{k}=\sigma\left(\mathbf{W}_{k} \sum_{u \in N(v)} \frac{\mathbf{h}_{u}^{k-1}}{|N(v)|}+\mathbf{B}_{k} \mathbf{h}_{v}^{k-1}\right) $$ - **GCN** $$ \mathbf{h}_{v}^{k}=\sigma\left(\mathbf{W}_{k} \sum_{u \in N(v) \cup v} \frac{\mathbf{h}_{u}^{k-1}}{\sqrt{|N(u)||N(v)|}}\right) $$ - **GraphSAGE** $$ \mathbf{h}_{v}^{k}=\sigma\left(\left[\mathbf{W}_{k} \cdot \operatorname{AGG}\left(\left\{\mathbf{h}_{u}^{k-1}, \forall u \in N(v)\right\}\right), \mathbf{B}_{k} \mathbf{h}_{v}^{k-1}\right]\right) $$ AGG函式可以定義為: - Mean $$ \mathrm{AGG}=\sum_{u \in N(v)} \frac{\mathbf{h}_{u}^{k-1}}{|N(v)|} $$ - Pool $$ \mathrm{AGG}=\sigma\left(\left\{\mathrm{Q} \mathrm{h}_{u}^{k-1}, \forall u \in N(v)\right\}\right) $$ - LSTM $$ \mathrm{AGG}=\mathrm{LSTM}\left(\left[\mathbf{h}_{u}^{k-1}, \forall u \in \pi(N(v))\right]\right) $$ - **Gated Graph Neural Networks** $$ \mathbf{m}_{v}^{k}=\mathbf{W} \sum_{u \in N(v)} \mathbf{h}_{u}^{k-1} $$ $$ \mathbf{h}_{v}^{k}=\operatorname{GRU}\left(\mathbf{h}_{v}^{k-1}, \mathbf{m}_{v}^{k}\right) $$ **上述方法都是nodel-level embeddings**,如何embedding圖? - Subgraph Embeddings ![image-20201122150048851](https://gitee.com/gongyanzh/blogpic/raw/master/pictures/20201122150050.png) - 可以對子圖的節點求和 - 引入“虛擬節點”表示子圖 以上內容僅是對圖神經網路初步瞭解的學習,[1]非常適合入門GNN,推薦大家閱讀,有問題歡迎交流。 [1] Jure Leskovec, 《Representation Learning on Networks》http://snap.stanford.edu/proj/embeddin