【intro】图卷积神经网络(GCN)-续

本文为【intro】图卷积神经网络(GCN)-CSDN博客后续(因为经验告诉我超过2w字编辑器就会卡……)

第一部分还是进一步再看看GCN

图卷积神经网络GCN_哔哩哔哩_bilibili

回顾

图神经网络的基本原理就是把图中的节点编码映射成一个低维、连续、稠密的d维向量。这里的d比如128、256。把图中的每一个节点编码成128(or256)维的向量,而这个向量是一维连续稠密的,能够反映这个节点在原图的连接和属性关系。两个节点对应的两个向量在d维空间的相似度,可以反映这两个向量(节点)在原图的相似度

我们要学习的就是这个f函数,我们把图输入给这个函数,会输出每一个节点的embedding(嵌入)。在d维空间的嵌入,向量之间的距离就可以表示节点在原图中的距离和关系。

当然,我们也可以获得子图或者整张图的embedding,来解决各种各样的问题(都可以通过节点embedding向量加一个预测头解决,但是前提是这个节点embedding的d维向量的质量要足够高,足够能反映信息和语义)

图卷积神经网络

计算图

对于图这种没有顺序、参考点而言,我们不能直接把图输入神经网络中,更遑论卷积神经网络了。而是需要通过消息传递的框架去构建局部领域的计算图。

上图左侧为原图,A节点的计算图就是它的一阶邻域(B、C、D三个节点),再看一阶邻域的邻居,B就是A和C,C节点就是ABEF,D就是A。->构建A点的两层神经网络的消息传递的计算图

图中黑色的矩形就是第一层神经网络,灰色的矩形是第二层神经网络->也就是三个黑色矩形共享同一套权重(同一个神经网络)

每个节点可以分别构建出自己的计算图,训练图神经网络的时候,每一个计算图就是一个样本->如果batch size=8,那就是8个这样的计算图输入到网络中去

其实,在两层神经网络中只有两个神经网络。

图神经网络的层数并非神经网络的层数,而是指计算图的层数。而这个黑色矩形中具体神经网络的层数可以有很多。

在第0层输入到图神经网络中的是节点的属性特征(样本自带的属性)不需要学习,比如用户的年龄、学历、婚姻状况、收入etc。我们的目标是输入所有节点的属性特征,通过层层的消息传递、信息汇聚,得到这个节点最终的embedding 向量。

一层神经网络就对应了一个hop的neighborhood,k层就对应了k-hop neighborhood->层数越多,邻居的个数就越多->感受野就越大(覆盖的节点就越大)

不能让图神经网络无限深,if深++,then所有节点的计算图最后都很类似->会产生过平滑(over smoothing)->所有节点的embedding最后都会收敛到同一个值(所有节点的embedding都一样)

通过层层的消息传递,得到节点最终的embedding

以GCN为例。假设每个节点都有128维的属性特征。计算B节点的embedding,就是A和C两个节点的属性特征逐元素求平均,得到一个新的128维的向量,输入到黑色矩形中,输入128维,输出512维,得到B节点的向量,对于C节点就是四个节点ABEF的属性特征逐元素求平均,输入,得到C节点的向量。D节点就是直接输入A节点的属性(128维的embedding)->GCN的第一层

