2021年も 壁 Advent Calendar が開催されることになったわけだが、今回は真面目だが少々青臭い感じの記事を書こうと思う。テーマとして選ぶのは「難関国際会議の壁」である。 難関国際会議は、その定義上明らかなように論文を通すのが難しい学会のことを指す。 このような会議に通りやすい論文をどうやって書くかというのがこの記事の主題である1。 私の論文リストはGoogle Scholarの通りで、主著はある一本2を除いては一、二回の投稿で採録されているので、機械学習系の国際会議に論文を通したい場合にはある程度再現性があると考えられる。 ただし物事はそんなに単純ではないので大体このような記事は眉に唾をつけて読んだ方がいい。
「素人発想、玄人実行」の法則
金出先生の有名な言葉だが、これを聞くと「素人発想」に注目しがちであり、私が実際に金出先生の話を聞いた際も素人発想が大事だなと感じたものであった。 しかしここで注目したいのは「玄人実行」の方である。この記事での私の主張は「玄人実行していれば割と論文は通る」である。
玄人実行できていますか?
私自身は研究している時に、
- なんとなくこんな感じの手法を作ったらうまくいきそうな気がする、かっこいいし
- 実験Aをしたほうがいいけどちょっとめんどくさいんだな…
- 手法Bと比較した方がいいけど、著者実装の使い方調べたりするのがめんどくさい…
- 査読者からこういう実験をしろと言われたけど、自分のコードの動かし方忘れたし実験するのめんどくさいから実験しないで済むように author response の作文をしよう…
と考えてしまうことがあるし、実際そのようにして論文が通らなかったことがある。これらは全て玄人実行できていない例である。 玄人実行とは何かを明示的に書くのは難しいので、玄人度が低いと感じる例をさらに列挙・クラスタリングしてみると以下のようになる。とにかくあらゆるところに気を配らないと玄人実行できないわけである。
- 研究の動機
- こうやったらなんとなく精度上がるんじゃね?
- とりま転移学習とか組み合わせてみるか
- 最近流行ってる Transformer 適用してみるか
- サーベイ編
- めんどくさいから適当でいいか
- 2, 3年分の国際会議を並べたらいいか
- 近い論文から Related Work そのまま引っ張ってくるか
- 俺のアイデアは試されていないからOK
- 証明編
- 先行研究と同じ仮定だしいいか
- この仮定、成り立つのかちょっとわからんけど…まあいいか…
- 実験編
- 適当に比較手法集めてきて比較したらSOTA確認!OK!
- 先行研究の実験を(思考停止で)そのまま踏襲するか
- ちょっとめんどくさいしこの実験はやめておこう
- SOTA!
- 論文執筆編
- とりあえず埋めたしサブミット!
- 先行研究は使えない!俺らの手法最高!
- 近年、xxx が注目されている [1,2,3,4,5,6]
- 関連研究列挙
玄人実行とは
逆にあえて私の思う玄人実行を(抽象的にではあるが)書いてみると、
- 課題に関係している研究群を体系化し文脈を作る
- その文脈の中に自分の研究を正しく位置付ける
- 関係者が納得できるように自身の貢献を首尾一貫して正しく主張する
となるだろうか。少なくとも玄人実行されている論文であれば、コミュニティ内での貢献が明らかであるし読んでいて学びがあるので、通してもいいかとなるわけである3。 一方玄人実行ができていない論文を読んでも確実な学びは少なく満足度があまり高くない。すると査読者も色々文句を言いたくなるものなのだろう。
玄人実行するには
玄人実行するには玄人実行できる人と研究をするのが一番手っ取り早くかつ確実4だが、それをいっては元も子もないので私がやっている工夫をいくつか紹介する。
1. アイデアを思いついた時点でちゃんとサーベイする
サーベイをいつやるかは人によると思うが、私は割と早い段階でしっかりサーベイする派である。 というのも、自分で手を動かせば動かすほど似た既存研究が見つかって欲しくないと思ってしまい、サーベイが甘くなってしまう気がするからである。 最近は早いうちにサーベイをしてきちんとこれまでの研究の文脈を整理するようにしている。 そうすると巨人の肩に乗ることができるので、割と簡単に課題を解決できたりするので、そういう利点もあってサーベイはなるべく早くやるようにしている。
2. 実験を簡単に拡張・再現・実行できるようにする
機械学習系の研究の多くは数値実験を通して手法の性質を理解するが、この実験はかなりめんどくさいので素人実行になりがちである。 例えば論文投稿後からはじめの査読結果が返ってくるまで二、三ヶ月はあるのだが、往々にして実験コードの動かし方を忘れてしまいがちである。 前処理スクリプトを実行して、学習スクリプトを実行して、評価スクリプトを実行して、ログを読んで図を頑張って描く、など、複雑な手順で実験していた場合、実行手順を書き残していても再実行の心理的ハードルは高い。 このような状況で査読者に追加実験を求められた場合、素人実行になってしまうわけである。 このようなことを避けるためには、再実験しやすいようにプログラムを書く必要がある。
私が行っている工夫は、ワークフローエンジンを使って実験を書くこと、そして実験プログラムの雛形を用意しておくことである。 具体的には luigi を使い、実験プログラム用のツール luigine を整備している。 例えば最近書いた論文の実験コードはそれらを使って書いている。 ワークフローエンジンを使うと良い理由は、
- 一つのスクリプトで前処理、学習、評価、プロットなどの複数のタスクを記述するときに整理して書ける(巨大な実験スクリプトモノリスになりにくい)
- タスクはクラスで書くので、継承などを使って拡張できる
- コマンド一発で実行できる
- 途中結果の再利用ができる
- 並列に実行できるタスクは並列で実行してくれる
などが挙げられる。初期学習コストが必要な点は悪い点ではあるが、便利ツールを使う際には初期学習コストは必ず必要なのでそれは我慢するしかない。
3. 玄人実行できている論文をちゃんと分析する
玄人実行のやり方は色々あるので、自分が玄人実行だなと感じた論文がなぜ玄人実行されていると感じるのかを分析すると学びがある。 ただし難関国際会議に採録されている論文であっても玄人実行できていないものも少なくないので、これは自分の中の玄人実行像ができてきてからやるべきことなのかもしれない。
4. 玄人実行できているのか常に自問する
常に自分を疑え。
おわりに
学びのある研究をするためには玄人実行することが必要であり、また学びのある研究は難関国際会議であっても採録されやすい(気がする)ので、玄人実行して学びのある研究をやって論文を通しましょう、というのが本稿の主張である。 しかし難関国際会議に論文を通すのは研究者としては通過点であって、それさえできていればいいというわけではない。それこそ素人発想のインパクトのある研究をしなければいけないし、論文を書く以外のこともやって、とにかく何かしらの方向でインパクトを出さなければならない。 このように「難関国際会議の壁」の次には「インパクトの壁」があり、おそらくその後にも壁は続くのだろう。 次なる壁の一片でも掴めた際にはまたこのようにして記録を残したいと思う。
※この記事は2021/12/01時点での個人的な意見の表明であり、所属するいかなる組織の意見を代表するものではありません。意見・疑問・質問・苦情などがあればコメントやメールでお願いします。