compcogneuro 翻訳ページ

compcogneuro/sims: ネットワークと入力パターン

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

種別

翻訳資料

更新日

2026-05-20

対象

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

目安

原文量に依存

確認メモ

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

出典とライセンス

原典: https://github.com/compcogneuro/sims/blob/main/ch2/detector/README.md

ライセンス: BSD 3-Clause。このページは日本語翻訳であり、変更点は翻訳とサイト内整形です。

シミュレーションに戻る

# 導入

このシミュレーションでは、個々のニューロンがどのように検出器のように機能し、入力から特定のパターンを選択し、シナプスの重みと入力アクティビティ パターンの一致に対してさまざまな程度の選択性で応答するかを示します。

重みの特定のパターンにより、シミュレートされたニューロンが他の入力パターンよりも一部の入力パターンにどのように反応するかを見ていきます。ニューロンの興奮性のレベルを調整することで、ニューロンがその重みに最も適合するパターンにのみ反応するようにしたり、より段階的にその重みパターンに近い他のパターンに反応したりすることができます。これにより、点ニューロン活性化関数がなぜそのように機能するのかについての洞察が得られます。

ネットワークと入力パターン

まず、[[[sim:Network]]] タブを調べて、Detector ネットワークを表示します。ネットワークには、さまざまな数字の形の活性化パターンを持つ Input 層があり、これらの入力ニューロンは、一連の重み付けされたシナプス接続を介して受信ニューロン (RecvNeuron) に接続されます。この受信ユニットが入力から持つ重み (シナプスの強さ) のパターンを確認することができ、このユニットが何を検出するかについてのアイデアが得られるはずです。

  • [ネットワーク] ビューの左側にあるネットワーク変数のリストの上部にある [[[sim:Wts]]] タブを選択し、表示する値として [[[sim:r.Wt]]] をクリックし、次に sim:RecvNeuron をクリックして受信重みを表示します。

Input グリッドが 8 のパターンで点灯しているのがわかります。入力ユニットからの接続に対する受信ユニットの重みパターンであり、対応する送信(入力)ユニットに重み値が表示されます。したがって、入力ユニットがこの重みパターンと一致する起動パターンを持っている場合、受信ユニットは最大限に起動されます。ターゲットの 8 入力に近い入力パターンは、その近さに応じて段階的なアクティベーションを生成します。したがって、後で説明するように、この重みのパターンによってユニットが何を検出するかが決まります。まず、ネットワークに提示される入力のパターンを調べます。

  • ウィンドウの左側にある [[sim:Digits]] ボタン (Patterns ラベルの隣) をクリックします。この コントロール パネル には、このモデルの主な設定が含まれています。

表示されるディスプレイには、Input 層に提示される (「クランプ」される) さまざまな * 入力パターン * がすべて表示されるため、受信ユニットがどのように応答するかを確認できます。表示の各行は、ネットワークに提示される単一の トライアル を表します。ご覧のとおり、この場合の入力データには 0 から 9 までの数字が含まれており、5x7 のピクセル (画素) グリッド上の単純なフォントで表されます。特定のイベント (数字) の各ピクセルは、ネットワーク内の対応する入力ユニットを駆動します。

ネットワークの実行

受信ニューロンがこれらの入力パターンに応答することを確認するために、それらを 1 つずつ提示し、重みを与えられた場合にニューロンが応答する理由を判断します。したがって、ネットワーク ウィンドウでアクティベーションを再度表示する必要があります。

  • Network で [[sim:Act]]/Act を選択してアクティベーションを表示し、ウィンドウ上部のツールバーにある [[sim:Step]] ボタンをクリックします。これにより、示されているように Trial が 1 ステップ実行されます。

これにより、Input0 (ゼロ) のパターンがアクティブになり、点ニューロン活性化関数に従って受信ユニットの活性化が一連の サイクルにわたって繰り返し更新される セトリング プロセスの 20 サイクルが示されます (neuron シミュレーションのユニットが時間の経過とともに更新されたのと同様です)。 受信ニューロンが入力に完全に応答するのに十分な時間として 20 サイクルを選択しました。

受信ユニットは、0 入力パターンによってしきい値を超えてアクティブ化されなかったため、アクティビティ値 0 を示しました。 ユニットがこのように応答した理由の核心に入る前に、残りの桁に進み、他の入力にどのように応答するかを観察してみましょう。

  • 番号 8 が表示されるまで、他の各桁に対して [[sim:Step]] を押します。

8 という数字が提示されたときに受信ユニットが最終的にアクティブになり、他のすべての数字についてはゼロがアクティブになることがわかるはずです。したがって、予想通り、受信ユニットは 8 検出器のように動作します。入力が入力重みと完全に一致する場合にのみ、受信ニューロンを発火閾値を超えて駆動するのに十分な興奮性入力が得られます。

  • Network の下部にある時間ラベルの後にある「VCR」スタイル ボタンを使用して、更新の各サイクルを確認し、時間の経過に伴うアクティベーションの進行を確認できます。

  • 先に進み、もう 1 回 [[sim:Step]] を実行して、9 で何が起こるかを確認してください。

グラフを使用して、さまざまな入力パターンにわたる受信ユニットのアクティブ化のパターンを表示できます。

※「[[sim:Test Trial Plot]]」タブをクリックします。

グラフは、ユニットのアクティベーション (Act) を X 軸に沿ったトライアル (および桁) 番号の関数として示します。 8 の位置に 1 つのピークがある平らな線が表示されるはずです。

