Can a Computer Read Your Mind? I Tried Using AI to Decode Brainwaves. — A medical student's experiment: using machine learning on real EEG data to guess what a person was looking at. With colorful charts and simple explanations.
·12 min

Can a Computer Read Your Mind? I Tried Using AI to Decode Brainwaves.

BCIMachineLearningNeuroscienceDataScienceMedicalStudent

「コンピュータは人の思考を読めるのか?」

医学生の僕が、実際の脳波データとAIを使って実験してみました。 高校生にもわかるように、できるだけ噛み砕いて解説します。


What Is BCI? (BCIって何?)

BCI(Brain-Computer Interface) とは、脳とコンピュータを直接つなぐ技術のこと。

SF映画の話ではありません。すでに医療現場では、手足が動かせない患者さんが「考えるだけ」でカーソルを動かしたり、文字を入力したりする技術が実用化されつつあります。

今回の実験では、こんな疑問に挑戦しました:

「脳波を測定して、その人が画面上のどこを見ていたかをAIに当てさせることはできるか?」


The Equipment: How Do You Measure Brainwaves?(どうやって脳波を測るの?)

今回使ったのは OpenBCI Ganglion という、4つの電極を持つ脳波計です。

脳波電極の配置

上の図は、頭を上から見たイメージです。4つの丸い点が電極の位置を表しています:

  • TP9 / TP10(耳の後ろ付近)→ 視覚や聴覚に関わる領域
  • AF7 / AF8(おでこ付近)→ 前頭葉、注意・集中に関わる領域

色が濃いほど信号が強いことを意味します。脳波計は 1秒間に200回 のペースで脳の電気信号を記録しています。


What Does Raw Brain Data Look Like?(生の脳波データってどんなもの?)

まずは、コンピュータが記録した「生」の脳波を見てみましょう。

脳波の生データ

これは 5秒間 の脳波記録です。4つの色は4つの電極それぞれの信号を表しています。

一見すると「ただの波のグチャグチャ」に見えますよね。でもこの中に、その人が何を見ていたかの手がかり が隠れています。人間の目には見えなくても、AIには見つけられるかもしれない。それが今回の実験です。


Hidden Rhythms in the Brain(脳波に隠されたリズム)

脳波は実は、いくつかの 周波数帯(リズム) に分解できます。音楽で言えば、低音・中音・高音のようなもの。

周波数スペクトル

| 周波数帯 | 周波数 | 関連する状態 | |----------|--------|-------------| | Delta(デルタ) | 0.5-4 Hz | 深い睡眠 | | Theta(シータ) | 4-8 Hz | うとうと、リラックス | | Alpha(アルファ) | 8-13 Hz | 目を閉じてリラックス | | Beta(ベータ) | 13-30 Hz | 集中、活発な思考 |

上のグラフの色付きの帯がそれぞれの周波数帯です。ターゲットを見ている時と見ていない時で、これらのパワーに違いが出る はずです。


The Experiment: "Guess What I'm Looking At"(実験:「僕が何を見ているか当てて」)

実験の仕組み

  1. 画面上にいくつかの アイコン が表示される
  2. アイコンが 高速に点滅 する(1秒間に何十回も)
  3. 被検者は 1つのアイコンだけをじっと見つめる
  4. 見つめたアイコンが点滅した瞬間、脳は「おっ」と反応する
  5. この脳の反応パターンを AIが学習 する

これが noisetag方式 と呼ばれるBCIの仕組みです。

ターゲット vs 非ターゲット

脳波を「刺激の瞬間」で切り出すと、以下のようになります:

ERP波形の比較

  • 赤い線 = ターゲット(見つめていたアイコンが光った瞬間)
  • 青い線 = 非ターゲット(他のアイコンが光った瞬間)

数十万回分の脳波を平均すると、赤と青で微妙だけど確実に違いが見える のがわかりますか?これが 誘発電位(ERP: Event-Related Potential) と呼ばれるもので、BCIの原理の核心です。


Looking at 544,019 Brain Responses(54万回の脳反応を一覧する)

1つ1つのエポック(脳の反応)を画像にしてみました。

エポック比較

左が「ターゲット」、右が「非ターゲット」。横軸が時間、縦軸がエポック番号、色が振幅です。

人間の目で見ても違いがわかりにくい。 だからこそ、AIの出番です。


