• 图神经网络学习笔记


    1 图神经网络应用

    芯片设计、场景分析问题推理、推荐系统、欺诈检测风控相关、道路交通动态流量预测、自动驾驶、无人机等、化学医疗等场景

    2 图神经网络基本组成

    点(vertex)、边(edge)、全局图(global),图神经网络(GNN,Graph Neural Network)主要作用还是跟传统神经网络的作用一样——特征提取,只是提取特征的方式和提取特征的目标不一样。图神经网络主要是为了提取整个图的全局特征而诞生的。

    无论图神经网络多么复杂,利用图神经网络的目的就是整合特征

    图神经网络最重要的两个点:1.自身权重矩阵 2. 邻接矩阵

    核心思想:万物皆可转化为图

    3 GNN常见任务

    • 图像和文本任务中,你用过图相关的模型吗?好像木有吧
    • 为啥呢?因为图像和文本数据的格式都贼固定,想一想咱们的预处理
    • 所有图像resize成固定大小,然后进行卷积操作得到特征,格式很固定
    • 文本固定长度和词向量大小,然后也是这么个事,不需要特殊的邻接矩阵
    • 在我们平时的图像或者NLP任务中,我们的输入训练数据格式都是统一的,特别是图像,都由像素点构成,格式很固定,然而对于NLP来讲,我们的输入数据的格式虽然都是固定的,但是通过数据预处理来实现的,大多多退少补,这样会导致语义信息的缺失,从而使得输入的信息不够完整。

    结论GNN适合输入数据格式不固定的任务,哪怕100个输入数据格式都不一样,也可以放入GNN进行训练提取特征,输入输出任务可以自己设计。但前提是必须有图结构

    4 图神经网络消息传递计算方法

    首先要获取到整张图的邻接矩阵,即得到整张图的结构

    每个点的特征该如何更新呢?肯定得考虑他们邻居的

    具体步骤如下:

    1. 聚合操作可以当作全连接层.

    2. 但是更新的方法有很多,可以自己设置

    3. 结合邻居信息和自身信息:
      m ˉ i = G ( { W j ⋅ x j : j ∈ N i } ) \bar{m}_i=G\left(\left\{\mathbf{W}_j \cdot x_j: j \in \mathcal{N}_i\right\}\right) mˉi=G({Wjxj:jNi})

    4. 汇总:
      h i = σ ( W 1 ⋅ h i + ∑ j ∈ N i W 2 ⋅ h j ) h_i=\sigma\left(W_1 \cdot h_i+\sum_{j \in \mathcal{N}_i} \mathbf{W}_2 \cdot h_j\right) hi=σW1hi+jNiW2hj

    在这里插入图片描述

    5 多层GNN

    GNN的本质就是更新各部分特征

    其中输入是特征,输出也是特征,邻接矩阵也不会变的

    在这里插入图片描述

    每次每个点通过周围点迭代更新自身权重,随着迭代,图神经网络的感受野会越来越大,慢慢的每个点会拥有全局图的特征

    在这里插入图片描述

    6 图卷积神经网络

    图卷积神经网络与卷积神经网络就像老婆与老婆饼、java和javascrit的区别,原理几乎完全不一样,卷积神经网络提取局部特征图卷积神经网络提取全局图的特征,图卷积神经网络并不应用到图像中

    如何获取特征呢?

    1. 别再绞尽脑汁各种套路一顿想了 ,交给神经网络神经网络就得了
    2. 通常交给GCN两个东西就行: 1.各节点输入特征; 2.网络结构图

    图卷积神经网络并不是一个完全有意义的有监督学习

    这个也是GCN优势;不需要全部标签;用少量标签也能训练;计算损失时只用有标签的

    许多点是未知的甚至不确定的,实际情况是并不是所有点都有标签,也可以看做是一个半监督的模型,在计算损失的时候只计算有标签的节点

    7 GCN特征计算方法

    其实就是邻接矩阵与特征矩阵进行乘法操作,表示聚合邻居信息

    有些小问题:光想着别人,没考虑自己。只需要在邻接矩阵加上自己就可以啦:
    A ~ = A + λ I N \tilde{A}=A+\lambda I_N A~=A+λIN

    矩阵scale

    目前公式变成了:
    D ~ − 1 ( A ~ X ) = ( D ~ − 1 A ~ ) X \tilde{D}^{-1}(\tilde{A} X)=\left(\tilde{D}^{-1} \tilde{A}\right) X D~1(A~X)=(D~1A~)X
    D的逆矩阵相当于scale方法了,但这一步就可以了吗?答案是还不够

    左乘相当于对行做归一化,那么列咋办呢?同理,所以咱们现在的公式:
    D ~ − 1 A ~ D ~ − 1 X \tilde{D}^{-1} \tilde{A} \tilde{D}^{-1} X D~1A~D~1X
    但这样列和行都做了一次归一化,幅度过大,那在公式基础上进行微调:
    D ~ − 1 / 2 A ~ D ~ − 1 / 2 X \tilde{D}^{-1 / 2} \tilde{A} \tilde{D}^{-1 / 2} X D~1/2A~D~1/2X

    8 GCN基本公式

    例如完成一个十分类任务的,F就为10表示输出层

    在这里插入图片描述

    其中:
    A ^ = D ~ − 1 / 2 A ~ D ~ − 1 / 2 \hat{A}=\tilde{D}^{-1 / 2} \tilde{A} \tilde{D}^{-1 / 2} A^=D~1/2A~D~1/2
    就是刚才我说的对左右都进行了归一化操作

    9 GCN层数

    理论上来说肯定越大越好;但是实际的图中可能不需要那么多;在社交网络中,只需6个人你可以认识全世界;所以一-般的GCN层数不会特别多

    在多个图数据集中,都可以发现两三层的比较合适,多了反而差了

    在这里插入图片描述

  • 相关阅读:
    一致性HASH算法介绍,附代码
    基本类型包装类
    K-means聚类算法一文详解+Python代码实例
    高校新生如何选择最优手机流量卡?
    数组传参及 &数组
    vivado设置Vscode为默认编辑器
    Matlab之查询子字符串在字符串中的起始位置函数strfind
    A-level生物知识点:真核细胞
    利用Promise优化Vue异步操作的方法
    Python正则表达式
  • 原文地址:https://blog.csdn.net/weixin_42200347/article/details/127922154