遺伝的アルゴリズムちゃん―botの解説と功罪

はじめに

この記事は、2021年5月に本論で述べる事件があった直後に勢いで執筆したものである。
勢いで書いたために内容が相当稚拙であったが、旧サイトの残骸から発掘され、どうやら検索からの流入があったよう1なので加筆して公開することとする。

本論

参考Link
(1)遺伝的アルゴリズムで最高にエッチな画像を作ろう!

(2)「遺伝的アルゴリズムで最高にエッチな画像を作ろう!」がまるで意思があるかのように1日で大きな変貌を遂げてしまう→その原因も判明する - Togetter

(3)Tuku & Hikaria(Bot作成者)

(4)同氏が公開したソースコード Ubuntu Pastebin

(5)遺伝的アルゴリズム - Wikipedia

まとめ:
人間の二択投票を元に、遺伝的アルゴリズム(GA)を用いて「エッチな絵」を生成するプロジェクトが、第三者の開発したbotによって意図的に操作されるという出来事があった。 本稿では、その技術的な側面の解説と、botによる介入の是非について、私見を書き散らしておきたい。

GAの技術的解説

詳細は各自で検索するか、元記事(参考Link(1))を参照してほしいところだが、本稿でも簡単に解説する。

GAの原理

簡単に言うと:最適なパラメタのセットを探すのが目標

〔わかりやすいように加筆する〕

「遺伝的アルゴリズムで最高にエッチな画像を作ろう!」の実装

(1)より引用

【一世代の個体数】
40
【一画像を構成する図形の数】
3000
【図形の情報】
位置、大きさ、色、透明度、矩形か楕円か
【試合回数】
2000
【生存する個体数】
5
【突然変異確率】
1% *途中から減らしました
【交配方法】
まず、適応度が最上位だった個体が他の生存個体と5回交配し、後の30回は生存した5個体からランダムに選ばれた2個体が交配する。 交配時は、選ばれた2個体の遺伝子からランダムに3000個の遺伝子を被りなく選んで子供を作る。

(1)/js/draw.js をしっかり読めばもっとわかりそうだが、自信がないのでやめておく。
重要なのは内部的に40個体いるということ。

実際にやりとりされるデータ
draw.js クライアント
fish.wav 効果音
n.png (n=0…39) 各世代の画像
aza n.png アザラシ(?)の素材
checkMaking.php よくわからん
gameNum.json 各世代の得点(適応度)
makingGene.json よくわからん(真偽値)
generation.json 世代数
addNum.php(POST) 投票

Botの実装

(4)記載のソースコードを読み解く。

やっていることは比較的単純で、

  • Reference画像と各世代画像の差分2を取る

  • もっとも差が小さいものに投票しまくる

これを繰り返しているに過ぎない。しかし、他の手動ユーザーを圧倒する速度で投票が行われるため、botが支持する画像が最多票を獲得することは確実となる。

単純とは言いましたがasyncやaiohttpが使われており非常に力が入ったプログラムだと思います。ちなみに私は書けません。

Botを走らせた行為は善か悪か

筆者個人としては、彼の行為が当時批判されていたほど悪質なものだとは考えていない。

というのも、

  • もともとのサイト自体そういった攻撃に対する防御策が一切取られていない

  • そもそも投票システムが成り立ってたのが奇跡

    • cf. コイルショック
  • 事後とはいえ作者が容認する考えを示したこと

  • ピークはすでに過ぎていて安定状態だったこと

    • 本来の目的であったGoogleからのエッチ判定報告は2/11(3ヶ月ほど前)に達成

    • 14500世代前後から介入したと考えられるがその時点で殆ど変化なし

      • 直近に顔の向きが変わってるがそれが介入による変化なのか不明
  • 攻撃手法(=ソースコード)を公開していること

  • サーバーに危害を加える目的ではなかったこと

「みんなで育てた生物を狂人が殺した」といった論調の意見も見受けられたが、個人的には的を射ていないと感じる。 表現するなら「みんなで遊んでた砂場が一週間後には別物になってた」が適当かと思う。性的なものという点で奇妙な感情移入(というか表現)をする人がいるのは面白い。

おわりに

当時のこと

当時は、bot製作者の国籍に関する人種差別的な言説や、いわゆる「オタク」層からの一方的な非難が目立った。この記事は、そうした風潮に対するカウンターとして、半ば逆張りの精神で書かれたものだ。 ただ、「くだらない」(と当時思っていた)言論と議論の質は正直どんぐりの背比べなもので、改稿作業中も自分の馬鹿さ加減に嫌になった。


  1. kris.failは検索避けをしていたが、旧サイトを保存しているサブドメインがGoogleに拾われていた。 ↩︎

  2. どんな差分の取り方してたっけなあ。 ↩︎