(弹幕:这里输入大小不同,那不就说明神经网络是不一样的吗?
噢噢,我知道了,是逐元素求平均得到128维,所以神经网络是输入128维,输出512维,共享参数没毛病

那么第二层就是把BCD这三个512维的向量逐元素的求平均,得到一个新的512维向量,输入白色矩形中,输出一个256维的向量,此向量为A节点最终的embedding,作为A节点的输出。

逐元素求平均与顺序无关(order invariant/permutation invariant),当然不仅仅只能用求平均,也可以采用取最大值、求和等操作。这些操作都与顺序无关。

在计算图中的矩形是什么呢?可以是多层感知器、全连接神经网络etc

我们要做的就是训练两个神经网络的权重(白色和黑色矩形)

当我们训练完之后,我们就直接把各个节点的属性特征输入进去,跑一下神经网络,就能得到最终A节点的embedding了。

⬆️小结

数学形式

可以调整输入输出神经元的维度(前面的例子128 512 256)

h_v^{(0)}:v节点在第0层的embedding(即属性特征)

如果一个节点没有属性特征,可以强行全部设为1,或者设置成one-hot的形式

第k+1层,v节点的embedding是由第k层v节点的邻域节点u算出来的。先找到v节点的所有邻居节点,以C节点为例,u就是ABEF四个节点,把k层u的embedding加起来求和,再除以C节点的连接数(4)->就是求平均

将得到的新的向量输入到nn中,再经过一个激活函数->得到k+1层v节点的embedding

z_v:v节点最后输出的embedding。比如图中的例子,这里的K表示总共有几层(这里K=2)

这里,我们将第K层每一个节点的embedding都写成矩阵中的一行H^{(k)},给这个H^{(k)}左乘一个邻接矩阵A的第v行,就相当于把v节点的邻域节点的embedding向量挑出来了。

只要邻接矩阵是1(两个节点相连),自然就把对应的特征挑出来了

OK,求和搞定了,下一个就是怎么求平均:

设置矩阵D(度矩阵),是一个对角阵,对D矩阵求逆(就是对角线上的值变成倒数)

D^{-1} A H^{(k)}

求平均

OK,现在我们拿到了矩阵的表示形式

按照这种方式,是暴力求平均,而没有考虑不同的节点的情况,比如这个例子里舔狗D明显纯舔,舔狗C都脚踏不知道多少条船了,当然A感受到的是不一样的。

解释一下这个幅值变小(相当于对向量做线性变换,本来长度是1,在-1到1之间就是长度变短了)

如果一个向量左乘了A矩阵,代表对这个向量进行线性变换,线性变换后向量的方向没变,长度变为原来的\lambda

OK,现在的数学表示变成:

 

这里可学习的参数是W^{(l)},权重矩阵

改进

那么此时,我们给每个节点都加一个引向自己的连接

进一步扩展,邻域和self embedding使用不同的权重:

讨论

怎样训练

如果采用监督学习的方式,通过最小化损失函数进行训练(比如交叉熵损失函数)

如果是无监督,使用图自身的结构,类似DeepWalk、Node2Vec,让原图中直接向量的两个点学到的向量更接近。

对于无监督,把两个节点分别输入GNN,得到两个d维向量,直接算这两个d维向量的点乘(其实就是余弦相似度)->希望余弦相似度能直接反映两个节点在原图中的关系。->越接近1(大)越好

优点

GNN可以泛化到新节点

直推式学习的缺点

EF节点的计算图像->这两个节点的结构、功能、角色特征相似

小结: 

这些缺点GNN都可以弥补:

表示能力很赞哦(没有经过训练的nn就可以做到区分)

参数是共享的,可学习参数是固定的(参数是共享的)

总结

GNN与其他NN的关系

CNN

卷积神经网络也可以被看作是一个图神经网络。每个像素都有自己的邻居,比如上图最中间的1有8个邻居,CNN其实就是对这个8-邻域的信息进行汇总

区别在于CNN中,卷积核是需要学习的,但是在GCN中,是由normalized adjacency matrix预定义好的(不用学)

并且CNN不能调换像素位置

Transformer

transformer的本质是自注意力 ,使得每两个单词之间可以互相影响(可以抽象看作是一个全连接图)

->GAT(这个可以学权重)

这里权重是预先定义好的,不需要学

论文

https://arxiv.org/pdf/1609.02907

看了一下论文内容,前面基本上都cover了,这里略。

深入浅出了解GCN原理(公式+代码)_gcn公式-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/599663.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ是如何保证消息可靠性的?——Java全栈知识(16)

RabbitMQ 的消息不可靠也就是 RabbitMQ 消息丢失只会发生在以下几个方面: 生产者发送消息到 MQ 或者 Exchange 过程中丢失。Exchange 中的消息发送到 MQ 中丢失。消息在 MQ 或者 Exchange 中服务器宕机导致消息丢失。消息被消费者消费的过程中丢失。 大致就分为生…

CANdela/Diva系列1--CANdela Studio的基本介绍

大家好,这个系列主要给大家介绍跟诊断相关的Vector 工具CANdela和Diva,首先介绍CANdela。 目录 1.CANdela的简介: 2.如何打开CANdela 工程: 3.CANdela工程的详细介绍: 3.1 工具栏的介绍: 3.2 工作树的…

MobileNet网络详解

一、了解 网络亮点: 1、DW网络,大大减少运算量核参数数量 2、增加超参数:控制卷积层卷积核个数的超参数 ,控制图像输入大小的超参数 ,这两个超参数是人为设定的,不是机器学习到的。 二、DW卷积&#xff…

通信录的动态版本

一. 增加需求 在学习了动态开辟内存之后 我们对于通讯录产生了新的需求 要求我们做出一个动态增长的版本 即 随着我们储存联系人的增加 储存的空间增加 要求 : 1 初始空间为3 2 每次达到上限之后 扩容两个内存 二. 动手实施 我们首先要创建一个结构体 结构体…

普洱茶泡多少茶叶才算淡茶?

普洱茶淡茶一般放几克茶叶,品深茶官网根据多年专业研究与实践结果,制定了淡茶冲泡标准。在冲泡普洱茶淡茶时,茶叶的投放量是关键因素之一。淡茶冲泡标准旨在保持茶汤的清爽口感,同时充分展现普洱茶的独特风味。 根据《品深淡茶冲…

uniapp日期区间选择器

uniapp日期区间选择器 在 uniapp 中创建一个简单的自定义日期范围的日期区间选择器: - 限制有效日期范围开始日期为 2024-01-01,结束日期为当日; - 默认日期区间为当日向前计算的7日区间; - 选择开始时间后,判断不可大…

【Pytorch】6.torch.nn.functional.conv2d的使用

阅读之前应该先了解基础的CNN网络的逻辑 conv2d的作用 是PyTorch中用于执行二维卷积操作的函数。它的作用是对输入数据进行二维卷积操作,通常用于图像处理和深度学习中的卷积神经网络(CNN)模型。 conv2d的使用 我们先查看一下官方文档 inpu…

【前端学习——正则】

https://www.bilibili.com/video/BV1da4y1p7iZ/?spm_id_from333.337.search-card.all.click&vd_source5cef5968d539682b683e7d01b00ad01b 学习网站 https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md

笔记本连接不上远程桌面,笔记本无法连接远程桌面的可能原因及解决方法

在使用远程桌面功能时,笔记本无法成功连接的情况可能由多种原因引起。为了有效地解决这个问题,我们需要逐一排查这些可能的原因,并采取相应的解决措施。 首先,网络连接稳定性是远程桌面连接成功的关键。请确保笔记本和远程计算机之…

深入剖析Spring框架:推断构造方法与@Bean注解的内部机制

你好,我是柳岸花开。 Spring框架作为Java开发中广泛使用的基础架构,其设计精巧、功能强大,尤其是其依赖注入(DI)和控制反转(IoC)特性,极大地提高了代码的可维护性和可测试性。本文将…

125.两两交换链表中的节点(力扣)

题目描述 代码解决及思路 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), …

