0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

小型の決定モデル d1-3B をつかって卓球ゲームを作った

0
Last updated at Posted at 2026-10-12

本作業の大半を Claude Code で実行・文書化したものです。何を測るかの判断と、結果の読み取りは筆者が行いました。

学習なしの小型の決定モデル LiquidAI/d1-3B に、卓球ゲームを遊ばせました。自分のパドルが中央に来るようにずらした画像を渡し、選択肢を「ボールは上半分にある」のような位置で書くと、AI 同士のラリーが長く続きます。速度を渡さない場合は、12 回のラリーすべてが上限の 50 返球まで続きました。

d1 には 3B のほかに 600M のモデルと API もありますが、この記事で調べたのは d1-3B だけです。以下の結果は d1-3B についてのもので、ほかの d1 に当てはまるかは確かめていません。

この記事では、その入力の作り方と、判断の揺れを抑える調整を書きます。最後に、画像のどの要素がラリーに効いているかを、アブレーション(要素を 1 つずつ外して、効き目を測る実験)で調べた結果を書きます。

AI 同士の対戦

判断の確率が動く様子を映した動画(150 秒、限定公開)です。

作ったもの

初期の卓球ビデオゲームに着想を得た、2 枚のパドルと 1 個のボールのゲームです。名前は Paddle Rally にしました。特定の既存作品の絵や音は使っていません。ブラウザで人間が遊べて、AI 同士も戦えます。

お題は次のとおりです。

  • 入力は、画面の画像とボールの速度 (vx, vy)
  • 出力は、UP、DOWN、STAY のどれか
  • AI が良いかどうかは、AI 同士のラリーが続くかで判断する

ラリーは返球数で数え、測定のために 50 返球で打ち切ります。

入力と出力

図の入力の画像は、実際に d1-3B へ渡している画像です。速度の数字は、1 ティック(60 分の 1 秒)あたりに動くミリピクセルの値です。

d1-3B の使い方

d1-3B は、選択肢ごとの確率を 1 回の計算で返す 30 億パラメータのモデルです。画像と質問と選択肢を渡すと、選択肢の確率が返ります。その確率が最も高い行動を採用します。

1 回の判断は、GPU で約 51 ミリ秒でした。ゲームは 50 ミリ秒ごとに判断を出し、次の判断まで同じ行動を保つ作りにしています。

入力の作り方

d1-3B は、画像の中で物がどこにあるか(上のほうか、下のほうか)は読めます。一方で、「ボールは赤いパドルより上にある」のような 2 つの物の関係は、ほとんど読めません。打ち返すにはボールとパドルの高さを比べる必要があるので、比べる作業を画像の側で済ませておき、d1-3B には位置だけを答えさせます。

位置の問いと関係の問い

  • 自分のパドルが縦の中央に来るよう、画像全体をずらす
  • 画像の中央に帯を引く(パドル中心の上下 5 ピクセル。パドルより細く、パドルが動かなくてよい範囲を表す)
  • 選択肢を「ボールは帯より上の上半分にある」「帯より下の下半分にある」「帯の中にある」と、位置で書く

画像をずらすと、コートの外側(上下の壁より向こう)も画像に入ります。この部分は暗く塗り、コートの中と区別しています。壁の位置に明るい線を引く案も試しましたが、パドルが壁の近くにいると、その線が画像の中ほどに来ます。すると d1-3B は、ボールが帯の上にあるか下にあるかを取り違えました。そのため壁は線では引かず、明るさの違いだけで示しています。

この作り方がどれだけ効くかを、ほかの渡し方と比べました。d1-3B 同士を対戦させ、渡す入力だけを変えて、1 ラリーあたり何回打ち返せたか(平均返球数)を数えています。次の節で入れる調整の前に測った値です。

d1-3B に渡した入力 平均返球数 測ったラリーの数
自分のパドルを中央に置いた画像(この記事の作り方)と速度 28 12
コート全体の画像と速度 0.1 10
ボールとパドルの座標を数字で書いた文 0 10

コート全体の画像では、ボールとパドルの高さを比べなければならないので、ほとんど打ち返せません。座標を数字で渡すと、1 回も打ち返せませんでした。目安として、でたらめに動く AI 同士でも、平均 0.33 回は打ち返します。

判断の揺れを抑える調整

たとえばボールがパドルより上にあれば、正しい答えは毎回 UP です。ところが d1-3B は、50 ミリ秒ごとの判断で、ときどき逆の答えを混ぜます。

正しい答え : UP   UP   UP   UP
d1-3B      : UP   DOWN UP   DOWN

逆の答えが混ざると、パドルは上がっては下がるので、ボールに近づけません。これを抑えるために、2 つの調整を入れました。

  • ならす : 各判断の確率を、直前の判断の確率と半々に混ぜる。1 回だけ逆の答えが出そうになっても、直前の確率が残るので、向きが変わりにくくなる
  • パドル 30 : ゲームのパドルの高さを 20 から 30 ピクセルにする。打ち返せる範囲が広がるので、少しずれても届く。d1-3B の判断が良くなるのではなく、ゲームを易しくする変更

d1-3B とルールで動く相手(ボールの高さを追うだけ。図では追従役と書いています)を対戦させ、12 回のラリーの平均返球数を比べました(上限 20、速度を渡さない画像)。

調整ごとの平均返球数

伸びの大半はパドル 30 によるもので、パドル 30 だけでほぼ上限まで届きました。ならすだけでも伸びますが、パドル 30 ほどではありません。2 つを組み合わせても、パドル 30 だけとの差はばらつきの範囲です。ゲームの既定値は、2 つを組み合わせた設定にしています。STAY に少し加点する案も試しましたが、ラリーが短くなったので使っていません。

