ムエタイ · ジャブ · 報酬設計 · コーチング

ジャブ:いちばん単純なパンチと、長いレッスン

著者 ヤム トニー(Tony Yum) ·

学習コスト 約$16学習ラン22回、約15.9マシン時間 · 内訳

ポッドキャストのエピソードをSpotifyで聴く

ジャブは、誰もが最初に習うパンチです。前の手を出して、前の手を戻す。ヤム トニー(Tony Yum)は何年も初心者にジャブを教えてきたので、AIのファイターにとっても簡単なものだろうと考えていました。

そうではありませんでした。2日間、23回の学習ランを通して、ジャブにはこのプロジェクトのここまでの教訓のほとんどが詰まっていることが分かりました。この記事は、その道のりをコーチの側からたどります。これまでの記事では、ファイターがどうやって立つことを覚えたかと、コーチングがどう機能するかを扱っています。

ジャブとは本当は何か

初心者にとって、ジャブは腕の動きです。コーチにとって、腕は足から始まる運動連鎖の最後の環です。トニーによる参照モーションの仕様は、生徒に渡すチェックリストのようでした。

  • 拳が出るのに合わせて前足が少し(16 cm)踏み出し、腰と一緒に向きを変える。
  • 腰が右に約45°回り、左肩が前へ、右肩が後ろへ行く。
  • 拳は途中で返り、腕が伸びきったときに手のひらが床を向く。
  • 体重は両足のあいだでほぼ50/50のまま。ジャブで前足に倒れ込まない。
  • あごは前の肩の後ろに引いたまま。奥のグローブは右の頬の横に上がる。
  • 打ち抜いたあと、拳はまっすぐガードに戻り、前足は構えに戻る。

拳は0.14秒で出て、その0.14秒後にはガードに戻っています。この記事の冒頭の動画が、その結果です。

ただし落とし穴があります。参照はアニメーションです。逆運動学でポーズを1つずつ組み立て、正しく見えるまでトニーの修正で形を整えたものです。物理に従うものは何も入っていません。質量も、勢いも、滑る足もありません。トニーの言葉を借りれば、ノリで作ったものです。図1はその要所の瞬間で、重心から下ろした線で体重がどこにあるかを示しています。

灰色のMuJoCoの体によるジャブの参照の要所5コマ。斜め前からと横から
図1 MuJoCoでのジャブの参照。斜め前から(上)と横から(下)。左から右へ:構え、出ていく途中の拳、開始から0.14秒で腕が伸びきったところ、引き戻し、構えに戻った前足。赤い線は体の重心から床へ下ろしたもので、体重が両足のあいだのどこにあるかを示します。これはアニメーションだけで、まだ物理は入っていません。

そしてファイターは、すべてに重さがある物理シミュレーションの中で、同じ動きをしなければなりません。報酬関数がその出来を採点します。方策(ポリシー)は何百万回もジャブを試し、いちばん点の高いものを残します。ですから以下はすべて、ひとつの問いについての話です。アニメーションと物理が食い違うとき、コーチはアニメーションのどの部分にこだわり、どの部分を手放すのか。

教訓1:手を伸ばして触れるだけ

最初のランは参照を写し、腕をいっぱいに伸ばした距離の標的に当てることに報酬を与えました。ファイターはバランスを保って腕を伸ばしましたが、一度も踏み込みませんでした。どのジャブも15 cm届きませんでした。

理由は単純な算数でした。ヒットで得られる報酬は、エピソード全体で得られる報酬の約2 %でした。残りは、良い構えでじっと立っていることで得られました。だから安全な選択は、足を着いたままにすることだったのです。ヒットの報酬を4倍にすると、ファイターは踏み込んで当てるようになりました。標的の距離をカリキュラムとして加えると、腕をいっぱいに伸ばした距離へのジャブの93 %で、5 cm以内に当たるようになりました。

トニーは動画を見て、感心しませんでした。「手を伸ばして触ってるだけだ」。速さもパワーもありませんでした。

これがアニメーションと物理の最初の衝突でした。参照の拳は標的のところで速度ゼロまで減速し、0.04秒そこで止まっていました。指で玄関のチャイムを押すような感じです。報酬は拳が標的の近くにあるあらゆる瞬間に支払われたので、そっと届いてそこにとどまるのがいちばん点が高かったのです。方策は払われたとおりのことを正確にしていました。軽度の報酬ハッキングです。

そこで参照を変えました。止まらず、より速いジャブです。標的は参照の拳が止まる点より7 cm内側に移したので、本物のジャブが標的を突き抜けるように、パンチは標的を突き抜けます。報酬も変えました。ジャブ1回につき1回の支払いで、拳が標的を通過するときの速さを掛けます。

