
3つの国の国境が、どこを取っても3か国すべてに接している。ニュートン法の吸引域で「和田の湖」を実測した
の解は3つある。 と、複素平面上でそれを120度ずつ回した2点だ。
ニュートン法でこの方程式を解くとき、どの解にたどり着くかは初期値で決まる。 の近くから始めれば に、他の根の近くから始めればその根に。では平面上のすべての点について、行き着く先を色分けしたらどうなるか。
素直に考えれば、平面が3等分されて、120度ずつの扇形になりそうだ。実際にはそうならない。
実験に使ったコードの全文はGitHubに置いています。
行き先で色分けする
の各画素を初期値として、ニュートン法を60回まわす。

扇形にはならなかった。境界には丸い突起が数珠のように並び、その突起の内側にまた3色が入り込んでいる。
拡大していくと、この入れ子が終わらない。

境界のフラクタル次元をマンデルブロ集合の回と同じbox-countingで測ると、1.438(同じコードで円を測ると1.019なので、その系統誤差を補正した値)。直線でもなければ平面でもない、その間の値になる。
高さを「収束までの反復回数」にすると、境界が谷底の裂け目として見える。
国境は、どこを取っても3か国に接している
ここからが本題だ。この境界には和田の湖(Lakes of Wada)という性質があるとされる。
普通の地図では、3つの国の境界線を歩くと、たいていは2か国の間を歩いている。3か国が同時に接するのは、三国国境点という特別な1点だけだ。
ニュートン法の吸引域では、そうならない。境界上のどの点を取っても、その点は3つの領域すべてに接している。
言葉で言われても信じにくいので、測った。各境界画素について、半径 画素の窓の中に何色が現れるかを数える。

| 半径 | 512×512 | 1024×1024 | 2048×2048 |
|---|---|---|---|
| 1画素 | 73.84% | 72.41% | 72.32% |
| 2画素 | 98.34% | 97.90% | 97.57% |
| 4画素 | 100.00% | 99.99% | 99.99% |
半径2画素の窓で、境界画素の97.57%が3色すべてに接している。
大事なのは、解像度を4倍にしても値がほとんど変わらないことだ(73.84% → 72.32%)。もしこれが「解像度が粗いから複数の色が混ざって見えている」だけなら、細かく描くほど割合は下がるはずだ。下がらないということは、いくら拡大しても3色が接し続けている。
対照として、平面をふつうに3等分した(120度ずつの扇形)境界で同じことを測ると、0.72%だった。三国国境点の周辺だけが該当する。100倍以上の差がある。
根を増やす、収束させない
根の数を5つにしても、同じ構造が現れる。

の境界次元は1.701。根が増えるほど境界は込み入る。
右は で、こちらにはニュートン法が収束しない初期値がある。この式では反復が周期2の軌道に捕まってしまう領域が存在し、200回まわしても1.056%の画素がどの根にもたどり着かなかった。
ニュートン法は「速く収束する」ことで知られる手法だが、それは十分に近い初期値から始めた場合の話だ。遠くから始めれば、そもそも収束しないこともある。
まとめ
- の吸引域は扇形にならず、境界のフラクタル次元は1.438
- 境界画素の97.57%が半径2画素の窓で3つの領域すべてに接している(和田の湖の性質)
- 解像度を512から2048へ4倍にしても値は72〜74%で変わらない。解像度のせいではない
- ふつうに3等分した境界で同じ測定をすると0.72%
- の境界次元は1.701。 では200回まわしても1.056%が収束しない
「どの国境の点も3か国に接している」という主張は、地図の常識と真っ向からぶつかる。2か国の間を歩いていて、あるとき三国国境点を通過する——それが普通の境界だ。ここではその「あるとき」が、境界のすべての点で起きている。
測ってみて腑に落ちたのは、これが境界に幅がないから成立しているということだった。3色が接するには3色が同時に見える必要があるが、境界に厚みがあれば、その厚みの中は「どちらか一方」で埋まってしまう。厚みがゼロで、しかも無限に入り組んでいるからこそ、どこを取っても3色が届く。
そしてこれは、私が普段「境界」という言葉で思い浮かべているものが、かなり特殊な場合だという話でもある。線で区切られた地図のような境界は、境界の中では例外的にきれいなほうだ。
分類の境目にいるデータ点を「どちらとも言えない」と扱うことがある。だがニュートン法の境界を見たあとだと、その言い方は少し楽観的に思える。境目にいるということは、2つの候補の間にいるのではなく、全部の候補に同時に接しているのかもしれない。
このブログでは、機械学習の仕組みを実際にコードで実装して確かめた実験をテーマ別に整理しています(拡散モデル・Transformer・強化学習・多様体学習・過学習など)。


