0Pricing
Learn AI with Python · レッスン

グラフ畳み込みネットワーク(GCN)

メッセージパッシングの枠組み、GCNConv、ノード特徴量の集約、PyTorch Geometricのセットアップについて学習します。

「グラフ畳み込みネットワーク(GCN)」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

CNNからGCNへ

CNNは画像の格子構造を利用します。グラフ畳み込みネットワーク(GCN)は、畳み込みを不規則なグラフへ一般化したものです。各ノードが近傍ノードの情報を使って自身の表現を更新できるため、固定された格子構造を持たないデータにも対応できます。

メッセージパッシング

GCNはメッセージパッシングの枠組みに従います。各層で、すべてのノードが (1) 近傍ノードからメッセージを集め、(2) それらを集約し、(3) 自身の埋め込みを更新します。層を重ねることで、情報をグラフ全体に伝播させられます。

近傍情報の集約

中心となる操作は近傍ノードの特徴量の集約です。単純なGCN層では、あるノードとその近傍ノードの特徴量ベクトル(自身を含む)を平均し、その後、学習された線形変換と非線形変換を適用します。

# For each node v:
#   h_v = activation( W * mean(features of v and its neighbors) )

隣接行列を正規化する理由

近傍ノードの値を単純に合計すると、次数の大きいノードが過度に大きな影響を持ちます。GCNでは正規化隣接行列を使って各ノードの寄与を調整し、次数が異なるノード間でもノード埋め込みの大きさを安定させます。

正規化の式

対称正規化では、自己ループを追加したうえでノードの次数に基づいてスケーリングし、D^(-1/2) (A + I) D^(-1/2) と表します。単位行列 Iを追加することで、集約中もノード自身の特徴量を保持できます。

# A_hat = A + I  (add self-loops)
# D_hat = degree matrix of A_hat
# A_norm = D_hat^(-1/2) * A_hat * D_hat^(-1/2)

PyTorch Geometric

PyTorch Geometric (PyG)は、PyTorchでGNNを扱うための標準ライブラリです。正規化されたメッセージパッシング畳み込みを実装した GCNConv など、すぐに使える層を提供します。

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv

単一のGCNConv層

GCNConv(in_channels, out_channels)は、1つのグラフ畳み込みを作成します。ノード特徴量行列 x と、グラフの接続関係をCOO形式で表した edge_index を受け取り、更新されたノード埋め込みを返します。

conv = GCNConv(in_channels=16, out_channels=32)
# x: [num_nodes, 16], edge_index: [2, num_edges]
h = conv(x, edge_index)  # -> [num_nodes, 32]

2層GCN

一般的なGCNは2つの層を重ねます。1層目で特徴量を射影し、1ホップ先の近傍を集約します。2層目で2ホップ先の近傍まで集約するため、各ノードは2ホップの受容野を持つことになります。

class GCN(torch.nn.Module):
    def __init__(self, in_dim, hid, out):
        super().__init__()
        self.conv1 = GCNConv(in_dim, hid)
        self.conv2 = GCNConv(hid, out)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = F.dropout(x, training=self.training)
        return self.conv2(x, edge_index)

深さとともに受容野が広がる

GCNの各層によって、ノードの受容野は1ホップずつ広がります。2層では2ホップ近傍、3層では3ホップ近傍を参照し、それ以降も同様です。層を深くすると、遠くの情報をノードに届けられます。

過平滑化

ただし、層を重ねすぎると過平滑化が起こります。近傍の平均化を繰り返すことで、すべてのノード埋め込みがほぼ同じベクトルに収束し、分類に必要な違いが失われます。そのため、ほとんどのGCNは2層または3層 בלבדを使用します。

過平滑化を軽減する

過平滑化を抑える手法には、残差接続/スキップ接続、各層の出力を組み合わせるジャンピングナレッジネットワーク、そして単純にネットワークを浅く保つ方法があります。標準的なベンチマークでは、浅いGCNのほうが深いGCNより高い性能を示すこともよくあります。

クイックチェック

GCNに関する知識を確認しましょう。

まとめ

グラフ畳み込みネットワークについて学びました。

  • GCNはメッセージパッシングの枠組みに従い、近傍の特徴量を集約してから更新します
  • 自己ループを含む正規化隣接行列によって、埋め込みが安定します
  • PyTorch Geometricの GCNConv は1回の畳み込みを実装します
  • 一般的な構成は2層GCNです
  • 深くしすぎると過平滑化が起こります

よくある質問

「グラフ畳み込みネットワーク(GCN)」レッスンは無料ですか?

はい。「グラフ畳み込みネットワーク(GCN)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「グラフ畳み込みネットワーク(GCN)」で何を学びますか?

メッセージパッシングの枠組み、GCNConv、ノード特徴量の集約、PyTorch Geometricのセットアップについて学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「グラフ畳み込みネットワーク(GCN)」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 機械学習のためのグラフ理論
  2. グラフ畳み込みネットワーク(GCN)
  3. GNNによるノード分類
  4. リンク予測とグラフ分類
← Learn AI with Pythonに戻る