compcogneuro/sims: 表現分析
このページは外部資料の日本語訳です。原文の見出し順と本文順を保ち、コード・URL・出典表記はできるだけ原形のまま残しています。
出典とライセンス
原典: https://github.com/compcogneuro/sims/blob/main/ch4/family_trees/README.md
ライセンス: BSD 3-Clause。このページは日本語翻訳であり、変更点は翻訳とサイト内整形です。
# 導入
このシミュレーションは、家系図タスク (Hinton、1986) を使用した深いネットワークでの学習のケースを示しています。このタスクでは、類似構造を持たない入力を学習によってアイテムの機能類似構造を捕捉する隠れ層に再コード化する方法を示します。この場合、家系図のさまざまなレベルにある人々が同様の表現にマッピングされます。これは、ニューラル ネットワークが単に表面的な類似構造に拘束されるのではなく、実際には機能的な関係に基づいて独自の類似構造を作成できることを示しています。このネットワークには入力と出力の間に複数の隠れ層が介在しているため、深いネットワークにおけるエラー駆動学習の古典的なテストとしても機能します。

図 1: それぞれのペア関係 (夫、妻、息子、娘、父、母、兄弟、姉妹、叔母、叔父、姪、甥) でトレーニングされた 2 つの同型家系図は、別個の入力/出力パターンとしてトレーニングされました。
環境の構造を図 1 に示します。ネットワークは、「ロブは誰と結婚していますか?」などの質問に応じて正しい名前を生成するようにトレーニングされています。これらの質問は、エージェント入力層の 24 の名前ユニットの 1 つ (例: 「ロブ」) を関係入力層の 12 のユニットの 1 つ (例: 「結婚」) と組み合わせてアクティブ化し、患者出力層で正しいユニットのアクティブ化を生成するようにネットワークをトレーニングすることによって提示されます。
# トレーニング
まず、ネットワーク ([[[sim:Network]]] タブに表示されている) には、Agent および Relation の入力層と、Patient の出力層がすべてネットワークの下部にあることに注目してください。これらのレイヤーには、24 人の異なる人々と 12 の異なる関係性のローカリスト表現が含まれています。これは、どの人々の間でもこれらの入力パターンに重複がなく、したがって明白な類似性がないことを意味します。 AgentCode、RelationCode、および PatientCode の隠れ層は、ネットワークがこれらのローカリスト表現をより豊富な分散パターンとして再表現する手段を提供します。これにより、関連する区別を強調し、無関係な区別を強調しないことでマッピングの学習が容易になります。中央の Hidden 層は、これらの再コード化された表現間のマッピングを実行して正しい答えを生成する責任を負います。
- 左側の [[sim:Family Trees]] パターンをクリックして入出力パターンを参照します。これは、タスクがネットワークにどのように提示されるかを理解するのに役立ちます。最初の列のイベントの名前は、Agent.Relation.Patient という形式であり、「Christo の妻は誰ですか?」という行に沿って解釈できます。 “ペニー。”
次に、これがネットワーク自体でどのように機能するかを見てみましょう。
- ツールバーで [[sim:Init]] および [[sim:Step Trial]] を実行します。 これにより、入力の処理の 4 四半期を通じてネットワークが実行され、マイナスまたは期待フェーズで安定し、
Patient層でプラスまたは結果のアクティブ化を受け取ります。 ネットワークの右下にある VCR ボタンを使用して、各四半期の終わりにこれらのアクティベーション状態を確認できます (または、[[sim:Phase]] /ActQ1、ActQ2、ActM、およびActP変数をクリックします)。
すべての隠れ層が、この追加情報を反映するためにアクティブ化パターンを変更し、少なくともある程度は双方向接続を通じて逆方向にフィードバックしていることがわかります。 [[sim:Phase]]/ActDif をクリックすると、マイナス位相とプラス位相のアクティブ化の違いを確認して、このエラー信号を直接確認できます。 デフォルトのネットワークは、BCM Hebbian (自己組織化) と XCAL のエラー駆動学習のデフォルトの組み合わせを使用します。このネットワークがタスクを学習するのにどれくらいの時間がかかるかを見てみましょう。
- [[sim:Train Epoch Plot]] をクリックしてトレーニングのエポックにわたるパフォーマンスのプロットを表示し、ステップ レベル ([[sim:Step]] の右側) を
TrialからRunに変更してから、[[sim:Step]] を実行します。
ネットワークがトレーニングされると、グラフにはトレーニング用の PctErr 統計、つまりゼロ以外の SSE エラーが発生した試行の割合が表示されます。トレーニング時間はランダムな初期重みに応じて変化しますが、20 ~ 50 エポックの間でトレーニングする必要があります。この間、ネットワークは、ローカリスト入力ユニットを、2 つのファミリーの異なるメンバー間の関係の意味構造を捉える体系的な内部分散表現に変換する方法を学習しました。これを確認するには、非表示レイヤーのアクティベーションのさまざまな分析を実行する必要があります。
表現分析
関連する類似性を強調するために、このネットワークによって実行される変換が学習によってどのように形成されたかを理解するために、100 個の異なる入力パターン (すべての特定のエージェント-関係-患者のトリプル) をテストすることで記録された隠れユニットのアクティビティ パターンのさまざまな分析を実行し、訓練された初期重みとランダムな初期重みを比較して、具体的に何が学習されたかを確認できます。
- まず、実行モード (左上) を
TrainではなくTestに設定し、[[sim:Init]]、[[sim:Run]] を実行してすべてのレイヤー アクティビティ パターンの記録を収集し ([[[sim:Test Trial]]] タブで確認できます)、ツールバーの [[sim:Reps Analysis]] ボタンを押します。は、Hidden 層と AgentCode 層からのこれらのアクティベーションに対して、以下で説明するさまざまな分析を実行します。
異なる活性化パターン間の関係を調べる最も直接的な方法は、各パターンと他のすべてのパターンの間のペアごとの類似性 (距離の逆数) を計算することです。 相関 類似度測定を使用します。これにより、同一のパターンの場合は 1、完全に無関係なパターンの場合は 0、完全に 逆相関 のパターンの場合は -1 が生成されます。 (興味深いことに、相関は平均正規化された活性化パターンを使用した N 次元空間のコサイン角に相当し、コサインはベクトルの長さで正規化されたベクトル間の単純な内積に相当します。)
- 左側のパネルで [[sim:Stats]] をクリックし、次に [[sim:Sim Mats]] をクリックし、次に
HiddenRelの隣のボタンをクリックすると、エンコードされた関係のタイプに応じてパターンがラベル付けされ並べ替えられた、隠れレイヤーの類似性行列が表示されます。 この並べ替えは、この関係因子に関連する類似性のパターンを類似性マトリックスで明確にするための鍵となります。
左上から右下まで横断する黄色の対角線に沿った大きな赤い四角形が、関係グループに従って明確に整理されていることがわかります。これらの四角形は、同じ関係を持つ入力間の類似性が中程度に高いレベルであることを示します。つまり、「叔母」のような同じ機能的関係にある人々の内部の隠された表象は、他の家族的立場に比べてより類似しています。さらに、同様の赤色を持つ他の同様のパターンがいくつかあることも観察する必要があります。これらのパターンも、通常は関係グループに従って整理されています。
- 次に、
HiddenAgentの横にあるボタンをクリックすると、エージェントの役割ごとに整理された隠しユニットのアクティブ化距離が表示されます。このプロットと以前の関係を整理したプロットを行ったり来たりして比較してください。Shiftキーを押したままボタンをクリックすると、別ウィンドウでSim Matsが表示されます。
質問 4.8: この結果のパターンは、ネットワークが入力をエンコードする方法について何を意味すると思いますか – 隠れ層が入力パターンを編成する際の入力の主要コンポーネント (関係とエージェント) は何ですか? タスクを実行するために、この方法で隠れ層を編成することは、モデルにとってどのような利点があるでしょうか。つまり、すべてのパターンにわたってどのコンポーネントがより「中心」にあるのでしょうか?