compcogneuro/sims: ネットワーク構造
このページは外部資料の日本語訳です。原文の見出し順と本文順を保ち、コード・URL・出典表記はできるだけ原形のまま残しています。
出典とライセンス
原典: https://github.com/compcogneuro/sims/blob/main/ch6/objrec/README.md
ライセンス: BSD 3-Clause。このページは日本語翻訳であり、変更点は翻訳とサイト内整形です。
# 導入
このシミュレーションは、視覚処理の腹側の流れ(下側頭(IT)皮質まで)の領域の階層が、網膜入力画像の位置、サイズなどの変化に影響を受けない堅牢な物体認識をどのように生成できるかを調査します。
ネットワーク構造

図 1: V1 フィルタリング ステップ。長さ合計セルやエンドストップ セルなど、単純および複雑なセル起動プロパティをシミュレートします。上部は、各 4x5 V1 ハイパーカラム内のこれらのフィルターの構成を示しています。
まず、V1 から V4、IT、そしてオブジェクトの名前が表される出力に至るネットワーク構造を確認します。 (領域 V2 は、ここでは関係のない深度および図地エンコードに重要であると考えられているため、このモデルでは表されていません。) V1 層は 10x10 の大規模グリッド構造を持ち、これらのグリッド要素のそれぞれがユニットの 1 つのハイパー列を表し、以前の v1rf シミュレーションで開発が観察された種類の表現を非常にコンパクトかつ効率的にキャプチャします (図 1)。各ハイパーカラムには、入力イメージの局所的なパッチを処理する 20 (4x5) ユニットのグループが含まれています。これらのユニットは、(X 軸に沿って) 4 つの角度で方向付けされたエッジをエンコードし、行は次のように単純なセルと複雑なセルを表します。単純なセルは、異なる極性 (明るいより暗い、またはその逆) をエンコードする最後の 2 行によって表されます。最初の行は、極性と隣接する単純なセルを統合する複雑な「長さの合計」セルを表します。中央の 2 行は エンド ストップ ユニットで、指定された長さと合計の方向によって励起され、一方の端で周囲の単純なセルによって抑制されます。
隣接するグループは、画像の半分重複する領域を処理します。これらのグループは、接続性に加えて、層内の抑制を組織します。これは、V1 層全体では両方の抑制性競合が存在するが、単一のハイパーカラム内ではより高度な競合が存在することを意味します。これは、皮質の局所領域内の抑制性ニューロンが隣接する興奮性ニューロンから入力を受け取る可能性が高いという事実を反映しています。この効果は、FFFB 抑制を 2 つのスケールで同時に動作させることによって近似されます。ユニット グループ (ハイパーカラム) 内のより強力なレベルの抑制と、レイヤー内のすべてのユニットにわたるより低いレベルの抑制です。これにより、非常に強い入力を受け取らないカラムはまったくアクティブにならないことが保証されます (より励起された他のカラムによって生成された層レベルの抑制によって押しつぶされてしまうため) 一方で、ハイパーカラム内で最も適切な機能を選択するためのより高いレベルの競争も発生します。
V4 レイヤーもハイパーカラム (プール) のグリッドに編成されており、今回はサイズが 5x5 で、各ハイパーカラムには 49 ユニット (7x7) があります。 V1 と同様に、ここでも抑制はハイパーカラムとレイヤー全体のスケールの両方で機能します。 V4 ユニットの各ハイパーカラムは 4x4 V1 ハイパーカラムから受信し、隣接するカラムも半分重複する受容野を持ちます。次に、IT 層は、単一の阻害グループ内の単位の単一のハイパーカラム (10x10 または 100 単位) のみを表し、V4 層全体から受け取ります。最後に、出力レイヤーには、さまざまなオブジェクトごとに 1 つずつ、合計 20 のユニットがあります。図 2 は、各ユニットがどのオブジェクトを表すかを示しています。出力ユニットの 5x4 配列は、図 2 のオブジェクトの 5x4 配列に対応します。
- [[sim:Network/Wts]] / [[sim:Wts/r.Wt]] をクリックしてから、さまざまなレイヤーのユニットをクリックすると、上記の接続パターンを表示できます。
# トレーニング