興奮性コンダクタンスの計算 Ge (ネット入力)

ここで、なぜユニットがそのように反応するのかを正確に理解してみましょう。そのための鍵は、重みのパターンと入力パターンの関係を理解することです。

  • ネットワークの [[sim:Wts]]/r.Wt 表示に戻り、(ウィンドウが閉じている場合は) [[sim:Digits]] ボタンを再度クリックし、重みも表示されていることを確認します。 アイデアは、重みを数字パターンと比較することです。

質問 2.8: 各桁パターンについて、ネットワークの r.Wt ビューに表示される 8 桁パターンに従って、重みが 1 であるパターン内のアクティブなユニットの数を報告してください。 言い換えれば、数字の入力アクティビティと重みパターンの間の 重複 を報告します。

計算したばかりの重み 1 を持つ入力の数は、受信ユニットに入る総興奮性入力 `Ge` (**正味入力**とも呼ばれます) に対応する必要があります。これは、送信活性化の平均 `Act` とすべてのユニットの重み `Wt` を掛けた関数であり、層内の予想される活動レベルの補正係数が含まれます。 `Alpha`: ``` Ge = (1 / Alpha) * [Sum(Act * Wt) / N] ``` You can click on [[sim:Act]]/`Ge` in the `Network` to see these values as you step through the inputs. * Do `Init` and `Step` to see the `0` input again. If you hover over the RecvUnit with your mouse, you should see it has a value of `Ge = .3352..`. To apply the above equation, you should have observed that `0` has 6 units in common with `8`, and `N` = 35 (7*5), so that is about .1714. Next, we need to apply the `Alpha` correction factor, which we set to be the activity level of the `8`, which is 17 of the 35 units active. Thus, we should get: ``` Ge = (1 / (17 / 35)) * (6 / 35) = .3529... ``` それはまったく正しくありません。 問題は、`Input` アクティベーションが完全に 1 ではなく、むしろ 0.95 であることです。レート コード化されたニューロン アクティベーションが 1 まで到達することは不可能であるため、最大 0.95 でクリップします。 上記の数値に .95 を掛けると、確かに正しい `Ge = .3352..` が得られます。 Ge の正味入力の計算を行った結果、ニューロンへの正味の興奮性入力が入力パターンと重みの間の一致度をどのように反映するかを詳細に理解できるようになりました。また、**しきい値** の存在により、この入力信号に存在する段階的な情報の多くがアクティベーション値によってどのように無視されるかについても観察しました。 これにより、ニューロンがこれらのしきい値を持っている理由がよくわかります。これにより、ニューロンはすべての「しきい値未満のノイズ」をフィルターで除去し、探しているものを検出した場合にのみ、明確で簡単に解釈できる信号を伝達できるようになります。 # リークの操作 次に、アクティベーション信号によって伝達される情報の量を変更する方法を検討します。デフォルト値は 2 のリーク電流 (`GbarL`) を操作します。このリークでは、最も強い (最適な) 入力パターン (8) のみがユニットをアクティブにします。このような強いリークがなければ、他の多くの入力パターンの興奮性入力により、受信ユニットが閾値を超える可能性があります。 **重要:** `GbarL` の変更を有効にするには、`Init` を押す必要があります。 * [[sim:Gbar L]] 値を 2 から 1.8 に減らし、[[sim:Init]] の次に [[sim:Step]] を実行します (`Cycle` ではなく [[sim:View update • test]] を `AlphaCycle` に変更して、各入力の設定の最終結果のみを表示し、表示に戻ることもできます) [[sim:Act]]/`Act`)。 あるいは、[[sim:Run]] を押して、[[sim:Test Trial Plot]] を確認することもできます。 > **質問 2.9:** GbarL を 1.8、1.5、および 2.3 に変更すると、さまざまな桁でニューロン アクティビティを受信するパターンはどうなりますか -- それぞれの場合、どの入力桁に応答しますか? 興奮性と抑制およびリークの間の綱引きモデル (つまり、GbarL = リーク) の観点から、リークを変更するとなぜこのような効果があるのでしょうか (単純な 1 文の答えで十分です)。 > **質問 2.10:** このニューロンが「見ている」入力パターンについて伝えることができる全体的な情報の観点から、元のデフォルト値と比較して、リークのレベルが低い (例: GbarL = 1.8 または 1.5) ことがニューロンにとって有益であると考えられるのはなぜですか? ニューロンが入力に対してどれだけ応答するかが重要であることは明らかです。ただし、応答性のレベルが異なるとトレードオフが発生します。脳は、多くのニューロンを使用して各入力をコード化することでこの種の問題を解決します。これにより、一部のニューロンはより「高い閾値」タイプになり、他のニューロンはより「低い閾値」タイプになることができ、応答の特異性と一般性において、対応する長所と短所が得られます。バイアスの重みは、この動作を決定する際の重要なパラメータとなる可能性があります。次の章で説明するように、リーク電流 Gbar.L の値の調整も部分的に抑制性入力に置き換えられます。これは、興奮性正味入力に対抗するために動的に調整された抑制レベルを提供する上で重要な役割を果たします。これにより、一般にニューロンが有用な情報を伝達するのに適切な応答範囲内にあることが保証され、各ニューロンの応答性が他のニューロンに依存することになります。これは、上記の調査から想像できるように、多くの重要な結果をもたらします。 </section>