【Embedding】SDNE:深度学习在图嵌入领域的应用

今天学的论文是清华大学崔鹏老师工作《Structural Deep Network Embedding》(后简称 SDNE),并发表于 2016 KDD,目前为止共有 880 多引用,是一个非常经典的将深度学习应用于 NetWork Embedding 的算法。

SDNE 算法是一个由多层非线形函数组成的深度学习模型,其可以捕捉高度非线性的网络结构,同时联合优化 first-order 和 second-order 学习网络结构,前者用作监督信息以捕捉网络局部结构,后者用作非监督信息以捕捉网络全局结构,所以 SDNE 是一个半监督的深度学习模型。

我相信大家看完这段会有很多疑问,至少我看完有以下疑问:

  • 多层非线性函数长什么样子?具有非线性激活函数的多层神经网络?

  • 如何把 first-order 用作监督信息?

  • 同理,second-order 如何用做非监督学习?

  • 如何联合优化?

  • 深度学习模型的 Embedding 怎么得到?还是原来的那个输入矩阵吗?

  • 引入深度模型是为了拟合高度非线形的网络,那速度怎么样?可以用于大规模网络吗?

    带着问题,我们来一起读一下论文。

    1. Introduction

    在真实网络世界中学习 NetWork Embedding,有三大挑战:

    • 高度非线性:网络的底层结构是高度非线性的,使用浅层网络无法捕捉高度非线性的网络结构;

    • 结构捕捉:既要捕捉网络的局部结构,又要捕捉网络的全局结构;

    • 稀疏性:大部分真实网络都是稀疏的,仅利用节点的有限连接是不够的。

    为了解决这三大问题,作者也提出了三大解决方案:

    • 高度非线性:设计了一个由多层非线性函数组成的深度网络来学习 NetWork Embedding,深度网络有强大的表示能力来学习网络的复杂结构;而多层非线性函数可以将数据映射到一个高度非线性的潜在空间,可以更好的捕捉到高度非线性的网络结构;

    • 结构捕捉:将 first-order 和 second-order 联合应用到网络的学习过程中,前者用于捕捉网络局部结构,后者用于捕捉网络全局结构;

    • 稀疏性:first-order 是基于节点间的边连接,即原始网络结构;而 second-order 是基于两个节点共享的邻域连接来捕捉节点的相似性,且具有 second-order 相似性的节点数量更多,如下图所示,所以加入 second-order 一定程度上缓解了网络稀疏的问题。

    fisrt order and second order

    2. SDNE

    我们来看下 SDNE 具体是怎么实现的。

    2.1 Autoencoder

    在介绍 SDNE 的模型架构前,我们先补充学习一个基础知识——自编码器

    自编码器(AutoEncoder) 是只有一层隐层节点,并且输入和输出具有相同节点数的神经网络,其目的是求函数:。简单放一张图:

    AutoEncoder

    可以看到,不考虑输入层偏置项的话,输入节点和输出节点是一致的。那么我们为什么要这么做呢?

    举一个例子:我们传输大文件时有两种方式:直接传或者是压缩后再传。我们通常会选择后者,因为压缩后不但文件的体积会变小,并且在传输完成后还可以通过解压还原出原来的文件。

    而自动编码器也类似于这种过程,为了尽可能复现输入数据,自编码器必须捕捉输入数据的重要特征,从而找到能够代表原数据的主要成分,这个过程有点类似主成分分析(Principal Components Analysis,PCA)。

    自编码器没有标签数据,所以是一种非监督学习,前半部分为编码器,后半部分为解码器。在实际应用中通常会使用自编码器的前半部分。

    SDNE 采用的自编码器比较深,有多个隐藏层,如下图所示:

    deep encoder

    自编码器的隐藏层可以表示为:

    其中, 为输入值, 为第 k 层的 i 个节点的输出值, 为第 k 层的参数矩阵, 为第 k 层的偏置项。

    得到 后,我们通过反转编码器的计算过程得到输出值 ,自编码器的目标是最小化输入和输出的重构误差,所以代价函数为:

    2.2 FrameWork

    然后我们来看下 SDNE 的整体框架:

    Framework of SDNE

    以左边的为例:输入为邻接矩阵,输出为重构后的邻接矩阵,通过优化重构误差来捕捉全局结构特征;而中间一排, 就是我们需要的 Embedding 向量,模型通过拉普拉斯特征变换(Laplacian Eigenmaps)优化的代价函数使得相邻节点的 Embedding 向量距离更近,从而捕捉节点的局部特征。

    PS:个人猜测:这里框架图虽然画了两个自编码器,SDNE 应该是只有一个自编码器。如果是两个的话,共享参数这个操作相对复杂,而记录邻居节点的 Embedding 向量就比较容易了。

    PS:论文中的图片画错了,所以我 PS 了一下。

    2.3 Object Functions

    再来看一下半监督模型的目标函数,目标函数由代价函数和正则项构成,SDNE 的代价函数分为两块,一块是 first-order ,另一块是 second-order 。

    我们先来看一下如何在代价函数中加入 second-order 来捕捉全局网络结构。

    second-order 是基于节点的邻域建模的,所以我们定义邻接矩阵:

    其中, 为节点 和节点 之间的边,这里考虑加权边; 描述了节点 的的邻域结构。

    我们将 作为自编码器的输入,即 ,由于 反映了节点 的邻域结构,所以通过自编码器的重构可以使得具有类似特征的节点获得相似的 Embedding 向量。

    然而,由于网络的稀疏性, 将有大量的非零元素,所以如果直接使用邻接矩阵 S 作为自编码器的输入则可能会重构出 S 的零元素。所以为了解决这问题,我们加大了非零元素的惩罚权重,修正后的代价函数为:

    其中, 表示哈达玛积(Hadamard product),类似于向量的内积; ,当 时,,否则 。

    Hadamard product:设 ,则

    通过修正后的自编码器,以邻接矩阵 S 为输入,以最小化重构误差为约束,可以将具有相似邻域结构节点的 Embedding 向量映射到相邻位置,即通过 Second-order 捕捉了网络的全局结构。

    同样的,模型既要捕捉网络的全局结构,也要保证网络的局部结构。

    我们以 first-order 表示网络的局部结构,使得有连接边的节点 Embedding 向量相近,所以代价函数为:

    为了保证 first-order 和 second-order 相似性,我们将代价函数联合起来,加上正则项后便得到目标函数:

    其中, 为超参, 为正则项:

    2.4 Optimization

    SDNE 使用反向传播来更新网络参数,但由于模型高度非线性,参数空间中可能存在许多局部最优。因此,为了得到全局最优,作者使用深度信念网络(Deep Belief Network,以下简称 DBN)对参数进行预训练。

    简单介绍一下 DBN,DBN 是由 Hinton 大佬在 2006 年提出的一个概率生成模型,其由多个受限玻尔兹曼机(Restricted Boltzmann Machines,以下简称 RBM)组成。所以在介绍 DBN 之前我们先来介绍下 RBM,下图 RBM 的结构图:

    Restricted Boltzmann Machines

    其中, 层显层的状态向量, 层为隐藏层的状态向量,两层之间的权重为 ,每个神经元都有自己的一个偏置项,对隐层而言偏置项为 ,对显层而言偏置项为 。

    在 RBM 中,隐层被激活的概率为:

    由于是双向连接,所以显层也同样可以被激活:

    以上就是 RBM 的基本构造过程,并不复杂。

    我们来看下工作原理:当一条数据输入到显层时,RBM 会根据公式计算出每个隐层被开启的概率,并通过阈值来判定是否被激活:

    由此便可以得到隐层的每个神经元是否被激活,给定隐层时,显层的计算方式一致。

    了解工作原理后,我们来看下 RBM 的训练方式:

    1. 给定的一条数据赋值给显层 ,并计算出隐层每个神经元被激活的概率 ;
    1. 对计算的概率分布进行 Gibbs 采样计算隐层的输出值:;
    1. 利用隐层的状态向量重构显层,即通过 层推导出 ,可以计算出显层的每个神经元被激活的概率 ;
    1. 同样利用 Gibbs 采样计算显层重构值:;
    1. 重构值和原本的输入值的误差比较大,所以需要利用反向传播去更新权重以缩小误差;
    1. 重复迭代,直到达到终止条件。

    DBN 可以视为由多个 RBM 串联起来的结构,下图为最终训练得到的模型:

    Structure of DBN

    在训练时最下面为第一层结构,相邻两层构成一个 RBM,必须充分训练 RBM 后才能训练下一个 RBM,训练过程如下图所示:

    train of DBN

    DBM 是深度学习训练中非常有效的参数初始化方法。

    我们现在回过头来简要的看下 SDNE 的算法:

    SDNE Algorithm

    2.5 Analysis

    这一节主要分析一下新节点的 Embedding 和训练复杂度:

    • 新节点:如果新节点 与现有节点有连接,那么有连接向量: ,可以利用已有的模型去训练得到新节点的 Embedding 向量,时间复杂度为 ;如果没有连接,那目前的工作就没办法了~;
    • 时间复杂度:时间复杂度为 ,其中 n 为节点数量,d 为隐藏层最大维度数,c 为网络的平均度数,I 为迭代次数。

    3. Experiments

    我们来看一下 SDNE 在不同数据集下,采用不同评价指标(MAP、Precision)的性能表现:

    image
    image

    SDNE 在多标签分类任务中的表现:

    image

    SDNE 在边预测任务中的表现:

    image

    SDNE 在不同稀疏程度的数据集中的表现:

    image

    SDNE 的可视化:

    image

    SDNE 的参数敏感性:

    image

    4. Conclusion

    一句话总结:SDNE 是一个具有多层非线性函数的半监督深度学习模型,其利用 first-order 和 second-order 分别捕捉网络的局部结构和全局结构,使得训练出来的 Embedding 更具鲁棒性,并在多个真实数据集中获得良好的表现。

    论文到此就结束了,回答一部分看完摘要时提出的疑问:

    • 深度模型的 Embedding 还是原来的那个输入矩阵吗?
    先讨论这个问题,Embedding 应该是 SDNE 中间 层的输出值,对于每一个节点其经过多层非线性网络后多会有不同的输出值。
    
    • first-order 如何用作监督信息?second-order 又如何用作非监督学习?如何联合优化?
    我是这样理解的:
    
    
    *   second-order 其代价函数是输入的共现矩阵和重构的共现矩阵的误差,属于非监督学习;
        
        
    *   而 first-order 的代价函数是节点的 Embedding 向量与邻居节点的 Embedding 向量的误差,对于当前节点而言,其 Label 是邻居节点,所以属于监督学习;
        
        
    *   联合优化是指,把两个代价函数放在一起计算总体误差,区别于分开训练(还记得哪个模型是分开训练的吗?)。
    
    • 引入深度模型是为了拟合高度非线形的网络,那速度怎么样?可以用于大规模网络吗?
    论文没写,大概率速度会很慢,虽然论文时间复杂度为 ,每一轮迭代的时间复杂度与节点数量成线性关系,但我觉得有两个 Bug:
    
    
    *   论文中指出 d 为隐层最大维度数(d is the maximum dimension of the hidden layer),但我觉得应该算成 sum 而不是 max,当然也要考虑是否采用 Negative Sampling、Dropout 等优化方式;
        
        
    *   SDNE 需要 DBN 进行预训练,这个时间也应该加上去,虽然 DBN 的预训练会加速 SDNE 的收敛,DBN 本身训练过程就比较慢;
        
        
    
    但 Embedding 通常是离线操作,如果其训练时间可以接受,也不一定非要非常快的速度。
    

    5. Reference

    1. 《Structural Deep Network Embedding》
    1. 《深度学习之autoencoder》
    1. Upadhyay, Rishabh. (2017). Accent Classification Using Deep Belief Network.
    1. 《深度学习读书笔记之RBM(限制波尔兹曼机)》
    关注公众号跟踪最新内容:**阿泽的学习笔记**。
    
    
    
    ![阿泽的学习笔记](https://upload-images.jianshu.io/upload_images/21345044-bf1e7097628b4af8.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342