拳の最高速度は5.5 m/sから7.4 m/sに上がりました。近い標的へのジャブは、以前の約1 m/sに対して、4.4〜5.4 m/sで当たるようになりました。

教訓2:戻ってこなかった踏み込み

次にトニーは、テスト動画のグリッドであることに気づきました。ジャブを打つたびに、ファイターは踏み込んだ場所にそのままとどまっていたのです。1秒後には右に29〜39°向き、両足とも元の位置から10〜20 cm離れていました。

構えの報酬は、どの部分も体自身の座標系で測られていました。少し前に出て横を向いた構えでも、元の構えとまったく同じ点が取れたのです。ファイターには戻る理由がなく、どこから始めたかを知る手段もありませんでした。

すぐ思いつく解決策は「ホーム」の報酬でした。パンチのたびに、また前を向き、足を元の位置に戻す、というものです。ファイターはそれを覚えました。ところが、ジャブで踏み込むことをまったくやめてしまいました。インパクトの時点で腰が参照より15〜18 cm後ろになり、パンチはパワーを失いました。

ホームの報酬が踏み込みを止めているのか。それを確かめるため、ホームの報酬ありとなしの2つのランを並べて走らせました。どちらも踏み込みませんでした。どちらもジャブの速さを失い、標的での速さは1.5 m/sから0.4〜0.7 m/sに落ちました。その一方で、合計スコアは構えの項のおかげで上がっていました。踏み込まないことが局所最適解になっていたのです。踏み込んで、かつ戻れば、もっと点が取れたはずです。しかしそれは方策が一度も見つけたことのない、長く協調した一連の動きで、そこへ向かう小さな一歩はどれも、最初はかえって点が低くなりました。

ここでトニーは、コーチとしての判断を下しました。

速さは大事だし、インパクトまでとインパクトの瞬間のスタイルも大事。でも引き戻しは、立て直しやすいように、スタイルの面ではもっと緩くていい。

そこで報酬はジャブを2つに分けました。インパクトまでは、スタイルと速さを求めます。参照の回転、足の位置、そして参照と同じかそれ以上の速さで動く拳です。インパクトのあとの0.5秒は、構えの報酬を緩め、単に「倒れずにガードを保つ」だけにしました。ホームの目標も2倍寛容にし、20°と12 cmにしました。

すぐに効果がありました。新しいランでは、学習中のジャブの54 %が4.4 m/sで当たりました。古い報酬では、同じ時間で約0 %、0.6〜1.2 m/sでした。

教訓3:腰と、どれだけ回転を求めるか

腕は速くなりましたが、インパクトの時点で腰は参照より11 cm後ろに残っていました。これは手打ちのパンチで、体を乗せずにジャブを打つという初心者の間違いです。報酬の中で、腰はジャブ1回あたり約3点の価値しかなく、拳の速さとヒットは約45点でした。方策は、腰はあまり重要ではないと見抜いていたのです。

次のランでは、インパクトの支払いに、インパクト時の腰が参照にどれだけ近いかを掛けました。インパクトの支払いが急に減ったので、ヒットは最初17 %まで落ちました。それから回復しました。最後には腰は6 cm後ろで、57 %のヒット、4.0 m/sでした。差の大部分は腰の回転ではなく、踏み込みの長さだったのです。

トニーはそれから、体にある程度の自由を与えました。

腰の動き、その回転、腰と足が、ジャブの速さと正確さを犠牲にしているなら、上半身に集中して。踏み込みはやっぱり大事、前に踏み出すことは大事。でも回転そのものは少し緩めていい。

そこで腰のスコアは、腰が前方向にどれだけ遅れているかだけを数え、横のずれや回転は数えないようにしました。回転の許容範囲は8°から20°に広げました。新しい項で、インパクトまで腕と肩が参照に従うことを求めました。ジャブはさらに良くなりました。66 %のヒット、4.5 m/s、腰は5.7 cm後ろです。

教訓4:お辞儀

自由には代償があります。トニーは次のグリッドでそれを見つけました。

ジャブと立て直しのあと、キャラクターが小さくお辞儀するみたいに前に揺れる。

ジャブのたびに、0.5秒後に胸が13〜16°前に傾き、それからまっすぐに戻っていました。緩めた戻りは「倒れずにガードを保つ」ことしか求めておらず、お辞儀はその両方を満たします。体は、パンチの勢いを吸収するいちばん安上がりな方法を見つけていたのです。

