
「縞を作れ」と一度も書いていない式から縞が出てくる。チューリングパターンを実装して、拡散の速さを揃えたら模様は消えた
動物の体表の模様——ヒョウの斑点、シマウマの縞、フグの迷路模様——がどうやって決まるのかを、アラン・チューリングが1952年に提案した仕組みで説明できる、という話がある。「チューリングパターン」と呼ばれている。
驚くのはその仕組みの素っ気なさだ。2種類の物質があって、互いに反応しながら、それぞれの速さで拡散する。それだけ。どこにも「縞を作れ」とも「斑点にしろ」とも書いていない。
今回実装したのはGray-Scottモデルという反応拡散系だ。
が供給される材料、 が を食べて増える物質。 が の供給率、 が の除去率。この2つの数字を変えるだけで、出てくる模様がまるで変わる。
実験に使ったコードの全文はGitHubに置いています。
中央にひとしずく落とす
真ん中に を少し置いて、あとは式に任せる。

ひとしずくが広がって、分裂して、迷路になる。この過程に外から与えた情報は「中央に少し置いた」ことだけだ。
FとKを42通り振る
を7段階、 を6段階に振って、それぞれ9,000ステップ回した。

42通りのうち、模様と呼べるものが出たのは 17通りだけだった。16通りは高濃度が全面に広がった一様な状態、9通りは が死に絶えて何も残らない。
模様が出る領域は、- 平面の中の細い帯に限られている。生き物の模様が「なんとなくできる」ものではなく、パラメータがある範囲に入っていないと成立しないことが、絵として見える。
代表例を大きく描くとこうなる。

| F | k | 主波長 | 塊の数 | 面積 |
|---|---|---|---|---|
| 0.030 | 0.055 | 12.6 | 16 | 33.0% |
| 0.022 | 0.051 | 12.7 | 104 | 17.0% |
| 0.038 | 0.061 | 11.7 | 58 | 33.4% |
| 0.026 | 0.058 | 12.3 | 427 | 19.5% |
| 0.034 | 0.065 | 14.4 | 81 | 3.8% |
見た目はまるで違うのに、空間フーリエ変換で測った主波長は11.7〜14.4格子とほとんど同じだった。塊の数は16個から427個まで26倍も違うのに、縞と縞の間隔はどれもほぼ12格子。
模様の「粗さ」は や ではなく、拡散係数と反応速度の関係で決まる。・ が決めているのは、その粗さのもとでどう配線されるか(線になるか、点になるか、穴が開くか)のほうだった。
自分で ・ を選んで見比べられるようにした。
拡散の速さを揃えると、模様は消える
チューリングの1952年の主張の核心は、「反応があるだけでは模様はできない。拡散が加わることで不安定になる」という点にある。しかも条件があって、抑制する側の物質が活性化する側より速く広がる必要がある。
これは実験で確かめられる。・・初期値・乱数をすべて固定したまま、拡散係数の比 だけを変えた。

| 模様の面積 | |
|---|---|
| 1.0 | 0.00% |
| 1.1 | 0.20% |
| 1.5 | 5.83% |
| 2.0 | 32.05% |
| 3.0 | 42.53% |
| 4.0 | 43.09% |
比が1.0、つまり2つの物質が同じ速さで広がるとき、模様はまったくできなかった。 反応の式は何ひとつ変えていない。変えたのは「どちらが速く広がるか」だけだ。
比を上げていくと、1.5あたりから模様が立ち上がり、2.0で一気に育ち、3.0以上で頭打ちになる。同時に主波長は53.3格子から7.6格子へと細かくなっていった。
まとめ
- Gray-Scottモデルを実装し、・ を42通り振ったところ、模様が出たのは17通り。16通りは一様に埋まり、9通りは消滅した
- 見た目が違う模様でも主波長は11.7〜14.4格子とほぼ同じ。塊の数は16個から427個まで26倍違うのに
- 拡散係数の比を1.0にすると模様の面積は0.00%。反応の式を変えずに、広がる速さの差だけで模様の有無が決まる
- 比を上げると模様が育ち(2.0で32%)、3.0以上で頭打ち。同時に波長は53.3から7.6へ細かくなる
「縞を作れ」と書かれていない式から縞が出てくる、という話は本当だった。ただしそれは、パラメータが細い帯に入っているときかつ抑制側が速く広がるときに限られる。
42通り試して、25通りは何も起きなかった。引っかかったのはそちらのほうだ。
チューリングパターンの話は、たいてい成功例の絵と一緒に紹介される。ヒョウの斑点、フグの迷路、貝殻の縞。私も知識としてはそこまで知っていた。だが実際に と を振ってみると、大半の設定では全面が一様に埋まるか、あっさり消えるかのどちらかだ。
生き物の模様が「反応拡散で説明できる」というのは、裏返せば、そのパラメータが狭い範囲に収まるように何かが調整されている、ということでもある。仕組みが単純であることと、それが機能する条件がゆるいことは、まったく別の話だった。
きれいな絵だけを見て仕組みを理解した気になっていたのは、42枚のうち17枚しか見ていなかったからだと思う。
このブログでは、機械学習の仕組みを実際にコードで実装して確かめた実験をテーマ別に整理しています(拡散モデル・Transformer・強化学習・多様体学習・過学習など)。


