解釈可能性 · ニューロン · トルク · バランス · ムエタイ

ムエタイの技のトルクとニューラルネットワークの可視化

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

右ハイキックを出すクロムのロボットファイター。蹴り足の足首と両足のつま先が最大トルクで黄色く光っている。横にはテレメトリーパネルがあり、関節の力の時間変化を示すヒートマップと、発火のタイミング順に並べた512個のニューロンのラスターが表示されている

要約。 AIファイターの脳は小さなニューラルネットワークです。465個の数値が入り、512個のニューロンの層を2つ通って、48個の関節への指令が出ていきます。これを1秒に50回行います。私はファイターが立っているとき、4方向から260 Nの押しを受けたとき、900 Nの押しで倒されたとき、そして14の技を出したときに、その内部のすべてと、すべての関節のトルクを記録しました。そして両者を並べて描きました。関節はモーターがどれだけ強く押しているかに応じて黄色く光り、パネルにはニューロンの発火が表示されます。立っているとき、安静時の値から大きく外れるニューロンはひとつもありません。押しを受けると0.16秒以内に98–146個のニューロンが目覚め、ファイターは毎回ステップを踏んでバランスを取り戻します。倒されるとき、これからどうなるかについてのネットワーク自身の予測は、押しの40 ms後に半分になります。体が床に着くのはその1.94秒後です。技のボタンの入力は、体が動く前の、まさに次のティックで108–140個のニューロンを点灯させます。フィンガープリント:クロスと奥の手のフックは、最もよく反応する40個のニューロンのうち28個を共有しますが、ジャブと左ハイキックが共有するのは2個です。力:ほとんどすべてのパンチで最もよく働いている関節は、腕ではなく腰です。膝蹴りと蹴りでは足が主役になります。

なぜ中を見るのか

ほかの記事はすべて、ファイターを外から評価しています。パンチは当たったか、倒れたか、ムエタイらしく見えるか。10月29日、私は違うものを頼みました。「どの技を使っているときに、どのニューロンが活性化しているのか、という観点でこのニューラルネットワークをどう解釈できるのか」を見せる映像です。「ファイターの脳の中を見ることは、実際に技の理解に役立つ」からです。関節のトルクも見たかったですし、ファイターがバランスの取れた状態から倒されるまで、さまざまな方向から打たれてバランスを立て直さなければならないときに、脳がどう反応するのかも見たいと思いました。

学習済みのネットワークの中を見て、その各部分が何をしているのかを調べることを解釈可能性と呼びます。この記事はその最初の、シンプルな試みです。新しい学習はせず、1体のファイターを丁寧に記録し、その動きを描く方法を作っただけです。

見ていく脳

ファイターは現在の生徒モデル、distill9-196.6Mです。試すページにあるすべての技を持つひとつの方策(ポリシー)で、以前の記事の教師モデルから蒸留したものです。1秒に50回、465個の数値からなる観測を読み取ります。関節の角度と速さ、体の動き、足の位置、構えのリズムの位相、そしてどの技のボタンが押されているかです。これらは512個のニューロンを持つ2つの隠れ層(ELU活性化のMLP)を通り、48個の数値として出ていきます。すべての関節のサーボへの目標角度です。もうひとつのネットワークであるクリティックは、同じ465個の数値を読んで1つの数値を出します。これからの数秒でどれだけの報酬が得られるかの見積もりです。図ではこれを予測と呼んでいます。

点が4列に並んだ図:465個の入力、512個のニューロンの1層目、512個のニューロンの2層目、48個の指令。いくつかの点がオレンジと青に光っている
図1 ファイターの脳:465個の入力、512個のニューロンの層が2つ、関節モーターごとに1つずつの48個の指令。これを1秒に50回。信号が通ると点が光ります。線は接続の一部を抜き出したものです(各層には512 × 512本あります)。

2つの見方

関節の力。 各関節モーターには最大トルクがあり、ファイターが人間より強くならないように設定されています。物理ステップごとに、各モーターがどれだけ強く押しているかを、それぞれの最大値に対する割合として記録しました。複数のモーターを持つ関節(腰は3方向に回ります)では、最も強いものを表示しています。体では各関節がその割合に応じて黄色く光り、パネルのヒートマップでは各行が関節、時間が左から右へ進みます。各モーター自身の最大値に対する割合は、その関節が限界にどれだけ近いかを表すもので、どれだけの力を出しているかではありません。腰の最も強いモーターの最大値は220 N·m、肘は90、つま先は30です。

ニューロン。 2層目の512個のニューロンについて、まず3秒間静かに立っている状態を記録し、各ニューロンの安静時の値と、それがどれだけ揺れ動くかを調べました。ある瞬間のニューロンの反応は、安静時からどれだけ離れているかを、そのニューロン自身の揺れの単位で表したもの、つまりzスコアです。

zi(t)=∣hi(t)−μi∣σi+0.05z_i(t) = \frac{\left|h_i(t) - \mu_i\right|}{\sigma_i + 0.05}

