前処理が、シグナルを静かに捨てていた

この種の仕事には、ほとんど誰もが退屈な雑用だと見なしている工程がある。前処理――実際に学習をおこなう部分にデータが届く前の、クリーニング、スケーリング、整形だ。私もまさにそのように扱っていた。本番の作業が始まる前に片づけておくべき、当たり障りのない雑事として。だが、それは当たり障りのないものではないし、そう扱ったことの代償は大きかった。深く考えもせずに適用したありふれた変換のひとつが、私がもっとも必要としていた当の情報を静かに捨ててしまっていた。そして私は何週間も、明らかにそこにあるはずのものをシステムが見えていないらしいことに、ただ困惑していた。

その間ずっと、私は見当違いの場所を見ていた。失敗はどこか巧妙な部分に潜んでいるに違いないと信じ込み、洗練された部分ばかりを問い詰め続けた。失敗はもっとずっと手前で起きていた。私が「決定」だとすら考えていなかった部分で。

前処理は当たり障りがないように感じる。だが、そうではない

データを正規化し、スケーリングし、平滑化し、整形するとき、それは本当にただの片づけのように感じられる――料理を始める前にカウンターを拭くようなものだ。当たり障りがなく、衛生的で、明らかに正しい。その感覚こそが罠だ。なぜなら、それらの操作はどれも、実のところひとつの決定だからだ。どの情報を残し、どの情報を捨てるかという決定。

「標準的な」前処理は、ここでとりわけ誘惑的だ。標準という言葉が、それを選択ではなく、確立された当たり障りのないデフォルトのように響かせるからだ。だが標準的な変換とは、どこかの誰かが汎用的なケースのために選んだデフォルトの集合にすぎない。そのひとつひとつには、何が重要で何が重要でないかという前提が焼き込まれている――そしてそれらの前提は、一般的には完全に妥当でも、あなた固有の問題に対しては、あっさりと、そして致命的に間違っていることがある。あなたはその前提を、一度も見せられないまま受け継ぐ。それが決まりきった手順を装ってやってくるからだ。

意味を消し去った変換

私の場合――ここはあえて一般的に書くが――まったくありふれた正規化の工程が、私の特定の問題にとってはたまたま意味のある部分だった、ある種の情報を平らに均してしまう効果を持っていた。変換そのものは正しかった。標準的だった。どんなチュートリアルでも当然のように勧める類のものだった。そして私の問題にとっては、それはシグナルを削除しながら、ノイズを忠実に保存していた。

これを発見したのは本当に身の縮む思いだった。なぜならそれは、モデルが学習に失敗していたわけではまったくなかったことを意味していたからだ。モデルはデータが届く前から目隠しをされていた。私は自分の手で、クリーニングの最中に重要な区別を取り除いておきながら、洗い清められた結果の前にシステムを座らせ、もはやそこに存在しないものをなぜ見られないのかと不思議がっていたのだ。

見えないものは学習できない

これこそ、明らかであるべきだったのに明らかでなかった原則だ。モデルは、前処理を生き延びたものとしか向き合えない。データが届く前にあなたの変換が取り除いたものは、下流のすべてにとって、永久に、ただ消え失せている。後からどれほど洗練を加えても、より早い段階で削除された情報を取り戻すことはできない。すでに消し去った区別へ、論理をたどって戻ることはできないのだ。

つまり私は、この取り組み全体を逆向きにやっていた。モデルをより賢くしようと、より大きな容量を与えようと、パターンを見つける手助けをしようとし続けた――だが実際の問題は、私が上流でそのパターンを捨ててしまっていて、いまや自分が個人的に削除したものをモデルに再発見させようとしていることだった。あなた自身がすでに手の届かないところへ取り除いたものを見つけろとシステムに要求し、見つけられないからとそれを責める。これは奇妙な種類の残酷さだ。

あらゆる変換は損失を伴い、主張を含む

