深度学习笔记-6:Transformer与图神经网络
深度学习笔记-6,涵盖Transformer注意力机制(自注意力、多头注意力、位置编码)、语言模型(GPT/BERT)与图神经网络(消息传递、图卷积、图注意力)。对应《深度学习:基础与概念》第12-13章。
建议先看第1-5篇,尤其是第5篇的 CNN(理解卷积→注意力的演进)和第4篇的残差连接。本篇讲 Transformer 的注意力机制、为什么它比 RNN 强,以及图神经网络怎么处理非网格数据。
Chapter 12 Transformer
注意力
注意力(Attention)是 Transformer 模型的核心概念。它允许神经网络在处理序列数据时,动态地为不同输入分配不同的重要性权重。这些权重本身也依赖于输入数据,从而能够捕捉序列中的依赖关系。
与传统神经网络中固定的权重不同,注意力机制的权重是数据依赖的,即根据当前输入动态计算。
考虑以下两个句子:
- I swam across the river to get to the other bank.
- I walked across the road to get cash from the bank.
同一个词 “bank” 在不同上下文中有不同含义(河岸 vs. 银行)。模型需要根据上下文中的其他词(如 “swam”, “river”, “cash” )来判断其正确含义。
这表明,模型在处理某个词时,应该“关注”序列中与之相关的其他词。这种关注的程度(权重)取决于输入序列本身。
- 传统词嵌入:每个词映射到一个固定的向量(如 “bank” 总是同一个向量),无法区分多义词。
- Transformer 的目标:通过注意力机制,将词映射到一个新的表示空间,使得同一个词在不同上下文中得到不同的向量表示。
- 在第一个句子中,“bank” 的表示会靠近 “water”。
- 在第二个句子中,“bank” 的表示会靠近 “money”。
Transformer 的输入是一组向量 ,其中 。
- 每个向量 称为一个 token(令牌)。
- 在 NLP 中,token 可以是一个词、子词或字符。
- 在图像中,token 可以是一个图像块(patch)。
- 在蛋白质序列中,token 可以是一个氨基酸。
- 向量 的每个元素称为一个 特征(feature)。
- 向量维度为 ,序列长度为 。
我们将输入组织成一个 的矩阵 :
因此Transformer 的基本单元是一个函数,它将输入矩阵 转换为输出矩阵 ,且维度保持不变:
可以堆叠多个这样的层,形成深度网络。每一层都有自己的可学习参数(权重和偏置),通过梯度下降进行训练。
一个 Transformer 层包含两个主要阶段:
- 注意力机制:在列方向(特征维度)上混合不同 token 的信息。
- 逐行变换:在每一行(每个 token)内部进行特征变换。
注意力系数
想象你在阅读一篇文章时,为了理解某个句子,你需要”关注”文章中的某些部分。注意力机制就是让机器学习也能做到这一点。
目标:将输入向量 映射到输出向量 ,使得 的表示更丰富。
关键思想:输出向量 不仅依赖于对应的输入 (某单个输入向量),还依赖于所有其他输入 (整体的意思) 。依赖程度由注意力权重 控制。
定义每个输出向量为输入向量的线性组合:
注意力权重 应满足:
- 非负性: (避免正负抵消)
- 归一化: (保证权重总和为1)
这两个约束意味着 ,即权重构成一个“单位划分”。
- 若 且 (当 ),则 ,输入不变。
- 一般情况下, 是所有输入向量的加权平均,权重由输入数据决定。
总而言之,注意力机制通过动态分配权重,使模型能够关注输入序列中的重要部分。
假设我们有3个输入向量:
- (比如描述”猫”)
- (比如描述”狗”)
- (比如描述”动物”)
我们要计算输出向量 :
假设注意力系数为:
- (50%关注自己)
- (30%关注第二个输入)
- (20%关注第三个输入)
那么:
还可以动态调整关注点:
- 可能更关注”猫”的信息()
- 可能更关注”狗”的信息()
- 可能更关注整体概念()
自注意力
如何计算注意力权重 ?
首先通过信息检索类比:
- Key (键):描述项目的属性(如电影的类型、演员)。
- Value (值):项目本身(如电影文件)。
- Query (查询):用户的偏好(如想看的类型)。
系统通过比较 Query 和 Key 来找到最佳匹配,并返回对应的 Value。
而在 Transformer 中:
- Value:输入向量 直接作为 Value。
- Key:输入向量 也作为 Key。
- Query:输入向量 作为输出 的 Query。
这称为“自注意力”,因为 Query、Key、Value 都来自同一输入序列。
要计算 Query 和 Key 的相似度。一个简单方法是点积,点积越大,说明两个词越相关:
使用 Softmax 函数将点积转换为归一化的注意力权重:
Softmax 确保了权重的非负性和归一化。
将所有注意力权重组织成一个 的矩阵:
其中 表示对矩阵 的每个元素取指数,然后对每一行进行归一化。
输出矩阵 为:
假设输入序列有3个词:
计算相似度矩阵:
对每一行应用Softmax得到注意力权重:
最后计算最终输出Y
网络参数
上述自注意力机制没有可学习参数,因此无法从数据中学习。此外,所有特征在计算相似度时权重相同。
解决方案:对输入进行线性变换,引入可学习权重矩阵。
定义:
- Query 矩阵:
- Key 矩阵:
- Value 矩阵:
其中 是可学习的权重矩阵。
维度说明:
- 和 的维度为 ,确保 和 的列数相同,以便计算点积 。
- 的维度为 ,决定输出向量的维度。
- 通常设 ,,以保持输入输出维度一致,便于堆叠层和使用残差连接。
最终的自注意力输出为:
缩放自注意力
问题:当 较大时,点积 的方差会很大(约为 ),导致 Softmax 函数的输入值过大,使其进入梯度很小的饱和区,影响训练。
解决方案:将点积结果除以 进行缩放。
最终的自注意力公式为:
多头注意力
单个注意力头可能只能捕捉一种类型的依赖关系(如语法关系或语义关系)。
解决方案:使用多个并行的注意力头,每个头学习不同的投影空间,从而捕捉不同类型的模式。
定义 个头:
- 第 个头的输出为:
- 其中:
- 每个头有独立的可学习参数 。
将所有头的输出拼接起来:
维度为 。
然后通过一个线性变换 投影回原始维度 :
其中 的维度为 。
通常设置 ,这样拼接后的维度正好是 。

