图神经网络

邻接矩阵

资料：
https://www.bilibili.com/video/BV1iT4y1d7zP/?spm_id_from=333.337.search-card.all.click&vd_source=99babd80fd00a8cf96fc562811962382

图神经网络的层数是计算图的层数，而不是神经网络的层数
图神经网络如果很深，那么每一个节点的值都一样了，所以不能很深，一般 2 层、3 层

v 节点周围节点找出方法（矩阵展示），

A 波浪线矩阵，只要你的图给定，他就是确定的，之后在很多 GNN 的文章中都会出现。

之前的计算图，A 节点只能汇聚别的节点的信息，但是需要自己获取自己的信息来表示自己

这下面两个公式是等效的，只是下面把领域节点和自己节点分开写了。但是他们是共用的一套权重

下面这个图片是领域节点和自己节点用两套权重

有监督学习
回归任务损失函数定义

分类任损失函数定义

无监督学习（图自身结果作为监督）

一、图神经网络（GNN）核心知识总结

1. 图神经网络在做什么？

一句话定义：

图神经网络是在图结构上，通过反复的 “邻居信息传递与聚合”，学习节点、边或整图表示的神经网络。

它解决的是：
非规则结构数据（图）如何进行可学习的表示学习。

2. 图神经网络的基本框架

整体流程

Copy
图结构 + 节点特征
↓
多层消息传递（Message Passing）
↓
节点 / 边 / 图的表示
↓
读出层（预测头）
↓
损失函数 + 反向传播

3. 消息传递（Message Passing）的本质

每一层消息传递包含三步：

消息构造（Message）
邻居节点的特征，经过一个可学习的变换（线性层 / MLP）

消息聚合（Aggregate）
把所有邻居的消息合成一个（Sum / Mean / Max / Attention）

节点更新（Update）
用聚合后的结果，更新当前节点的表示（神经网络）

其中：

神经网络主要出现在：消息构造和节点更新

聚合本身通常是无参数的

4. 为什么消息传递要用神经网络？

如果不用神经网络：

只是在做固定的邻居统计

等价于图上的扩散 / 平滑

信息会：

要么爆炸

要么消失

最终所有节点变得一样（过平滑）

使用神经网络的意义：

让模型学会
“哪些邻居重要、信息该怎么用、该改多少”。

5. 主流 GNN 模型的区别（GCN / GraphSAGE / GAT / R-GCN）

结论：

它们全部都是消息传递模型，
区别在于：消息怎么传、怎么聚、怎么区分邻居。

模型 | 主要解决的问题
GCN | 所有邻居一视同仁
GraphSAGE | 邻居太多，采样
GAT | 不同邻居重要性不同
R-GCN | 不同关系类型

6. GCN 中的归一化邻接矩阵

关键公式

Copy A sym=D−1/2 A D−1/2 A_{\text{sym}} = D^{-1/2} A D^{-1/2}Asym​=D−1/2AD−1/2

人话理解

给图上的信息传播加一个 “限速器”，
防止邻居多的节点声音太大。

7. “最大特征值 = 1” 是什么意思？

直觉解释：

特征值 ≈ 信息传播的 “放大倍数”

最大特征值 = 1 意味着：

信息不会越传越大（爆炸）

也不会越传越小（消失）

这是 GCN 数值稳定性的根源。

8. 特征值的直觉理解

一句话版：

特征值描述的是：
一个操作对某些 “信息方向” 的放大或缩小比例。

在 GNN 中：

反复乘邻接矩阵 = 反复传播信息

最大特征值控制传播是否稳定

9. 残差连接（Residual Connection）

定义

Copy h(k+1)=h(k)+F(h(k))h^{(k+1)} = h^{(k)} + F(h^{(k)})h(k+1)=h(k)+F(h(k))

本质理解

网络不直接学 “结果”，
而是学 “在原表示上的改变量（残差）”。

在 GNN 中的作用

防止过平滑

保留节点自身信息

支持更深的网络

10. 为什么叫 “残差连接”？

“残差” 来源于数学中的概念：

残差 = 真实值 − 当前估计值

在网络中：

网络学习的是 输出 − 输入

而不是输出本身

11. 读出层（Readout / Head）

不同任务的读出方式

节点任务：直接用节点表示

边任务：用两个节点表示组合

图任务：对所有节点再聚合一次（Sum / Mean / Attention）

12. 回归头 / 预测头 是什么？

一句话翻译：

“头” 就是模型最后负责出答案的那一小段网络。

Backbone：学表示

Head：把表示变成任务输出

13. 参数和损失函数在哪里？

可学习参数主要在：

消息构造（线性层 / MLP）

注意力权重（如果有）

节点更新

预测头

损失函数：

定义在最终输出上

通过反向传播更新所有参数

二、你在学习过程中提出的关键疑问整理

下面这一部分非常适合直接写进博客，体现你的学习路径。

1. 什么是图神经网络？

2. 什么是消息传递？为什么要这样设计？

3. 消息聚合到底在干什么？

4. 为什么说消息传递中使用了神经网络？

5. GCN、GraphSAGE、GAT、R-GCN 的主要区别是什么？

6. 消息传递中神经网络是怎么具体用的？能不能举例？

7. 如果不用神经网络，只做消息传递会怎样？

8. 什么是读出层（Readout）？不同任务怎么用？

9. GNN 的参数主要更新哪一部分？

10. 损失函数是在模型的哪一块定义的？

11. GCN 中为什么要用 D−1/2 A D−1/2 D^{-1/2} A D^{-1/2}D−1/2AD−1/2？

12. “最大特征值等于 1” 为什么意味着数值稳定？

13. 特征值到底是什么？能不能不用线性代数理解？

14. 什么是残差连接？为什么 GNN 需要它？

15. 为什么叫 “残差连接” 这个名字？

16. 回归头 / 预测头 这些术语是什么意思？

三、总结

图神经网络的核心并不在复杂公式，而在一个朴素思想：
节点通过结构互相影响，但不会被结构吞没。
消息传递负责传播信息，神经网络负责学习规则，
归一化与残差负责稳定系统。