Random Note

vmc-pet 実験記録1 — Lenia の体の崩壊は先読みできるか

概要

vmc-pet は、連続セルオートマトン Lenia の場をそのまま体として表示する電子ペットです。 Lenia の生き物はカオス的な系で、強く押したり成長を弱めすぎたりすると、形を失って消えてしまいます(崩壊)。

この記事は、「崩壊を前もって読めるなら、危なくなったら動きを落として守れるのでは」という発想から始めた実験の記録です。 結論を先に書くと、崩壊は一気に起き、危険は見た目より先にパラメータにありました。 ペットの安全は、体の様子を見て守るより、パラメータを崩壊の崖から離しておく方が確かだと分かりました。

なぜ先読みを試したか

vmc-pet の設計は World Models の V(エンコーダ)/ M(世界モデル)/ C(コントローラ)の分割を借りています。 元の World Models で大きいのはコントローラではなく、報酬なしで先を読む世界モデル(M)の方です。 その最初の一歩として、「体が崩壊するか」を小さなモデルで先読みできるかを試しました。

先読みできれば「崩壊しそうならテンポを落とす」ような振る舞いの判断材料になり、研究として外れても安全装置として無駄になりにくい、という見込みでした。

実験1: 見える量から先読みする

普段のペットはほとんど崩壊しないので、安全な範囲を通さずに Lenia を直接動かし、4種の生き物に負荷をかけた400本のエピソードを作りました。

負荷 かけ方

飢え

成長の強さを 0.60〜0.92 まで徐々に下げる

つつき

体の近くに、強さ 0.05〜0.6 の摂動を繰り返し入れる

テンポ

1ステップで進む時間を ×1.0〜×3.5 まで上げる

画面から見える量8つ(総量・その変化・広がり・密度・速さ・形の偏りなど)から、「10秒以内に崩壊するか」をロジスティック回帰で当てさせました。 崩壊したのは400本中72本です。

見える量は、崩壊の直前まで健康なままでした。 総量がはっきり落ち始めるのは崩壊の約0.3秒前からで、テンポの負荷では最後まで総量が健康なまま崩壊しました。 崩壊は、滑らかに衰えていくのではなく、一気に起きます。

しきい値 誤警報 警告できた崩壊 何秒前(中央値) 10秒以上前

誤警報を出さない(モデル)

1/169

24/31

0.2

0

誤警報を出さない(総量が少ないだけ)

1/169

26/31

0.3

0

崩壊しなかった体の10%で誤警報を許す(モデル)

20/169

30/31

2.3

9

誤警報を許せば先読みは伸びますが、それは崩壊の瞬間ではなく「危ない状況にいること」を見ているためだと考えています。 誤警報を出さない条件では、モデルは「総量が少ない」という素朴なしきい値と変わりませんでした。

実験2: 場そのものを読む

8つの要約値しか見ていないのが限界だったので、場の値の分布(20個)や、体を中心に切り出した場そのもの(512個)を入力にしたモデルも試しました。

モデル AUC 警告できた崩壊 1秒以上前

要約8つ

0.798

23/31

0

場の分布

0.817

29/31

12

場そのもの

0.829

15/31

8

同じ条件では、場を読むと1秒以上前に気づける例が増えました。崩壊の直前には、場の中に情報があります。 ただし、見ていない負荷や見ていない生き物には移りませんでした。 場そのものを読むモデルは、見ていない条件では誤警報を出さない範囲で1つも警告できず、切り出した場の特定の形を覚えただけだったようです。

実験3: 確率として当てる

ここまでの2つは、広くランダムに負荷をかけて、1回きりの「崩壊した/しなかった」を当てていました。 一般的な予測モデルの作り方に沿って、次のように組み直しました。

  • 行動(パラメータ)と状態(場)を分ける

  • 観察ではなく、シミュレータで実験してデータを作る

  • カオス系なので、1回きりの結果ではなく確率を当てる

  • 比べる相手と不確かさ(95%区間)を明示する

同じ出発点から、場にごく小さなゆらぎを掛けて8本ずつ走らせ、崩壊した割合を「その条件の崩壊確率」としました(798組 × 8本)。 問いは「パラメータが分かっているとき、場の状態も知ると、崩壊の確率がよりよく当たるか」です。

最初の実行には欠陥がありました。 生き物ごとに崖の位置が違うことをパラメータ側で表せていなかったため、場を足すと良くなったように見えていたのです。 パラメータ側に生き物ごとの効き方を足してやり直すと、パラメータだけのモデルが大きく良くなりました。

生き物 パラメータだけのモデルからの改善(95%区間)

O2u

−0.002 [−0.008, +0.004]

OG2g

−0.010 [−0.031, +0.007]

S1s

+0.329 [+0.013, +0.655]

2S1v

−0.032 [−0.056, −0.011]

パラメータが分かっていれば、O2u・OG2g・2S1v では、場を知っても崩壊の確率はよりよく当たりませんでした。 体の状態に応じて安全な範囲を変える根拠は無く、生き物ごとに固定したパラメータの範囲で守るいまのやり方で足りる、という結論です。

S1s だけは場を足すと良くなりました。S1s は放っておくと滑るのをやめて止まる、2つの状態を持つ生き物なので、状態によって崩れやすさが違う可能性があります。ただし数が少なく、確かめられてはいません。 副産物として、S1s は安全な範囲の中でも、パラメータを急に切り替えると崩壊しやすいことが分かりました(40個中27個)。

おまけ: 場をリザバーとして使う

崩壊を知りたいだけなら、学習したモデルより、正確な規則で先を走らせる方が確かです。 そこで逆に、Lenia の場そのものを計算の担い手として使えるか(リザバーコンピューティング)を試しました。 入力を体への弱い摂動として注ぎ、場の状態から線形の読み出しだけを学習して、過去の入力を当てさせます。

場 記憶容量(1〜40ステップ前の入力の復元の合計)

空の場

0.00

O2u

3.6〜6.6(入力を強くするほど増える)

S1s

0.7〜2.1

OG2g・2S1v

ほぼ0

同じ大きさの ESN

20.4

生き物のいない場は、何も覚えませんでした。自分を保つ生き物がいることで、はじめて場に記憶が生まれます。 体が入力をしばらく抱えておく器になっている、というのはこのプロジェクトの見方と噛み合います。 一方で、一番良い O2u でも同じ大きさの ESN の約3分の1で、計算資源として実用にする力はありませんでした。

分かったこと

  • 崩壊は一気に起き、見える量が崩れるのは直前(0.3秒ほど前)から

  • 場を読むと直前の情報は取れるが、見ていない条件には移らない

  • パラメータが分かっていれば、多くの生き物で場は崩壊の確率の予測に役立たない

  • だから vmc-pet では、成長の強さ 0.85 以上・テンポ ×0.5〜×1.6 と、パラメータを崖から離しておく方針を続けている

限界

  • モデルはロジスティック回帰などの線形なものだけで、畳み込みのような非線形なモデルは試していない

  • 負荷は実験用に作ったもので、普段のペットはほとんど崩壊しない

  • 崩壊の数(評価用で31本)が少なく、生き物ごとの数字は数本で大きく動く

記録とコード

Lenia は Bert Chan 氏の Lenia(MIT License)に基づいています。