多头注意力的信息流
Transformer 层
多头自注意力是 Transformer 的核心。为了构建深度网络,需要堆叠多个层。
为了改善训练,引入残差连接(见第9章-残差连接)和层归一化(Layer Normalization,对每个token的特征向量独立归一化,稳定训练):
设多头注意力的输出为 ,则加入残差连接和层归一化后的结果为:
这确保了即使注意力层没有学到任何东西,信息也能通过残差路径 传递。
也可以采用“预归一化”:
注意力层的输出是输入向量的线性组合(通过注意力权重),这限制了其表达能力。
为了引入非线性变换,通常在注意力层之后添加一个多层感知机(MLP):
- 例如,一个两层全连接网络,中间使用 ReLU 激活函数。
- 同样使用残差连接和层归一化。

一个完整的 Transformer 层:输入 经过多头自注意力(加残差和归一化)得到 ,然后 经过 MLP(多层网络,加残差和归一化)得到最终输出 ,包含两个子层:
- 多头自注意力子层(突出关系)
- 接收输入 。
- 计算多头注意力输出 。
- 应用残差连接:。(稳定表达)
- 应用层归一化:。
输入 X → 多头自注意力 → Y(X) → 残差连接+层归一化 → Z
- 前馈神经网络子层(丰富表达)
- 接收上一步的输出 。
- 通过一个全连接的 MLP 进行非线性变换。通常的结构是: 其中 的维度通常是 (,例如 4 倍), 的维度是 ,确保输出维度与输入相同。
- 应用残差连接:。
- 应用层归一化:。
Z → MLP → MLP(Z) → 残差连接+层归一化 → 最终输出X̃
最终输出 的维度与输入 相同,为 。
通过将多个这样的 Transformer 层堆叠起来,可以构建一个深度网络:
其中 是初始输入(通常是词嵌入加上位置编码), 是最终的表示,可用于下游任务(如分类、生成等)。
位置编码
自注意力机制有一个关键特性:它是排列不变的或序列顺序无关的。
从公式 可以看出,计算过程只依赖于向量之间的点积和线性组合。如果我们将输入序列 的行(即 tokens)进行任意重新排列,只要同时对 做相同的排列,最终的输出 也会是相同排列的结果。
然而,在大多数序列任务中(尤其是 NLP),顺序至关重要。例如,“猫追老鼠” 和 “老鼠追猫” 含义完全不同。标准的自注意力层无法区分这两种情况。
为了使模型能够利用序列顺序,必须显式地将位置信息(token 在序列中的索引 )注入到输入中。(给词加上”位置标签”)
最常用的方法是位置编码(Positional Encoding): 将位置编码向量 加到第 个 token 的输入嵌入向量 上:
在矩阵形式中,将位置编码矩阵 加到输入矩阵 上:
其中 是一个 的矩阵,第 行是位置 的编码向量 。
位置编码向量 必须满足:
- 唯一性:每个位置 有唯一的编码。
- 可学习或确定性:编码可以是可学习的参数,也可以是预先定义的函数。
正弦/余弦编码:
使用不同频率的正弦和余弦函数来生成 。对于位置 和维度 :
其中 。
特点:
- 确定性:编码是预先计算好的,不是可学习的。
- 周期性:不同维度具有不同的波长(控制)。
- 相对位置:模型可以相对容易地学习到 和 之间的关系(例如,通过线性变换),这有助于捕捉相对位置信息。