基于TF的简易关键字语音识别

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计10182字,阅读大概需要10分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#…

[Scrcpy]数据线连接安卓手机投屏windows电脑[win控制安卓手机]比Samsung Dex好用

配置好,只需要两步即可完成安卓手机投屏windows 第一步:usb线连接windows电脑 第二步:cmd输入投屏命令srccpy 搞定 前言/背景 一些视频资料只能下载到手机,很不喜欢手机那么小屏幕播放,播放很不方便 在家的话可以投…

上位机图像处理和嵌入式模块部署(树莓派4b镜像烧录经验总结)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 陆陆续续也烧录了好多次树莓派的镜像了,这里面有的时候很快,有的时候很慢。特别是烧录慢的时候,也不知道是自己…

Unity EventSystem入门

概述 相信在学习Unity中,一定有被UI事件困扰的时候把,当添加UICanvas的时候,Unity会为我们自动添加EventSystem,这个是为什么呢,Unity的UI事件是如何处理的呢,在使用各个UI组件的时候,一定有不…

流量暴涨!抖音+快手+小红书获客攻略!

在数字营销的海洋中,抖音、快手和小红书无疑是三座巨大的灯塔,照亮了品牌和个人获取流量的道路。这些平台不仅拥有庞大的用户基础,而且其独特的算法和社交特性让获客变得更加高效而精准。接下来,让我们深入探讨如何通过这三个平台…

linux系统 虚拟机的安装详细步骤

window: (1) 个人:win7 win10 win11 winxp (2)服务器:windows server2003 2008 2013 linux: (1)centos7 5 6 8 (2)redhat (3)ubuntu (4)kali 什么是linux: 主要是基于命令来完成各种操作,类似于DO…

上位机图像处理和嵌入式模块部署(树莓派4b代码优化)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 我们把程序从pc端port到嵌入式开发板上面,好处是降低了部署成本,代价是牺牲了设备性能。所以等到程序真正在开发板子上面运…

《QT实用小工具·六十》Qt 多列时间轴控件

1、概述 源码放在文章末尾 Qt 多列时间轴控件。 可与多段字符串格式自由转换,也可手动添加列表项。 专门用来以时间轴作为事件线发展顺序的故事大纲。 特点 时间背包功能:记录所有物品或属性发生的变化,随时回溯 时间可输入任意内容&…

改进猫群算法丨多车场多车型路径问题求解复现

车间调度系列文章: 1、路径优化历史文章2、路径优化丨带时间窗和载重约束的CVRPTW问题-改进遗传算法:算例RC1083、路径优化丨带时间窗和载重约束的CVRPTW问题-改进和声搜索算法:算例RC1084、路径优化丨复现论文-网约拼车出行的乘客车辆匹配及…