天天看點

AffinityNet:Semi-supervised Few-shot Learning for Disease Type Prediction——疾病預測的半監督小樣本學習_親和網絡

骨架

堆疊 KNN attention pooling layers , 是 Graph Attention Networks的泛化,首先不需要提前計算圖,which is difficult for some kind of data(有沒有graph都可以),其次不需要輸入整幅圖,将圖分割有利于計算。

AffinityNet:Semi-supervised Few-shot Learning for Disease Type Prediction——疾病預測的半監督小樣本學習_親和網絡

算法

1. feature attention layer

Graph Attention Model 在最初的特征使用線性變換,也就是仿射變化對原始特征進行了處理,從F‘不一定等于F可以看出來。

對于一個樣本的特征向量,如果特征次元是F的話,就使用次元為F的一個特征注意力向量w來對特征進行處理 w = ( w 1 , w 2 , ⋯   , w F ) ∑ i = 1 F w i = 1 w = (w_1,w_2,\cdots,w_F) \quad \sum_{i=1}^{F}w_i=1 w=(w1​,w2​,⋯,wF​)i=1∑F​wi​=1 h ~ i = w ⊗ h i \widetilde{h}_i = w \otimes h_i h i​=w⊗hi​即,每個元素相乘,是以該操作後特征次元不變,隻是特征的影響能力會乘以一個權重,在總體流程圖中以不同的顔色表示重要性。 【權重作用于特征】

2. Attention kernel

實質: 計算樣本之間的相似性促進池化,作用于feature attention之後。

  1. cosine similarity: α i j = h ~ i ⋅ h ~ j ∥ h ~ i ∥ ⋅ ∥ h ~ j ∥ \alpha_{ij} = \frac{\widetilde{h}_i \cdot \widetilde{h}_j }{\|\widetilde{h}_i \|\cdot \|\widetilde{h}_j\|} αij​=∥h i​∥⋅∥h j​∥h i​⋅h j​​
  2. Inner product: α i j = h ~ i ⋅ h ~ j \alpha_{ij} = \widetilde{h}_i\cdot \widetilde{h}_j αij​=h i​⋅h j​
  3. Perceptron affine kernel: α i j = w T ⋅ ( h ~ i ∥ h ~ j ) \alpha_{ij} = w^T\cdot(\widetilde{h}_i\| \widetilde{h}_j) αij​=wT⋅(h i​∥h j​)
  4. Inverse distance with weighted L2 norm (w is the feature weight): α i j = − ∥ w ⊗ h ~ i − w ⊗ h ~ j ∥ 2 \alpha_{ij} = -\| w\otimes \widetilde{h}_i - w \otimes \widetilde{h}_j \|^2 αij​=−∥w⊗h i​−w⊗h j​∥2

    使用softmax歸一化,其他歸一化也是可行的。 a i j = a ( h ~ i , h ~ j ) = e α i j ∑ j ∈ N i e α i j a_{ij} = a(\widetilde{h}_i ,\widetilde{h}_j) = \frac{e^{\alpha_{ij}}}{\sum_{j\in N_i}e^{\alpha_{ij}}} aij​=a(h i​,h j​)=∑j∈Ni​​eαij​eαij​​

    [attention kernels 實質是計算兩個樣本之間的相似性,如果樣本之間的關系圖沒有給出的話,可以使用其中一種kernel計算affinity graph,使用另一種來計算規範化注意力]

3. kNN attention pooling layer

前面樣本經過了特征注意力處理,然後對attention feature之後的樣本進行attention 和normalized處理之後,整個過程如下: h ~ i ′ = f ( ∑ j ∈ N i a ( h ~ i , h ~ j ) ⋅ h ~ j ) \widetilde{h}'_i = f(\sum _{j \in N_i}a(\widetilde{h}_i ,\widetilde{h}_j)\cdot \widetilde{h}_j ) h i′​=f(j∈Ni​∑​a(h i​,h j​)⋅h j​)其中 h ~ i ′ \widetilde{h}'_i h i′​ 表示池化輸出, f f f表示池化函數,作用于attention 之後歸一化的結點,确定該結點是否激活。例如 f ( h ) = m a x ( W h + b , 0 ) f(h)=max(Wh+b,0) f(h)=max(Wh+b,0)

[與GAM一樣,括号内是一個結點新的輸出,是以pooling layers 作用于結點,而不是特征,與之前的CNN等池化縮小feature map尺寸不一樣]

如果給定了一個圖可以直接來确定鄰居節點。如果圖較大,為了降低計算複雜度,随機選擇K個樣本用于計算。k是一個超參數。【我認為就是作者實作裡面batch_size的大小,如果model 的設定裡面k=None,那麼k鄰近就是batch_size的大小,如果k 有值,那麼k鄰近就是在batch_size裡面選擇k個樣本】

AffinityNet:Semi-supervised Few-shot Learning for Disease Type Prediction——疾病預測的半監督小樣本學習_親和網絡

後面堆疊基礎層和半監督小樣本學習都比較簡單了,可以根據文章提供的源碼對照分析。

繼續閱讀