DeepWalk论文详解
DeepWalk算法报告
Deepwalk是网络表示学习的经典算法之一,是用来学习网络中顶点的向量表示(学习学习图的结构特征即属性,并且属性个数为向量的维数)。
该算法通过截断随机游走学习出一个网络的社会表示,输入是一张图或者网络,输出为网络中顶点的向量表示。
本文的主要贡献为:
1.深度游走可以学习短随机有洞中存在的结构规律。
2.在标签稀疏性存在情况下,显著提高了分类性能。
3.通过使用并行实现构建网络规模的图的表示来演示我们算法的可伸缩性。
本文处理网络节点的表示利用了word2vec中词嵌入的思想。该思想的基本处理元素就是单词,对应网络节点的表示即网络节点。而词嵌入就是对一个句子中的单词序列进行分析,而这个序列就是随机游走所产生的。
所谓的随机游走,就是在网络上不断重复地随机选择游走路径,最终形成一条贯穿网络的路径。从某个特定的端点开始,游走的每一步都从与当前节点相连的边中随机选择一条,沿着选定的边移动到下一个顶点,不断重复这个过程。
整个DeepWalk算法包含俩个部分,一部分是随机游走的生成,另一部分是参数的更新
算法为:
算法的输入:
图G(V,E)其中V是顶点集,E是边集合。w为窗口大小,d是嵌入的维度大小。γ是在每个顶点开始随机游动的次数。t是随机游走的长度,即所生成的序列的最大长度。
算法的输出即是网络中顶点的向量表示
算法解析:
第1步是初始化顶点嵌入表示。第2步是构建Hierarchical Softmax即哈夫曼树,第3步开始是对每个节点做γ次随机游走,在循环中,第4步是打乱网络顶点集合中的节点,第5,6步是以每个节点为根节点生成长度为t的随机游走,该函数在后面代码解析中有会提到,第7步是将生成的随机游走序列用skip-gram模型中利用梯度的方法来对参数进行更新。其中参数更新的细节就是算法2,如下图。
‘’
算法2主要是对参数的更新,即对于每个参数进行求导得出梯度,再根据梯度进行更新参数,即所谓的梯度下降。
对于代码的分析:
__main__.py分析
这是运行时候的命令行参数,
其中format允许三种类型输入(adjlist,edgelist,mat),默认是adjlist。
如果数据量小,则直接调用build_deep_corpus,从每个节点开始进行多次随机游走。
num_path:设置了从一个节点开始的次数
path_length:设置了一个随机游走的长度
alpha:以概率1-alpha从当前节点继续走下去,或者以alpha的概率停止。
然后开始训练模型,将随机游走得到的walks放入word2vec模型中进行训练,从而得到对应节点的嵌入。
如果内存不够放随机游走的结果,则该路径会被保存到output.walks.x中
其实和之前的操作一样,也是在调用graph的randwalk,只不过加入了并行化代码和写到磁盘的程序。
Graph.py
在graph类中,该函数是初始化函数,构建2出一个字典来当图,其例子就是如下图所示:
该俩个函数检查生成的随机游走是否为自循环并且删除。
该函数是创建截断的随机游走,其中path_length代表游走的长度Alpha代表重启的概率
Start代表随机游走的开始节点。
该函数对一个图生成一个语料库,即对于图G生成每个节点开始的多次的随机游走列表,
该函数也是生成语料库函数,但是不一样的是该函数采用yield函数进行迭代生成,是用于内存不足以保存路径的情况。
该类后面的函数主要作用就是将列表分成大小均匀的块。
Walks.py
上面俩个函数是计算词频的函数。
其中count_words的参数f中每行都是一个随机游走walk,函数最终返回这个file中每个单词出现的次数。
Count_textfiles使用了多线程的方法,也是返回每个单词出现的次数
上面俩个函数是将walks写入文件,一个是直接写入,另一个是采用多线程方式。
Grouper函数的大致含义
grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')
第一个参数是整数int,第二个参数是可迭代对象,例如range(1,7+1) (返回1,2,3,4,5,6,7的迭代对象)如果第三个参数不写,则default为None,这样
grouper(3, range(1,7+1))-->(1,2,3),(4,5,6),(7,None,None)
图的数据:
邻接矩阵为:
运行结果为:
2.总结:
Deepwalk算法我觉得是最经典的图嵌入算法之一。它采用了word2vec的方法思想,通过将一组组随机截断游走所生成的顶点序列当做一个个句子,然后去用word2vec进行训练,即用图中节点与节点的共现关系来学习节点的向量表示。
总的来说,这篇论文我认为是network embedding的开山之作,通过将NLP中word2vec的词向量的思想借鉴过来,来实现社交网络中的节点表示,因此提供了一种新的思路。因为社交网络中的节点分布太过于稀疏,所以deepwalk算法非常适用于标签稀疏的情况。其中随机截断游走的思想就是一种可重复访问已访问节点的深度优先遍历算法:
给定当前访问起始节点,从该起始节点中的所有邻居节点中随机采样作为下一个访问节点,并且有一定的概率返回原节点,重复此过程,直到序列长度等于给定的长度。在分析代码的过程中,依旧有些函数没怎么看懂,如多线程运行、评估那一块,但是关键的函数,包括生成随机截断游走、运用word2vec模型进行训练等这些已经领会
个人的看法:
算法优点:
1、在信息较少的稀疏网络表现优越
2、在线学习:DeepWalk是可扩展的
3、容易实现并行性。几个随机游走者(不同的线程,进程或机器)可以同时探索同一网络的不同部分。
4、适应性。当图变化后,不需要全局重新计算,可以迭代地更新学习模型。
算法缺点:
我觉得deepwalk只适用于无向图即无权边,因为它是概率性地选择自己的邻居顶点进行访问,而没有考虑到边的权重大小,但是在社交网络中边的权重是非常重要的。就比如说在一个学校的社交网络中,可能一个班级的同学他们的节点是相邻的,但是同寝室的他们的关系会更密切一点,也就是边的权重会更大一点,而deepwalk没有考虑到这些,这是我的看法。
DeepWalk算法报告
Deepwalk是网络表示学习的经典算法之一,是用来学习网络中顶点的向量表示(学习学习图的结构特征即属性,并且属性个数为向量的维数)。
该算法通过截断随机游走学习出一个网络的社会表示,输入是一张图或者网络,输出为网络中顶点的向量表示。
本文的主要贡献为:
1.深度游走可以学习短随机有洞中存在的结构规律。
2.在标签稀疏性存在情况下,显著提高了分类性能。
3.通过使用并行实现构建网络规模的图的表示来演示我们算法的可伸缩性。
本文处理网络节点的表示利用了word2vec中词嵌入的思想。该思想的基本处理元素就是单词,对应网络节点的表示即网络节点。而词嵌入就是对一个句子中的单词序列进行分析,而这个序列就是随机游走所产生的。
所谓的随机游走,就是在网络上不断重复地随机选择游走路径,最终形成一条贯穿网络的路径。从某个特定的端点开始,游走的每一步都从与当前节点相连的边中随机选择一条,沿着选定的边移动到下一个顶点,不断重复这个过程。
整个DeepWalk算法包含俩个部分,一部分是随机游走的生成,另一部分是参数的更新
算法为:
算法的输入:
图G(V,E)其中V是顶点集,E是边集合。w为窗口大小,d是嵌入的维度大小。γ是在每个顶点开始随机游动的次数。t是随机游走的长度,即所生成的序列的最大长度。
算法的输出即是网络中顶点的向量表示
算法解析:
第1步是初始化顶点嵌入表示。第2步是构建Hierarchical Softmax即哈夫曼树,第3步开始是对每个节点做γ次随机游走,在循环中,第4步是打乱网络顶点集合中的节点,第5,6步是以每个节点为根节点生成长度为t的随机游走,该函数在后面代码解析中有会提到,第7步是将生成的随机游走序列用skip-gram模型中利用梯度的方法来对参数进行更新。其中参数更新的细节就是算法2,如下图。
‘’
算法2主要是对参数的更新,即对于每个参数进行求导得出梯度,再根据梯度进行更新参数,即所谓的梯度下降。
对于代码的分析:
__main__.py分析
这是运行时候的命令行参数,
其中format允许三种类型输入(adjlist,edgelist,mat),默认是adjlist。
如果数据量小,则直接调用build_deep_corpus,从每个节点开始进行多次随机游走。
num_path:设置了从一个节点开始的次数
path_length:设置了一个随机游走的长度
alpha:以概率1-alpha从当前节点继续走下去,或者以alpha的概率停止。
然后开始训练模型,将随机游走得到的walks放入word2vec模型中进行训练,从而得到对应节点的嵌入。
如果内存不够放随机游走的结果,则该路径会被保存到output.walks.x中
其实和之前的操作一样,也是在调用graph的randwalk,只不过加入了并行化代码和写到磁盘的程序。
Graph.py
在graph类中,该函数是初始化函数,构建2出一个字典来当图,其例子就是如下图所示:
该俩个函数检查生成的随机游走是否为自循环并且删除。
该函数是创建截断的随机游走,其中path_length代表游走的长度Alpha代表重启的概率
Start代表随机游走的开始节点。
该函数对一个图生成一个语料库,即对于图G生成每个节点开始的多次的随机游走列表,
该函数也是生成语料库函数,但是不一样的是该函数采用yield函数进行迭代生成,是用于内存不足以保存路径的情况。
该类后面的函数主要作用就是将列表分成大小均匀的块。
Walks.py
上面俩个函数是计算词频的函数。
其中count_words的参数f中每行都是一个随机游走walk,函数最终返回这个file中每个单词出现的次数。
Count_textfiles使用了多线程的方法,也是返回每个单词出现的次数
上面俩个函数是将walks写入文件,一个是直接写入,另一个是采用多线程方式。
Grouper函数的大致含义
grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')
第一个参数是整数int,第二个参数是可迭代对象,例如range(1,7+1) (返回1,2,3,4,5,6,7的迭代对象)如果第三个参数不写,则default为None,这样
grouper(3, range(1,7+1))-->(1,2,3),(4,5,6),(7,None,None)
图的数据:
邻接矩阵为:
运行结果为:
2.总结:
Deepwalk算法我觉得是最经典的图嵌入算法之一。它采用了word2vec的方法思想,通过将一组组随机截断游走所生成的顶点序列当做一个个句子,然后去用word2vec进行训练,即用图中节点与节点的共现关系来学习节点的向量表示。
总的来说,这篇论文我认为是network embedding的开山之作,通过将NLP中word2vec的词向量的思想借鉴过来,来实现社交网络中的节点表示,因此提供了一种新的思路。因为社交网络中的节点分布太过于稀疏,所以deepwalk算法非常适用于标签稀疏的情况。其中随机截断游走的思想就是一种可重复访问已访问节点的深度优先遍历算法:
给定当前访问起始节点,从该起始节点中的所有邻居节点中随机采样作为下一个访问节点,并且有一定的概率返回原节点,重复此过程,直到序列长度等于给定的长度。在分析代码的过程中,依旧有些函数没怎么看懂,如多线程运行、评估那一块,但是关键的函数,包括生成随机截断游走、运用word2vec模型进行训练等这些已经领会
个人的看法:
算法优点:
1、在信息较少的稀疏网络表现优越
2、在线学习:DeepWalk是可扩展的
3、容易实现并行性。几个随机游走者(不同的线程,进程或机器)可以同时探索同一网络的不同部分。
4、适应性。当图变化后,不需要全局重新计算,可以迭代地更新学习模型。
算法缺点:
我觉得deepwalk只适用于无向图即无权边,因为它是概率性地选择自己的邻居顶点进行访问,而没有考虑到边的权重大小,但是在社交网络中边的权重是非常重要的。就比如说在一个学校的社交网络中,可能一个班级的同学他们的节点是相邻的,但是同寝室的他们的关系会更密切一点,也就是边的权重会更大一点,而deepwalk没有考虑到这些,这是我的看法。
DeepWalk论文详解相关推荐
- GeniePath:Graph Neural Networks with Adaptive Receptive Paths 论文详解 AAAI2019
文章目录 1 相关介绍 1.1 感受野的定义 贡献 2 图卷积网络GCN GCN.GraphSAGE.GAT Discussions 3 GeniePath 3.1 Permutation Invar ...
- 智能城市dqn算法交通信号灯调度_博客 | 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型...
原标题:博客 | 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型 国际数据挖掘领域的顶级会议 KDD 2018 在伦敦举行,今年 KDD 吸引了全球范围内共 1480 篇论文投递,共 ...
- Fast R-CNN论文详解
Fast R-CNN论文详解 作者:ture_dream &创新点 规避R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取: 用RoI pooling层取代最后一层max po ...
- 限时9.9元 | 快速领取数学建模竞赛备战必备技巧与论文详解!
全世界只有3.14 % 的人关注了 青少年数学之旅 大家晚上好,随着美赛时间的公布以及大大小小的数学建模竞赛的进行,小天经常可以收到来自很多小伙伴们提出的问题,"竞赛中如何去考虑选题?&qu ...
- transfromer-XL论文详解
transfromer-XL论文详解 – 潘登同学的NLP笔记 文章目录 transfromer-XL论文详解 -- 潘登同学的NLP笔记 Vanilla Transformer Segment-Le ...
- KernelGAN论文详解分享
KernelGAN- Blind Super-Resolution Kernel Estimation using an Internal-GAN论文详解 论文地址:https://arxiv.org ...
- ShuffleNetv2论文详解
ShuffleNet v2 论文详解 近期在研究轻量级 backbone 网络,我们所熟悉和工业界能部署的网络有 MobileNet V2.ShuffleNet V2.RepVGG 等,本篇博客是对 ...
- 【论文精读3】MVSNet系列论文详解-P-MVSNet
P-MVSNet全名为"P-MVSNet: Learning Patch-wise Matching Confidence Aggregation for Multi-View Stereo ...
- Spark RDD 论文详解(三)Spark 编程接口
前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...
最新文章
- DataGridView发生异常
- 神经网络中的权重初始化常用方法
- java token认证机制,OAuth认证协议原理分析及使用方法
- 结对编程:黄金点游戏
- 大数据学习(0)-大数据知识框图
- 学 Python 最大的 1 个误区,看看你中招了吗?
- jsp 嵌入java_关于JSP里的Java语句嵌入问题
- Perl中的替换(七)
- 【Oracle】三种方式查看SQL语句的执行计划
- 《机器学习Python实践》第4章——Python和SciPy速成
- 一、网络安全专有名词汇编详解(黑话指南)-史上最全
- redis 菜鸟教程
- 大数据实战第十六课(上)-Spark-Core04
- SVM支持向量机,函数间隔为什么取1
- 计算机网络英语作文150字,微信投票的英语,写一篇关于网络投票看法的英语作文150字左右...
- React中文文档 7. 条件渲染
- simplexmlelement object php,php – 访问SimpleXMLElement对象的某些属性
- ubuntu开机登录,操作技巧,嵌入式命令等
- 在React中解析渲染markdown文件
- c语言序数英文,(英语 )序数词第一至40怎么写序数词第一至40怎么写?谁帮个忙...