Teaching AI to Read Brainwaves(AIに脳波の読み方を教える)

Step 1: 特徴量を抽出する

AIは「生の波形」をそのまま理解できません。まず脳波から 96種類の特徴 を数値として取り出しました:

  • 各チャンネルの平均・分散・尖度
  • 50ミリ秒ごとの平均振幅
  • デルタ/シータ/アルファ/ベータのパワー
  • ゼロ交差数(波が何回基準線を横切ったか)

Step 2: 3つのAIモデルで分類

抽出した特徴量を3つの異なるAIに渡して、「これはターゲット?非ターゲット?」と判定させました。

| AIモデル | 正解率 | 説明 | |---------|--------|------| | Linear SVM | 50.9% | 直線で2グループを分ける | | Random Forest | 58.2% | 大量の決定木の多数決 | | MLP (Neural Net) | 56.6% | 脳のニューロンを模したネットワーク |

混同行列

「50%ってコイン投げと同じじゃない?」 と思うかもしれません。

確かにその通り。でも 54万回 も試行がある場合、50.9%ですら統計的に「偶然」とは言い切れません。そしてRandom Forestの 58.2% は、脳波から確実に意図を読み取れている ことを意味します。


Visualizing What AI Learned(AIが学んだことを可視化する)

特徴空間の3D可視化

96次元の特徴量を PCA(主成分分析) で3次元に圧縮し、3Dプロットしました。

3D PCA

  • 赤い点 = ターゲット
  • 青い点 = 非ターゲット

かなり重なっている のがわかりますね。これが「58%の正解率」の視覚的な意味です。完全に分離していれば100%になりますが、現実の脳波はこれくらいノイジーです。

どの特徴が重要だったか?

Random Forestは「どの特徴をよく使ったか」を教えてくれます。

特徴量重要度

上位にランクインしているのは主に 時間窓ごとの平均振幅。つまりAIは「刺激後のどのタイミングで脳波が変化するか」に注目していたことがわかります。

周波数帯の違い

バンドパワー比較

ターゲットを見ている時と見ていない時の、各周波数帯のパワーの違いです。小さいですが、全チャンネル・全周波数帯で一貫した差 が確認できます。


ROC Curve and Learning Curve(性能評価の詳細)

ROC曲線:どれくらい正確に検出できているか

ROC曲線

斜めの点線が「ランダムに予測した場合(AUC=0.5)」。各AIモデルの曲線がこれより上にあることが、偶然以上の検出能力 を持っている証拠です。

学習曲線:データが増えると精度は上がるか

学習曲線

横軸がデータ量、縦軸が正解率です。データが増えるにつれて精度が上がっていくのがわかります。もっとデータを集めれば、さらに精度が向上する可能性 があります。


So, Can a Computer Read Your Mind?(結局、コンピュータは思考を読めるのか?)

今回わかったこと

  1. YES、ある程度は読める。 たった4つの電極でも、被検者が「何を見ていたか」を58%の精度で当てられた
  2. 完璧にはほど遠い。 1回の脳波だけでは判断が難しく、実用的なBCIは何十回分を累積して判定する
  3. AIはパターンを見つけている。 人間の目にはノイズにしか見えない脳波の中から、統計的に有意な特徴を抽出できた

今後の可能性

  • 電極数を増やす(医療用は64〜256チャンネル)→ 大幅な精度向上
  • 深層学習(EEGNet等) → より高度なパターン認識
  • リアルタイムBCI → 考えるだけで文字入力、車椅子操作
  • 感情認識 → 脳波からストレスや集中度を推定

BCIは、医学とテクノロジーが交差する最前線です。まだ発展途上ですが、将来的には 「考えるだけで世界と対話する」 時代が来るかもしれません。


Technical Details(技術的な補足)

使用した技術スタック:

  • データ: mindaffectBCI noisetag dataset (Kaggle)
  • 脳波計: OpenBCI Ganglion (4ch, 200Hz)
  • 言語: Python 3
  • ML: scikit-learn (Random Forest, Linear SVM, MLP)
  • 可視化: matplotlib, scipy
  • エポック数: 544,019(8セッション分)
  • 特徴量: 96次元(時間領域 + 周波数領域)

コード全文は GitHub で公開予定です。


Written by Yuichi — a medical student exploring the intersection of medicine and technology in Bulgaria.