この下に横たわる一般的な真実は、当たり障りのない変換などというものは存在しない、ということだ。データのあらゆる整形は、その一部の側面を優遇し、他を抑圧する。それこそがデータを変換するということそのものだ。スケーリングは、事実上、絶対的な大きさは重要でないと宣言する。平滑化は、短期的な細部は重要でないと宣言する。そのひとつひとつが、あなたの問題についての意見であり――何がシグナルで何がノイズかという主張であり――そのどれもが、あなたが同意も反対もする機会を得る前に、デフォルトとして静かに言い渡される。

その静けさこそが危険な部分だ。デフォルトが危ういのは、まさにあなたがそれを選択として経験しないからだ。雑用として差し出された決定は、決定にふさわしい吟味を受けない。あなたは「この部分は重要でない」という言葉を、自分の問題についての気軽な主張として決して受け入れないだろう――だが、標準的な変換が何を前提しているのかを問わずに適用するたびに、あなたはまさにそれを、吟味しないまま受け入れているのだ。

前と後のデータを見よ

ここから生まれた規律は、ほとんど恥ずかしくなるほど基本的なものだ。前処理がデータに何をしているのかを、実際に見ること。各工程の前と後を比較すること。何が変わり、何が消えたのかを、具体的に確かめること。あらゆる変換について、こう問うこと――「これはいま何を取り除いたのか、そしてそれを失う余裕が本当にあるのか?」

それは退屈な作業で、興味深い問題の尊厳には明らかに見合わないと感じられる。だが、この鈍くて見栄えのしない比較こそ、パイプライン全体でもっとも重大な決定のいくつかが静かに下される場所なのだ――デフォルトによって、惰性によって、チュートリアルの推奨によって、誰も実際には何も決めないまま下される。見ることを選ぶとは、それらの静かなデフォルトを、目に見えて吟味可能な選択へと引き戻すことを選ぶことだ。

安っぽく感じる部分が、高くつく間違いを隠している

プロジェクトのこの段階までに、これはどこにでも見える一つのパターンへと固まっていた。安っぽく退屈に感じる工程――前処理、設定(config)、慎ましいデフォルト――こそが、高くつく見えない間違いが蓄積する場所なのだ。まさにその安っぽさが、それらを吟味から免除しているからだ。華やかで難しい部分には、ありったけの注意深い関心が注がれる。配管には、いくつかの前提と肩をすくめる仕草だけが与えられる。

そして、水が実際に流れていくのは配管のなかだ。退屈な工程の中の間違ったデフォルトは、自らを重要だと宣言したりはしない。上にそびえる胸躍る機械にすべての視線が向けられているあいだに、ただ静かに下流のすべてを毒していく。問題が住んでいる場所と、注意が向かう場所とのこのずれは、いまや私が確信するところ、この取り組み全体で失われる数か月の、もっとも信頼できる源のひとつだ。

より深い教訓――「ただの」という言葉を疑え

最終的に私が手にしたのは、ある小さな言葉への深い疑念だった――ただの、という言葉だ。ただの正規化。ただのデータのクリーニング。ただの標準的な変換、ただの前処理、ただの決まりきった手順。その「ただの」という言葉こそ、まさに危険が潜む場所だ。それは、あらかじめ考えないと決めてしまった工程の言語的な目印であり――ここには吟味に値するものは何もないと自分に告げるために、地面に突き立てる旗なのだ。

たいていの場合、そこには吟味に値する何かがある。いまでは、何かが意味の通らないかたちで失敗しているとき、私の最も早い問いはもはや巧妙な部分についてではまったくない。それはこうだ――興味深い部分がそれを目にする前に、退屈な工程のなかで、私はこのデータに何をしたのか? 一度ならず、その答えは、私が探していたまさにそのものを捨てておきながら、その行為を「ただの片づけ」と名づけていた、というものだった。

― シグナルもリターンも提供しません。投資助言ではありません。