(a) 图中横轴表示嵌入向量rn的不同组件,纵轴表示序列中的位置。位置n和位置m的向量元素值均由相应的正弦和余弦曲线与水平灰线的交点表示。 (b)由上式定义且对于前N=200个位置,L=30的位置编码向量的热图说明,其中维度为D=100
可学习的位置编码
更简单的方法是将位置编码 视为可学习的参数。初始化一个 的矩阵( 是模型支持的最大序列长度),其中每一行对应一个位置的编码向量。在训练过程中,这些向量作为模型参数一起被优化。
这种方法在实践中通常表现良好,且实现简单。
当 变为 后,计算 Query、Key、Value 时:
位置信息 被编码进了 中。因此,在计算注意力权重 时,点积 不仅依赖于 和 的语义,还依赖于它们的位置 和 。这使得模型能够区分不同顺序的序列。
输入序列的每个 token 都加上一个与其位置相关的向量,然后这个增强后的序列表示被送入第一个Transformer层。
自然语言
自然语言(如英语、中文)本质上是符号的序列。一个句子可以被看作是一个由单词和标点符号组成的有序列表,这些元素通常由空格分隔。例如: ["The", "cat", "sat", "on", "the", "mat", "."]
这种顺序性是语言理解的核心。改变词序通常会改变句子的含义,甚至使其变得无意义。例如:
"The cat chased the dog."(猫追狗)"The dog chased the cat."(狗追猫)"Chased cat the dog the."(语法错误,难以理解)
因此,处理语言的模型必须能够捕捉和利用序列中的长期依赖关系,例如主语和动词的依存关系,即使它们相隔很远。
one-hot(独热)编码: one-hot编码将每个单词映射到一个长度为词典大小的向量,向量中只有一个元素为1,其余元素为0。例如,对于词典大小为10的词典,单词” cat”的one-hot编码为:[0, 0, 1, 0, 0, 0, 0, 0, 0, 0]。每个单词在词典中占据一个独立的维度。
词嵌入
one-hot编码存在高维度(词典规模大时)和无法捕捉词间关系的问题,词嵌入通过将词映射到低维稠密向量解决这些问题。
- 嵌入矩阵定义:设嵌入空间维度为D,词典规模为K,嵌入矩阵E的维度为 。对于one-hot编码的输入向量,其对应的嵌入向量为: 由于是one-hot向量,本质上是矩阵E中对应的列向量。
- Word2vec模型:
- 是一种通过两层神经网络学习词嵌入的方法,基于自监督学习(从无标签文本中生成训练样本)。
- 两种变体:
- 连续词袋模型(CBOW):以窗口内的上下文词为输入,预测中间词(“填空”任务)。
- 跳字模型(Skip-gram):以中心词为输入,预测窗口内的上下文词。

