シミュレーションに戻る
# 導入
このプロジェクトは、マクロスキーとコーエン (1989) によって発見された壊滅的なレベルの干渉を示す、皮質のようなネットワークにおける古典的なペアの学習タスクを調査します。

図 1: AB-AC ペアのアソシエートを学習している人々からのデータ、および AB での AC 学習の 壊滅的な干渉 を示す McCloskey & Cohen (1989) からの同等のデータ。
AB-AC タスクを実装するための基本的なフレームワークは、2 つの入力パターンを持つことです。1 つは「A」刺激を表し、もう 1 つは「リスト コンテキスト」を表します (ネットワークを参照)。したがって、被験者は 2 つの異なるリストを識別する何らかの内部表現を開発し、これが 2 つの関連付けのどちらを生成すべきかを明確にする手段として機能すると仮定します。これらの入力パターンは隠れ層に入力され、「B」または「C」の関連付けに対応する出力パターンが生成されます。ランダムなビット パターンの分散表現を使用して単語刺激を表現します。
# トレーニング
まずはトレーニング環境から見ていきましょう。
- 左側のパネルの [[sim:AB patterns]] の隣にある [[sim:AB]] ボタンを押してから、その下の [[sim:AC patterns]] を押します。
各イベントの Input 列は A 項目を示し、Output 列は関連付け (応答) を示します。 Context 列は、各イベントの「リスト コンテキスト」を提供します。 AB リストの最初の項目 (b0) は、AC リストの最初の項目 (c0) と同じ A パターンを持つことに注意してください。これは、2 つのリスト内の対応する項目の各ペアに当てはまります。 AB リスト上のすべてのアイテムの Context パターンはすべて、共通の基礎となるパターンの同様のランダムなバリエーションであり、AC アイテムについても同様です。したがって、これらのパターンは、同じリストの各項目で同一ではなく、非常に似ているだけです(これは、外部環境コンテキストが一定であっても、それに対する内部の認識は変動し、時間の経過の感覚などの他の内部コンテキスト要因も同様に変化するという事実を反映しています)。
ここで、ネットワークがこのタスクでどの程度うまく機能するかを見てみましょう。
- 最初に [[sim:Init]] を実行し、次に [[sim:Step]]:
Trial を繰り返してトレーニングを数回行うと、ネットワークがどのようにトレーニングされるかを確認できます (非常に標準的なマイナス位相プラス位相のダイナミクス – 通常どおり巻き戻すには、Time VCR ボタンを使用します)。次に、[[[sim:Test Epoch Plot]]] タブをクリックしてトレーニング パフォーマンスのプロットを表示し、完全な実行のステップを Run および [[sim:Step]] に変更します。
ネットワークがトレーニングされるとプロットが更新され、最初は AB リストで表示されますが、エラーが 0 になると自動的に AC リストに切り替わります。 ABErr および ACErr 行は、AB リストと AC リストについて、誤って生成されたリスト項目の数としてエラーを示します。正しいパフォーマンスの基準はすべて 0.5 の右側にあります。これらは、現在のトレーニング項目 (AB または AC) に関するトレーニングの各エポック後に、AB および AC パターンのフルセットでテストした結果です (人間では不可能なテスト中の学習はありません)。 [[sim:Test Epoch Plot/PctErr]] をクリックすると、現在のトレーニング セットのトレーニング エラーを確認できます。
-
AB テストのエラーが減少するのがわかりますが、トレーニングが AC に切り替わった時点ですぐに元に戻り、マクロスキーとコーエン (1989) の結果とほぼ一致します。これは、AC リストでの学習 (徐々に改善されます) が、AB リストでの事前の学習に致命的な干渉を及ぼしたことを示しています。抑制表現とスパース表現、および適度なサイズの隠れ層を使用しているため、このモデルは場合によっては AB リストのある程度の量を保持できることがありますが、そのパフォーマンスは非常にばらつきがあり、平均すると人間のデータほど良好ではありません。 いくつかのトレーニング実行のバッチを実行して、統計を収集してみましょう。
-
[[sim:Run]] を押して 10 件の「被験者」の実行を完了し、[[sim:Train Run Plot]] をクリックして結果を監視します。
各「被験者」の AC リスト トレーニングの最後に取得された統計は、[[sim:Train Run Plot]] に表示されます。
- [[sim:RunStats Plot]] タブを表示して、AB リストの最終誤差の平均と最小値を含む、10 回の実行にわたる概要統計を表示します。この AB データは、AC リスト上のトレーニングによる干渉がどの程度あったかを示す全体的な尺度です。
質問 7.1: 10 人のシミュレートされた被験者のバッチ実行について、[[sim:RunStats Plot]] 内の ABErr:Mean および Min を報告します (プロット内の点の上にカーソルを置いて、リストされている最終的な y 軸値を報告するか、Table をクリックして数値の表を表示します)。また、[[sim:Test Epoch Plot]] を見ながら、別の [[sim:Init]] と [[sim:Step]]: Run を実行し、実行全体にわたる AC 学習と AB 干渉の間の一般的な関係を報告します。AC は通常、AB パフォーマンスがほとんど蒸発する前に重要な学習を示しますか?
# 干渉を減らす
基本的な壊滅的な干渉現象を再現したので、干渉のレベルを下げるために何かできるかどうかを見てみましょう。私たちの戦略は、特定の重要なパラメータを操作しながら、同じ基本アーキテクチャと学習メカニズムを維持することです。ここでの目的は、これらの干渉効果の原因を理解する上で重要であることが判明するいくつかの原理と、それらがどのように潜在的に低減できるかを明らかにすることです。ただし、この特定の状況ではそれらの影響は比較的小さいことがわかります。
* [[sim:Network]] タブに戻ってクリックし、[[sim:Init]]、次に [[sim:Step]] `Trial` を実行し、ステップを進めるときに `Hidden` レイヤー内のパターンの重なりに注意してください。 次に、[[sim:Step]]: `Run` を実行して再トレーニングし、[[sim:Test Epoch Plot]] タブをクリックしてトレーニングを高速化します。次に [[sim:Reps Analysis]] を実行して、第 4 章の家系図ネットワークで行ったように類似度行列、PCA プロット、クラスター プロットを計算します。左側のパネルで [[sim:Stats]] をクリックし、 `SimMats` `Hidden` 行。
これにより、異なる AB および AC 項目ごとに、隠れ層のアクティブ化パターンの類似性マトリックスが表示されます。 AB アイテムとそれ自体の類似性が全体的に増加していることがわかりますが、AC アイテムについても同様ですが、リスト間では依然としてかなりの「赤色」の類似性があり、特に同じ A アイテムを持つアイテム (例: b0 と c0) は非常に似ている傾向があります。これは、`HiddenClust` クラスター プロット タブでも確認できます。ここでは、`b` 項目と `c` 項目がクラスターにグループ化されています。
AC リストは AB リストから同じユニットをアクティブにして再利用し、`B` アソシエートの代わりに `C` アソシエートをサポートするように重みを変更するため、この重複は干渉の観点から明らかに問題があるように見えます。したがって、隠れユニット表現が重複する範囲を減らすことによって (つまり、隠れユニット表現を *スパース* にすることで)、ネットワークがこれら 2 つの項目リストを学習するために別個の表現を使用するように促すことができるかもしれません。
* コントロール パネルの [[sim:Hidden Inhib Gi]] パラメーターを使用して、隠れ層の抑制を増やして、このアイデアをテストしてみましょう -- 1.8 ではなく 2.2 に設定します。 これらのパラメーターを使用して、[[sim:Init]] および `Run` を 10 回実行します。
この抑制の増加により、隠れ層の各アクティビティ パターンが小さくなり (アクティブなニューロンが少なくなり)、その結果、重複する分散表現が少なくなる可能性があります。
> **質問 7.2:** [[sim:RunStats Plot]] をクリックして、結果として得られる `AB Err:Mean` および `Min` 統計を報告します。これにより、AB 干渉の量は減少しましたか?
パフォーマンスを向上させるためにできるもう 1 つのことは、A 刺激に対する `Context` 層入力の寄与を高めることです。これは、このリスト コンテキストによって 2 つの異なる関連性が明確になるためです。
* これを行うには、`FmContext` パラメータを 1 から 1.5 に変更します。
これにより、コンテキスト入力の重み付けスケーリングが増加します (つまり、`WtScale.Rel` パラメーター (詳細については [入力スケーリング](https://github.com/emer/leabra#input-scaling) を参照) が増加します。被験者による戦略的な注意の集中がこのようなことを達成すると想像するかもしれません。
最後に、特定のリスト上のすべての項目と関連するリストのコンテキスト表現との強い相関関係により、自己組織化学習の量が増加するとパフォーマンスの向上に貢献する可能性があり、これはヘビアン学習によって強調されるべきです。これにより、コンテキスト表現が異なるため、2 つのリストの項目を表す非表示ユニットのサブセットが異なる可能性があります。
* これを行うには、`XCalLLrn` を .0003 ではなく .0005 に増やします。
次に、これら 3 つのパラメーターを調整することによってパフォーマンスが向上するかどうかを確認してみましょう。
* [[sim:Init]] と `Run` を実行します -- 結果が返されると、`Train Run Plot` を監視できます。
> **質問 7.3:** [[sim:RunStats Plot]] をクリックして、結果として得られる `AB Err:Mean` および `Min` 統計を報告します -- これらのパラメータは AB 干渉の量を減らしましたか? 非公式のテストでは、これがこれらのパラメーターを使用してこのネットワークで得られる最高のパフォーマンスに近いことが示されています。これは人間のパフォーマンスの優れたモデルになりますか?
AB リストの最終的な干渉レベルは、かなり変動する傾向があります。 トレーニング中に戻って [[sim:Test Epoch Plot]] を観察すると、これらの操作によって干渉の開始がいくらか遅くなっていることがわかります。したがって、これらの操作が正しい方向に効果をもたらしていることを示す兆候があり、干渉を避けるためにまばらで重複しない表現を使用するという原則がある程度裏付けられます。
理論的に重要であるもう 1 つのパラメータは、初期重みの分散です。これにより、さまざまな関連付けを表すために *異なる* 単位セットの使用が促進される可能性があります。 この差異を大きくして、その効果を調べることができます。
* [[sim:Wt Init Var]] を .25 から .4 に変更します。
これにより、ある程度の良い結果が得られる可能性もありますが、全体的なばらつきも大きくなり、純利益が得られない可能性があります。
私たちがまだ強調していない重要な側面の 1 つは、ネットワークの学習速度です。明らかに、ネットワークの学習速度は (リスト項目への露出回数の点で) 人間の被験者ほど速くありません。さらに、干渉パフォーマンスを向上させるために行った操作により、トレーニング時間がさらに長くなりました (これは、デフォルトのパラメーターとこれらの新しいパラメーターを使用した実行の間にグラフ ビューをクリアしないとわかります)。したがって、[[sim:Lrate]] パラメーターを試して、ネットワークでの学習を高速化できるかどうかを確認できます。
* 同じ「最適な」パラメータを維持したまま、[[sim:Lrate]] を .1 (.04 から) に増やし、別の [[sim:Init]] および `Run` を実行します。
学習率の増加により学習プロセスのスピードアップには成功しましたが、この種の教材での人間の学習よりも依然として大幅に遅いです。 ただし、このネットワークでは、干渉が再び増加し始める前に、レートを上げてかなり高速な学習を行うことができます。ある時点で、学習レートが高くなると、重みが変化しすぎて干渉が増加します。
* また、[[sim:Reps Analysis]] を再度実行し、結果をよりパフォーマンスの高いモデルと比較して、パターンが実際にさらに分離されていることを確認することもできます。
次に、このモデルで行ってきたのと同じ種類の特殊化が、まさに*海馬*が非常に高いレベルのパターン分離を達成し、新しい情報の迅速な学習を可能にするために使用しているものであることがわかります。
# 参考文献
マクロスキー、M.、およびコーエン、ニュージャージー州 (1989)。コネクショニストネットワークにおける壊滅的な干渉: 逐次学習問題。 G. H. Bower (編)、『学習とモチベーションの心理学』、Vol. 24(109–164ページ)。カリフォルニア州サンディエゴ:アカデミックプレス。
</section>