解決策は、緩めた戻りのあいだ、胴体に1つだけルールを戻すことでした。胸を参照の傾きから4°以内に保つことです。脚の自由はそのままにしました。お辞儀は約15°から4°未満になりました。ジャブも良くなりました。76 %のヒット、4.6 m/s、腰は4.9 cm後ろで、初めて5 cmの目標の内側に入りました。図2は、物理の中で打ったそのジャブの1つです。

学習済みのMuJoCoのファイターが緑の標的のボールにジャブを打ち、ガードに戻る様子の5コマ
図2 お辞儀を直したラン(11 Mステップ)の、学習済みファイターによるジャブ1回。標的(緑のボール)は同じ高さで真正面。左から右へ:ガード、出ていく途中の拳、ヒット、引き戻し、そして胸をまっすぐにして再びガード。図1の参照と比べてみてください。

これには副作用がありました。胸をパンチのあとだけ保つようにしたため、ファイターの待機中の構えが5°後ろに傾くようになってしまったのです。そこで胸のルールを、パンチを打ち出す瞬間そのもの以外のすべての時間に広げました。構えは再びまっすぐになり、お辞儀もなく、ファイターは中心から最大15 cmずれたものまで、どの狙いでもテスト標的に9回中9回当てました。

教訓5:距離

本物の対戦相手がいつも完璧な距離にいるとは限らないので、標的を近づけたり遠ざけたりしました。そこからさらに2つのコーチングの判断が生まれました。

  • 近すぎる。 25 cm近い標的では、窮屈なジャブになりました。腕が曲がり、踏み込みもありません。トニーの評価は「本当にひどく見える」で、どのみちその距離ならファイターは肘打ちか膝蹴りを出すべきだ、というものでした。近いジャブはやめました。
  • 遠すぎる。 腕をいっぱいに伸ばした距離より遠い標的では、腰がまた9〜10 cm後ろに残り、ジャブが遅くなりました。拳が標的を通過する瞬間の腰の位置に報酬を与えると、腕をいっぱいに伸ばした距離へのジャブは約4 m/sから約5 m/sに改善しました。遠いジャブは、それでも速くはなりませんでした。

そのランが、ここまでで最も正確なジャブになりました。54回の固定テストで85 %のヒット、速さの中央値は4.7 m/sです。図3は、そのバージョンからトニーのスマートフォンに届いたグリッドです。近い距離と中くらいの距離のジャブは強く当たります。腕をいっぱいに伸ばした距離でも、少し遅いものの当たります。遠いジャブは届きますが、遅いです。遠いジャブは新しい参照待ちです。トニーが普通のジャブと遠いジャブを打つ自分を横から撮影し、より長い踏み込みを本物の体から写せるようにする予定です。

腕をいっぱいに伸ばした距離より12 cm近いものから5 cm遠いものまでの標的に向けたMuJoCoのジャブの4×3グリッド。それぞれに標的までの距離と拳の速さが記されている
図3 最も正確なジャブ(10 Mステップ)のテストグリッドを、インパクトの瞬間で切り取ったもの。各パネルは固定した標的(緑のボール)へのジャブ1回です。行:標的が腕をいっぱいに伸ばした距離より12 cm近い、6 cm近い、ちょうどその距離、5 cm遠い。列:ファイターから見て右、中央、左。各パネルの下:拳が標的にどれだけ近づいたかと、そのときの速さ。緑はヒット(5 cm以内、3.5 m/s以上)。遠いジャブは1〜3 m/sでしか標的に届いていません。

道のりを数字で

ヒット(%)ホームの報酬: ~0 %~0 %スタイル: 54 %54 %腰: 57 %57 %上半身: 66 %66 %直立: 76 %76 %標的での拳の速さ(m/s)ホームの報酬: 0.6–1.20.6–1.2スタイル: 4.44.4腰: 4.04.0上半身: 4.54.5直立: 4.64.6インパクト時の参照に対する腰の遅れ(cm)目標:5 cm未満ホームの報酬: 12–1412–14スタイル: 10.910.9腰: 66上半身: 5.75.7直立: 4.94.9ホームの報酬スタイル腰上半身直立
図4 10月17日(UTC)早朝のジャブの5つのラン。それぞれ前のランから続けて学習しています。上:学習中のジャブのうち、5 cm以内に3.5 m/s以上で当たった割合。中:標的での拳の速さ。下:インパクトの時点で腰が参照よりどれだけ後ろにあったか(低いほど良い)。探索のノイズありの学習中の数字です。

同じ数字を表にすると、次のとおりです。

