其他
【源头活水】游走图模型-聊聊Node2Vec(论文分析、代码实践)
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
01
02
03
边参数定义
04
def node2vec_walk(graph, nodes, max_depth, p, q):
# 初始化 walks的起点为nodes
初始化: walks, succ = nodes, graph.succssor(nodes)
prev_succ, prev_node = [-1], [-1]
for l in range(max_depth):
# node2vec_sample 选出下一个点的函数
sampled_succ = node2vec_sample(succ, prev_succ, prev_node, p, q)
walks.append(sampled_succ)
prev_nodes, prev_succs = cur_nodes, cur_succs
cur_nodes = sampled_succ
return walks
def node2vec_sample(succ, prev_succ, prev_node, p, q):
succ_len = len(succ)
prev_succ_len = len(prev_succ)
probs = list()
prob_sum = 0
prev_succ_set = list()
for i in range(prev_succ_len):
prev_succ_set.insert(0, prev_succ[i])
# 计算node2vec的各边权重
for i in range(succ_len):
if succ[i] == prev_node:
prob = 1. / p
elif len(prev_succ_set) > 0 and succ[i] != prev_succ_set[-1]:
prob = 1.
else:
prob = 1. / q
probs.append(prob)
prob_sum += prob
rand_num = random.uniform(0, 1) * prob_sum
for i in range(succ_len):
rand_num -= probs[i]
if rand_num <= 0:
sample_succ = succ[i]
return sample_succ
05
multi-label classification
06
https://zhuanlan.zhihu.com/p/390705175
07
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
“源头活水”历史文章
CVPR 2021 | 让机器想象未见的世界:反事实的零次和开集识别
解耦表示,理解用户的多样偏好和意图
REPAINT:深度强化学习中的知识迁移
Transformer 的稳健性更好吗?
读SfM-Net: Learning of Structure and Motion from Video
Conditional DETR: 通过显式寻找物体的 extremity 区域加快 DETR 的收敛
谷歌和CMU论文:使用元学习生成伪标签
Deep GNN评测,模型退化是做不深的主要原因!
CVPR2021:Spatial在左,Temporal在右,如何缓解视频动作理解中的隐式偏见之殇?
CVPR2021自监督学习论文: 理解对比损失的性质以及温度系数的作用
GAN,没错,生成对抗网络也可以被用于时间序列预测
开放世界实体分割 Open-World Entity Segmentation
ICCV‘21 | 具有样本特定触发器的隐形后门攻击
ACL2021: 对比学习还能这样用?提升多语言机器翻译性能
更多源头活水专栏文章,
请点击文章底部“阅读原文”查看
分享、在看,给个三连击呗!