Word2vec模型 左词袋模型 右跳字模型
- 词嵌入的语义特性:
- 语义相关的词在嵌入空间中距离更近(如“Paris”和“London”)。
- 支持简单向量运算,例如:
- 应用方式:
- 作为预训练层,可固定预训练的嵌入矩阵,或在端到端训练中作为可学习层(初始值可随机或用预训练矩阵)。
分词
固定词表无法处理未登录词、拼写错误,字符级处理则丢失词结构且计算成本高。
- 目标:结合词级和字符级的优势,将文本转换为 token(字符组,可能包含完整词、词片段或单个字符)。
- 字节对编码(Byte Pair Encoding, BPE):
- 过程:从单个字符开始,迭代合并最频繁的相邻 token 对(不跨词合并),直到达到预设的 token 数量。

- 如图所示,先合并“pe”(出现4次,不包括”Pe""),再合并“ck”(出现3次),以此类推。
- 过程:从单个字符开始,迭代合并最频繁的相邻 token 对(不跨词合并),直到达到预设的 token 数量。
- 优势:处理未登录词、保留词结构、支持多模态(如代码)处理。
词袋模型
- 联合分布假设:假设序列中词独立,联合分布分解为: 完全忽略词序(“词袋”由此得名)。
- 文本分类应用:
- 朴素贝叶斯分类器:假设每个类别内词独立,类条件概率为:
- 后验概率计算:
- 平滑处理:测试集中出现训练未见过的词时,概率会为0,需通过平滑(如均匀分配小概率)避免。
自回归模型
- 联合分布分解:考虑词序,将联合分布分解为条件概率乘积:
- n-gram模型:
- 简化假设:条件概率仅依赖前L个词(如L=1为bigram,L=2为trigram)。
- 示例(L=2):
- 局限性:
- 参数爆炸:随L增长,概率表规模呈指数增长(难以超过trigram)。
- 长程依赖:无法捕捉长距离词间关系,生成文本可能不连贯。
- 隐马尔可夫模型(HMM):通过潜在变量传递长程信息,但能力有限(依赖潜在状态链)。
递归神经网络(RNN)
- 动机:解决序列长度可变和参数共享问题,支持 equivariance(同词在不同位置语义一致)。
- 结构:
- 引入隐藏状态,输入为当前词和前一隐藏状态,输出为当前词和新隐藏状态。

- 权重共享 across 序列位置,结构如图所示(初始隐藏状态通常设为全0向量)。
- 引入隐藏状态,输入为当前词和前一隐藏状态,输出为当前词和新隐藏状态。
- 机器翻译示例:
- 编码器:处理输入序列(如英语),压缩为隐藏状态。
- 解码器:以和 token为起点,生成输出序列(如荷兰语),直到 token,结构如下图所示。

- 自回归特性:每个输出词作为下一输入,类似上面自回归的公式。
时间反向传播
- 训练方法:通过反向传播计算梯度,误差函数为交叉熵(输出用softmax激活)。
- 问题:
- 梯度消失/爆炸:长序列训练时,梯度经过多步传递后衰减或激增。
- 长程依赖差:输入序列需压缩为固定长度,长序列易丢失信息(瓶颈问题)。
- 改进模型:
- LSTM(长短期记忆网络)和GRU(门控循环单元):通过门控机制增强长程信息保留能力。
- 局限性:
- 并行计算差:序列处理依赖前序步骤,无法高效利用GPU。
- 仍受限于长程依赖建模能力。
Transformer语言模型
按输入输出形式分为三类:
- 编码器模型:输入序列,输出固定向量(如情感分析)。
- 解码器模型:输入向量,输出序列(如文本生成)。
- 序列到序列模型:输入输出均为序列(如翻译)。
解码器Transformer
- GPT模型:生成式预训练Transformer,自回归模型,目标是学习条件概率。
- 架构:
- 输入: token序列(含位置编码)。
- 输出:通过线性变换+softmax得到 token 概率分布:

- 训练方式:
- 自监督学习:从无标签文本中取序列,以为目标训练。
- 并行处理:将序列拆分为多个子序列(如“我游泳过河”拆分为“我游泳”→“过”、“我游泳过”→“河”等)。
- 掩码注意力(因果注意力):确保预测时仅关注前序 token,如下图所示(红色区域注意力权重设为0)。

- 序列处理:
- 填充 token:统一不同长度序列,通过掩码忽略的注意力。
- 生成过程:每次采样下一个 token 并加入序列,循环直至 token。
采样策略
- 贪心搜索:每次选概率最高的 token, deterministic 但可能不是最优序列。
- 束搜索:
- 保留B个最优假设(束宽B),每次扩展为个,再筛选出B个。
- 需长度归一化(避免偏向短序列),计算成本为。
- 随机采样:
- Top-K采样:从概率最高的个 token 中按归一化概率采样。
- Top-p采样(核采样):累积概率达阈值p的 token 集合中采样。
- 温度参数:调整softmax分布: 接近贪心,T=1为原始分布,趋向均匀。
- 问题:贪心/束搜索可能重复序列,随机采样可能生成无意义文本(人类文本概率更低但更合理)。
编码器Transformer
- BERT模型:双向编码器表示,预训练后通过微调适应下游任务。
- 预训练方式:
- 随机选择15% token 替换为 (80%)、随机词(10%)或保留原词(10%),训练模型预测原词。
- 双向性:允许关注前后 token,无需右移输入或掩码,结构如下所示。

- 微调:
- 分类任务:用首个 的输出,接线性层+softmax。
- token 级任务:用所有输出,接共享线性层+softmax。
- 局限:训练效率低(仅部分 token 为目标),无法生成序列。
序列到序列Transformer
- 应用:如翻译(输入英语,输出荷兰语),结合编码器和解码器。
- 交叉注意力:解码器的查询来自生成序列,键和值来自编码器输出。
- 整体架构:如下图所示,编码器处理输入序列,解码器通过交叉注意力结合编码器输出,生成目标序列。

大语言模型(LLMs)
- 规模:参数达万亿级(如GPT-4),依赖大规模文本数据和并行计算(GPU集群)。
- 训练范式:
- 自监督预训练:在海量无标签文本上学习语言规律。
- 微调:通过少量有标签数据适配下游任务(迁移学习)。
- 低秩适应(LoRA):
- 冻结预训练模型权重,新增低秩矩阵()和(),输出为()。
- 微调后合并权重:,减少参数量(如1/10000)。
- 提示工程:通过设计输入提示(如“翻译:…”)引导模型完成任务,支持少样本学习。
- RLHF:通过人类反馈的强化学习优化模型输出(如ChatGPT)。
多模态Transformer
- 核心:将不同模态(文本、图像、音频等)转换为 token,用Transformer统一处理。
视觉Transformer
- 图像 token 化:
- 将图像拆分为非重叠 patches(如),展平为向量。
- 或用小型CNN下采样生成 token。
- 架构:如下图所示,加入 和学习的位置编码,通过编码器输出分类结果。
- 特点: inductive bias 弱(依赖数据学习图像几何特性),需更多训练数据,精度可能更高。