ラン何を変えたかヒット拳の速さインパクト時の腰の遅れ
ホームの報酬ジャブのたびに構えに戻る~0 %0.6–1.2 m/s12–14 cm
スタイルインパクトまではスタイルと速さ、戻りは緩く54 %4.4 m/s10.9 cm
腰腰が遅れているとインパクトの支払いが減る57 %4.0 m/s6 cm
上半身腕を優先、腰の回転は緩く66 %4.5 m/s5.7 cm
直立戻りでお辞儀をしない76 %4.6 m/s4.9 cm

ヒットと速さは、方策の探索ノイズありの学習中の数字です。各ランは前のランから続けて学習した(ファインチューニング)ので、スキルは積み上がっていきました。

知っておく価値のある癖が1つあります。後のいくつかのランでは、学習中の数字は安定しているのに、ノイズなしの決定論的なジャブは約10 Mステップを過ぎると少しずつ悪くなっていきました。そこで今では、ランは数百万ステップごとにチェックポイントを保存し、ジャブそのものをテストして最良のものを選んでいます。

費用と、どのマシンを使ったか

ファイターは、バランスの記事で説明したとおり、クラウドのAmazon EC2で学習しています。MuJoCoのような物理シミュレーターはプロセッサ上で動き、コアごとにファイターのコピーが1体動くので、速さを買うのはvCPUの数です。グラフィックスカードはほとんど足しになりません。

標準のマシンはc8a.16xlargeです。64 vCPUで、1時間に約29 Mシミュレーションステップです。Amazonの余剰の計算資源からスポットインスタンスとして借りると、この2日間のus-east-1では1時間約$0.97でした。同じマシンをオンデマンドで借りると$3.28です。そのマシンで、典型的な15 Mステップのジャブのランは40〜50分かかったので、実験1回あたりの費用は1ドルを大きく下回りました。

費用を左右した決定が3つありました。

  • スポットと、スポットが駄目なときの代替。 Amazonはスポットマシンを2分前の通知で取り戻すことができます。学習は1分ごとにチェックポイントを保存し、監視役がランを再起動するので、取り戻されても数分の損失で済みます。10月16日の午後には、あるランが90分のあいだに6回取り戻されました。そのランは最後の35分をオンデマンドのマシンに移して、約$2で終えました。c8aが空いていないときはc7a.16xlargeが代わりを務めました。約30 %遅いのですが、別の余剰マシンのプールから借りられます。
  • 並べて比べるテストには小さなマシン2台。 このアカウントでは、同時に使えるスポットのvCPUは64まででした。ホームの報酬のテストでは、2つのランを同じ設定で同時に始める必要がありました。そこでそれぞれをc8a.8xlargeで動かしました。コアは半分で、1時間約$0.68です。コアあたりでは約40 %割高ですが、同じ30分のうちに公平な比較ができました。
  • 短いランと、早めの停止。 各ランには期限とステップの予算があり、テスト動画のグリッドは5 Mステップ以内に問題を見せてくれました。ランが明らかにどこにも向かっていないときは止めて、次のアイデアを始めました。

10月16日と17日のジャブとパンチの23回のランの開始・終了時刻を合計すると、約16マシン時間になります。当時のスポット価格で、オンデマンドでの仕上げも含めて約$16です。コーチの2日分のアイデアを、ランチ1回分の値段で試せたことになります。

コーチが学んだこと

ひとつ直すたびに、問題は別の場所へ移りました。

  • ヒットに報酬を与えると、ファイターは手を伸ばして触れるだけになる。
  • 速さに報酬を与えると、踏み込んだまま戻ってこない。
  • 戻らせると、踏み込まなくなり、ジャブが弱くなる。
  • 戻り方を緩めると、お辞儀をする。
  • パンチのあとに胸を保たせると、構えが後ろに傾く。

どれもAIのバグではありません。毎回、方策は報酬が求めたとおりのことを正確にしていました。参照は物理なしで作られたので、すべてを写すことはできません。コーチは、どの細部がジャブそのもので、どれが飾りなのかを選ばなければなりません。

トニーにとって、その答えはジムで見慣れた順番で出てきました。まず、インパクトまでの速さと形。次に前への踏み込み。パワーはそこから来るからです。胸はまっすぐ、頭は上げたまま。腰の回転と戻りの脚は、ファイターが最後にガードを上げて構えに戻るかぎり、もっと緩くていい。

それは、彼が初心者のジャブを直すときの順番でもあります。「ガードに戻れ」と言われた生徒は、しばしば踏み込まなくなります。「腰を回せ」と言われた生徒は、ときに全部を回してしまい、標的を見失います。コーチングとは、一度にひとつのことを求め、生徒がそれと引き換えに何を手放すかに気づくことです。ファイターはそれを、ただもっと速く、スマートフォンの画面の上でやっているだけです。