最終結果

ならすこととパドル 30 を入れて、d1-3B 同士を測りました(12 回、上限 50)。調整の前の値も並べます。調整の前はシード 11、調整の後はシード 31 で測ったので、ボールの出方は同じではありません。

d1-3B に渡した入力 調整の前 調整の後 上限に到達(調整の後)
画像と速度(お題の入力) 28 43.6 12 回中 9
画像のみ 41 50 12 回中 12

調整の前も後も、速度を渡さないほうがラリーは長く続きました。速度は、質問文に数字で書いて渡しています。前の節で見たとおり、d1-3B は座標を数字で渡されると 1 回も打ち返せませんでした。速度の数字も判断の助けにならず、かえって邪魔をしているのかもしれません。ただし、これは確かめていません。差もシード 1 つずつ、12 回ずつのラリーでの値で、調整の前の 28 と 41 の差は、ばらつきを見込むと、95% の範囲で 1〜25 返球の幅があります。

お題の入力に速度が含まれるので、ゲームは速度を渡す形のままにしています。

画像の要素のアブレーション

今の画像には、ボールのほかに、帯、両方のパドル、中央の点線を描いています。どれが要るのかを、1 つずつ外して測りました(速度を渡さない画像)。外すのは画像の中の絵だけで、ゲームのパドル(高さ 30)はそのまま打ち返します。

画像の要素を外したときのラリー

画像 左の d1-3B 対ルールの相手(上限 20、シード 51 / 77) d1-3B 同士(上限 50)
今の画像 17.3 / 20 50
パドルを描かない 20 / 20 3.8
点線を消す 20 / 20 未測定
帯を細い線にする 14.3 / 18.7 未測定
細い線とボールだけ 11.1 / 10.2 未測定
ボールだけ 20 / 20 3.6

分かったことは 3 つです。

  • d1-3B を左側に置いてルールで動く相手と対戦させると、帯もパドルも点線も要らない。ボールだけでも上限まで続く
  • 帯を細い線に変えると、ラリーが短くなる。細い線は、ないよりも邪魔になる
  • ところが d1-3B 同士では、パドルを描かないと、右側のプレイヤーが 12 回とも取り損ねる

右側だけが取り損ねる原因は、d1-3B の画像の読み方に左右の差(異方性)があることでした。ボールだけの画像で、ボールの横の位置を変えながら上下を答えさせると、画像の左端から中央までは正しく読めるのに、右端でだけ、ときどき読み違えます。

ボールの位置(画像の中) 左端 中央 右端
上下の読み ○ ○ ○ ○ △

○ は 16 回すべて正しく読めた位置、△ は 16 回のうち 3〜6 回を読み違えた位置です。

これは左側のプレイヤーの画像でも、右側のプレイヤーの画像でも同じでした。左側のプレイヤーは得意な画像の左端で打ち返すので困りませんが、右側のプレイヤーは苦手な右端で打ち返すので取り損ねます。パドルを描いた画像では右端でも読み違えませんが、その理由は分かっていません。

そこで、右側のプレイヤーには左右を反転した画像を渡しました。どちらのプレイヤーも得意な画像の左端で打ち返すことになり、ボールだけの画像でも、d1-3B 同士の 24 回すべてが上限 50 まで続きました(2 つのシードで 12 回ずつ)。

反転した画像でも、読み違えるのは画像の右端でした(右側のプレイヤーにとってはコートの左端で、打ち返す場所ではありません)。苦手なのはコートのどこかではなく、画像の右端です。

右側のプレイヤーの画像と反転

ただし、これは速度を渡さない場合だけです。速度を渡すと、反転してもボールだけの画像は平均 7〜12 返球で終わり、今の画像(43.6)に届きませんでした。そのため、ゲームの既定値は今の画像のまま、反転なしにしています。

限界

  • どの条件も 12 回のラリーで、シードは 1〜2 個です。数返球の差は確かめられていません
  • 調整はルールで動く相手に対して選び、最終の測定は d1-3B 同士で行いました
  • ルールで動く相手は毎回上限に届くので、d1-3B は座標を正確に読む規則には及びません
  • 人間を相手にした測定はしていません
  • 調べたのは d1-3B だけで、600M のモデルと API は測っていません
  • 画像の要素を外してルールの相手と対戦させた測定は、d1-3B を左側に置いたものだけです。速度を渡した反転の測定は、どれもシード 1 つです

まとめ

  • d1-3B は、物の位置は読めても、2 つの物の関係はほとんど読めない。そこで、自分のパドルを中央にずらした画像と、位置で書いた選択肢で、関係を位置に言い換えた
  • 判断の確率をならし、パドルを高くすると、AI 同士のラリーは平均 43.6 返球(お題の入力)、速度なしでは 12 回すべてが上限の 50 返球まで続いた。伸びの大半は、ゲームを易しくするパドルの高さによる
  • d1-3B の画像の読み方には左右の差(異方性)があり、画像の右端にあるボールの上下をときどき読み違える
  • 画像の要素のアブレーションでは、速度を渡さないなら画像はボールだけで足りた。ただし、右端の弱さを避けるため、どちらのプレイヤーにも自分が左にいる画像を見せる必要がある
  • 速度を渡すお題の入力では、帯とパドルを描いた今の画像がいちばん長く続いた

モデルが苦手なのは、タスクそのものより、見せ方のことがあります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?