米英ロックダウンの根拠となった、英インペリアルカレッジ~辞任したニール・ファーガソンが率いる~のチームによる「米国で220万の死者」という結論を出したコンピュータモデルプログラムコードのレビューです。
背景としては、ニール・ファーガソン教授率いる英国インペリアルカレッジのチームが、コンピュータモデルによるシミュレーションを行い、何も対策の無い場合に英国で(たしか)50万、米国で最大220万の死亡者という予測を行い。それが英米のロックダウンの根拠になっているわけですが、このコンピュータモデルのプログラムコード(の派生物)が、GitHubというプログラムシェアサイトで公開されており、その内容を精査してみると、簡単に言えば「ろくでもない代物だった」ということです。
途中にGitHubへのリンクがあり、プログラムは主にC++で記述されているようです。しかし、コードを見なくても、以下の説明を読めば、このコードがいかにひどい代物かはわかりますね。
これによってこんな大騒ぎをしているとは、いやはや何とも。。。
Code Review of Ferguson’s Model
Sue Denim(仮名)
インペリアルがとうとう、ファーガソンのコードの派生物をリリースした、私はこれをレビューし、何かしら私にわかったものを送ると言った。私には、あなた方の経歴がわからないので、もし不適当なレベルであれば、お詫びする。
私の経歴
私はソフトを30年間書いてきた。Googleには2006年から2014までおり、シニアソフトウェアエンジニアとして、Maps、Gmail、アカウントセキュリティに従事した。その他(以下略)
プログラムコード
これは、ファーガソンによって有名なReport 9を作り出したプログラムコードではない。GitHub上にリリースされたものは、激しく変更された派生物である。マイクロソフトや他のチームによって、一ヶ月以上のアップグレードを受けたものだ。この改変されたコードベースは複数のファイルに分割されており、C++で記述されている。
しかし、オリジナルのプログラムは10年にわたり作られた単一の1万5千行のファイルのはずである(極端にお粗末な仕事と言えよう)。
(訳注:訳者の個人的経験から言っても、単一ファイルで15,000行というのは、素人の作った、ただのおもちゃと言わざるを得ない。中身以前の問題)
オリジナルコードのリリース要請を8日前に行ったが、無視されたままである。このリリースには、おそらく何らかの種類の法的強制があるのだろう。明らかにインペリアルは恥を知るべきである、彼ら自身の意思でリリースができないことを。これは受け入れがたいことだ、これは納税者によって払われたものであり、彼らに帰属するものである。
モデル
これが行っていることは、こう説明できる。「グラフィックなしのSimCity」。
(訳注:都市を建設していくシミュレーションゲーム。適切に住宅地や工場等を配置しないと都市は発展しない)
これが行おうとしていることはシミュレーションすることである、世帯、学校、オフィス、人々、それらの移動等だ。これらの元となる仮定は説明しない、探せばどこにでもある。
非決定性出力結果
バグにより、同一の入力を行ってもこのコードは、異なる結果を生成しうる。彼らは常に、このことが些細な問題であるかのように振る舞っている。
この問題によって、このコードは科学的目的には使用不能である。科学的手法のキーとなる部分としては、反復可能な結果を得られる能力である。反復なしでは、その発見は全くリアルではない、そのコストに気づいていた心理学分野のようにだ。仮にオリジナルコードがリリースされたとしても、明らかにReport 9と同一の数字は出てこないだろう。
(訳注:同じ条件を入力した場合には、同じ結果が得られなければいけないが、そうなっていないということ)。
非決定性の出力結果には、何らかの説明があるかもしれない。誰かが以前に可能性を示していたようにだ。
ドキュメントにはこうある。
このモデルはstochasticである。異なる「種」を複数入力し実行することが必要である。その上で平均的振る舞いを見るのだ。
「stochastic」とは、単に「ランダム」の科学的に聞こえる言葉である。もし、ランダムさが意図的な擬似ランダムであれば、これは問題ではない。つまり、このランダムさが、開始「種」から始まり、ランダムな数字を繰り返し生成するというものだ。このようなランダムさは、たびたびモンテカルロ法にて用いられる。これは安全である、なぜなら、「種」が記録され、同じ疑似ランダムの数字列を将来にも再生成することができるからだ。疑似ランダムについては、マインクラフト(ゲーム)をプレイした子供であればおなじみだろう。マインクラフトから「種」が与えられ、それによってランダムな世界が生成される。したがって、「種」をシェアすることによって、その世界をシェアできるのだ。
(訳注:プレイしたことが無いので良くわからないが、786910456248011777などというデタラメな数字から一つの世界が作られ、この数字を友人にシェアするだけで、全く同じ世界が再現されるということ。もちろんネット接続が無いことを前提としている)。
明らかに、このドキュメントは我々にこう考えて欲しいようだ、開始の「種」が与えられれば、モデルはいつも同じ結果を出力すると。
調査によってわかった真実:このコードは決定的に異なる結果を出力する。たとえ、開始「種」やパラメータが同一でもだ。
いくつかのバグを示そう。問題116において、英国エジンバラ大学の「赤チーム」がレポートしている。彼らは、モードを使用し、より効率的なフォーマットでデータテーブルに保存することにした、より速いロードのためにだ。そして発見してことは、そして驚いたことは、結果の予測としては、80日間で8万名の死者というものだった。
このモードは、シミュレーション対象の世界について何も変更していない。従って、明らかなバグである。
インペリアルチームの応答としては、関係無いというものだった。彼らは「些細な非決定性には気がついている」が、「これは経験的に受容可能と考えている。なぜなら、それがモデルの一般的なstochastic 的本質だからだ」。この言い回しに注意して欲しい:インペリアルは知っているのだ、彼らのコード中のこのようなバグを。しかし、これがあたかも宇宙固有のランダムさであるかのように振る舞っている。アマチュアのプログラムの結果であるというよりも。明らかに、伝染病学において、8万の死者数という違いは「些細な非決定性」などではない。
インペリアルはエジンバラに対してアドバイスした。彼らがそうしたようにシングルスレッドモードでモデルを走行させれば、問題はなくなると。これが示唆することは、単一のCPUコアしか使用できないことだ、あらゆるビデオゲームがやっているような複数のコアを使うようなことはできない。国家のシミュレーションを行う場合に、単一コアしか使用できないというのは、明らかに悲惨な問題である。スーパーコンピューティングで得られるものからは、はるかに遠い。にもかかわらず、それがインペリアルによるコードの使い方なのである。彼らは知っているのだ、早く動かそうとすれば、壊れてしまうことを。2014年のコードを見てみれば、これは明らかだが、インペリアルはこのコードをマルチCPU用に改造し、スピードアップしようとしていた。しかし、信頼がおけるようには決して動かなかったのだ。この種のプログラミングは難しいと知られており、良い結果を得るために通常要求されるのは、シニアで経験のあるエンジニアである。実行するたびに結果がランダムに変化するのは、良くあるスレッドセーフバグの結果である。より口語的に言えば、これはハイゼンバグとして知られている。
(訳注:Wikipediaの特異なバグの中の「ハイゼンバグ」の項に説明がある。量子物理学者ハイゼンベルクの名に由来する)
しかし、エジンバラが再度レポートしてことは、シングルスレッドモードでさえ、問題が発生するというものだ。したがって、インペリアルの問題認識は間違っているのである。最終的に、インペリアルはバグの存在を認め、彼らの手による修正を行った。その説明としては、こういうものだ。
(長いので略)
言い換えれば、モデル変更の過程において、反復不能となってしまい、そのことに気がついていなかったというものだ。
なぜ気が付かなかったのだろうか?その理由は彼らのコードが、あまりに深く同じようなバグで溢れているからである。
(以下略)
テストなし
最初のバグの修正の議論においてインペリアルが言うには、かつては決定的ではあったが、しかし、コード変更を行ってそれを壊してしまったことに気が付かなかったというのだ。
こういった「退行」は、複雑なソフトには良くあることであり、だからこそ産業ソフトエンジニアリングチームは、自動化された退行テストを書くのである。
(訳注:ソフトを修正すると、別の場所が動かなくなることがあるため、常にすべてが正常に動作すべく、「ソフトをテストするソフト」を書いておく)
これらのプログラムは、(対象とする)プログラムに様々な入力を与え、結果が期待通りであるかをチェックするのだ。いかなる修正提案であっても、これに対してすべてのテストを行う。一つでもテスト失敗があれば、その修正はなされない。
(訳注:この自動化されたテストは、あらかじめ書いておけば、一瞬あるいは長くても1分程度で終了するものであり、そもそもそう記述しておかなければならない)
インペリアルのコードには、そのような実行可能な退行テストが無いようだ。彼らは試みたようだが、しかし、(対象とするプログラム)のあまりに気まぐれなふるまいにより、断念された状態である。4月4日に、彼らはこういった。「しかし、我々には時間がなかったのだ、退行テストをスケーラブルでメンテ可能な方法で作り出すには。つまり、小さなバリエーションを許すが、しかし、時とともに数字の変化は許さないようなものをだ」
この明らかに救いがたいコード以上に、テストモデルの予測は根本的な問題に直面している。つまり、著者達が「正しい答え」を知らなかったことである。その随分後で事実が出てくるまではだ。そして、それ以前にまたコードが変更された。このようにして、一連のバグも変化する。したがって、このモデルための退行テストが何なのか明らかではない。彼らは少々行おうとしたようだが。
不明確な数式
コードの多くは数式から構成されているのだが、何の目的なのか不明である。ジョン・カーマック(伝説的なビデオゲームプログラマ)は驚いたという、そのプログラムのいくつかは数年前にFORTRANから自動変換されたものだったのだ。
(訳注:ジョン・カーマックは、25年以上前に爆発的人気を得たPC用3Dゲーム「DOOM」のプログラマであり、id software社の共同設立者)
(訳注:FORTRANとは、現在はほぼ使用されていない1960年代頃のプログラミング言語。主に科学技術数値計算用)
例えば、SetupModel.cppの510行目には、このシミュレーションが対象とするすべての「場所」についてのループがある。このコードでは、これらの場所についてR0を計算しようとしている。「ホテル」は除外されているが、何の説明も無い。
(訳注:それ以前にこのコード自体がひどい)
この部分のコードが示すのが、Caswell Blighがそのサイトで議論していたことである。R0はウイルスの実際の特徴ではないと。R0は、これらのモデルの入力でもあり、出力でもある。そして、常に異なる環境や状況にアジャストされている。自身の出力を入力として使用するようなモデルの問題は、民間企業では良く知られている。これは、すぐさま逸脱を起こし、不正確な予測になる。こちらは、この問題についてのGoogleの論文である。“Machine learning: the high interest credit card of technical debt“。
開発の継続
彼らのコードの中にある深刻な問題に気づいているにもかかわらず、我々には修正の「時間がなかった」と言い、インペリアルのチームは新たな機能追加を継続している。例えば、デジタル・コンタクト・トレーシングアプリのインパクトをシミュレーションするモデルである(訳注:原文リンクは間違い。正しいリンク不明。著者に連絡済)。
多くの品筆問題を抱えるコードにさらに新たな機能を追加することは、これらを複雑にし、悪化させるだけである。もし、私がこれをコンサルティングを行っている企業内で見た場合、ただちに新機能開発を停止させるべくアドバイスするだろう、全体的な退行テストを作り、コードの品質問題が改善されるまでは。
結論
このコードに基づくすべての論文はただちに撤回されるべきである。インペリアルのモデリングの試みは、ファーガソン下ではない新たなチームによってリセットされるべきである。そして、第一日目から、公開コードによって再現可能な結果にならなければいけない。
個人的レベルとして、さらなる示唆を行いたい。学術的免疫学へのすべての資金提供をやめよ。この種の仕事は、保健業界が行うのがベストである。保健業界は、モデラーとデータ科学者を雇っている。しかしまた、そのモデルが現実世界の使用に十分正確であるかを決定するマネージャーがおり、さらに、モデルソフトウェアが適切にテストされているか、理解可能か等を確実にするソフトウェアエンジニアがいるのだ。学術界には、このような者がいない。そのことを結果が物語っている。
私の正体
Sue Denimは実名ではない。私は部分的に匿名でいようと思う、ロックダウンをめぐる大きないざこざのためである。しかし、それ以上に深い理由がある。
この状況は、恐ろしいほどはびこった学歴偏重主義に起因していており、それには辟易している。プログラマーの間で広がる失望が示している。もしSAGE(英非常時科学諮問委員会)の誰か、あるいは政府の誰かが、コードを現役のソフトウェアエンジニアに示そうなら、彼らはただちに理解し、警報を鳴らすだろう。しかし、政府は学術界に支配されており、その連中は明らかに、仲間の教授のやることに何の疑問も発せられないと感じるのである。その一方で、私のような平均的市民はこう言われるのだ、「専門家」に疑問をはさむなと。私はGoogleの従業員であったことをToby氏に証明したにも関わらず、このメンタリティが破壊行為を行っており、終わらせる必要がある。どうか、私の主張をご自身で検証してほしい。あるいは、あなたの知っているプログラマに依頼し、あなたのために信頼できる評価をお願いして欲しい。
コメント