首页 > 其他分享 >Layer-Dependent Importance Sampling for Training Deep and Large Graph Convolutional Networks

Layer-Dependent Importance Sampling for Training Deep and Large Graph Convolutional Networks

时间:2023-04-20 19:55:21浏览次数:56  
标签:Convolutional 采样 Layer mathbf Dependent frac tilde mathcal array

目录

Zou D., Hu Z., Wang Y., Jiang S., Sun Y. and Gu Q. Layer-dependent importance sampling for training deep and large graph convolutional networks. NIPS, 2019.

本文在以往的 mini-batch 的快速算法上进行了改进.

符号说明

  • \(\mathcal{G} = (\mathcal{V}, \mathbf{A})\), 图, (点集, 邻接矩阵);
  • \(\mathbf{M}_{i, *}\), i-th row;
  • \(\mathbf{M}_{*, j}\), j-th col;
  • \(\tilde{\mathbf{A}} = \mathbf{A + I}\);
  • \(\tilde{\mathbf{D}}\), \(\tilde{\mathbf{D}}_{i, i} = \sum_j \tilde{\mathbf{A}}_{i, j}\);
  • \(\mathbf{P} = \tilde{\mathbf{D}}^{1/2} \tilde{\mathbf{A}} \tilde{\mathbf{D}}^{-1/2}\), normalized Laplacian matrix;
  • \(\mathbf{H}^{(l)} = \sigma(\mathbf{Z}^{(l)}), \mathbf{Z}^{(l)} = \mathbf{PH}^{(l-1)} \mathbf{W}^{(l-1)}\);
  • \(b\), batch size;
  • \(s_{node}\), 采样的 neighbors (per node);
  • \(s_{layer}\), 采样的 neighbors (per layer).

Motivation

  • Node-wise 的采样, 比如著名的 GraphSAGE, 虽然采样了一批 mini-batch 的点, 但是为了能够进行邻居聚合的操作, 还需要把 mini-batch 的 \(L\)-hop 的点采样出来, 实际上, 只要这样的点的数量是随着 \(L\) 指数增长的.

  • Layer-wise 的采样, 每一层采样是独立的, 对于特别大且特别稀疏的点, 两层采样出来的点可能仅有很少的一些边, 这就使得问题变得更加稀疏了.

  • 所以, 本文希望提出一种采样方法能够解决上述的问题.