生成式图像Transformer
- 自回归生成:按光栅扫描顺序(阅读顺序)预测像素,联合分布分解为:
- 离散表示:
- 向量量化(VQ):用码本近似像素patch, ,解决连续值生成模糊问题。
- ImageGPT:将像素映射到离散颜色码本,用Transformer学习 next-token 预测。
音频数据处理
- 梅尔频谱图(Mel Spectrogram):将音频波形转换为时间-频率矩阵(感知均匀的频率划分)。
- 音频分类:
- 将梅尔频谱图拆分为 patches,生成 token 后输入Transformer编码器。
- 用 输出分类结果,性能优于CNN(擅长长程依赖)。
文本到语音

Vall-E
- Vall-E模型:
- 语音 token 化:用向量量化将语音转换为离散 token。
- 输入:文本 token + 少量目标 speaker 的语音 token,输出对应语音 token,如上图所示。
- 优势:仅需几秒样本即可模仿新 speaker 声音。
视觉与语言Transformer
- 数据:如LAION400M(文本-图像对),支持文本生成图像、图像生成文本等。
- Parti模型:编码器-解码器架构,输入文本 token,输出图像 token(向量量化后的patch)。
- CM3Leon模型:
- 训练数据:含文本和图像的HTML文档。
- 支持文本-图像生成、图像编辑、 caption 生成等多任务。
习题1
注意力公式里有个 ,不除会怎样?
维度 大了之后, 和 的点积数值会很大,softmax 直接”饱和”了——输出全是 0 和 1,梯度几乎为零,训练就卡住了。除以 把数值拉回合理范围,softmax 才能正常工作。
多头注意力比单头好在哪?举个例子?
单头只能学一种关系,多头可以同时学好几种。比如 “The cat that sat on the mat is black”,一个头可能关注 cat→is(语法),另一个头关注 cat→black(语义),还有一个头关注 cat→mat(位置)。最后拼在一起,信息比单头丰富得多。
习题2
RNN 天生就知道词语的顺序,Transformer 却要额外加位置编码。为啥?
RNN 是一个一个读的,第 步的隐状态天然包含了”前面有 个词”的信息。Transformer 的自注意力是一次性把所有词同时处理的,它只看”谁和谁像”,完全不管顺序。不加位置编码的话,“猫追狗”和”狗追猫”在它眼里一模一样。
第12章小结
一句话版本:
- 注意力机制:让模型动态决定”看哪里”,用Q/K/V的信息检索类比理解——查询和键越匹配,对应的值权重越大
- 自注意力:Q、K、V都来自同一序列,解决”bank到底是河岸还是银行”的消歧问题
- 多头注意力:多个注意力头并行,各自捕捉不同类型的依赖(语法、语义等),拼接后投影
- 位置编码:给token加上位置标签,解决自注意力”排列不变”的短板——没有它,“猫追狗”和”狗追猫”分不清
- Transformer层:注意力子层(混合token间关系)+ 前馈子层(丰富每个token的表达),靠残差连接和层归一化稳定训练
- 三大架构:编码器(BERT,双向理解)、解码器(GPT,自回归生成)、Seq2Seq(翻译等,交叉注意力连接两者)
知识地图:
自注意力(Q/K/V + Softmax) ↓ 引入可学习参数缩放自注意力(÷√D_k 防饱和) ↓ 并行多组多头注意力 → 拼接 + 线性投影 ↓ 加残差连接 + 层归一化 + 前馈MLPTransformer层 → 堆叠L层 → 深度网络 ↓ 加位置编码(正弦/可学习) ├── 编码器(BERT):双向,掩码语言模型 ├── 解码器(GPT):自回归,因果注意力 └── Seq2Seq:编码器+解码器+交叉注意力Chapter 13 图神经网络
序列(1D)和图像(2D网格)是结构化数据的特例,而更通用的结构化数据可用图(Graph)描述——由节点(node)和边(edge)组成,节点和边均可关联数据(如分子中原子类型、铁路网中行程时间)。
基于图的机器学习
- 节点预测:预测节点属性(如根据网页间超链接分类文档主题)。
- 边预测(图完成):预测边是否存在(如蛋白质相互作用网络中补全未观测的相互作用)。
- 图预测(回归/分类):预测整个图的属性(如分子的水溶性),训练数据为多个独立图的集合。
- 归纳学习与转导学习:
- 归纳学习:训练和测试图/节点独立(如预测新分子的性质)。
- 转导学习:已知整个图结构,仅部分节点有标签,预测剩余节点标签(如社交网络中区分真人与机器人)。
- 图表示学习:学习图的有效内部表示,用于下游任务(如预训练分子基础模型,再微调至特定任务)。
图的基本概念与符号
- 图的定义:图,其中为节点集,为边集。节点索引,边连接节点 和,节点的邻居集记为。
- 节点数据:每个节点的属性用维向量表示,所有节点数据组成矩阵(行 为)。
邻接矩阵
矩阵,若节点与有边,则,否则为0。无向图的是对称的。
- 问题:邻接矩阵依赖节点排序,而图的属性应与节点排序无关。

