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.