ここでhi(t)h_i(t)はニューロンの出力、μi\mu_iとσi\sigma_iは立っているときの平均とばらつきです(0.05は、まったく動かないニューロンでほぼゼロで割ってしまうのを防ぐためのものです)。これが3を超えたら、点灯と呼びます。パネルでは各ニューロンが1行で、ピークの時刻順に並べてあるので、活動の波は斜めに流れる帯として見えます。明るいほど安静時から離れています。

以下のどの場面も、同じリセットから同じ構えで始め、MuJoCoのシミュレーションで毎秒60フレームで1回だけ記録しました。ロボットの体は、シミュレーションの体の上にBlenderで描いています。

立っているとき:決して静止しない

構えをとるファイター。腰がかすかに光っている。横には落ち着いた関節のヒートマップと、点灯した行のないニューロンのラスター
図2 構え。腰は力の約3分の1(左34 %、右26 %)を、右膝は22 %を保っています。2層目では何も点灯していません。ラスターに見えるのは、ニューロンの静かな揺れです。

立っているときも、決して静止はしていません。構えにはリズムがあり、前の足で軽く弾むように揺れます。脚はそのあいだずっと体重を支えているので、腰と膝は常に働いています。ニューロンはざわめいていますが、決して大きく外れません。静かな数秒間、点灯するニューロンはひとつもありません。

4方向からの押し

次に、鋼鉄のブロックが胸に当たります。260 Nで0.16秒、前から、後ろから、左から、右から、それぞれ新しいスタートからです。

鋼鉄のブロックが胸に当たったあと後ろへステップするファイター。両方の腰が光り、押しのあとニューロンのラスターが斜めに点灯している
図3 前から押されて1秒後。左の腰は最大値の85 %、右の腰は76 %です。ラスターでは、押しの線のあとにニューロンが斜めに次々と点灯しています。

ブロックが当たってから0.16秒以内に、方向によって98–146個のニューロンが点灯します(前98、後ろ130、左146、右144)。ピークでは161–174個です。前から押された場合、押しのあとの1秒間で両方の腰は平均して最大値の60–64 %で働き、3~5個の関節が95 %以上に達します。ファイターはステップを踏み、毎回バランスを取り戻します。

4つすべてで、環境はサバイブモードをオンにしました。これは、体のキャプチャポイント(体の勢いが運んでいく先)が足の端を越えそうになるとオンになり、落ち着くとオフになります。サバイブモードでは脚が構えから大きく離れてもよく、報酬は倒れずにいることだけです。ネットワークはこのモードを入力のひとつとして見ていますが、回復そのものは学習で身につけたものです。

押しの方向が違えば、使うニューロンも違うのでしょうか。方向ごとに、押しのあとの1秒間で最もよく反応した40個のニューロンを取り出し、2つの方向の組ごとに共有している数を数えました。

後ろ左右
前181825
後ろ3018
左16
押しの方向ごとに1本ずつ、512個のニューロンの反応を示す4本の横帯。後ろと左の帯は同じ場所が光っている
図4 2層目の512個のニューロンを、最もよく反応する押しごとにまとめたもの。明るいほど強い反応です。左からの押しと右からの押しは、最も強い40個のニューロンのうち16個しか共有していません。後ろからと左からでは30個です。

左と右は最もはっきり区別されています。これは納得がいきます。正反対の対応が必要だからです。意外なのは、後ろからの押しと左からの押しが、ファイターにとってほとんど同じに見えていることです。これは測ったことではなく私の推測ですが、半身の構えでは、どちらも同じ方向、つまり前の側へ体を傾けるのでしょう。この地図は誰かが設計したものではありません。学習中に受けた何百万回もの押しから育ったものです。

倒される

同じ押しでも900 Nでは大きすぎて耐えられません。

足首とつま先を光らせながら後ろへ倒れていくファイター。パネルの予測の線はすでに低い床に倒れているファイター。つま先はまだ光っており、予測の線は範囲のいちばん下にある
図5 900 Nの押し。上:押しの0.45秒後、倒れていく途中で、左の足首とつま先は100 %です。パネル下部の赤い予測の線はすでに下がっています。下:押しの2.4秒後、床の上で、まだつま先で押しています。

押しの前の予測は555です(見通せる範囲で得られると見込んでいる報酬)。押しから2ティック、40 ms後には、すでに半分を下回っています。1秒後には−92で底を打ちます。体が床に着くのは1.94秒後です。ネットワークは倒れるずっと前から自分が倒れることを知っていて、それでも抗い続けました。0.16秒の時点で187個のニューロンが点灯し、9個の関節が最大値の95 %以上で働いていました。床の上でも、まだ立とうとし続けています。

技の入力

技はボタンから始まります。465個の入力のひとつが0から1に切り替わるのです。

ジャブを打つファイター。腰が光り、入力の線の直後に関節のヒートマップとニューロンのラスターで活動が一気に広がっている
図6 入力から0.75秒後のジャブ。最もよく働いている関節は左の腰(この瞬間で44 %)で、161個のニューロンが点灯しています。両方のパネルの縦線が入力の瞬間です。