邻接矩阵依赖节点排序
置换不变性与等变性
- 置换矩阵:为矩阵,每行每列仅1个1,用于表示节点重排序。若节点重排为,则 的行 为单位向量。
- 数据置换:
- 节点数据矩阵:行随节点重排。
- 邻接矩阵:(行和列均重排)。
- 网络输出要求:
- 图级预测需置换不变性:。
- 节点级预测需置换等变性:(预测随节点同步重排)。
神经消息传递
- 目标:构建满足置换等变性/不变性、支持多层非线性变换、处理可变长度图、可扩展的网络。
- 卷积神经网络(CNN,见第5篇)——图像可视为特殊图(像素为节点,邻接像素为边),CNN通过局部滤波器聚合信息,图神经网络类似地通过邻居聚合信息。
图卷积与消息传递框架
从CNN到图卷积:
- CNN中滤波器:(j为局部像素)。
- 图卷积修改:聚合邻居信息,共享参数确保等变性: 其中(邻居权重)和(自身权重)为所有节点共享。
消息传递神经网络:
- 流程:每层分为聚合 和更新 两步。
- 聚合:对节点 n ,聚合邻居嵌入:
- 更新:结合自身嵌入与聚合结果:
- 初始化:(节点初始嵌入为其属性)。
消息传递
聚合算子
需满足:与邻居顺序无关、支持可变数量邻居、可微。常见形式:
- 求和: 收集所有邻居节点的信息 优点:保留邻居数量信息;缺点:邻居多的节点影响过强。
- 平均: 优点:归一化;缺点:丢失邻居数量信息。
- 对称归一化: 平衡不同节点的邻居数量差异。
- 元素最大/最小:对邻居嵌入逐元素取最大/最小,同样满足置换不变性。
- 带参数聚合:通过MLP引入可学习参数(通用近似器): 其中(邻居变换)和(聚合后变换)为共享网络。
更新算子
节点的新状态 = 处理(聚合后的信息 + 节点的原始信息)
- 基本形式:结合自身嵌入与聚合结果,通过非线性变换更新: 其中为激活函数(如ReLU),为权重矩阵。
- 简化形式:若且聚合用求和,则:
假设我们有一个3x3的图像块
- CNN:中心像素5会考虑周围的1,2,3,4,6,7,8,9
- GNN:中心节点5只考虑直接相连的节点1,2,6,7
节点/边/图分类实现
节点分类:(预测图中每个节点的类别)
- 输出层:对最终嵌入应用softmax:
- 损失函数:交叉熵损失(仅训练节点参与): 其中为one-hot目标标签。
每个节点经过GNN处理后得到嵌入向量。再对 做softmax分类: 得到各类别的概率
边分类:(预测两个节点之间是否有边(关系预测))利用节点嵌入的相似度:
其中为sigmoid函数。
图分类:(预测整个图的类别)
- 图表示:聚合所有节点最终嵌入(确保置换不变性): 聚合函数可选求和、平均、最大等(见前文),为输出网络。
通用图网络
图注意力网络
就像在社交中,我们会更关注某些朋友的意见一样,图注意力网络让节点能够”关注”更重要的邻居。
- 核心:用注意力系数加权邻居信息,动态调整邻居重要性: 其中且(注意力系数)。
- 注意力系数计算:
- 双线性形式:。
- MLP形式:。
- 多头注意力:使用 H 组独立注意力头,结果拼接后投影,增强表达能力。
边嵌入与图嵌入
不仅节点有特征,连接节点的边也有自己的特征。
- 边嵌入:引入边的隐藏变量,更新公式: 节点聚合改为基于边嵌入:。
整个图有一个全局的特征向量。
- 图嵌入:引入全局图嵌入,综合所有节点和边信息更新:

