毕业太难了,感觉导师给定的方向就是network embedding,node embedding了。network embedding大概分为两方面(根据我的需求),一个是对网络中的node进行低维向量表示,一个是针对子图进行向量化表示。
Node embedding
node embedding的方法(就我阅读的论文来看)主要分为:传统的降维方法(矩阵分解,Isomap等)。基于随机游走和word2vec的方法。基于自编码器降维的方法。主要介绍后两种。
所读到的几篇论文,还有一些博客,大概就记录一下:
论文:
Compact Integration of Multi-Network Topology for Functional Analysis of Genes(不是基于word2vec的思想)
node2vec Scalable Feature Learning for Networks
DeepWalk online learning of social representations
在网络中做node 的embedding,node 或者说网络拓扑结构信息的获取基本上第一步就是随机游走。
获取到网络的结构信息之后,一个就是基于Word2Vec的模型,首先通过随机游走得到node的上下文序列(类似于w2v里头单词的context),然后扔到模型(word embedding的模型,例如word2vec) 里头,进而得到node 的向量。
另一个就是像上面的第一篇论文,随机游走获得的是每一个node到网络中所有node的概率值(从一个节点出发,走一步可以得到这个节点到其他周围节点的转移概率,是一个向量,因此,我们可以得到走k步之后,每一个节点到其他节点的概率值,记为xi),因此这个矩阵的维数是网络大小(较大的网络很难hold住,自己电脑估计会崩),那是怎么得到每一个node的向量呢?作者提出的损失函数是用KL距离来衡量的,也就是说节点在降维以后的概率分布(xi')与原始的转移概率分布xi的KL散度作为损失函数,目标就是最小化损失函数,从而将 n 维(n是网络大小)降到了m维(一个很小的维度),在原文中,降维后node的向量是用两个参数向量x和w (x和w的维数都是m)表示的,反推过去的n维向量是用多元逻辑回归。当然这篇文章还有一个贡献就是可以整合不同的网络,涉及到的总节点数就是矩阵的维数了。在整合不同网络的时候,参数向量x和w是有不同的用法,详情见文章的补充材料。
接下来就都是通用的套路,机器学习。在生物信息网络上面的应用一般就是multi-classification,link-prediction,蛋白质功能预测,疾病关系预测等等。
之前做了一个小小的实验,小网络上跑了n2v和第二篇文章的方法,做了一个link-prediction,第二篇效果很好,现在不清楚两种方法分别适用于什么场景,文章读的太少....
今天看了一下别的,深度学习啊也用到network上了,但是还没看,。
-----------------------------------------------------------------------------------------分割线--------------------------------------------------------------
深度学习 自动编码器 network embedding
论文:structural deep network embedding
清华大学去年发在KDD上的一篇文章,主要是考虑了两个方面的因素来获取网络信息。一般来说,一个是node之间有连接的话,代表这两个节点相似;另一个虽然两个node之间可能没有直接连接,但是如果两个node的共同邻居很多的话,那他们也是很相似了。其实这个我之前也做过类似的,但是没想到要结合起来,两种我都是分开做的(弱鸡)。。根本也没想到用深度学习来做。
整个算法输入就是网络邻接矩阵,通过自动编码器来训练参数。如何用自编码器来保留这两种相似度呢?作者提出,对于一阶相似度,如果节点i和节点j在网络中是直接相连的,也就是说一阶相似,那么用自编码器降维之后,低维空间中的yi和yj应该是离得比较近的,一阶相似的损失函数:(yi-yj)*Sij ,公式中,Sij指的是,如果节点i 和节点j是网络中相邻的两个节点,那么Sij=1,否则为0,因此可以理解为一阶损失就是用来约束相邻的两个节点在低维空间中也是离得比较近的。
二阶损失,作者用的是自编码器本身的损失函数。MSE(xi',xi),特别的是,在这块有一个系数,即bi(是一维向量,如果节点i和节点j相连,那么bij >=1,反之bij = 1),两者使用hammard乘积结合起来。在优化二阶损失的时候,就保留了二阶相似度,这是因为输入x是邻接矩阵,会将矩阵中1的位置放大到b,将0的位置保持不变,那么就会偏向于优化邻居节点,这也会使得网络中离得近的节点降维之后距离也近。
还有一篇文章,基于自编码器来做的,但是不同的是输入变成了上面第一篇文章得到的转移概率矩阵,而不是邻接矩阵,是基于随机游走来获取网络结构特征。
Deep Neural Networks for Learning Graph Representations
基于邻居信息来进行node embedding
上面涉及到的文章都仅仅考虑了网络的拓扑结构信息,实际应用中可能节点本身有一些属性信息,譬如label,度等信息。因此还有一种node embedding的方法是将节点的属性信息考虑在内,并结合网络的结构信息来进行embedding的。
Inductive Representation Learning on Large Graphs
算法流程:
输入:Graph, 节点的属性特征{Xv}, depth k,如果k = 2,那么就取节点的一阶邻居和二阶邻居。参数w,非线性函数,N是邻居的采样方式,因为不是取所有的邻居。
输出:节点的低维向量 表示
第一步:将节点的属性信息赋值给H
第4步:将节点v的邻居节点的属性信息整合起来,整合函数文章给了几种,例如pooling ,mean,LSTM等
第5步:将邻居信息和自己的节点属性信息结合起来,作为该节点的特征
文章定义了损失函数来优化参数等,用于无监督学习或者监督学习中。
第7步:归一化处理
Subgraph embedding
子图的embedding分为两种:
一种是得到node 的embedding之后,将子图中节点的embedding 进行简单的相加(max,mean poiling等)
另外一种是基于神经网络来做