記録は、共有してから整理する
データ分析の記録は自分的な最近の関心の一つで、いまいち良い解決に至れていない。 このブログでもたびたび話題にしているのもその現れと思う。
データ分析の作業においては、区切りが曖昧に思う。 何かが分かったらその時点でまとめて共有する、というアイデアは、 何かが分からない時に破綻するので良くない。 ずるずると分からない、という状態が続く時ほどその過程を共有するのが大切。
データ分析の記憶の共有は、整理してから共有する、というのではうまく行かない。 まず共有する、そして必要に応じて整理する。この順番が大切と思う。 いつも日々作業は共有されているのが良い。 そのためには、日々の作業は共有されうる何かの方が良い。
日々の作業で共有されるものとしては、日々の時系列の作業ログと、Jupyter Notebookが暫定的な結論としては良いんじゃないか。 作業のログはどこかでは何かの整理がある方が良くて、 それはWiki的な何かも欲しい気はするが、それは自分はあまりうまくいってない。 なるべくJupyter Notebookにやった作業が全部残っている方が良い。 コードを書いてバグだったから直した、がJupyter notebookの外の.pyとかだと共有内容としてはいまいち。 また、失敗だったり間違っていた実験を消してしまうのもあまり良くない。 なるべくやった事はそのまま残す、そして把握出来ないくらい混沌としてきたら整理する。
逆に日々の時系列の作業ログとnotebookがあれば、他人のだいたいの状況は把握出来ると思う。 これが日々共有されているか、整理したあとにしか共有しようとしないかは共同作業のやりやすさに大きな影響を与える。
作業の整理はどこまでやるかも難しい。 あまり分かってない事が多い時に、整理しすぎると誤った認識を反映してしまう事がある。 早すぎる抽象化が有害なのと似ている。
整理は、まず作業を進めて行って、混沌度合いが上がり過ぎて把握が出来なくなる少し手前くらいでやるのが良いと思う。 整理具合も、把握出来る程度までで止めておくのが良い。 読み手に多少の読解の努力を要求するくらいの状況にしておくのが、共有のコストとの兼ね合いとして適切に思う。
時系列の作業ログは、単なるテキストファイルかそれに類するものが良いんじゃないか。 日付は入ってて欲しいが、フォーマットは定まってない方が、作業の曖昧な要素が残しやすくて良い。 かっちりしてしまうと、ちゃんと理解するまで記録が取れない。 曖昧な勘違いを曖昧に記録出来る必要がある。 勘違いや間違いは、例外じゃなくてほとんどいつもあるものだ。 そもそも勘違いがなければデータ分析の仕事自体ほとんど要らない。 だから記録は勘違いを前提としたものであるべきと思う。 例えばBatchNormalizationの移動平均の更新がうまく行ってなかった時と、regularizationのロスが含まれていなかった時と、layer normalizeが誤った未来のトークンを含めてしまっていた時が、それぞれ記録を残したあとの別々のタイミングで明らかになって、しかも記録の影響する範囲が違う、というような時に、 それをちゃんと知識ある第三者が読めばどこまでどの間違いが影響しているかを調べられる必要がある。
時系列の作業ログとnotebookはほぼ決定版と思うが、これは必要だが十分では無い。 もっと他の何かと併用する必要はありそう。 作業ログが一定以上たまったあとに、それがまとまっていく何かがあるといいんだけどなぁ。