LADIES

  • 首先, 我们可以将 layer-wise 的采样改写成:

    \[\tag{1} \frac{1}{s_{l-1}} \sum_{k \in \mathcal{S}^{(l-1)}} \frac{1}{p_k^{(l-1)}} \mathbf{P}_{*, k} \mathbf{H}_{k, *}^{(l-1)}, \]

    其中 \(\mathcal{S}^{(l-1)}\) 表示根据概率 \(p_k\) 采样得到的大小为 \(|\mathcal{S}^{(l-1)}| = s_{l-1}\) 的点集, 容易发现:

    \[\begin{array}{ll} &\mathbb{E}\Bigg\{\frac{1}{s_{l-1}} \sum_{k \in \mathcal{S}^{(l-1)}} \frac{1}{p_k^{(l-1)}} \mathbf{P}_{*, k} \mathbf{H}_{k, *}^{(l-1)} \Bigg\} \\ =&\frac{1}{s_{l-1}} \sum_{k \in \mathcal{V}} \mathbb{E}\Bigg\{ \frac{\text{count}(k)}{p_k^{(l-1)}} \Bigg\} \mathbf{P}_{*, k} \mathbf{H}_{k, *}^{(l-1)} \\ =&\frac{1}{s_{l-1}} \sum_{k \in \mathcal{V}} \frac{s_{l-1} p_k^{(l-1)}}{p_k^{(l-1)}} \mathbf{P}_{*, k} \mathbf{H}_{k, *}^{(l-1)} \\ =&\sum_{k \in \mathcal{V}} \mathbf{P}_{*, k} \mathbf{H}_{k, *}^{(l-1)} \\ =& \mathbf{P} \mathbf{H}^{(l-1)}. \end{array} \]

    其中 \(\text{count}(k)\) 表示结点 \(k\) 被采样的次数.

  • 倘若我们记 \(\mathbf{S}^{(l-1)}\) 为一对角矩阵, 且其对角线元素为:

    \[\mathbf{S}_{k, k}^{(l-1)} =\left \{ \begin{array}{ll} \frac{1}{s_{l-1} \cdot p_k^{(l-1)}} & i_k \in \mathcal{S}^{(l-1)}, \\ 0 & \text{otherwise}. \end{array} \right . \]

  • 则我们可以将 (1) 改写为

    \[\mathbf{P}\mathbf{S}^{(l-1)} \mathbf{H}^{(l-1)}. \]

  • 下面我们令 \(\mathcal{S} = \{i_k\}\), 这里 \(k\) 将表示 \(i_k\) 为 \(\mathcal{S}\) 中的第 \(k\) 个元素, 若令 \(\mathbf{Q}^{(l)} \in \mathbb{R}^{s_l \times |\mathcal{V}|}\) 的每个元素定义为:

    \[\mathbf{Q}_{k, s}^{(l)} := \left \{ \begin{array}{ll} 1 & (k, s) = (k, i_{k}^{(l)}) \\ 0 & \text{otherwise}. \end{array} \right . \]

    那么 \(\mathbf{P}\mathbf{S}^{(l-1)} {\mathbf{Q}^{(l-1)}}^T\)相当于将 \(\mathbf{P}\mathbf{S}^{(l-1)}\) 中的被采样的列挑选出来并按照 \(i_1, i_2, \ldots\) 的顺序进行整理. 而 \(\mathbf{Q}^{(l)} \mathbf{P} \mathbf{S}^{(l-1)} {\mathbf{Q}^{(l-1)}}^T\) 则相当于再从整理好的列中将在 \(l\) 层中被采样的点的 embeddings 选出来.

  • 于是乎 LADIES 的整体的流程就是按照如下的方式进行:

    \[\tilde{\mathbf{Z}}^{(l)} = \tilde{\mathbf{P}}^{(l-1)} \tilde{\mathbf{H}}^{(l-1)} \mathbf{W}^{(l-1)}, \quad \tilde{\mathbf{H}}^{(l-1)} = \sigma(\tilde{\mathbf{Z}}^{(l-1)}), \]

    其中 \(\tilde{\mathbf{P}} = \mathbf{Q}^{(l)} \mathbf{P} \mathbf{S}^{(l-1)} {\mathbf{Q}^{(l-1)}}^T\). 每一个 \(\mathbf{S}^{(l)}\) 都是根据 \(p_k\) 采样得到的.

  • 到目前为止, 这还只是一个 layer-wise 的采样, 故而依旧带有之前所说的那些问题, 即不同层之间的结点的边可能是非常非常稀疏的.

  • 故作者采用 top-down 的方式采样:

    • 首先采样 \(l\) 层的结点 \(\mathcal{S}_l\), 然后令

      \[\mathcal{V}^{(l-1)} := \cup_{v_i \in \mathcal{S}_l} \mathcal{N}(v_i). \]

    • 接下来我们我们只在 \(\mathcal{V}^{(l-1)}\) 中采样 \(l-1\) 的结点, 并且依旧是按照重要性采样的方式, 采样概率如下:

      \[p_i^{(l-1)} = \frac{\|\mathbf{Q}^{(l)} \mathbf{P}_{*, i}\|_2^2}{\|\mathbf{Q}^{(l)} \mathbf{P}\|_F^2}. \]

  • 具体算法如下:

代码

official

标签:Convolutional,采样,Layer,mathbf,Dependent,frac,tilde,mathcal,array
From: https://www.cnblogs.com/MTandHJ/p/17338122.html

相关文章

  • web页面播放spine动画及播放相关使用及总结spine-player.js
    1.官方git,里面有些例子可以参考。https://github.com/EsotericSoftware/spine-runtimes.git2.官方播放器:http://zh.esotericsoftware.com/spine-player目前测试4.0以上的js支持动画模型透明3.最基本的资源初始化html代码里面:<divid="player-container"style="width:640......
  • GraphicsLayer 可以在一个图层上绘制多个的多边形
    ArcGISforJS的GraphicsLayer可以在一个图层上绘制多个的多边形¹。你可以使用Polygon类来创建多边形的几何对象,然后使用Graphic类来将几何对象和符号对象组合成图形对象,最后使用GraphicsLayer的add()方法或者addMany()方法来将图形对象添加到图层上。创建一个Graph......
  • layer的嵌套打开弹出层
    当打开了一个layer.open()之后,如果在open的页面上面还有一个layer.open()去再次打开一个弹出层,这时候第二个打开的弹出层是在最早打开的基础上,然后镶嵌在里面的。如果第一个弹出层很大,而第二个弹出层比较小,可能不会太影响用户体验;但是如果第一个弹出层很小,而第二个弹出层却很大,这......
  • FastGCN Fast Learning with Graph Convolutional Networks via Importance Sampling
    目录概符号说明MotivationFastGCN方差分析代码ChenJ.,MaT.andXiaoC.FastGCN:fastlearningwithgraphconvolutionalnetworksviaimportancesampling.ICLR,2018.概一般的GCN每层通常需要经过所有的结点的propagation,但是这是费时的.像普通的深度学习方法一......
  • Deeper Insights into Graph Convolutional Networks for Semi-Supervised Learning
    目录概符号说明Laplaciansmoothing代码LiQ.,HanZ.andWuX.Deeperinsightsintographconvolutionalnetworksforsemi-supervisedlearning.AAAI,2018.概本文分析了GCN的实际上就是一种Smoothing,但是如果层数过多就会导致over-smoothing.符号说明\(\mat......
  • Stochastic Training of Graph Convolutional Networks with Variance Reduction
    目录概符号说明Motivation本文方法代码ChenJ.,ZhuJ.andSongL.Stochastictrainingofgraphconvolutionalnetworkswithvariancereduction.ICML,2018.概我们都知道,GCN虽然形式简单,但是对于结点个数非常多的情形是不易操作的:多层的卷积之后基本上每个结点......
  • 在 Rainbond 上使用在线知识库系统zyplayer-doc
    zyplayer-doc是一款适合企业和个人使用的WIKI知识库管理工具,提供在线化的知识库管理功能,专为私有化部署而设计,最大程度上保证企业或个人的数据安全,可以完全以内网的方式来部署使用它。当然也可以将其作为企业产品的说明文档来使用,支持一键将整个空间的内容开放到互联网,并提供有......
  • 在 Rainbond 上使用在线知识库系统zyplayer-doc
    zyplayer-doc是一款适合企业和个人使用的WIKI知识库管理工具,提供在线化的知识库管理功能,专为私有化部署而设计,最大程度上保证企业或个人的数据安全,可以完全以内网的方式来部署使用它。当然也可以将其作为企业产品的说明文档来使用,支持一键将整个空间的内容开放到互联网,并提供有不......
  • WebGIS|使用Openlayers获取Geoserver发布的WFS和WCS服务
    1、发布WFS和WCS服务发布WFS服务Web要素服务(WFS)支持对地理要素的插入,更新,删除,检索和发现服务。该服务根据HTTP客户请求返回GML数据。其基础接口是:GetCapabilities,DescribeFeatureType,GetFeatureGetCapabilities同上。DescribeFeatureType返回要素结构,以便客户端进行查询和......
  • 什么是 Google Tag Manager 的 Data Layer Object?
    在GoogleTagManager中,DataLayerObject是一个JavaScript对象,它可以用于在页面上收集和传递数据。DataLayerObject通常用于将有关用户和页面的信息收集和传递给GoogleAnalytics或其他第三方分析和营销工具。使用DataLayerObject,您可以在网站的任何地方设置变量并将......