Enhanced Network Embeddings via Exploiting Edge Labels笔记

本文介绍了一种网络嵌入算法,旨在同时保留网络结构和结点间的关系信息,通过最小化结构损失和关系损失来学习结点的低维表示,适用于结点分类和关系预测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为要做KBQA,最近会看一些知识图谱相关的论文,这篇论文是network embeddings类看的第一篇,理解难免有误,望大佬指正。
原文链接:https://arxiv.org/abs/1809.05124?context=physics.soc-ph

摘要

Network Embedding 的工作就是学习得到低维度的向量来表示网络中的结点,低维度的向量包含了结点之间边的复杂信息。这些学习得到的向量可以用来结点分类,结点与结点之间的关系预测。当前的工作将结点间的关系示为二值的(即两结点间有无边),而忽略了边中丰富的语意信息。本文同时保护网络结构和结点间的丰富关系,进而学习network embedding。

引言

network embedding(网络嵌入)算法旨在学习网络结点的低维潜在表达 ,学到的embedding可用来结点分类、网络重建(network reconstrution)、链接预测(link prediction)。
在真实的social network中,结点间的social relations是非常复杂的。将Facebook看作一个线上social network,把人看做结点,因此,我们在学习network embedding时,应该获取人之间的关系,还应该获取关系类型。

相关工作

network embedding 的算法包括两种:非监督的和半监督的。
非监督的算法中的典型示例为DeepWalk,该算法主要分为两步,第一步,通过随机游走算法构建类似文本上下文的结点邻域,然后采用Skip-gram算法学习结点向量。后续一些工作遵循这种两步走的策略,在此基础上进行改进。
半监督的算法的算法采用label信息加强network embedding,这类算法通常假设每个结点都有一个相关的特征向量,输入网络中的结点部分被标记。典型算法有Planetoid、GCN、GraphSAGE。

算法

本文算法的主要思想是同事最小化结构损失(structural loss)和关系损失(relational loss),结构损失用于预测结点邻域,关系损失用于预测边的label。
所以整个算法的损失函数表示为:
L = ( 1 − λ ) L s + λ L r L=(1-\lambda)L_{s}+\lambda L_{r} L=(1λ)Ls+λLr
其中 L s L_{s} Ls是结构损失, L r L_{r} Lr是关系损失, λ \lambda λ为控制两者权重的超参数。

结构损失

图的表示为 G = ( V , E ) G=(V,E) G=(V,E), V V V是所有结点的集合, E E E是所有边的集合。假设给定一个中心结点 v ∈ V v\in V vV,该结构损失的目标是在给定 v v v的情况下最大化观察到其领域 C ( v ) C(v) C(v)的概率,目标函数为最小化以下公式:
L s = − ∑ u ∈ C ( v ) l o g P r ( u ∣ v ) L_{s}=-\sum_{u\in C(v)} logPr(u|v) Ls=uC(v)logPr(uv)
文章采用skip-gram目标来计算 P r ( u ∣ v ) Pr(u|v) Pr(uv),在skip-gram模型中,每个结点 v v v有两个不同的嵌入式向量 Φ ( v ) \Phi(v) Φ(v) Φ ′ ( v ) \Phi'(v) Φ(v) P r ( u ∣ v ) Pr(u|v) Pr(uv)计算如下:
P r ( u ∣ v ) = e x p ( Φ ( u ) ⋅ Φ ′ ( u ) ) ∑ u ′ ∈ V e x p ( Φ ( u ′ ) ⋅ Φ ′ ( u ) ) ) Pr(u|v)=\frac{exp(\Phi(u)\cdot \Phi'(u))}{\sum_{u'\in V}exp(\Phi(u')\cdot \Phi'(u)))} Pr(uv)=uVexp(Φ(u)Φ(u)))exp(Φ(u)Φ(u))
以上解决了基本的公式问题,还有一个未知的定义是领域 C ( v ) C(v) C(v),最直接的方法就是采用在 G : C ( v ) = { u ∈ E ∣ ( u , v ) ∈ E } G:C(v)=\{u\in E |(u,v) \in E\} G:C(v)={uE(u,v)E}与结点 v v v相邻的结点,即与结点 v v v有边链接的结点则作为其邻域。但是真实的网络往往是稀疏的,为了避免数据的稀疏问题,本文采用随机游走的策略,从每一个结点开始 r r r个长度为 l l l的随机步。在每个随机游走序列 S = { v 1 , v 2 , . . . , v l } S=\{v_{1},v_{2},...,v_{l}\} S={v1,v2,...,vl},迭代每个 v i ∈ S v_{i}\in S viS,采用窗口为 w w w的结点作为其邻域 C ( v ) = v i − w , . . . , v i − 1 ⋃ v i + 1 , . . . , v i + w C(v)={v_{i-w},...,v_{i-1}}\bigcup {v_{i+1},...,v_{i+w}} C(v)=viw,...,vi1vi+1,...,vi+w

关系损失

给定 e = ( u , v ) ∈ E e=(u,v)\in E e=(u,v)E,本文通过将结点embedding进行concat表示为边的embedding,即
Φ ( e ) = Φ ( u ) ⊕ Φ ( v ) \Phi(e)=\Phi(u)\oplus\Phi(v) Φ(e)=Φ(u)Φ(v)
然后将 Φ ( e ) \Phi(e) Φ(e)丢到前向神经网络中预测边的label。
假设 e e e的ground-truth标签向量为 y ∈ R ∣ L ∣ y\in R^{|L|} yRL ∣ L ∣ |L| L表示标签的数目,神经网络最后一层的输出为 y ^ \hat{y} y^,关系损失为:
L r = ∑ i = 1 ∣ L ∣ H ( y i , y ^ i ) = ∑ i = 1 ∣ L ∣ y i ⋅ l o g y ^ i + ( 1 − y i ) ⋅ l o g ( 1 − y ^ i ) L_{r}=\sum_{i=1}^{|L|}H(y_{i},\hat{y}_{i})=\sum_{i=1}^{|L|}y_{i}\cdot log\hat{y}_{i} +(1-y_{i})\cdot log(1-\hat{y}_{i}) Lr=i=1LH(yi,y^i)=i=1Lyilogy^i+(1yi)log(1y^i)