まさに次のティック、20 ms後には、14の技すべてで108–140個のニューロンが点灯します。体はまだまったく動いていません。原因は入力そのものであって、体が感じた何かではないのです。それから波は広がり、179–232個でピークに達します。1つの技で、層の最大45 %です。

3つの技では、一瞬サバイブモードがオンになりました。奥の手のフック、スイッチニー、プルカウンターです。どれも短いあいだキャプチャポイントを足の端の外へ出してしまい、倒れる寸前だったため、バランスのルールが優先されたのです。

スウェーバックから前に出てくるファイター。右のつま先と足首が光り、ニューロンのラスターには長い斜めの帯が流れている
図7 入力から0.88秒後のプルカウンター:後ろへスウェーし、カウンターで前に出てきます。右のつま先は97 %、右の足首は92 %です。

ニューロンのフィンガープリント

押しや技はそれぞれパターンを残します。そのあと1秒間の、各ニューロンの平均反応です。各パターンを同じ大きさにそろえ(そうしないと、反応の大きい技どうしが、大きいというだけで似て見えてしまいます)、平均のパターンを差し引いてから、各組をコサイン類似度で比べました。同じニューロンが同じ割合で反応していれば1、無関係なら0、逆ならマイナスです。

赤から青に色分けされた19 × 19のグリッド。4つの押しの赤いブロックと、ジャブ、クロス、2つのフックの赤いブロックがある
図8 2つの動きのニューロンの反応がどれだけ似ているか:赤は同じニューロン、青は違うニューロンです。押しはひとつのブロックを、ストレート系のパンチとフックは別のブロックを作っています。アッパーカット、肘打ち、膝蹴り、蹴りは、それぞれほぼ単独です。
  • ストレート系のパンチとフックは、脳の多くを共有しています。 クロスと奥の手のフックは類似度0.75で、最もよく反応する40個のニューロンのうち28個が共通です。ジャブとクロスは0.69(40個中23個)、2つのフックは40個中26個です。
  • 押しはそれだけでひとつの家族です。 後ろと左は、すべての組の中で最も似ています。0.93です。
  • それ以外は個性的です。 ジャブと左ハイキックが共有するのは40個中2個です。2つのハイキックは9個、奥足の膝蹴りとスイッチニーは11個です。膝蹴りと蹴りは、それぞれ自分だけのニューロンを持っています。
  • 共通の核。 11個のニューロンが、技の70 %以上で上位60個に入っています。技が何であれ、すべての技が使う何かです。

アッパーカットはパンチのブロックには加わりません。グリッドでは肘打ち、膝蹴り、蹴りと並び、それぞれほぼ単独です。

力はどこから来るのか

関節を見ると、各技が体に何を求めているかが分かります。技ごとに、入力のあとの1秒間で平均して最もよく働いた3つの関節です。

14の技の表。それぞれ最もよく働いた3つの関節がラベル付きのタグで示されている。ほとんどの行に左右の腰が、膝蹴りと蹴りの行にはつま先と足首が現れる
図9 各技で最もよく働いた3つの関節:入力のあとの1秒間の平均トルクを、その関節の最大値に対する割合で示したもの。腰が(蹴りでは足首とつま先も)主役です。
  • パンチ: どのパンチでも上位2つの関節は腰です。ジャブ(左の腰56 %、右54 %)、クロス(61 %、49 %)、両方のフック、両方のアッパーカット。奥の手のフック、奥の手のアッパーカット、ボディへのクロスでは、その次が腰椎(38–43 %)です。腕の関節は、前の手のフックでの肩甲帯(29 %)を除いて、上位3つに一度も入りません。
  • 膝蹴りと蹴り: 足が主役になります。スイッチニーでは左のつま先が82 %、右ハイキックでは両足のつま先が65–66 %で右の足首が64 %、左ハイキックでは左の足首が69 %で右の腰が68 %です。軸足は蹴り足と同じくらい働いています。体を支えているのは軸足だけだからです。

これが示すこと、示さないこと

  • 示しているのは何が一緒に起きるかであって、何が何を引き起こすかではありません。 フックのあいだに点灯するニューロンは、フックを動かしているのかもしれませんし、フックに気づいているだけかもしれません。次のステップは、ニューロンをオフにしたり、安静時の値に固定したりして、どの技が壊れるかを見ることです。
  • それぞれ1テイク。 どの押しも技も、1つのスタートからの1回の記録です。別のスタートからなら、また「点灯」に私が選んだしきい値(3)を変えれば、数は少し変わるでしょう。
  • 2層目だけ。 1層目とクリティック自身のニューロンは描いていません。
  • 各モーター自身の最大値に対する割合。 腰と足首のモーターは肘よりはるかに強いので、同じ割合でも同じ力ではありません。

これらのニューロンが何を意味するかも、パンチの力がどこから来るべきかも、誰もファイターに教えていません。どちらも学習の中で試行錯誤によって見つけられたもので、中を見ることは、それを読み取る方法なのです。