1. はじめに
概要だけ簡単に書きます。Pythonによる実際のモデル構築とかはChatGPTに聞けば勝手にやってもらえると思うので、どういうタスクに使えるのか?他モデルと比較した時の長所は?等、コンペでのモデル選択になるべく役立つような形で説明します。
2. グラフデータとは?
こちらの記事で超ざっくり説明してます。
3. ニューラルネットワークとは?
ニューラルネットワーク(NN)とは、複数の人工ニューロンを層状に組み合わせてデータのパターンを学習し予測を行うアルゴリズムの総称です。画像処理で使う畳み込みNN、グラフデータを処理するグラフNN、時系列データや言語データなど順番が大事なデータを処理するリカレントNN等、様々なものがあります。入力データの種類に応じて呼び名が変化しています。本記事ではグラフデータを扱うのでグラフNN(以下GNN)を取り上げます。
3. モデルの構造
最初に入力データの紹介だけして、モデルの内部構造である入力層・中間層・出力層について順を追って説明させていただきます。
3.1 入力データ
GNNモデルは、「ノード」と「エッジ」とノード間で送られる「メッセージ」の3つを特徴量とするNNです。あまりにも手書きすぎますが、入力データのイメージは下図の通りです。
mがメッセージでhがノード(頂点)の特徴量、eがエッジ(辺)の特徴量です。ノードとエッジの情報を集約してメッセージが計算できます。計算方法には和、平均、最大値を求める方法などがあります。
3.2 入力層
グラフデータを入力します。ノードの特徴量行列Xと隣接行列Aを特徴量とします。隣接行列とはノード間の接続を総当たり表のような形式で行列で表したものです。詳しくは「2.グラフデータとは?」で貼っ付けた記事をご覧ください。
3.3 中間層
ニューロンの集合体が層状に重なっています。ニューロンに特徴量を入れる→そのニューロンに設定された重みをかける→次のニューロンにその結果を渡す、ということを繰り返します。あまりにも手書きすぎますがイメージ載せときます↓
最終的に活性化関数というものをかけて特徴量Hを更新していくので数式で表すと次の通りとなります。
3.4 出力層
出力されたデータと教師データの差を計算します。
誤差が小さくなるように重みをちょっとずつ変えていきます。この重みの変え具合を「学習率」と呼びます。
後に紹介する損失関数と活性化関数を利用し、誤差が小さくなっていくよう中間層の重みを更新していきます。
3.5 損失関数と活性化関数とオプティマイザ
・出力結果を非線形的に変換する関数が活性化関数です。
・損失関数により出力結果と正解データの誤差を計算できます。誤差の最小値を計算するためには損失関数を微分することで傾きが0になる極小値を求めます。
・しかし局所解になってしまうリスク(勾配消失問題)があります。そうならないように誤差を最小化しつつ中間層のパラメータの更新を行うのがオプティマイザです。
4. おわりに
時間ある時に具体的な実装のところも記事にしたいと思ってます。間違ってるところあれば教えてください!!
タイトルにグラフデータと入れたのに、ニューラルネットワークの一般的な解説になってしまった、、、