ソーシャル ネットワーク、レコメンデーション システム、ナレッジ グラフに対するグラフ ニューラル ネットワークの効果が現れ始めており、過去 2 年間で注目の研究スポットとなっています。しかし、グラフ ニューラル ネットワークとは何でしょうか? グラフとニューラル ネットワークが関連しているのはなぜですか? どのように関係するのでしょうか?
この記事では、GNN のインスピレーションの源、構築方法、トレーニング方法などを簡単に紹介し、論文「ネットワーク上の表現学習」の GNN 部分に基づいてさらに説明し、本書でしか見られないいくつかの実装詳細を追加します。その後の学習と理解を容易にするコード。
コードリンク: GitHub - leichaocn/graph_representation_learning
1 畳み込みニューラルネットワークの啓蒙
画像の単純な畳み込みを思い出してください。
図 1 畳み込みニューラル ネットワークの基本動作
図 1 に示すように、画像 (画像) から抽出された特徴マップ (つまり、特徴ベクトル) の各要素は、画像 (画像) 上の対応する点のピクセルとそのピクセルの重み付き合計として理解できます。周囲のポイントの(再度アクティブ化する必要があります)。
グラフから抽出された特徴マップの各要素は、グラフ上の対応するノードのベクトルと周囲のノードのベクトルの加重和としても理解できると想像できます。
説明する必要のある概念がいくつかあります。
特徴ベクトル : データ (画像、単語、ノードなど) のデジタル表現。機械学習タスクに必要な入力です。
埋め込み : より良い特徴ベクトルには潜在的な意味情報が含まれており、ネットワーク トレーニングの結果です。優れた埋め込みが見つかると、後続の機械学習タスクのパフォーマンスが効果的に向上します。たとえば、word2vec ネットワークから抽出された単語埋め込みベクトル、「Beijing」と「Paris」という 2 つの単語はどちらも大文字であるため比較的似ています、CNN ネットワークから抽出された画像埋め込み、シャム猫と耳なし猫の 2 つの写真どちらも猫を飼っているため、ベクトルは似ています。
features map : cnn、つまり画像埋め込みによって生成された特徴ベクトル。CNN の各層を順伝播した画像の出力は 2 次元行列ですが、平坦化さえすれば 1 次元の特徴ベクトルに変換されます。これは、完全に接続されたニューラル ネットワークの各層で取得できる 1 次元の特徴ベクトルに似ています。
この移住組合は体験する価値があります。
理解できたところで、具体的に何をすればいいのでしょうか?
2つの核となるアイデア
上で説明したように、これは 1 つの文に要約できます。周囲の点のベクトルを使用して独自の Embedding を伝播します。
非常に簡単な例がそれを理解するのに役立ちます。
図 2 凡例
図 2 の場合、ノード A のエンベディングを計算するには、次の 2 つのアイデアがあります。
ノード A のエンベディングは、隣接するノード B、C、および D のエンベディングの伝播の結果です。
ノード B、C、および D のエンベディングは、それぞれの隣接ノードのエンベディングによる伝播の結果です。
しかし、この継続的な追跡はいつ終わるのでしょう?と思われるかもしれません。したがって、無限にならないように、図 3 の伝播関係を構築できる 2 つのレイヤーだけを作成します。
図 3 2 層伝播によって生成されたノード A の埋め込み
0 番目の層は入力層であり、各ノードの初期ベクトル (フィールド内の特性データに基づいて構築される) であり、初期埋め込みと呼ばれる場合があります。
レベル1
节点B的Embedding来自它的邻接点A、C的Embedding的传播。
节点C的Embedding来自它的邻接点A、B、C、D的Embedding的传播。
节点D的Embedding来自它的邻接点A的Embedding的传播。
第二层
节点A的Embedding来自它的邻接点B、C、D的Embedding的传播。
好了,大概可能有点感觉了,可是传播到底是什么?图中的小方块里到底在什么什么?
(注意:图中所有的方块代表的操作均相同,大小、颜色的差异没有任何含义)
3 传播机制
小方块里做的就两件事:
收集(Aggregation)
简言之,就是对上一层的所有邻接节点的Embedding,如何进行汇总,获得一个Embedding,供本层进行更新。
更新(Update)
即对本层已“收集完毕”的邻接点数据,是否添加自身节点的上一层Embedding,如果是如何添加,如何激活,等等方式,最终输出本层的Embedding。
表达成数学公式,即下面这个式子:
先解释其中的符号含义:表示节点的Embedding,下标或表示节点的索引,上标表示第几层的意思,表示激活函数,和表示矩阵,表示节点的邻接点集合,AGG(⋅)表示收集操作。
这个公式的右边就做了两件事:
收集:即AGG(⋅)部分
更新:除了AGG(⋅)外的其他部分。
这个公式太抽象,我们举例说明三种常见的图神经网络,看看是如何设计的。
4 传播机制举例
4.1 基础版本
1)收集
即直接对上一层所有节点的Embedding求平均。
2)更新
即为用收集完毕的Embedding与本节点上一层的Embedding进行了加权和,然后再激活。显然,由于上一层Embedding与本层Embedding维度相同,所以和为方阵。
4.2 图卷积网络(Graph Convolutional Networks)
1)收集
由可知,收集的输入Embeddings不仅仅包括节点的邻接点们的Embedding,还包括节点自身的Embedding,而分母变成了,是一种更复杂的加权和,不仅考虑了节点的邻接点的个数,还考虑了每个邻接点自身的邻接接个数。(基础版本中的平均是最简单的加权和)
2)更新
显然比基础版本简单多了,不再考虑节点自己的上一层Embedding,直接让收集好的Embedding乘上矩阵后再激活完事。
之所以叫图卷积网络,是因为和卷积网络的套路类似,对自己和周边节点(像素)进行加权求和。
4.3 GraphSAGE
这不就是咱们上面提到的那个概念公式?是的,GraphSAGE由于其变体较多,所以需要用这个最抽象的公式来概括它。
1)收集
可以有如下的收集方式:
直接平均
这是最简单的收集方式
池化
LSTM
2)更新
收集好的Embedding经过矩阵变换,节点自己上一层的Embedding经过矩阵变换,我们即可得到两个Embedding,把它俩给按列拼接起来。
这里要注意:它俩不是相加;矩阵和矩阵都不是方阵,均自带降维功能。AGG(⋅)输出是d维,是d维,但是经过军阵变换后,它俩都成了d/2维,经过拼接,又恢复成d维。
5 训练的方式
无监督的训练
跑不同的Aggregation和Update方法,结合自定义的损失函数,都可以训练出这些权重。这里的自定义损失函数,需要根据你对节点Embedding的最终期望,让它附加上一个什么样的效果来设计。
例如word2vec利用序列中的上下文信息,用一个词预测周围词,构造分类损失来训练。图的无监督训练也可以用一个节点预测周围节点,构造分类损失来训练。当然,还有其他的无监督套路,这个视频不错(18min~21min):https://www.bilibili.com/video/av53422483/
在无监督任务中,获取经过神经网络优化的Embedding,就是我们的目的。
有监督的训练
如果我们想要实现节点分类,那么我们就需要有带标签的训练数据,设计损失函数,即可进行训练。
例如,我们有一批带label的图结构的数据,已经标记好了哪些是水军,哪些是普通用户。我们就可以构造如下的交叉熵损失函数。
图4 有监督训练中损失函数的构造
转换矩阵
注意其中的即节点的Embedding,是节点的label,那是什么鬼?
如刚才我们讨论的,图神经网络的传播结果,是所有节点经过“传播”优化的Embedding,这些Embedding的维度均为d维(在初始化时定义好的),而我们分类任务可能是c类,所以,需要再前向传播的最后一层,加入矩阵,把d维的输出映射成c维的输出,这样才能让交叉熵损失函数对应起来。
由于我们列举的是二分类任务,图4中也用的是二分类的交叉熵损失,因此只需要1维输出足矣,所以在这里的c为1,为一个向量(可视为把d维压缩为1维的特殊矩阵)。
在有监督任务中,获取经过神经网络优化的Embedding,还需要进行分类。所以Embedding不是目的,只是实现分类的手段。
6 一般的设计步骤
综上,各类图神经网络架构主要区别是:
传播机制的区别,即收集和更新的设计(图3中小方块)。
有无监督及损失函数的区别。
设计图神经网络的一般步骤是:
定义收集与更新方式。
定义损失函数。
在一批节点上进行训练。
生成Embedding,即使是模型未见过的Embedding,模型也可以对其初始化Embedding进行“传播优化”。
7 Node2Vec与GNN的对比
由于Embedding这个术语被以广义的方式,用了太多次,很容易导致混淆,所以这里对Embedding在不同状态时做一个总结。
8 总结
图神经网络是以邻接点Embedding的浅层传播来训练Embedding。
改变Aggregation和update的方式,可以构造不同的图神经网络;
既可以用无监督的方式获得Embedding,也可以用有监督的方式直接训练分类任务。
参考文献
[1] Jure Leskovec, 《Graph Representation Learning》
[2] Jure Leskovec, 《Representation Learning on Networks》
http://snap.stanford.edu/proj/embeddings-www/
文章仅用于学习使用,后续我将阅读最新的有关图神经网络的论文。