前言
大家好,我是阿光。
本专栏整理了《图神经网络》,内包含了不同图神经网络的原理以及相关代码实现,详细讲解图神经网络,理论与实践相结合,如GCN、GraphSAGE、GAT等经典图网络,每一个代码实例都附带有完整的代码+数据集。
正在更新中~ ✨
🚨 我的项目环境:
- 平台:Windows10
- 语言环境:python3.7
- 编译器:PyCharm
- PyTorch版本:1.11.0
- PyG版本:2.1.0
💥 项目专栏:【入门图神经网络】
一、NLNN
在图像任务当中,常用卷积运算CNN来进行提取图像的纹理信息,每个卷积核通过共享参数来处理一张图像的局部特征,如果要提取更大的物体信息,那么就需要通过增大卷积核以及不断堆叠大的卷积核来实现。
对于文本任务,常用循环神经网络RNN来提取语义信息,想要捕捉高层次的语义信息就需要捕捉长时间依赖,也就是要考虑长文本信息。
这二者都是在处理局部淋雨信息,无法捕捉全局以及长程依赖关系,目前提出了NLNN非局部神经网络,能够将非本地操作作为捕获长程依赖关系的通用构建块族。受计算机视觉中经典的非局部均值方法的启发,非局部运算将一个位置处的响应计算为所有位置处特征的加权和。类似于自我注意里模块,处理每个位置的信息是考虑所有能够考虑位置的信息。
二、非局部神经网络层
该文章作者根据非局部平均运算,提出了一般非局部运算定义:
上面的 C(x) 代表归一化因子,因为信息聚合求和后会导致数据规模不一致,xi 和xj 分别代表当前位置特征信息和其它位置的特征信息,f ( x i , x j ) f(x_i,x_j)f(xi,xj) 是一个函数能够通过两个x计算出对应的相似性分数,这个可以看成自注意力机制模块中的注意力分数,就是不同特征之间的关联程度,g ( x j ) g(x_j)g(xj) 是将 x j x_jxj 进行特征变换。
2.1 f ff 函数
该式子是高斯函数,作者提出的f函数实例,就是通过两个特征向量计算出一个标量,x i T x j x_i^Tx_jxiTxj 是通过点积计算相似度,因为点积这个模块很容易实现,同时归一化因子定义为 C(x)=∑∀jf(xi,xj)。
该式子是嵌入高斯函数,与普通高斯不同的是在计算相似度之前通过一个可学习的W矩阵进行了映射。
2.2 g gg 函数
对于g 函数就是一个普通的MLP网络块,其中Wg 是一个可学习的参数矩阵,将原始输入特征映射到一个新的特征空间。
三、非局部网络块
作者在上述基础上提出了一个非局部网络块,为了能够将其封装到一个非本地块中,该块可以并入许多现有架构中。
上面的yi 就是yi=C(x)1∑∀jf(xi,xj)g(xj),然后使用了 W z W_zWz 进行特征映射,然后又加了一个 x i x_ixi ,这是一个残差结构,在非局部网络层的基础上加上原始输入,使用残差连接允许非局部网络块可以插入到任何预训练的模型中,而不会破坏模型参数,如果该层残差无效,只需要将 W z W_zWz 初始化为0即可。