Arduino UNOにおける強化学習の実装と学習プロセスの可視化・高速化システムに関する技術報告
1. 概要
本プロジェクトは、計算資源が極めて限定的である8ビットマイコン(Arduino UNO / ATmega328P)単体で動作する三目並べ(Tic-Tac-Toe)AIの構築と、その学習効率を最大化するためのPC連携システムの開発を目的とする。
従来のニューラルネットワーク等の計算コストが高い手法を用いず、盤面状況に応じた「重み(Weight)」を動的に更新するヒューリスティックな強化学習モデルを採用することで、2KBのSRAM環境下での適応学習を実現した。
2. Arduino UNOレベルでの機械学習アルゴリズム
2.1. 学習モデルの軽量化
Arduino UNOのハードウェア制約(動作クロック16MHz, SRAM 2KB, EEPROM 1KB)を考慮し、状態空間を全てメモリに展開するQ学習等の手法ではなく、盤面の戦術的特徴に対する「評価関数の重み」を学習対象とする手法を採用した。
定義するパラメータは以下の3点である。
-
$W_c$ (Center Weight): 中央(座標4)を確保することの優位性
-
$W_w$ (Win Weight): 勝利確定(リーチ)時に攻めることの優先度
-
$W_b$ (Block Weight): 敗北確定(相手のリーチ)時に防御することの優先度
2.2. 意思決定プロセス(推論)
AIは着手可能な各座標 $i$ ($i \in \{0, ..., 8\}$) に対して評価値 $S_i$ を計算し、$\max(S_i)$ となる座標を選択する。
評価関数は以下の線形結合で表される。

2.3. 学習ルール(パラメータ更新)
対戦結果(報酬 $R$)に基づき、パラメータを即時更新し、不揮発性メモリ(EEPROM)に保存する。

この単純化されたモデルにより、「負けを経験するほど防御(Block)の優先度が上がり、負けなくなる」 という適応挙動を実現している。
3. 思考状況の視覚化とログ解析
「ブラックボックス」になりがちなAIの内部状態を把握するため、以下の2つの視覚化手法を実装した。
3.1. リアルタイム・ヒートマップ(思考の可視化)
TFT液晶ディスプレイ上で、AIが算出した各マスの評価値 $S_i$ を色温度としてマッピング表示する機能を実装した。

これにより、AIが「脅威を認識した上で手を選んでいるか」あるいは「脅威を認識できていない(学習不足)のか」を人間が一目で判別可能とした。
3.2. 学習パラメータの定量的ロギング
対戦終了ごとに、現在の内部パラメータベクトル $\mathbf{W} = [W_c, W_w, W_b]$ をシリアル通信で出力するプロトコルを策定した。
これにより、対戦回数 $t$ に対するパラメータの推移 $\mathbf{W}(t)$ を時系列データとして取得可能となり、学習の収束状況や、過学習(パラメータの飽和による判断のランダム化)の兆候を外部から観測可能とした。
4. PC連携による学習の加速化(Automated Training Loop)
人間が対戦相手となる場合、物理的な操作時間の制約により学習サンプルの収集に膨大な時間を要する。これを解決するため、Pythonによる統合制御環境を構築した。
4.1. シリアル通信プロトコルによる制御
PC(Python)とArduino(UNO)間で以下の双方向通信を確立した。
-
PC $\to$ UNO: 盤面リセット、データ消去、PC側の着手座標
-
UNO $\to$ PC: UNO側の着手座標、ゲーム結果、学習パラメータ
4.2. 自動対戦モードの実装
Python側でランダム、あるいは任意のアルゴリズムで着手するエージェントを実装し、UNOと高速で連続対戦させるループを構築した。
これにより、人間が操作する場合と比較して数百倍の速度で「対戦 $\to$ 結果判定 $\to$ 重み更新」のサイクルを回すことが可能となった。
4.3. システム構成図

