finm137.wiki
バーチャルブレイン
最終更新:
Bot(ページ名リンク)
-
view
バーチャルブレイン
概要
バーチャルブレイン(Virtual Brain)とは、
脳・神経系の構造や活動をコンピュータ上で再現し、
入力・記憶・学習・意思決定・運動などをシミュレーションする考え方である。
脳・神経系の構造や活動をコンピュータ上で再現し、
入力・記憶・学習・意思決定・運動などをシミュレーションする考え方である。
単純なLLMとは目的が異なり、
- 視覚
- 聴覚
- 嗅覚
- 身体感覚
- 内部状態
- 記憶
- 行動選択
- 運動制御
などを組み合わせ、
「身体を持って行動する人工生命・人工神経系」を構築する方向にも発展できる。
「身体を持って行動する人工生命・人工神経系」を構築する方向にも発展できる。
なお、「Virtual Brain」という一般的な呼称とは別に、
人間の脳ネットワークをシミュレーションする実在の研究用ソフトウェア
「The Virtual Brain(TVB)」も存在する。
人間の脳ネットワークをシミュレーションする実在の研究用ソフトウェア
「The Virtual Brain(TVB)」も存在する。
The Virtual Brain
The Virtual Brain(TVB)は、
人間の脳の構造的・機能的データを利用して、
脳領域単位の活動をシミュレーションする研究プラットフォームである。
人間の脳の構造的・機能的データを利用して、
脳領域単位の活動をシミュレーションする研究プラットフォームである。
TVBでは、
個々のニューロンをすべて完全再現するのではなく、
多数のニューロンをまとめた「神経集団」の活動をモデル化する。
個々のニューロンをすべて完全再現するのではなく、
多数のニューロンをまとめた「神経集団」の活動をモデル化する。
主な用途は、
- 脳ネットワークシミュレーション
- 構造コネクトーム解析
- 神経活動の時間変化
- EEG・MEG・fMRIなどとの比較
- 疾患モデル
- Digital Twin Brain研究
などである。
TVBの主要ライブラリはPythonで利用できる。
インストール例:
pip install tvb-library
pip install tvb-framework
バーチャルブレインとLLMの違い
LLMは主として文章やトークン系列を処理する大規模ニューラルネットワークである。
一方、バーチャルブレインでは、
感覚入力
↓
神経活動
↓
内部状態
↓
記憶
↓
行動選択
↓
運動出力
↓
神経活動
↓
内部状態
↓
記憶
↓
行動選択
↓
運動出力
という身体を含んだループを作ることができる。
そのため、
LLM=言語・推論モジュール
Virtual Brain=身体・感覚・記憶・行動を含む全体システム
という構成も考えられる。
LLMをバーチャルブレイン内部の
「言語処理モジュール」として使用することも可能である。
「言語処理モジュール」として使用することも可能である。
ハエ脳コネクトーム
FlyWire
FlyWireは、
ショウジョウバエ(Drosophila melanogaster)の脳を
電子顕微鏡画像から再構築したコネクトームプロジェクトである。
ショウジョウバエ(Drosophila melanogaster)の脳を
電子顕微鏡画像から再構築したコネクトームプロジェクトである。
2024年にNatureで公開された成虫メスの全脳コネクトームでは、
- ニューロン:139,255個
- 化学シナプス:約5,450万個
が再構築された。
公開データセットとして
FAFB v783が存在する。
FAFB v783が存在する。
Codexでは、
- ニューロン情報
- 細胞分類
- シナプス接続
- 神経伝達物質予測
- 神経領域
- 3D形状
- 接続ネットワーク
などを閲覧・ダウンロードできる。
注意
FlyWireからダウンロードできるものは、
「意識を持ったハエの脳そのもの」ではない。
「意識を持ったハエの脳そのもの」ではない。
主に、
- ニューロン一覧
- シナプス接続
- 神経細胞の形状
- 細胞分類
- 神経伝達物質
- 座標
- 脳領域
などを記録した「配線図」である。
そのため、
そのまま読み込んでもハエが自律的に動き始めるわけではない。
そのまま読み込んでもハエが自律的に動き始めるわけではない。
実際に活動させるには、
- LIF
- Hodgkin-Huxley
- スパイキングニューラルネットワーク
- 独自神経モデル
などを使用して、
神経活動そのものをシミュレーションする必要がある。
神経活動そのものをシミュレーションする必要がある。
MaleCNS
Janelia Research Campusでは、
オスのショウジョウバエの中枢神経系を再構築した
MaleCNSも公開されている。
オスのショウジョウバエの中枢神経系を再構築した
MaleCNSも公開されている。
MaleCNSには、
- 脳
- 神経索
- 感覚入力
- 運動系
- descending neuron
- ascending neuron
などが含まれる。
FlyWireのFAFBが主に「脳」であるのに対し、
MaleCNSは身体制御研究にも利用しやすい。
MaleCNSは身体制御研究にも利用しやすい。
MaleCNS v1.0では、
- neuron annotations
- connectivity
- synapses
- skeletons
- segmentation
- Neuroglancer用データ
などが公開されている。
PythonからはneuPrintを利用して検索できる。
例:
pip install neuprint-python
Pythonではneuprint-pythonのClientを使用し、
MaleCNS v1.0データセットへ接続する。
MaleCNS v1.0データセットへ接続する。
APIトークンはneuPrint側で取得する必要がある。
ハエ脳データを入手する方法
FlyWire FAFB v783
FlyWireの公式データは
Codexの「Download Data」から入手できる。
Codexの「Download Data」から入手できる。
FAFB v783を選択すると、
解析用のCSVデータなどをダウンロードできる。
解析用のCSVデータなどをダウンロードできる。
代表的なファイル:
- neurons.csv.gz
- connections_princeton.csv.gz
- classification.csv.gz
- consolidated_cell_types.csv.gz
- coordinates.csv.gz
- labels.csv.gz
特に重要なのは、
neurons.csv.gz
→ ニューロン情報
→ ニューロン情報
connections_princeton.csv.gz
→ ニューロン間の接続情報
→ ニューロン間の接続情報
である。
FlyWire公式資料では、
大量のプログラムによる問い合わせより、
Codexが提供する静的ダウンロードファイルの利用が推奨されている。
大量のプログラムによる問い合わせより、
Codexが提供する静的ダウンロードファイルの利用が推奨されている。
データセットによっては、
FlyWireへのログインや利用条件への同意が必要になる場合がある。
FlyWireへのログインや利用条件への同意が必要になる場合がある。
Pythonで読み込む例
Codexからダウンロードしたファイルを
同じフォルダに置いた場合:
同じフォルダに置いた場合:
import pandas as pd
neurons = pd.read_csv("neurons.csv.gz")
connections = pd.read_csv("connections_princeton.csv.gz")
print(neurons.head())
print(connections.head())
print("neurons:", len(neurons))
print("connections:", len(connections))
接続グラフへ変換
import pandas as pd
import networkx as nx
connections = pd.read_csv("connections_princeton.csv.gz")
G = nx.from_pandas_edgelist(
connections,
source="pre_root_id",
target="post_root_id",
edge_attr=True,
create_using=nx.DiGraph()
)
print("nodes:", G.number_of_nodes())
print("edges:", G.number_of_edges())
※Codexの公開ファイルは更新される場合があるため、
実際の列名はダウンロードしたCSVを確認すること。
実際の列名はダウンロードしたCSVを確認すること。
ハエ脳を実際に動かす
コネクトームは接続情報なので、
各ニューロンに活動モデルを与える必要がある。
各ニューロンに活動モデルを与える必要がある。
簡単な例として、
Leaky Integrate-and-Fire(LIF)がある。
Leaky Integrate-and-Fire(LIF)がある。
概念:
入力
↓
ニューロン膜電位
↓
閾値を超える
↓
発火
↓
接続先へ信号
↓
次のニューロンが活動
↓
ニューロン膜電位
↓
閾値を超える
↓
発火
↓
接続先へ信号
↓
次のニューロンが活動
FlyWire v783を利用した
LIFベースの実験的シミュレーションプロジェクトも公開されている。
LIFベースの実験的シミュレーションプロジェクトも公開されている。
ただし、
「FlyWireコネクトームをLIFで動かした」
ことと、
「FlyWireコネクトームをLIFで動かした」
ことと、
「本物のハエ脳を完全再現した」
ことは同じではない。
実際の神経系には、
- ニューロン固有の電気特性
- 神経伝達物質
- ホルモン
- neuromodulator
- sensory feedback
- 筋肉
- 身体構造
なども関係する。
ハエノイドリグ
ハエノイドリグ(Flynoid Rig)とは、
ハエの神経系や運動出力を、
仮想アバターへ対応させることを目的とした
独自リグ構想である。
ハエの神経系や運動出力を、
仮想アバターへ対応させることを目的とした
独自リグ構想である。
※既存の公式規格ではなく、本Wiki上で提案する設計概念。
一般的なHumanoid Rigは、
- 頭
- 左右の腕
- 左右の脚
- 人間型骨盤
- 人間型肩関節
を前提としている。
しかし、ハエは人間と身体構造が大きく異なる。
そのためハエ脳をHumanoid Rigへ直接対応させると、
6本脚 → 2本脚+2本腕
翅 → 対応部位なし
触角 → 対応部位なし
昆虫型胸部 → 人間型胸郭
という大きな変換が必要になる。
そこで、
ハエの身体構造を維持した専用リグを使用する。
ハエの身体構造を維持した専用リグを使用する。
基本骨格案
Flynoid_Root
|
|
- Head
| +-- Antenna_L
| +-- Antenna_R
|
| +-- Antenna_R
|
- Thorax
| +-- FrontLeg_L
| +-- FrontLeg_R
| +-- FrontLeg_R
| +-- MiddleLeg_L
| +-- MiddleLeg_R
| +-- MiddleLeg_R
| +-- HindLeg_L
| +-- HindLeg_R
| +-- HindLeg_R
| +-- Wing_L
| +-- Wing_R
|
| +-- Wing_R
|
- Abdomen
脚
ハエの脚は3対存在する。
- 前脚
- 中脚
- 後脚
そのため、
左右合わせて6本の脚を独立して制御できる構造にする。
左右合わせて6本の脚を独立して制御できる構造にする。
各脚は例として、
Coxa
↓
Femur
↓
Tibia
↓
Tarsus
↓
Femur
↓
Tibia
↓
Tarsus
などの段階を持たせる。
簡略化したマスコット用では、
関節数を減らすことも可能である。
関節数を減らすことも可能である。
翅
左右の翅を独立したBoneとして持つ。
Wing_L
Wing_R
Wing_R
へ、
- flapping
- angle
- amplitude
などを割り当てる。
触角
触角は単なる装飾ではなく、
感覚入力用インターフェースとして扱うこともできる。
感覚入力用インターフェースとして扱うこともできる。
例:
Antenna_L
→ 左側感覚入力
→ 左側感覚入力
Antenna_R
→ 右側感覚入力
→ 右側感覚入力
複眼
複眼そのものをBoneにする必要はないが、
視覚入力を複数方向へ分割して
神経シミュレーションへ入力できる。
視覚入力を複数方向へ分割して
神経シミュレーションへ入力できる。
例:
FrontVision
LeftVision
RightVision
UpVision
DownVision
LeftVision
RightVision
UpVision
DownVision
ハエノイドリグとハエ脳の接続
構想例:
FlyWire
↓
Connectome Graph
↓
Neural Simulator
↓
Motor Neuron Decoder
↓
Flynoid Controller
↓
Flynoid Rig
↓
仮想身体
↓
Connectome Graph
↓
Neural Simulator
↓
Motor Neuron Decoder
↓
Flynoid Controller
↓
Flynoid Rig
↓
仮想身体
運動ニューロンやdescending neuronの活動を
直接Bone角度へ送るのではなく、
直接Bone角度へ送るのではなく、
神経活動
↓
行動意図
↓
歩行コントローラー
↓
関節制御
↓
行動意図
↓
歩行コントローラー
↓
関節制御
のような中間層を設ける方が扱いやすい。
例:
class FlynoidCommand:
walk_forward = 0.0
turn = 0.0
fly = 0.0
wing_power = 0.0
antenna_left = 0.0
antenna_right = 0.0
}
この値をUnity・Godot・Blenderなどへ送る。
オリジナル仮想生物脳
実在する動物脳を使用せず、
完全に人工的な仮想神経系を作ることも可能である。
完全に人工的な仮想神経系を作ることも可能である。
これは、
「仮想脳版プラモデル」
として設計できる。
例:
Virtual Beast Brain
- Vision
- Hearing
- Smell
- Touch
- BodySense
- Memory
- Motivation
- ActionSelection
- MotorCortex
- TailController
- EarController
- Speech
この場合、
脳と身体を同時に設計できる。
脳と身体を同時に設計できる。
たとえば獣人なら、
- 2本腕
- 2本脚
- 尻尾
- 可動耳
- マズル
- 嗅覚
- 四足移動
- 二足移動
を最初から前提にした仮想脳を作れる。
実在する猫脳などを無理に
Humanoid Rigへ変換する必要がなくなる。
Humanoid Rigへ変換する必要がなくなる。
仮想脳版プラモデル
モジュール形式にすれば、
生物ごとに脳を組み替えられる。
生物ごとに脳を組み替えられる。
例:
[Vision Module]
|
[Spatial Module]
|
[Memory Module]
|
[Decision Module]
|
[Motor Module]
|
[Creature Rig]
追加パーツ:
- Wing Module
- Tail Module
- Smell Module
- Night Vision Module
- Echolocation Module
- Quadruped Module
- Biped Module
- Speech Module
このように、
脳領域をパーツとして組み合わせる構想が可能である。
脳領域をパーツとして組み合わせる構想が可能である。
使用できるプログラミング言語
Python
現状では最も扱いやすい。
理由:
- FlyWire関連ツールが豊富
- neuPrintが利用可能
- pandas
- NumPy
- SciPy
- NetworkX
- Brian2
- Nengo
- TVB
- PyTorch
などを利用できる。
研究・試作ではPythonを中心にするのが現実的。
C++
高速な神経シミュレーションエンジンを自作する場合に向いている。
用途:
- 大規模ニューロン更新
- リアルタイム実行
- GPU連携
- 独自物理
- VRアプリ
- 高速I/O
など。
初期開発ではPythonでアルゴリズムを作り、
速度が必要な部分だけC++へ移す方法もある。
速度が必要な部分だけC++へ移す方法もある。
CUDA
大量のニューロンやシナプスをGPUで並列計算する場合に利用できる。
ただし、
最初からCUDA実装する必要はない。
最初からCUDA実装する必要はない。
まずCPU上で正しく動くモデルを作り、
ボトルネックが確認できてからGPU化する方が安全である。
ボトルネックが確認できてからGPU化する方が安全である。
R
Drosophila connectomicsでは
Rのnatverse系ツールも広く利用されている。
Rのnatverse系ツールも広く利用されている。
神経形態解析やコネクトーム解析に使用できる。
C#
Unityと接続する場合に利用できる。
Python/C++側:
Virtual Brain
↓
通信
↓
Unity C#
↓
Flynoid Rig
↓
通信
↓
Unity C#
↓
Flynoid Rig
という構成が可能。
神経シミュレーション用ソフト
Brian2
Pythonベースの
スパイキングニューラルネットワークシミュレータ。
スパイキングニューラルネットワークシミュレータ。
インストール:
pip install brian2
比較的小規模な神経回路を自作する場合に扱いやすい。
Nengo
Pythonで大規模な神経モデルを構築できる。
インストール:
pip install nengo nengo-gui
Nengoでは、
- Ensemble
- Node
- Connection
- Probe
- Network
などを組み合わせて
認知モデルを構築できる。
認知モデルを構築できる。
Semantic Pointer Architectureを使った
認知モデル研究にも利用されている。
認知モデル研究にも利用されている。
The Virtual Brain
脳領域単位の
大規模ネットワークシミュレーションに向いている。
大規模ネットワークシミュレーションに向いている。
インストール:
pip install tvb-library
NetworkX
コネクトームを
グラフとして解析する場合に便利。
グラフとして解析する場合に便利。
pip install networkx
推奨開発構成
最初の試作では、
Python
|
|
- pandas
- NumPy
- NetworkX
- Brian2 または Nengo
|
- FlyWireデータ
|
- Virtual Brain Engine
|
- Motor Decoder
|
- Flynoid Rig
という構成が扱いやすい。
リアルタイム性能が必要になった場合、
Python
↓
C++ Engine
↓
CUDA
↓
C++ Engine
↓
CUDA
へ一部を移植する。
最初に作るべきもの
いきなり139,255ニューロンすべてをリアルタイム再現するより、
小規模な回路から始める方が良い。
小規模な回路から始める方が良い。
例:
視覚入力
↓
左右判定
↓
行動選択
↓
6脚歩行
↓
報酬
↓
学習
↓
左右判定
↓
行動選択
↓
6脚歩行
↓
報酬
↓
学習
まず、
- 対象へ近づく
- 障害物を避ける
- 左右へ曲がる
- 歩く
- 飛ぶ
程度を作る。
その後、
- 記憶
- 学習
- 好奇心
- 空腹
- 警戒
- 社会行動
- 会話AI
などを追加する。
注意点
コネクトーム=脳そのものではない
コネクトームは主に「配線図」である。
接続構造が分かっても、
- 各細胞の電気特性
- 神経伝達物質
- neuromodulator
- 内分泌
- 身体フィードバック
- 発達
- 学習履歴
などを完全に再現したことにはならない。
ハエ脳シミュレーション=意識再現ではない
現在公開されているFlyWireデータを
神経シミュレータで動かしても、
神経シミュレータで動かしても、
「本物のハエの意識を復元した」
と証明されたわけではない。
あくまで、
実際の神経接続を利用した計算モデルである。
実際の神経接続を利用した計算モデルである。
ハエノイドリグは独自構想
ハエノイドリグは、
FlyWireやJaneliaが公式に提唱している規格ではない。
FlyWireやJaneliaが公式に提唱している規格ではない。
ハエの神経系と
仮想身体を対応させるための
独自設計案である。
仮想身体を対応させるための
独自設計案である。
今後の発展
バーチャルブレインは、
単純なチャットAIとは異なる方向へ発展する可能性がある。
単純なチャットAIとは異なる方向へ発展する可能性がある。
例:
- 仮想動物
- 仮想昆虫
- 仮想獣人
- ロボット制御
- VRChatアバター
- 人工生命
- Digital Twin Brain
- 神経科学シミュレーション
- embodied AI
将来的には、
LLM
Virtual Brain
Virtual Body
という構成によって、
「話すだけではなく、
見る・覚える・移動する・学習する人工生物」
見る・覚える・移動する・学習する人工生物」
を作る研究へ発展する可能性がある。