図 2: オブジェクト認識シミュレーションに使用される、水平および垂直の線要素で構成される 20 個のオブジェクトのセット。視覚的特徴要素の制限されたセットを使用することで、モデルがどのように機能するかをより簡単に理解できるようになり、新しいオブジェクトへの一般化をテストすることもできます (オブジェクト 18 と 19 は最初はトレーニングされず、その後は比較的少数の場所でのみトレーニングされます。そこで学習すると、他の場所にもよく一般化されます)。
次に、ネットワークがどのようにトレーニングされるかを見てみましょう。
- まず、[[sim:Network]] 表示の [[sim:Network/Act]] の表示に戻ります。次に、[[sim:Init]] および [[sim:Step]]
Trialを実行して、最初のトレーニング トライアルを表示します。 NetView の右下にある VCR ボタンを使用して、活動化状態の四半期を再生します。
入力イメージのセトリングの マイナス フェーズ の 4 分の 3 が表示されます。これは図 2 に示す形状の 1 つで、平面内でランダムな位置、サイズ、わずかな回転が行われ、その後に出力レイヤーで正しい答えが提供される プラス フェーズが続きます。 ネットワークによって処理された完全なビットマップ イメージは、[[[sim:Image]]] タブにあります。 V1 入力層のパターンは、図 1 に示す V1 指向のエッジ検出器による処理の結果です。
- [[sim:Step]]
Trialに進み、さらにいくつかのトライアルを確認し、入力にどのような変動があるかを確認することができます。
このネットワークのトレーニングには時間がかかるため (特に Web では、コンピューターの新しさと性能にもよりますが、デスクトップでは数分しかかかりません)、トレーニング済みのネットワークから重みをロードするだけで済みます。ネットワークは、エポックあたり 100 のオブジェクト入力の 50 エポック、または 5,000 のオブジェクト プレゼンテーション向けにトレーニングされました。 ただし、パフォーマンスが漸近線に近づくまでに要した時間は、わずか約 25 エポック (2,500 のオブジェクト プレゼンテーション) でした。特定の入力を提示する方法にはさまざまなバリエーションがあるため、これは変動空間のそれほど多くのサンプリングを表すものではありません。
- ツールバーの [[sim:Open Trained Wts]] を使用して重みをロードします。次に、[[sim:Step]]
Trialを数回実行して、オブジェクト認識タスクを実行するトレーニング済みネットワークのマイナスとプラスのフェーズを確認します。 [[sim:Phase/ActM]] と [[sim:Phase/ActP]] ([[sim:Network/Phase]] 内) の間を行き来してクリックすると、ネットワークの応答と正しい応答の違いを確認できます。
通常、プラス位相とマイナス位相の出力状態が同じであることがわかります。これは、ネットワークが表示されているオブジェクトのほとんどを正しく認識していることを意味します。
パフォーマンスのより包括的なテストを行うには、オブジェクトの 500 回のプレゼンテーションを実行し、全体的なエラー レベルを記録するテスト プログラムを実行できます。
- [[sim:Test All]] ボタンを押し、[[sim:Test Epoch Plot]] を選択すると、結果を待つ間の処理が高速化されます。 [[sim:Test Trial Plot]] をクリックすると、トライアルごとの結果を確認できますが、これを監視すると処理が遅くなります。 Web バージョンでは、コンピューターの速度によっては時間がかかる場合があります。
ネットワークがトレーニングされていない最後の 2 つのオブジェクト (常に間違っている) を除いて、エラー率は通常 5% 未満 (多くの場合はゼロ) であることがわかります。したがって、ネットワークは、位置とサイズが不変の方法でオブジェクトを認識するというこの困難なタスクにおいて、妥当なパフォーマンスを示します。
受容野分析
ネットワークがこの困難な問題を解決していることがわかったので、次の疑問は明らかです。「どのようにして?」ということです。これに答えるには、ネットワークの連続層にわたって入力パターンがどのように変換されるかを調べる必要があります。これは、V4 層と IT 層のユニットの 受容野 を計算することによって行われます。受容野とは本質的に、ネットワーク内の特定のユニットが反応するさまざまな刺激の範囲、つまり何を検出するように調整されているかを意味します。テストプロセス中に、システムは 活性化ベースの 受容野を計算します。
この手順では、すべての入力パターンをネットワークに提示し、ユニットがそれらにどのように応答するかを記録します。どのパターンがアクティブ化されるかを決定するために、たとえば、特定の V4 ユニットがアクティブになるたびに、別の ソース レイヤー上のアクティビティを集計します (アクティブな量によって重み付けされます)。特定のソース パターンが V4 ユニットを活性化しない場合、そのソースはそのユニットの全体的な受容野にはカウントされません。 最後に、ユニット アクティビティとソースの積をソース アクティベーションの合計で割ります (つまり、ソースのアクティベーション加重平均を計算します)。 この加重平均計算により、何がそのユニットを活性化する傾向があるのかについての有用な集合画像が生成されます。特に興味深いのは、画像入力のアクティビティです。アクティベーション ベースの手法の優れた特徴は、どのアクティビティでもどこでも使用できることです。レイヤーはそこから直接受け取る必要がありません。 また、Output レイヤー アクティビティにも興味があります。これにより、特定のユニットがどの LED オブジェクトの表現に関与しているかがわかります。