模型优化

如以下所示
在这里插入图片描述

实验

数据

  • ArnetMiner
  • AmazonReviews

Baseline

  • DeepWalk: 非监督
  • LINE:
  • node2vec
  • GCN:半监督

超参数设置

λ = 0.8 \lambda=0.8 λ=0.8,batchsize N 1 N 2 N_{1} N_{2} N1N2都为400,embedding的维度为128, 随机游走中, r = 80 , l = 10 , w = 10 r=80, l=10, w=10 r=80,l=10,w=10。评价指标为Macro F 1 F_{1} F1score

对比实验结果

参数敏感度分析

在这里插入图片描述
该图说明标记的边越多,Macro F 1 F_{1} F1score越好,说明本文算法能够利用边间丰富的语意信息。
在这里插入图片描述
上图主要是评价 λ \lambda λ的影响, λ ≠ 0 \lambda \ne 0 λ̸=0时,性能明显上升,说明关系损失引入是必要的,另外可以看出本文算法对 λ \lambda λ不敏感。
在这里插入图片描述
上图是分析embedding维度的影响,可以看出在维度达到128或者更高时,效果是最好的。

### 实现和运行 Enhanced Pix2pix Dehazing Network #### 准备环境 为了顺利实现并运行 Enhanced Pix2pix Dehazing Network (EPDN),首先需要准备合适的开发环境。推荐使用 Python 和 PyTorch 深度学习框架来构建此网络。 安装必要的库可以通过 pip 完成: ```bash pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113 pip install opencv-python matplotlib tqdm ``` #### 数据集获取与预处理 数据对于 EPDN 训练至关重要。通常情况下,可以采用公开的数据集如 SOTS 或者自定义采集带雾图片及其对应的清晰版本用于训练。确保输入图像尺寸一致,并进行适当裁剪或缩放操作以便于后续处理[^2]。 #### 构建多分辨率生成器 EPDN 中的核心组件之一就是其设计精巧的多分辨率生成器。该部分负责接收低质量含雾图象作为输入,并逐步提升至高质量无雾输出: ```python import torch.nn as nn class MultiResolutionGenerator(nn.Module): def __init__(self, input_nc=3, output_nc=3, ngf=64, n_downsampling=3, norm_layer=nn.BatchNorm2d): super(MultiResolutionGenerator, self).__init__() model = [nn.ReflectionPad2d(3), nn.Conv2d(input_nc, ngf, kernel_size=7, padding=0), norm_layer(ngf), nn.ReLU(True)] # 下采样层 for i in range(n_downsampling): mult = 2 ** i model += [ nn.Conv2d(ngf * mult, ngf * mult * 2, kernel_size=3, stride=2, padding=1), norm_layer(ngf * mult * 2), nn.ReLU(True)] # 上采样层 for i in range(n_downsampling): mult = 2**(n_downsampling-i) model += [nn.ConvTranspose2d( ngf*mult, int(ngf*mult/2), kernel_size=3, stride=2, padding=1, output_padding=1), norm_layer(int(ngf*mult/2)), nn.ReLU(True)] model += [nn.ReflectionPad2d(3), nn.Conv2d(ngf, output_nc, kernel_size=7, padding=0), nn.Tanh()] self.model = nn.Sequential(*model) def forward(self, x): return self.model(x) ``` #### 设计多尺度判别器 另一个重要模块是多尺度判别器,它帮助提高生成图像的真实性。通过不同层次特征的学习,使得最终合成效果更加自然逼真: ```python def create_discriminator(input_nc=3, ndf=64, n_layers=3, norm_layer=nn.BatchNorm2d): sequence = [ nn.Conv2d(input_nc, ndf, kernel_size=4, stride=2, padding=1), nn.LeakyReLU(0.2, True) ] nf_mult = 1 nf_mult_prev = 1 for n in range(1, n_layers): nf_mult_prev = nf_mult nf_mult = min(2 ** n, 8) sequence += [ nn.Conv2d(ndf*nf_mult_prev, ndf*nf_mult, kernel_size=4, stride=2, padding=1), norm_layer(ndf*nf_mult), nn.LeakyReLU(0.2, True) ] nf_mult_prev = nf_mult nf_mult = min(2 ** n_layers, 8) sequence += [ nn.Conv2d(ndf*nf_mult_prev, ndf*nf_mult, kernel_size=4, stride=1, padding=1), norm_layer(ndf*nf_mult), nn.LeakyReLU(0.2, True) ] sequence += [nn.Conv2d(ndf*nf_mult, 1, kernel_size=4, stride=1, padding=1)] return nn.Sequential(*sequence) ``` #### 增强器的应用 增强器旨在进一步优化由生成器产生的初步结果,在细节层面做出改进以达到更佳视觉体验的效果。这部分可以根据具体需求灵活调整算法逻辑[^1]。 #### 训练过程配置 完成上述各部件搭建之后,则需设定损失函数、优化策略以及迭代次数等参数来进行完整的训练流程设置。建议初期尝试较小规模实验验证可行性后再扩大样本量深入调参。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勤劳的凌菲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值