compcogneuro 翻訳ページ

compcogneuro/sims: 表現分析

このページは外部資料の日本語訳です。原文の見出し順と本文順を保ち、コード・URL・出典表記はできるだけ原形のまま残しています。

種別

翻訳資料

更新日

2026-05-20

対象

外部資料を日本語で原文順に読みたい読者

目安

原文量に依存

確認メモ

機械翻訳をベースにした日本語訳です。実装手順や引用は必ず原典も確認してください。

出典とライセンス

原典: 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 の異なる関係性のローカリスト表現が含まれています。これは、どの人々の間でもこれらの入力パターンに重複がなく、したがって明白な類似性がないことを意味します。 AgentCodeRelationCode、および PatientCode の隠れ層は、ネットワークがこれらのローカリスト表現をより豊富な分散パターンとして再表現する手段を提供します。これにより、関連する区別を強調し、無関係な区別を強調しないことでマッピングの学習が容易になります。中央の Hidden 層は、これらの再コード化された表現間のマッピングを実行して正しい答えを生成する責任を負います。

  • 左側の [[sim:Family Trees]] パターンをクリックして入出力パターンを参照します。これは、タスクがネットワークにどのように提示されるかを理解するのに役立ちます。最初の列のイベントの名前は、Agent.Relation.Patient という形式であり、「Christo の妻は誰ですか?」という行に沿って解釈できます。 “ペニー。”