図 3: 画像層と出力層の V4 活性化ベースの受容野のサンプル。 同じ V4 ユニットが (外側のグリッドに) 表示されるため、それぞれを画像および出力の対応する受容野と比較できます。

図 4: 画像層と出力層のすべての IT 活性化ベースの受容野と、対応する外側グリッド内の各ユニット
- [[sim:Test All]] が完了すると、[[sim:V4:Image]] で始まるタブには、結果として得られるアクティベーションベースの受容フィールドが含まれます。 それぞれを順番にクリックします (画像のレンダリングには時間がかかる場合があります)。 [[sim:V4:Image]] は、外側の大規模グリッド (NetView に表示されるそれぞれの位置) 内のすべての V4 ユニットと、各内側グリッドのイメージに対する加重平均応答を示します。 これは非常に大きいため、通常はスクロールが必要です。そこで、図 3 に V4 ユニットの 10x10 のサンプルをキャプチャし、[[sim:V4:Output]] の同じユニットも示しています。 同様に、IT タブには、対応する受容野が表示されます (図 4 も参照)。
V4 ユニットが、網膜入力内の比較的狭い範囲の位置で、線要素の単純な結合をエンコードしていることがわかります。 複数の場所にまたがって応答するという事実により、重みパターンが多少不鮮明になっているように見えます。これは、多少見づらくなっていますが、重要な不変性の役割を果たしているということを示しています。 また、画像と出力のアクティベーション間の対応も確認できます。たとえば、図 3 の左下の V4 ユニットは、画像パターンに従って「回転した F」に応答しているように見えます。実際、最もアクティブな出力ユニットは、その回転した F である LED オブジェクト 10 に対応します。各 V4 ユニットが複数の異なるオブジェクトに応答するという事実は、出力パネルの混雑したカラフルなパターンによって明らかです。 これは、V4 が (第 3 章で説明したように) ローカリスト的な表現ではなく、粗くコーディングされたオブジェクトの分散表現を生成していることを意味します。
質問 6.3: ネットワークによって実行される全体的な計算の観点から、V4 受容野で観察される線要素の組み合わせと空間的不変性の重要性を説明してください。