图神经网络的池化操作

图神经网络有两个层面的任务:一个是图层面(graph-level),一个是节点(node-level)层面,图层面任务就是对整个图进行分类或者回归(比如分子分类),节点层面就是对图中的节点进行分类回归(交通网络道路流量预测)。对于图层面的任务,我们需要聚合图的全局信息(包括所有节点和所有边),并且聚合全局信息得到一个可以表示全图的向量,后续对该向量进行分类回归操作。

如何将全局信息表示为一个向量呢,在图片分类和回归任务中,我们有池化操作,在图数据中,我们一样引入池化操作。

目录

1、全局池化

1.1 readout

1.2 全局虚拟节点

2、层次池化

2.1 基于图坍缩的池化机制

2.2 基于TopK的池化机制

2.3 基于边收缩的池化机制

参考文献

 

1、全局池化

1.1 readout

读出操作(readout)[1]最简单的池化操作,其操作公式为:

\mathbf{y}=R({\mathbf{h}{_{i}}^{(k)}|\forall v_{i}\in V})

其中R可以是max,sum,mean操作,也就是说readout直接对图中所有节点求最大值,求和,求均值,将做得到的值作为图的输出。

1.2 全局虚拟节点

全局虚拟节点[2]就是引入一个虚拟节点,这个虚拟节点和图中所有节点相连,并且也参加整个图的卷积等操作,最后该虚拟节点的隐含特征就是整个图的特征,示意图如下:

引入全局节点e_{0},图中原来的节点为e_{1},e_{2},e_{3}

2、层次池化

层次池化经过K轮消息传递,节点更能够提取全局信息。

2.1 基于图坍缩的池化机制

图坍缩就是将图中的节点划分为几个节点簇,每个节点簇作为下一次图坍缩的节点。

目前DIFFOOL[3]和EigenPooL[4]是两种基于图坍缩的图神经网络算法

2.2 基于TopK的池化机制

TopK[5]对池化机制和上面的图坍缩不同,图坍缩是将图的节点不断聚合成簇的过程,而TopK是一个不断抛弃节点的过程,具体来说就是设置一个超参数k,其中k\in (0,1),接着学习出表示节点重要度的值z并按照重要度对节点进行降序排序,选择最重要的kN个节点,公式表示如下:

i=top\_rank(z,kN)