次に、これがネットワーク自体でどのように機能するかを見てみましょう。

  • ツールバーで [[sim:Init]] および [[sim:Step Trial]] を実行します。 これにより、入力の処理の 4 四半期を通じてネットワークが実行され、マイナスまたは期待フェーズで安定し、Patient 層でプラスまたは結果のアクティブ化を受け取ります。 ネットワークの右下にある VCR ボタンを使用して、各四半期の終わりにこれらのアクティベーション状態を確認できます (または、[[sim:Phase]] / ActQ1ActQ2ActM、および 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: この結果のパターンは、ネットワークが入力をエンコードする方法について何を意味すると思いますか – 隠れ層が入力パターンを編成する際の入力の主要コンポーネント (関係とエージェント) は何ですか? タスクを実行するために、この方法で隠れ層を編成することは、モデルにとってどのような利点があるでしょうか。つまり、すべてのパターンにわたってどのコンポーネントがより「中心」にあるのでしょうか?

生の距離行列はすべてのデータを示しますが、より複雑なパターンを確認するのは難しい場合があります。分散表現は、多くの異なる形式の類似性を同時にエンコードします。したがって、この構造を詳しく見るために、クラスター プロットと主成分分析 (PCA) プロットという他の 2 つのプロットを使用します。 * [[sim:HiddenRelClust]] タブをクリックすると、関係によってラベル付けされた非表示のアクティベーションのクラスター プロットが表示されます。 たとえば、姪と甥が、他のいくつかの関連アイテム (兄弟と姉妹など) と同様にグループ化されていることがわかります。ただし、ここには明らかに別の次元の構造が示されています。クラスター プロットは、距離のわずかな違いに基づいて劇的に変化する可能性があります。 したがって、複雑さを軽減する方法として PCA プロットに目を向けます。 PCA は、多くのユニットにわたるアクティビティに関する情報を、データの大部分を説明する最も強力で単純なコンポーネントに抽出する方法です。ここでは、最初の 2 つの主次元のみに焦点を当てます。最初の次元は、パターン間で最も共有された情報を持つコンポーネントを検出し、それが考慮されると、2 番目のコンポーネントは、次に残っている最大量の共有分散を表示します。 * [[[sim:HiddenRelPCA]]] タブをクリックすると、リレーション別に整理された非表示レイヤーの PCA プロットが表示されます。 結果として得られるプロットには、変動の第 1 主成分が X 軸に示され、第 2 成分が Y 軸に沿って表示されます。正確なパターンはネットワークや初期重みなどによって異なりますが、ネットワークが問題を表現する合理的な方法の 1 つは、関係における相対年齢を表す 1 つのコンポーネント (例: X 軸) と、男性と女性を分離するもう 1 つのコンポーネント (例: 父、息子、兄弟、叔父が一緒か、姉妹、母、娘) を使用することです。 また、エージェントベースのラベルのクラスターと PCA プロット (ここでの PCA プロットはコンポーネント 2 と 3 のもの) を見て、そこでどのような組織が行われているかを確認することもできます。一般に、近くにあるツリー内の同様の場所が合理的に組織されていることがわかりますが、関係と分散表現の高次元の性質を考慮すると、完全に体系的ではなく、誰もが何らかの形で関連しているため、その組織がどの程度合理的であるかを実際に判断することは困難です。 * 次に、これらの結果をランダムな初期重みを使用したネットワークと比較してみましょう。 `Train` モード [[sim:Init]]、次に `Test` モード [[sim:Init]]、[[sim:Run]]、[[sim:Reps Analysis]] を実行してから、もう一度 [[sim:HiddenRelPCA]] をクリックし、その場合の類似度行列 `Sim Mat` も調べます。 > **質問 4.9:** トレーニングされていない表現は、以前にトレーニングされた表現とどのように比較されますか?同じ大きな構造の一部がまだ存在していますが、その組織は訓練された重みの場合と同じくらい体系的ですか?トレーニングされたケースではそれがより明確であったため、特にリレーショナル データに焦点を当てます。 ランダムな重みを使用しても距離行列には依然としてかなりの量の構造が存在するため、トレーニング済みネットワークとトレーニングされていないネットワークの PCA プロット間の違いは微妙である可能性があることに注意してください。これは、入力パターン自体の類似構造によるものです。個々の入力単位が局所的であっても、3 つの層 (エージェント、関係、患者) にまたがる構造があり、学習がなくてもモデル表現はこの構造を反映する傾向があります。学習により、この初期構造が洗練され、最も重要なことに、各入力に対して正しい患者応答を生成するための適切なシナプス重みが確立されます。 ネットワーク内でより体系的に学習された表現構造を取得するには、ネットワークの内部表現をより強力に制約し、形成する、より大きなトレーニング パターンのセットが必要です (元の Hinton (1986) モデルでは、この小さなパターン セットでも、より体系的な表現をモデルに開発させるために、非常に長いトレーニング時間にわたって、はるかに少数の隠れユニットが使用されました)。体系的な内部表現を形成する大規模な入力セットの例については、後の章で説明します。たとえば、「知覚」の章のオブジェクト認識モデルや「言語」の章のスペル-トゥ-サウンド モデルなどです。いずれの場合も、トレーニングの前後でどのタイプのアイテムがクラスター化される可能性が高いかに焦点を当ててください。 # ヘビアン vs. の役割エラー主導型学習 このモデルは、深い多層ネットワークとして、自己組織化 (ヘビアン) 学習とエラー駆動学習を組み合わせる利点の一部を実証できますが、入力パターンの構造とサイズが限られているため、効果はかなり弱いです。 `Learn` 変数は、`HebbError` から `PureErr` または `PureHebb` に変更できます。関連するパラメーターに影響を与えるには、この設定を変更した後に `Init` を押す必要があります。 `PureErr` 設定を使用してモデルを実行してみると、`HebbErr` 設定よりも学習に時間がかかることがわかるかもしれません (またはそうでないかもしれません)。次に、`PureHebb` を試してみます。学習はしますが (明示的なエラー駆動学習がないことを考えると、これは素晴らしいことです)、せいぜい約 50% を超える正解率 (通常は約 25% 正解、75% エラー) を超えるタスクの学習に失敗します。それにもかかわらず、このヘビアン学習は、大規模なネットワークにおいてエラー駆動学習と組み合わせると有益です。現在の大規模ビジョン モデル (例: O'Reilly、Wyatte 他、2013) では、このヘビアン学習は不可欠であり、BCM ヘビアンがなければ学習は完全に失敗します。 ヘビアン学習は、深いネットワークでの学習を促進します。特に、ネットワークがタスクの大部分を学習し、残りの誤差勾配が非常に小さくなると、エラー信号が弱くなるためです。自己組織化制約により、学習が継続的に安定して推進されます (同様の構造に応じて、新しいパターンへの一般化も容易になります)。さらに、エラー駆動型学習ネットワークを純粋な逆伝播または再帰型 GeneRec/CHL エラー駆動型ネットワークと比較すると、どちらも抑制的制約がなく、この家系図問題の学習がはるかに遅くなります (O'Reilly、1996)。抑制的競争も Leabra ネットワークに有益な学習制約を提供していることがわかります。 それにもかかわらず、純粋なヘビアン学習だけでは、このようなタスク (および他の多くのタスク) を学習することができないのは明らかです。理由の 1 つは、平均的な学習軌跡で明らかです。純粋なヘビアン学習の正のフィードバック ダイナミクスと「近視眼的な」ローカルな視点により、学習が進むにつれてパフォーマンスが低下する、リッチな表現が作成されてしまいます。したがって、実際に複雑な認知タスクを学習するには、エラー主導型学習が全体として支配的な役割を果たす必要があります。 </section>