阅读更多,欢迎关注公众号:论文收割机(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)