グラフは非常に複雑な構造を持ち、大量の情報を含んでいるため、グラフ上での機械学習は困難な作業です。この記事では、グラフ上で直接動作し、その構造情報を活用する強力なニューラル ネットワークであるグラフ畳み込みネットワーク (GCN) を使用して、グラフ上でディープ ラーニングを実行する方法について説明します。 この記事では GCN を紹介し、コード例を使用して、情報が GCN の隠しレイヤーを通じてどのように伝播するかを説明します。読者は、GCN が前のレイヤーから情報をどのように集約し、このメカニズムがグラフ内のノードの有用な特徴表現をどのように生成するかを確認します。 グラフ畳み込みネットワークとは何ですか? GCN は、グラフ データ用の非常に強力なニューラル ネットワーク アーキテクチャのクラスです。実際、これは非常に強力であるため、ランダムに初期化された 2 層 GCN でも、グラフ ネットワーク内のノードの有用な特徴表現を生成できます。下の図は、この 2 層 GCN によって生成された各ノードの 2 次元表現を示しています。トレーニングを行わなくても、これらの 2D 表現はグラフ内のノードの相対的な近接性を維持できることに注意してください。 より正式には、グラフ畳み込みネットワーク (GCN) は、グラフ データに対して動作するニューラル ネットワークです。グラフ G = (V, E) が与えられた場合、GCN の入力は次のようになります。
したがって、GCN の隠れ層は Hⁱ = f(Hⁱ⁻¹, A)) と表すことができます。ここでH⁰ = Xであり、fは伝播則である[1]。各隠れ層 Hⁱ は次元 N × Fⁱ の特徴行列に対応し、行列の各行はノードの特徴表現です。各レイヤーでは、GCN は伝播ルール f を使用してこの情報を集約し、次のレイヤーの特徴を形成します。このようにして、各レイヤーごとに機能がますます抽象化されます。この枠組みの下では、GCNのさまざまな変種は伝播規則fの選択のみが異なる[1]。 伝播ルールの簡単な例 以下、この記事では最も単純な伝播ルールの例を示します[1]。
ここで、Wⁱ は i 番目の層の重み行列であり、σ は非線形活性化関数 (ReLU 関数など) です。重み行列の次元はFⁱ×Fⁱ⁺¹です。つまり、重み行列の2番目の次元のサイズによって、次の層の特徴の数が決まります。畳み込みニューラル ネットワークに精通している場合は、これらの重みがグラフ内のノード間で共有されるため、この操作は畳み込みカーネル フィルタリング操作に似ていることがわかります。 簡素化する 次に、最も単純なレベルでの伝播ルールを学習します。作る:
つまり、f(X, A) = AXです。この伝播ルールは単純すぎる可能性があるため、不足している部分はこの記事の後半で補足します。さらに、AX は多層パーセプトロンの入力層に相当します。 1. 簡単なグラフの例 簡単な例として次の図を使用します。 単純な有向グラフ。 numpy を使用して記述された上記の有向グラフの隣接行列は次のように表されます。
次に、特徴を抽出する必要があります。インデックスに基づいて各ノードに 2 つの整数特徴を生成します。これにより、この記事の後半で行列演算を手動で検証するプロセスが簡素化されます。
2. 伝播ルールを適用する これで、隣接行列 A と入力特徴のセット X を持つグラフが構築されました。伝播ルールを適用すると何が起こるか見てみましょう。
各ノード (各行) の表現は、隣接するノードの特徴の合計になります。つまり、グラフ畳み込み層は、各ノードを隣接するノードの集約として表現します。この計算プロセスは自分で検証することができます。この場合、v から n へのエッジがある場合、ノード n はノード v の隣接ノードであることに注意してください。 質問 問題に気づいたかもしれません:
次に、この記事ではこれらの問題について個別に説明します。 1. 自己ループを追加する 最初の問題を解決するには、各ノードに自己ループを直接追加することができます[1, 2]。具体的には、伝播規則を適用する前に、隣接行列 A を単位行列 I に追加することでこれを実現できます。
現在、すべてのノードはそれ自体の隣接ノードであるため、隣接ノードの特徴を合計するときに、各ノードには独自の特徴も含まれます。 2. 特徴表現を正規化する 隣接行列 A は、次数行列 D の逆行列を乗算することによって変換され、それによって特徴表現がノード次数によって正規化されます。したがって、簡略化された伝播ルールは次のようになります。
何が起こったのか見てみましょう。まず、ノードの次数行列を計算します。
伝播ルールを適用する前に、隣接行列を変換すると何が起こるかを確認しておくと役立ちます。 変身前
変身後
隣接行列の各行の重み(値)が、その行に対応するノードの次数で割られていることがわかります。次に、変換された隣接行列に伝播規則を適用します。
隣接ノードの特徴平均に対応するノード表現が得られます。これは、(変換された)隣接行列の重みが、隣接ノードの特徴の加重合計の重みに対応するためです。この結果はあなた自身で確認できます。 統合 ここで、自己ループと正規化の手法を組み合わせます。さらに、議論を簡略化するために、先ほど省略した重みと活性化関数の操作を再度導入します。 1. 重みを加える 最初に行うことは、重量を加えることです。ここでの D_hat は、A_hat = A + I に対応する次数行列、つまり強制的な自己ループを持つ行列 A の次数行列であることに注意してください。
出力特徴表現の次元を減らしたい場合は、重み行列 W のサイズを減らすことができます。
2. 活性化関数を追加する この論文では、特徴表現の次元を維持し、ReLU 活性化関数を適用することを選択します。
これは、隣接行列、入力機能、重み、および活性化関数を備えた完全な隠し層です。 現実世界のシナリオへの応用 ***、グラフ畳み込みネットワークを実際のグラフに適用します。この記事では、上記の機能表現を生成する方法を説明します。 1. ザカリー空手クラブ Zachary Karate Club は、ノードが空手クラブのメンバーを表し、エッジがメンバー間の関係を表す、広く使用されているソーシャル ネットワークです。ザカリーさんが空手クラブを調査していたとき、管理者とインストラクターの間で対立が起こり、クラブは二つに分裂しました。下の図は、ネットワークのグラフ表現を示しています。ノードは、クラブのどの部分に属するかに応じてラベル付けされており、「A」と「I」は、それぞれ管理者キャンプとインストラクター キャンプに属するノードを表しています。 ザカリー空手クラブネットワーク 2. GCNの構築 次に、グラフ畳み込みネットワークを構築します。実際にこのネットワークをトレーニングするのではなく、単にランダムに初期化して、この記事の冒頭で見た特徴表現を生成します。簡単に実装できる Zachary's Karate Club のグラフ表現を持つ networkx を使用します。次に、A_hat 行列と D_hat 行列を計算します。
次に、重みをランダムに初期化します。
次に、GCN レイヤーを積み重ねます。ここでは、特徴表現として単位行列のみを使用します。つまり、各ノードはワンホットエンコードされたカテゴリ変数として表されます。
さらに特徴表現を抽出します。
ご覧のとおり、この描写はザカリーの空手クラブの 2 つのコミュニティをうまく区別しています。この時点では、モデルのトレーニングはまだ始まっていません。 ザカリー空手クラブグラフネットワークのノードの特性 この例では、ReLU 関数の影響により、x 軸または y 軸上のランダムに初期化された重みが 0 になる可能性が高いため、上記の図を生成するには複数のランダム初期化が必要になることに注意してください。 結論 この記事では、グラフ畳み込みネットワークの概要を説明し、GCN 内の各ノード層の特徴表現が、隣接ノードの集約に基づいてどのように構築されるかを説明します。 NumPy を使用してこれらのネットワークを構築する方法とその強力さを学ぶことができます。ランダムに初期化された GCN でも、Zachary の空手クラブ ネットワーク内のコミュニティを分離できます。 参考文献
オリジナルリンク: https://towardsdatascience.com/how-to-do-deep-learning-on-graphs-with-graph-convolutional-networks-7d2250723780 [この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です] この著者の他の記事を読むにはここをクリックしてください |
>>: 2019 年に登場する 10 の機械学習アプリケーション
機械学習で大規模なデータセットを処理する方法ビッグデータではありません…。データセットは、共通のプロ...
[[410356]] 7月9日のニュース:最近、デジタルブロガーの@长安数码君はソーシャルプラット...
交通・自動車業界の変革の主流として、自動運転技術の開発は初期の成熟段階に入り、多くの企業が大規模なテ...
ハッカーは貴重なファイルを盗むためにネットワーク防御を突破する技術を向上しています。そこで、彼らを完...
導入前回の記事では、プロジェクトに必要な知識のポイントについて簡単に説明しました。今日は、プロジェク...
アルゴリズムは比較的複雑かつ基本的な科目です。プログラミングを学ぶ人は誰でも、多数のアルゴリズムを学...
この記事では、主にニューラル ネットワークの普遍近似理論を紹介し、PyTorch を使用して 2 つ...
人工知能(AI)は1950年代に誕生し、3つの発展の波を経てきました。研究段階から大規模な産業化段階...
はじめに:国内の求人検索サイトのデータによると、2019年現在、上海の自然言語処理(NLP)関連職種...
Q: 対称暗号化アルゴリズムと非対称暗号化アルゴリズムの違いは何ですか? 特に暗号化、署名、ハッシ...
機械学習を始める最も簡単な方法は何ですか?今年ハーバード大学で統計学の学位を取得したばかりのダニー・...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...