首页 > 其他分享 >GNN学习 GNN Model

GNN学习 GNN Model

时间:2023-07-22 23:35:35浏览次数:32  
标签:聚合 embedding 学习 神经网络 邻居 Model GNN 节点

GNN学习 GNN Model

这部分主要讲如何使用图神经网络GNN来进行节点嵌入

我们首先会想到,将邻接矩阵和特征合并到一起应用到深度神经网络上,问题在于:

  • 需要O(|V|)的参数
  • 不适用于不同大小的图
  • 对节点顺序敏感

我们可以将卷积神经网络泛化到图上,并应用的节点特征数据

但是图没有固定的滑动窗口,并且图的节点顺序不固定

但是我们可以模仿图片结构,聚合节点的邻居信息

Graph Convolutional Network

通过邻居节点定义计算图,传播并且转换信息,最后计算出节点表示

主要想法:通过聚合邻居来生成节点嵌入

我们可以通过节点邻居定义计算图

深度模型

深度模型可以有很多层,并且可以有任意的深度

  • 节点在每一层都有不同的表示向量
  • 第0层的节点u的嵌入是节点最开始的特征
  • 第k层是节点通过聚合k层所形成的表示向量

每一层节点嵌入都是邻居上一层节点的嵌入再加上它自己

聚合策略(aggregation strategies)

不同邻居信息聚合方法的差别就是在于如何跨层聚合邻居节点信息

聚合方法必须是与顺序无关的

基础方法:从邻居中获取信息求平均,再应用神经网络

深度encoder

\(h_0^v=x_v\)

\(h_v^{l+1}=\sigma(W_l {\sum_{u\in N(v)}}\frac{h_u^l}{\left | N(v) \right | } +B_lh_v^l ), \forall l \in {0,..L-1}\)

\(z_v=h_v^l\)

解释

h表示embedding,上标表示神经网络层数,下标表示哪个节点

W,B都表示一个矩阵

前面的这个累加的表示前一层邻居节点的平均,N(v)表示v的邻居节点集合

\(\sigma\)表示一个非线性的层,比如ReLU

\(z_v\)是最终节点的embedding

我们最终训练的时候需要训练B和W

W是邻居聚合的权重矩阵

B是转换节点自身隐藏向量的权重矩阵

embedding的矩阵形式

\(H^l=[h_1^l...h_{|V|}^l]^T\)

\(\sum_{u\in N_v}h_u^l=A_{v,:}H^l\)

A是邻接矩阵,其中\(A_{v,:}表示起始为v的所有向量\)

D是对角矩阵

\(D_{v,v}=Deg(v)=|N(v)|\)

\(D^{-1}_{v,v}=1/|N(v)|\)

所以:

\(\sum_{u\in N(v)}\frac{h_u^{l-1}}{\left | N(v) \right | }\Longrightarrow H^{l+1}=D^{-1}AH^l\)

最终形式如下:

\(H^{l+1}=\sigma(\tilde{A}H^lW^T_l+H^lB_l^T)\)

其中\(\tilde{A}=D^{-1}A\)

训练

定义损失函数

有监督训练:

\(min\mathcal{L}(y,f(z_v))\)

回归问题可以用L2 Loss,比如均方误差

分类问题可以用交叉熵损失函数

无监督训练:

相似的节点有相似的embedding

\(\mathcal{L}=\sum_{z_u,z_v}CE(y_{u,v},DEC(z_u,z_v))\)

当节点u和v相似时\(y_{u,v}=1\)

CE就是cross entropy

DEC就是decoder,比如内积

标签:聚合,embedding,学习,神经网络,邻居,Model,GNN,节点
From: https://www.cnblogs.com/anewpro-techshare/p/17574507.html

相关文章

  • Django学习笔记:第三章D的路由和视图
    1.网站的入口--路由和视图URL是网站Web服务的入口。用户在浏览器输入URL发出请求后,django会根据路由系统,运行对应的视图函数,然后返回信息到浏览器中。1.1认识路由创建项目时,会自动生成urls.文件,文件中定义了项目的路由信息,成为项目的路由解析入口。在自建的应用中可以手动配置......
  • AI夏令营-机器学习
    目录1.安装anaconda2.jupyternotebook3.AI环境配置更换镜像源更换conda镜像源pypi更换镜像源pip安装需要的库安装pytorch4.baseline运行1.安装anaconda去清华开源镜像站下载安装包https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/安装的时候这一步记得勾选路径......
  • springboot3.0 从入门到高级学习路线,技术精讲?
    springboot3.0从入门到高级学习路线,技术精讲?学习SpringBoot3.0的技术精讲需要经历以下几个阶段:阶段一:基础知识学习1.Java基础:熟悉Java编程语言及面向对象的基本概念和语法。2.Spring基础:了解Spring框架的核心概念和基本用法,包括依赖注入、AOP等。3.SpringBoot基础:学习Spr......
  • Meta Learning(元学习)
    MetaLearning(元学习)元学习:学习如何学习:也是找一个函数,这个函数是学习算法,输出训练好的模型假如教机器做了训练影像分类、影像识别等任务的模型,再去教机器训练语音识别的模型时,他可能学的更好,虽然语音和影像没有什么关系,但机器在多次的学习训练其他模型过程中,可能学到了如何去......
  • cmake学习之-嵌套式cmake
    注意,此贴只是记录学习所得,并不是教程本人的帖子项目中会有很多cmake嵌套使用的情况总分式嵌套cmake的父子关系注意的式父节点的定义可以在子节点中使用,儿子节点只能在自身使用,称为继承1.顶层cmake的寻找方法add_subdirectory(子节点对应文件目录、、),其中只有第一个参数我......
  • 【学习笔记】Git
    Git一、git的安装1.官网:Git(git-scm.com)速度较慢2.淘宝镜像:http://npm.taobao.org/mirrors/git-for-windows/速度快 下载完后直接无脑安装这一步是选择git的默认文本编辑器,我的选择是vscode 安装完成后,鼠标右键,打开GitBashHere就能看到git的命令窗口了。安......
  • pytorch深度学习基础模型
    激活函数作用在网路的中间层,允许输出函数在不同的值上具有不同的斜率,这些不同斜率的部分可以近似任意函数。在网络的最后一层,可以将线性运算的输出限制在指定范围内。具有的性质非线性:非线性允许整个网络可以近似更复杂的函数。可微:可以通过梯度来更新。至少有一个敏感区域......
  • cmake学习之-宏定义
    cmake的宏定义学习cmake的宏定义是用来添加c文件中的ifdef的,宏定义添加方法1.在编译的时候添加,如上图所示,注意要-D作为标注2.add_definitions若要定义多个宏,可以宏和宏之间用空格,或者换行写......
  • 概述增强式学习(Reinforcement Learning)
    概述增强式学习(ReinforcementLearning)SupervisedLearning(自监督学习):告诉机器输入和输出,用有标注的训练资料训练出的NetworkReinforcementLearning(增强式学习):给机器一个输入,我们不知道最佳输出是什么(适用于标注困难或者人也不知道答案是什么)(机器需要知道什么是好,什么是......
  • MarkDown学习
    MarkDown学习一级标题二级标题三级标题...标题:#+空格+标题名(几集标题对应几个井号,最多六级标题字体helloworld!两边一个星号*斜体helloworld!两边两个星号**加粗helloworld!两边三个星号***斜体且加粗helloworld!两边两个~~画横线引用箭头符号>空格接引用的......