セル・オートマトンで「脳」をシンプルに実装してみよう。その4 -恒常性と馴化-


[その3](https://qiita.com/yuky_az/items/cc5272d1c18270c5f7b2)で解説したニューラルネットワークを、プログラミング言語Pythonのコードに落とし込みます。
なお、今回は開発環境にGoogle Colaboratoryを使用しました。

以下の通りに何回かに分けて解説しますが、今回はその4になります。
[その1 -セル・オートマトンとは？-](https://qiita.com/yuky_az/items/17fff285101ea365982b)
[その2 -セルの並べ方-](https://qiita.com/yuky_az/items/c134fafb9311b9c15651)
[その3 -ニューロンの配置-](https://qiita.com/yuky_az/items/cc5272d1c18270c5f7b2)
[その4 -恒常性と馴化-](https://qiita.com/yuky_az/items/9fd73452f8283262e54a)
[その5 -ヘブ則の導入-](https://qiita.com/yuky_az/items/065b764f59e2720214c2)

## 実行結果
ここまでの設定を落とし込んだコードを、実行した結果を動画で示します。  

<iframe width="560" height="315" src="https://www.youtube.com/embed/JLoz3zFmSYw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

コード: https://github.com/yukinaga/brain_ai_book/blob/master/neural_network_on_torus_1.ipynb

時間の経過により、全てのニューロンが興奮しているか、全てのニューロンが抑制されているるかのどちらかの状態になってしまいます。  
これは、興奮しているニューロンのグループ、抑制されているニューロンのグループはそれぞれグループを大きくしようとするので、興奮と抑制のバランスが崩れるとどちらか片方が一方的に広がってしまうからです。  
もちろん、実際の脳ではこのようなことは起きません。
全ての神経細胞が興奮してしまうことも、抑制されてしまうこともありません。

最小限の設定で大脳皮質のようなネットワークを構築してみましたが、このままでは複雑な流れやパターンが生じません。  

## 「恒常性」の導入

先ほどの設定では、興奮したニューロンと抑制されたニューロンの比率は一定に保たれず、どちから一方に染まっていくのを止められませんでした。  
そこで、次に導入するのは「恒常性」です。
動物の体温、血糖、免疫などはこの恒常性により調整されます。

脳は過剰に興奮することも過剰に抑制されることもなく、興奮/抑制の割合がほどよく保たれています。
脳では何らかの「恒常性」が働いている可能性を考慮して、恒常性をネットワークに導入してみます。

生体では複雑な化学物質の働きにより恒常性が実現されますが、コンピュータ上ではもっと簡単に恒常性を実現することができます。
今回はニューロンの活性化関数にステップ関数を使い、活性化関数への入力が負の場合は出力を0、正の場合は出力を1としていますが、今回は恒常性を以下の方法で実現します。

* 活性化関数への入力が大きい順にニューロンを並べ、上位を選別し出力を1（興奮）とする
* 残りのニューロンの出力は0（抑制）とする

これにより、常に一定の割合でニューロンが興奮することになります。

この設定を導入したコードを、実行した結果を以下の動画に示します。
活性化関数の入力が大きい順に、上位50%を興奮させています。

<iframe width="560" height="315" src="https://www.youtube.com/embed/_1PN1FlO_v0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

コード: https://github.com/yukinaga/brain_ai_book/blob/master/neural_network_on_torus_2.ipynb

恒常性を導入することで、一方的に反応が進むことは無くなりました。
境界ではニューロンの興奮/抑制が不規則に入れ替わるのですが、時間が経過しても境界以外では全く動きがありません。

ただ、このままではネットワークには大規模な情報の流れは生じません。
大脳皮質のような全領域にわたる絶え間ない情報の流れが生じるためには、さらに別の要素を加える必要がありそうです。

## 「馴化」の導入

「馴化（Habituation）」という概念を導入します。
馴化とは刺激に馴れることで、例えばアメフラシや線虫に繰り返し刺激を加えるとやがて刺激に対する反応が弱くなることが知られています。

先ほどは大部分のニューロンの興奮/抑制状態が永続化してしまい、ダイナミックな動きが失われてしまいました。
これを防ぐために、「馴化」として何度も興奮したニューロンは興奮しにくくなり、抑制が続いたニューロンは興奮しやすくなる仕組みを導入します。

具体的な方法はいくつも考案できますが、今回は最もシンプルな方法を使います。
ニューロンの感度であるバイアスを以下のように調整することで、馴化を実現します。

* ニューロンが興奮した場合、そのバイアスを「興奮しにくくなる」方向に僅かに変化させる
* ニューロンが抑制された場合、そのバイアスを「興奮しやすくなる」方向に僅かに変化させる

これらの仕組みを導入することで、連続して興奮したニューロンは少しずつ興奮しにくくなり、連続して抑制されたニューロンは少しずつ興奮しやすくなります。
興奮/抑制の永続化が防がれるので、ネットワーク大規模な変化が生じるようになります。

これらの設定を導入したコードを、実行した結果を以下の動画に示します。
先ほどと同様に、活性化関数の入力が大きい順に上位50%を興奮させます。

<iframe width="560" height="315" src="https://www.youtube.com/embed/wUWgPSAafO0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

コード: https://github.com/yukinaga/brain_ai_book/blob/master/neural_network_on_torus_3.ipynb

「恒常性」および「馴化」を導入した結果、ネットワークに絶え間の無いダイナミックな動きが生じるようになりました。
集団になったニューロンは、複雑な因果関係を持ち、複雑なパターンを描きます。
絶え間ない複雑な因果の流れが存在する世界が、セル・オートマントンベースのネットワーク上に構築されました。

今回の「その4」では、コードの実行結果、恒常性と馴化について解説しました。
「その5」に続きます。

なお、本記事の内容は、拙著「[あたらしい脳科学と人工知能の教科書](https://www.shoeisha.co.jp/book/detail/9784798164991)」をベースにしています。

【コミュニティ「自由研究室 AIRS-Lab」】
「AI」をテーマに交流し、創造するコミュニティ「自由研究室 AIRS-Lab」が活動中です。
​https://www.airs-lab.jp/​