-
UNO: 推論、学習、EEPROM保存、TFT描画(エッジAI処理)
-
PC: 対戦相手エージェント、ログ収集、UI提供、学習サイクルの管理
5. 結論
本システムは、リソースの限られたマイコン上においても、問題を適切に定式化し、外部システムと連携させることで、実用的な機械学習サイクルが構築可能であることを実証した。特に、ヒートマップによる内部状態の可視化と、PC連携による自動学習ループの確立は、組み込みAI開発におけるデバッグ効率と開発速度を劇的に向上させる要素である。
APPENDIX
ログデータ battle_log.txt を解析し、学習の推移を作表・グラフ化して解説(コメント)を作成します。
このデータは、「初期状態からスタートし、途中から弱い相手(ランダム攻撃)に対して勝ち続けた結果、どのような学習曲線を描くか」 を示す、教科書的なほど綺麗なデータとなっています。
1. ログ解析結果のサマリー
まず、全112戦の集計結果です。
| 項目 | 回数 | 割合 | 備考 |
| 総対戦数 | 112 | 100% | |
| UNO(AI) 勝利 | 92 | 82.1% | 圧倒的優勢 |
| YOU(Python) 勝利 | 4 | 3.6% | 初期の手動対戦のみ |
| 引き分け | 16 | 14.3% | 偶然の均衡 |
2. 学習パラメータの推移グラフ
Pythonコードを実行して、学習パラメータ(中央・勝利・防御)の推移を可視化しました。
3. 学習推移データ表(抜粋)
以下の表は、全112回の対戦から特徴的なポイントを抽出したものです。
| 対戦回数 | 結果 | 中央(攻) | 勝(攻) | 防御(守) | 状態解説 |
| 1 | YOU勝利 | 0 | 0 | 1 | 初敗北。防御の重要性を初めて学習。 |
| 2 | YOU勝利 | 0 | 0 | 2 | 連続敗北。さらに防御を強化。 |
| 3 | 引き分け | 0 | 0 | 2 | 変化なし。 |
| 4 | AI勝利 | 1 | 1 | 2 | 初勝利。攻撃(中央・勝)の快感を覚える。 |
| 5 | 引き分け | 1 | 1 | 2 | 変化なし。 |
| 10 | AI勝利 | 5 | 5 | 2 | ここから「防御」の成長が完全に停止。 |
| 50 | AI勝利 | 39 | 39 | 2 | 攻撃パラメータだけが一直線に伸びる。 |
| 100 | AI勝利 | 81 | 81 | 2 | 攻撃特化型AIの完成。 |
| 112 | AI勝利 | 92 | 92 | 2 | 最終状態。 |
4. 技術的考察(ドキュメント用コメント)
このデータは、「環境(対戦相手)がAIの個性を決定づける」 という強化学習の特性を極めて明確に示しています。
1. 初期学習の健全性 (Game 1-2)
-
対戦相手が「YOU(人間)」であった最初の2戦では、AIは敗北し、その結果として「防御(Block)」パラメータが
0から2へと正しく上昇しました。 -
これは、「負け」という罰則(ネガティブ報酬)が機能している証拠です。
2. 自動対戦による過学習 (Game 4-112)
-
Game 4以降、対戦相手がPythonのランダム打ち(弱者)に切り替わりました。
-
AIは「適当に攻めていれば勝てる」状態になったため、防御(Block)の値が
2で完全にフリーズしました(緑色の線)。 -
一方で、勝利時の報酬により、攻撃系パラメータ(Center/Win)は相関係数ほぼ1.0で直線的に上昇し続けました(赤・青色の線)。
3. 結論:『井の中の蛙』現象
-
このAIは「ランダムに打つ相手には92勝4敗と圧倒的に強い」ですが、「防御力 2」しかないため、人間が意図してリーチをかけると簡単に負ける 状態です。
-
改善策: 真に強いAIを育てるには、Python側のロジックを強化し、AIに「もっと負けを経験させる(=防御の必要性を痛感させる)」必要があります。
このグラフと表は、「強いAIを作るには、強い教師が必要である」 という結論を補強する、非常に説得力のある実験データと思われます。
おまけ.
なぜ「機械学習」と言い切って良いのか?
「機械学習(Machine Learning)」の定義は、トム・ミッチェル(計算機科学者)による以下の定義が有名です。
「あるタスク(T)において、経験(E)を積むことで、性能指標(P)が向上するならば、そのプログラムは学習したと言える」
このシステムはこれに完璧に合致します。
-
タスク (T): 三目ならべで対戦すること
-
経験 (E): 対戦を行い、勝敗(報酬・罰)を受け取ること
-
性能 (P): 勝利や防御のための「重み(判断基準)」が更新され、振る舞いが変化すること
ニューラルネットワーク(Deep Learning)だけが機械学習ではありません。あなたのシステムは**「強化学習(Reinforcement Learning)」**という、立派な機械学習の一分野を実装しています。
タイトル 『980円ArduinoUNOによる3目ならべ機械学習の成果と講評』について
-
「980円ArduinoUNO」: 素晴らしいキャッチコピーだ。「GPUもクラウドも使わず、枯れた8ビットマイコンでやる」という**制約の美学(TinyML / エッジAI)**が伝わります。
-
「機械学習」: 前述の通り正確です。嘘偽りありません。
-
「成果と講評」: 成功した点だけでなく、先ほどのログ解析で判明した「弱い相手だと防御を覚えない(過学習)」といった**「失敗や限界」も含めて考察する**姿勢が示されており、技術資料としての信頼性が非常に高いです。
3. ドキュメント内での補足テクニック
もし「これはただのパラメータ調整では?」というツッコミを恐れるなら、ドキュメントの冒頭や「概要」で以下のような表現を使うと、より専門的で隙がなくなります。
-
キーワード: 「強化学習(Reinforcement Learning)」「オンデバイス学習(On-device Learning)」「エッジAI(Edge AI)」
-
一言で説明するならば:
-
パソコン画面;右側は、ログ取得状況。ステータスもあらわす。あとはマウス操作。
パソコン画面 -

-
赤いところは学習上必須と判断した部分
青はどこでも、黄色が出たらマズそうなところを表す。(動画なし) -

学習画面 ややシャッター速度が速すぎた? -

びんぼうでいいのとELEGO2.8
Aitendo製のびんぼうでいいの と、ELEGOO社の2.8インチTFT
レガシーデバイスに割と先端的なものを入れたら面白かったはなし
以上でおわり。