(a) 边更新、(b) 节点更新,(c) 全局图更新。正在更新的变量用红色显示,而那些对该更新有贡献的变量则用蓝色显示
过平滑
“近朱者赤,近墨者黑”,经过很多轮消息传递后,所有节点变得越来越相似。
社交网络谣言传播类比:想象一条谣言在社交网络中传播——第1轮,你的直接朋友告诉你一些信息;第2轮,你朋友的朋友的信息也传到你这里;第3轮、第4轮……经过很多轮之后,网络中每个人”听到的版本”都差不多,原始的个性化信息(谁是消息源头、中间经过了谁)完全被”平均”掉了。GNN的过平滑问题与此类似:层数太多,所有节点的嵌入都趋于同一个”平均值”,失去了区分性。
- 问题:多层消息传递后,节点嵌入趋于相似,限制网络深度。
- 缓解方法:
- 残差连接(见第4篇):。
- 多层特征融合:(为拼接)。
几何深度学习
- 核心:在图网络中融入空间对称性(如分子旋转/平移不变性)。例如,分子模型中引入原子坐标嵌入( r_n^{(l)} ),更新时使用坐标差的平方(旋转/平移不变): 确保分子性质预测与坐标系无关。
习题3
社交网络里,节点是用户,边是朋友关系。要预测每个用户的兴趣(节点分类),聚合算子用求和还是平均好?要是预测整个网络的活跃度(图分类)呢?
节点分类的话,看情况:如果”朋友多不多”本身就是重要特征(比如社交达人 vs 社恐),用求和;不然用平均更稳定,不会被朋友数量干扰。
图分类的话,得先把所有节点表示”压缩”成一个向量(全局池化),然后才能做预测。这里必须用置换不变的操作(比如求和或平均),因为节点编号是随便标的。
GNN 有什么明显的短板?
最大的问题是过平滑:层数一多,所有节点的表示变得一模一样——因为每层都在聚合邻居信息,传了好几轮之后每个节点都”看到了”整个图,区分度就没了。
另外 GNN 对某些图结构天生分不清(比如一个环和一条链,GNN 可能觉得是一回事),而且远距离的节点要靠堆层数才能”沟通”,但堆层数又会导致过平滑。挺矛盾的。
第13章小结
一句话版本:
- 图数据:比序列和图像更通用的结构——节点(实体)+ 边(关系),适用场景从分子到社交网络
- 消息传递:GNN的核心操作——每轮聚合邻居信息、更新自身状态,就像”听朋友的意见来更新自己的看法”
- 聚合算子:求和(保留邻居数量)、平均(归一化)、最大值(抓关键特征),选择取决于任务
- 置换不变/等变:图的预测不能依赖节点编号顺序——图级预测要不变,节点级预测要随节点同步变化
- 图注意力:让节点学会”更关注哪些邻居”,就像社交中更信任某些朋友的意见
- 过平滑:消息传递太多轮,所有节点嵌入趋同——用残差连接和多层特征融合缓解
知识地图:
图 = 节点 + 边(邻接矩阵表示) ↓ 置换不变性/等变性约束消息传递框架:聚合(邻居信息)→ 更新(自身状态) ├── 图卷积:共享参数的邻居聚合(类比CNN) ├── 图注意力:动态加权邻居(类比Transformer注意力) └── 通用图网络:+ 边嵌入 + 全局图嵌入 ↓ 多层堆叠 → 过平滑问题 → 残差连接缓解 ↓下游任务:节点分类 / 边预测 / 图分类