A gentle introduction on gnn
发表在distill的文章
图神经网络在应用上才刚刚开始
搭建了一个GNN playground
图是表示实体之间的关系
可以分别表示成点向量、边向量、图向量
图可以分为有向图和无向图
图片表示成图:
把图上的每一个像素都映射成图上的一个点
边是像素之间的关系
文本表示成图:
上一个词和下一个词之间有一条有向边
化学表示图:
每一个原子表示成一个点
社交网络表示成一个图:
人物在场景里同时出现
数据集:
Qm9 化学分子式
Cora 论文引用
wikipedia 知识图 引用图
图层面
比如给一张图,对图进行分类
顶点层面
节点分类
边层面
边的属性预测
图的四个属性:点属性、边属性、图的全局属性、连接性
连接性可以通过邻接矩阵来表示
存储高效并且存储无关的
对于点、边、图,分别构造一个MLP
进去以后得到了更新后的三种向量
比如做节点二分类,就在后面加一个输出维度为2的全连接层,再加一层softmax,就可以得到输出。
如果是n类,就加一个输出维度为n的全连接层,再加一层softmax。
pooling
对一个点的向量做预测
把全局向量、边的向量加起来;不过维度要一致,否则要做投影
所有边和顶点的向量加起来,可以得到全局的向量
总结
GNN一个层里就是三个MLP,对原图做transform
在图转换为向量以后,加一个分类层就可以做预测了
但是这种方法有局限性,没有考虑到连接信息,没有把图的信息更新到结构里
aggregate 把邻居的向量加起来,聚合后,再更新
这里相当于卷积,但是权重都是一样的
顶点和边之间的交换
可以交替交换
全局信息的交换
Master node
这个点是一个虚拟的点,可以和所有的点和边相连
把所有的顶点和边的信息都拿过来汇聚
这样对三类属性都可以学到预测的向量
其实有点像attention mechanism
基于消息传递的图神经网络
把gnn的训练程序嵌入到javascript
在浏览器里运行的
可以选图神经网络有多少层
可以改变超参数,重新进行训练
这个东西超参数比较难调
不同类型的图
可能有很多别的图,比如multigraph,比如图可能是分层的
采样
如果图太大,可能要做采样
随机采样一些点,把这些点的邻居找出来,只在子图上做计算,减少内存
做随机游走,规定最多随机走几步,就可以得到子图
batch
inductive biases
gnn的假设是保持了图的对称性
不同的汇聚操作
求和、求平均
没有一个聚合的操作是比另一个更好的
所以在实际应用中可能要找一个适合的办法
GCN
GCN就是带了aggregation的神经网络
每一个点都是以自己为中心的往前走k步的子图的汇聚
GCN可以认为是有n个子图
dual
可以做对偶
在图上做卷积,做random work,都是在矩阵上做乘法
和pagerank的思想有点像
GAT
在图上做汇聚的时候每个点的权重是相同的
卷积的权重是对位置不敏感的
所以可以用注意力机制的的办法
做点乘,以后做softmax
图的可解释性
图到底学到了什么东西
写作:非常流畅
gnn就是对属性做变换,但是不改变图的结构
怎么做预测,就是最后做输出层
如果有缺失可以用一个聚合的操作,弥补缺失的属性
消息交换,可以通过汇聚的方法把图上的信息进行汇聚
实验部分对于每个超参数对结果的影响是怎么样的
最后对gnn相关的技术进行了展开
交互图蕴藏了很多信息,美观直观
图既是一个优点也是一个缺点,图数据的可视化是比较难的
distill写作的门槛太高
尽量的使用图和文字来描述,而不是公式和代码
在图上做优化是很难的,因为它的架构很稀疏
图神经网络对超参数很敏感
所以图神经网络的门槛比较高
图神经网络在工业界的应用是比较少的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
我怀念ipython的一件事是它有一个?为特定功能挖掘文档的运算符。我知道ruby有一个类似的命令行工具,但是我在irb中调用它非常不方便。ruby/irb有类似的东西吗? 最佳答案 Pry是IPython的Ruby版本,它支持?命令来查找有关方法的文档,但语法略有不同:pry(main)>?File.dirnameFrom:file.cinRubyCore(CMethod):Numberoflines:6visibility:publicsignature:dirname()Returnsallcomponentsofthef
写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
我经常使用嵌套数据结构,很多时候我必须从控制台手动分析它们。问题是它们全部打印在一行中。是否有一种简单的方法可以根据{,[,],}和逗号重新构造数据结构的显示,使其看起来像Ruby的pretty_print输出? 最佳答案 :%s/\([{,]\)/\1\r/gggVG=:setft=ruby呜呜呜 关于ruby-如何将Vim中的"expand"文本转换成一种易于阅读的方式?,我们在StackOverflow上找到一个类似的问题: https://stacko
TCP是面向连接的协议,连接的建立和释放是每一次面向连接的通信中必不可少的过程。TCP连接的管理就是使连接的建立和释放都能正常地进行。三次握手TCP连接的建立—三次握手建立TCP连接①若主机A中运行了一个客户进程,当它需要主机B的服务时,就发起TCP连接请求,并在所发送的分段中用SYN=1表示连接请求,并产生一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x。主机B收到A的连接请求报文,就完成了第一次握手。客户端发送SYN=1表示连接请求客户端发送一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x②主机B如果同意建立连接,则向主机A发送确认报
软件特点部署后能通过浏览器查看线上日志。支持Linux、Windows服务器。采用随机读取的方式,支持大文件的读取。支持实时打印新增的日志(类终端)。支持日志搜索。使用手册基本页面配置路径配置日志所在的目录,配置后按回车键生效,下拉框选择日志名称。选择日志后点击生效,即可加载日志。windows路径E:\java\project\log-view\logslinux路径/usr/local/XX历史模式历史模式下,不会读取新增的日志。针对历史文件可以分页读取,配置分页大小、跳转。历史模式下,支持根据关键词搜索。目前搜索引擎使用的是jdk自带类库,搜索速度相对较低,优点是比较简单。2G日志全文搜
我正在使用Watir进行自动化,它会创建一封我需要检查的电子邮件。有人指出电子邮件gem是执行此操作的最简单方法。我添加了以下代码,并且能够从我的收件箱中收到第一封电子邮件。require'mail'require'openssl'Mail.defaultsdoretriever_method:pop3,:address=>"email.someemail.com",:port=>995,:user_name=>'domain/username',:password=>'pwd',:enable_ssl=>trueendputsMail.first我是这个论坛的新手,有以下问题:如何获