網絡表達學習系列(二):基於自編碼器的網絡嵌入(Structural Deep Network Embedding)

閱讀更多,歡迎關注公衆號:論文收割機(paper_reader)
原文鏈接:網絡表達學習系列(二):基於自編碼器的網絡嵌入(Structural Deep Network Embedding)

這一次我們來講第一次將深度學習技術用到網絡表達學習中去的文章。本次的論文發表在KDD’16,文章名爲“Structural Deep Network Embedding”,由清華大學崔鵬團隊發表。這篇文章核心思想是將深度自編碼器引用到網絡嵌入問題,因此在之後的內容我們先介紹什麼是自編碼器,然後再談談如何將其應用到網絡領域。

 

深度自編碼器算法(Deep Auto-Encoder)算法

 

       深度自編碼器是一個經典的深度學習算法,它的主要思想是將輸入數據壓縮成一個比較短的編碼,再用此編碼還原輸入得到輸出,通過減少輸入和輸出的差別來儘可能減少信息損失。由圖1所示,

圖1、自編碼器(圖片來自維基百科)

 

X是原始輸入,X’是輸出,也就是重構的輸入,而Z就是我們希望得到壓縮編碼。由於輸入和輸出很接近,此時信息損失較少,因此Z可以保留X的絕大部分信息。自編碼器是一種非監督模型,它將複雜的原始數據轉化爲低維的壓縮後的向量,因此我們希望用他來對網絡中每一個節點的信息進行壓縮從而得到節點的表達。

 

結構化深度網絡嵌入(Structural Deep Network Embedding,SDNE)

 

      這部分我們主要來介紹如何將深度自編碼器應用到網絡嵌入問題中,整體模型如圖2所示,該模型的輸入是每個節點的所有鄰居,即網絡鄰接矩陣的每一行所組成的向量。模型的整體結構如圖2,對於將原始矩陣轉化爲壓縮表達,SDNE主要從兩個角度來考慮:

 

圖2、結構化深度網絡嵌入模型架構

 

1. 節點間的一階關係(First-Order Proximity)

      節點間的一階關係是指兩個節點直接通過邊相連,此時兩個節點一般是相似的。比如,如果一篇文章引用了另一篇文章,那說明這兩篇文章在內容上肯定有相似之處。因此我們的目標是讓相連節點的表達儘可能接近,所以可以定損失函數(Loss Function)爲

y是圖2中兩個自編碼器的中間隱層,即我們得到的網絡表達,s爲0或1,代表的是i和j是否相鄰。通過這個函數我們可以減小兩個節點表達的歐式距離,從而提高相似度。

 

2. 節點間的二階關係(Second-Order Proximity)

       節點間的二階關係是指如果兩個節點同時和一個或多個相同節點接連,此時兩個節點也是相似的,並且這時兩個節點的相似度取決於有多少節點和這兩個節點同時相連,因此我們選擇自編碼器的輸入爲每個節點的所有鄰居,即鄰接矩陣的每一行。二階關係的損失函數(Loss Function)如下:

是圖2中自編碼器的輸出減輸入,B在這裏是對原始輸入的一個轉化,即將原來是0的位置換爲1,把原來是1的位置換成大於1的另一個數。是哈達馬積。哈達馬積是指兩個矩陣在相同位置的數相乘,具體公式如下:

這麼做的目的是因爲一般來說圖是很稀疏的,所以在輸入裏0很多,而1很少,但1對我們得到節點的表達更重要,所以這麼做相當於對1的位置進行加權。這個做法儘可能在學習得到的表達中保留了節點的所有鄰居信息,因此如果此時兩個節點的表達相似,那表示它們倆的鄰居相似,即具有二階相似度。

 

      因此綜上,我們得到一個全局的損失函數爲:

是正則化項,爲了避免模型過擬合,它的公式爲

和普通的深度學習模型一樣,這個損失函數一樣可以通過隨機梯度下降(反向傳播)算法進行訓練。訓練結束後,自編碼器的隱層即是我們希望得到的網絡節點表達。

 

總結

 

       對於網絡表達學習問題而言,採用自編碼器這種模型是很直接的,因爲自編碼器本身就是用來學習壓縮表達的,但這篇文章很好的改良了自編碼器,設計了一個全新的損失函數來更好的學習網絡的結構特徵,雖然不像deepwalk那樣具有創新性,但也是一篇有新意並且很完整,考慮很全面的一篇文章。

 

閱讀更多,歡迎關注公衆號:論文收割機(paper_reader)
原文鏈接:網絡表達學習系列(二):基於自編碼器的網絡嵌入(Structural Deep Network Embedding)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章