X{'}=X_{i,:}

A{'}=A_{i,j}

X{'},A{'}表示一个切片操作,就是留下kN个节点以及与其相连的边

如何选择z也是一个可以创新的地方,在论文中,作者引入了一个全局基向量p,将节点向量在该向量上的投影作为重要度:

z=\frac{Xp}{\left \| p \right \|}

其中X为节点特征向量。论文中给出的TopK的模型结构为:

该作者还在每一层池化之后添加读出操作,并在最后最后一层做求和,这样有助于虽有节点的信息融合。

2.3 基于边收缩的池化机制

该方法迭代式的对每一条边的节点进行两两归并并形成新的节点,同时保留合并前的两节点的连接关系到新节点上,EdgePool[6]就是基于边收缩的池化图网络,接下来介绍其相关算法:

首先对于每条边计算一个原始分数:

r_{ij}={\mathbf{w}}^{T}[h_{i}||h_{j}]+b

如下图(左)根据A,B,C,D四个点计算出来的边的原始分数

再根据入度计算每个边的分数:

r_{i}=e^{r_{ij}}

节点分数为边入度边分数之和

如下图(左中),D的值就是:e^{0.5}=1.6, C的值为e^{0.5}+e^1+e^3=1.6+2.7+20=24.5

再计算边对其入度节点的值的归一化

如下图(右中),C->D的边的值为:1.6/1.5=1

最后选择分数最大且未被选中的两个节点进行收缩操作。

 

收缩之后的节点更新方式为:

h_{ij}=s(h_i+h_j)

s可以为求和,求均值,全连接等操作。


参考文献

[1] Gilmer J, Schoenholz S S, Riley P F, et al. Neural message passing for quantum chemistry[J]. arXiv preprint arXiv:1704.01212, 2017.

[2] Pham T, Tran T, Dam H, et al. Graph classification via deep learning with virtual nodes[J]. arXiv preprint arXiv:1708.04357, 2017.

[3] Ying Z, You J, Morris C, et al. Hierarchical graph representation learning with differentiable pooling[C]//Advances in neural information processing systems. 2018: 4800-4810.

[4] Ma Y, Wang S, Aggarwal C C, et al. Graph convolutional networks with eigenpooling[C]//Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2019: 723-731.

[5] Cangea C, Veličković P, Jovanović N, et al. Towards sparse hierarchical graph classifiers[J]. arXiv preprint arXiv:1811.01287, 2018.

[6] Diehl F. Edge contraction pooling for graph neural networks[J]. arXiv preprint arXiv:1905.10990, 2019.

[7] 刘忠雨,李彦霖,周洋,《深入浅出图神经网络:GNN原理解析》

<think>好的,我现在需要帮助用户查找关于CNN卷积神经网络池化层的图表或可视化内容。首先,我需要回顾一下用户提供的引用资料,看看是否有相关信息。根据引用[2],池化层是CNN的组成部分之一,通常与卷积层配合使用,但引用中没有提到具体的图表或可视化方法。引用[3]提到卷积核的作用,但同样没有涉及池化层的图解。因此,我需要基于已有的知识来构建回答。 池化层的主要作用是降维和减少计算量,同时保留重要特征。常见的池化操作包括最大池化和平均池化。为了可视化这些操作,可能需要用简化的示意图,比如展示输入矩阵经过池化后的输出。例如,一个4x4的矩阵分成2x2的区域,每个区域取最大值或平均值,变成2x2的输出。这样的图示可以帮助用户直观理解池化过程。 另外,用户可能需要了解池化层在CNN中的位置,通常在卷积层之后。可以建议用户参考经典网络结构如LeNet-5或AlexNet的架构图,这些图表中通常会标注池化层的位置。同时,推荐使用工具如TensorFlow的Keras接口来可视化模型结构,或者使用库如Matplotlib绘制自定义示意图。 还需要考虑用户可能的后续问题,比如池化的参数设置(如窗口大小、步长)、不同池化方法的比较,或者池化层对模型性能的影响。因此,在相关问题部分可以列出这些方向,帮助用户进一步探索。 最后,确保回答符合格式要求,使用中文,正确应用LaTeX排版数学公式,比如池化操作的数学表达式用$$...$$,并添加引用标识。检查是否有遗漏的信息,并确保所有建议的可视化方法都是实际可行且常用的。</think>### 卷积神经网络(CNN)池化层图解与可视化 池化层(Pooling Layer)是CNN中用于降维和特征选择的关键组件,常见类型包括**最大池化(Max Pooling)**和**平均池化(Average Pooling)**。以下是其原理、数学公式及可视化方法: --- #### 1. **池化操作数学表示** - **最大池化**:从局部区域选取最大值 $$ \text{输出}(i,j) = \max_{(p,q) \in \text{窗口}} \text{输入}(p,q) $$ - **平均池化**:计算局部区域的平均值 $$ \text{输出}(i,j) = \frac{1}{k \times k} \sum_{(p,q) \in \text{窗口}} \text{输入}(p,q) $$ 其中,$k$为池化窗口大小(如$2 \times 2$)。 --- #### 2. **池化层可视化示例** **输入矩阵(4×4)**: $$ \begin{bmatrix} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 & 10 & 11 & 12 \\ 13 & 14 & 15 & 16 \\ \end{bmatrix} $$ **最大池化(2×2窗口,步长2)**: $$ \begin{bmatrix} 6 & 8 \\ 14 & 16 \\ \end{bmatrix} $$ **平均池化(2×2窗口,步长2)**: $$ \begin{bmatrix} 3.5 & 5.5 \\ 11.5 & 13.5 \\ \end{bmatrix} $$ --- #### 3. **可视化工具与方法** 1. **架构图工具**: - 使用`TensorFlow/Keras`的`model.summary()`或可视化工具(如`Netron`)生成网络结构图,池化层通常标记为`MaxPool2D`或`AvgPool2D`[^2]。 - 示例代码: ```python from tensorflow.keras.models import Sequential from tensorflow.keras.layers import MaxPool2D model = Sequential() model.add(MaxPool2D(pool_size=(2, 2), strides=2, input_shape=(28, 28, 1))) model.summary() ``` 2. **特征图可视化**: - 通过中间层输出可视化池化前后的特征图对比(使用`Matplotlib`): ```python import matplotlib.pyplot as plt # 假设pooled_feature是池化后的特征图 plt.imshow(pooled_feature[0, :, :, 0], cmap='viridis') plt.title('池化后特征图') plt.show() ``` 3. **示意图绘制**: - 手动绘制池化过程(如下图): ![池化示意图](https://miro.medium.com/v2/resize:fit:720/format:webp/1*4T7O62q0VrO7iZktJmZbOg.png) (注:此图为示意图,实际需替换为合法来源) --- #### 4. **经典网络中的池化层** - **LeNet-5**:使用$2 \times 2$平均池化[^3]。 - **AlexNet**:采用重叠最大池化(窗口$3 \times 3$,步长2)。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值