compcogneuro/sims: ネットワークトレーニング
このページは外部資料の日本語訳です。原文の見出し順と本文順を保ち、コード・URL・出典表記はできるだけ原形のまま残しています。
出典とライセンス
原典: https://github.com/compcogneuro/sims/blob/main/ch7/priming/README.md
ライセンス: BSD 3-Clause。このページは日本語翻訳であり、変更点は翻訳とサイト内整形です。
# 導入
このシミュレーションは、「プライミング」の神経基盤を調査します。これは、以前の経験からの残留痕跡のしばしば驚くほど強い影響であり、「重みベース」(シナプスの小さな変化) または「活性化ベース」(残留神経活動) のいずれかになります。最初の部分では、標準的な遅い皮質学習率によって引き起こされる小さな重みの変化が、どのように重要な行動プライミングを生成し、ネットワークがある出力パターンを別の出力パターンよりも優先させるかを見ていきます。同様に、残留アクティベーションによって後続の処理にバイアスがかかる可能性がありますが、これは、重量ベースのプライミングの長期にわたる効果と比較すると、短期間かつ一時的なものです。
これらの現象をモデル化するには、同じ単語の 2 つの異なる意味 (たとえば、「銀行」は「川の銀行」または「お金の銀行」を意味する場合があります) など、2 つの異なる可能な出力を持つように特定の入力パターンをトレーニングする必要があります (つまり、1 対多のマッピング)。
ネットワークは標準の 3 層構造になっており、Input が一番下に表示され、Output が一番上に生成されていることに注意してください。これは、すべてをできるだけシンプルかつ標準に保つためです。
- コントロール パネルで [[sim:OnlyA]] および [[sim:OnlyB]] をクリックすると、ネットワークがトレーニングされている 2 つの異なるパターン セットが表示されます。
Input パターンは各パターン セットで同一ですが、A と B には、この同じ入力とペアになっている異なる Output パターンがあることがわかります。 [[sim:Alt AB]] パターンは、これらの A セットと B セットの両方を組み合わせたもので、入力ごとに A と B の出力を交互に切り替え、ネットワークの初期トレーニングを行うために使用します。
ネットワークトレーニング
まず、各入力に対するこれら 2 つの異なる関連出力の意味的背景知識の学習をシミュレートします。
- ツールバーの [[sim:Init]] および [[sim:Step]]:
Trialを押します。パターンの標準的なマイナス/プラス位相エラー駆動の学習を観察した後、[[sim:Train Epoch Plot]] タブをクリックしてトレーニングの進行状況のプロットを表示し、[[sim:Run]] を実行します。
グラフには、トレーニングの 2 つの統計、[[sim:Train Epoch Plot/PctErr]] と [[sim:Train Epoch Plot/Correl]] が表示されます。 任意の入力に対して 2 つの正しい出力が考えられるため、単純に標準の二乗和誤差 (SSE) 測定を使用することはできません。ネットワークがどちらかを有効に生成できる場合、どちらのターゲットを使用しますか? 代わりに、closest pattern 統計を使用して、ネットワークが生成した出力パターンに最も近い出力パターンを見つけます。 PctErr 統計は、最も近いパターンが同じ入力パターン (つまり、現在の入力の A バージョンまたは B バージョン) に関連付けられているかどうかに基づいています。 Correl 統計は、ネットワークのアクティビティと最も近いパターン (1 は完全一致) との相関関係を示します。
PctErr が急速に低下して 0 付近で跳ね返る一方、Correl が 0.9 以上になることがわかります。これは、モデルが各入力に対して 2 つの正しい出力のいずれかを生成するように学習していることを示しています。
余談になりますが、この 1 対多のマッピング タスクを学習できるかどうかは、ネットワーク内の kWTA 阻害の存在に大きく依存することに注意してください。標準的な逆伝播ネットワークは、どちらかの出力を生成することを学習するのではなく、両方の出力パターンの「ブレンド」を生成することのみを学習します (モベラン&マクレランド、1993 を参照)。抑制制約の下では両方の出力を同時にアクティブにすることはできないため、抑制はネットワークに一方の出力の選択を強制することで役立ちます。
また、双方向接続により、一方のアトラクターまたは他方のアトラクターに落ち着くことで、ネットワークが入力に対してより非線形な応答を示すことができるアトラクター ダイナミクスが生成されます (Params でトップダウン フィードバック接続の強度 .BackPath を下げると、Correl 値が大幅に減少していることがわかり、どちらの出力を明確に表しておらず、代わりにブレンドしていることがわかります)。 最後に、ここではヘビアン学習も重要であると思われます。ネットワークは、純粋にエラー駆動の方法よりもヘビアン学習を使用した方がタスクをよりよく学習するからです。ヘビアン学習は、これら 2 つのケースに存在する異なる相関関係により、2 つの出力ケースのより特徴的な表現を生成するのに役立ちます。 オライリー&ヘフナー (2000) は、このプライミング タスクにおけるこれらのさまざまなメカニズムの寄与をより体系的に調査します。
重量ベースのプライミング
重要 この時点以降は、重みを初期化する Train モードで [[sim:Init]] を押さないように注意してください。その場合は、[[sim:Open Trained Wts]] を押すだけで、事前トレーニングされた重みのセットを開くことができます。 また、ネットワークは一度トレーニングされるとそれ以上トレーニング エポックを実行しないため、最初に [[sim:Init]] を実行し、続いて [[sim:Open Trained Wts]] を実行する必要があります (これは 1 回だけです)。
適切な意味論的な背景知識を使用してネットワークをトレーニングしたので、プライミング タスクでのパフォーマンスを評価する準備が整いました。
まず、トレーニング終了時のネットワークが A または B 出力で応答する範囲のベースライン測定を確立する必要があります。
- [[sim:Test Trial Plot]] を選択してテスト結果を表示します。ネットワークは [[sim:OnlyA]] パターンでテストされ、12 の入力パターンに対して A または B で応答した回数が判断されます。次に、[[sim:Step]] を
Epochに設定し、[[sim:Step]] をクリックして、A項目とB項目の両方をターゲットとして 1 つのエポックをトレーニングします (つまり、トレーニング中に使用された [[sim:Alt AB]] 環境)。各エポック後にテストが自動的に実行されるため、プロットが更新されることがわかります。
このプロットは、各入力 (0 ~ 12) について、マイナス位相 (つまり ActM) で A 出力 ([[sim:Test Trial Plot/IsA]]) で応答したかどうかを示し、視覚的に具体的にするために最も近い出力の名前 (Closest) も示します。 トライアルの約半分で a 出力で応答することがわかります (トレーニングに偏りはありません。ただし、ランダムにかなり変化する可能性があります)。
次に、B 出力アイテムのみを提示するようにトレーニングを変更し、すべての皮質シミュレーションで使用されているのと同じ遅い学習速度を使用して、各出力アイテムに対する単一のトレーニング試行によって B 出力を準備できるかどうかを確認します (たとえば、視覚入力からオブジェクトを認識することを学習した objrec モデルなど)。
- ツールバーの [[sim:Set Env]] ボタンをクリックし、
TrainBを選択します。これにより、B項目のみでトレーニングするように構成されます。次に、[[sim:Step]]:Epochを再度実行します。
プライミングの程度は、IsA 応答の 減少 によって示されます。ネットワークは、比較的小さい学習率での単一の学習経験に基づいて、より頻繁に b に応答するはずです。別の [[sim:Step]]: Epoch を実行すると、ほぼすべての応答が b になるはずです。
これが単なるまぐれではないことを確認するために、逆の方法を試して、a 出力への 1 回の曝露で、現在の b 応答のどれだけが a に反転できるかを見てみましょう。
- [[sim:Set Env]] をクリックし、今回は
TrainAを選択します。 次に、[[sim:Step]]:Epochとなります。
b 応答の一部が、やはり 1 回のエクスポージャに基づいて a に戻っていることがわかります。
この実験をさらに数回繰り返し、a を b に戻し、さらに a に戻すことができます。
- [[[sim:Test Epoch Plot]]] タブをクリックすると、すべてのテスト結果のプロットが要約形式で表示されます。
質問 7.7: TrainAltAB、TrainB、および TrainA に対応する 3 つのデータ ポイントごとに [[sim:Test Epoch Plot/IsA]] の結果を報告します (数値を取得するにはポイントの上にマウスを置くか、数値の表を表示するには [[sim:Table]] ボタンをクリックします)。