ジョイジョイジョイ

ジョイジョイジョイジョイジョイ

論文読みの日課について

かれこれ三年以上ほぼ毎朝論文を読んでいます。

ほぼ毎朝、というのは本当にほぼ毎朝です。この三年のうち読まなかった日はワクチンの副反応でダウンしている日など、あわせて 10 ~ 20 日ほどでしかありません。この日課だけでも 1000 本以上は論文を読んだことになります。

論文読みの日課についての知見が溜まってきたのでこの記事で共有します。

主な想定読者は研究者と学生の皆さんですが、それ以外の論文読みに興味のある皆さんにも有用な情報が詰まっているはずです。

日課の流れ

  1. ブラウザを開く
  2. 論文を選ぶ(選び方は後述)
  3. Readable で論文を翻訳する
  4. ざっと呼んで一通り内容を理解する(目安 30 分)
  5. 著者の情報や関連する文献を軽く調べる(目安 5 分)
  6. 論文メモを執筆する(目安 25 分)

論文メモはこんな感じです(クリックで拡大)

以上の作業を、朝食後ただちに、最初の作業として毎朝行っています。目安時間はあくまで目安で、選んだ論文によって半分になることもあれば倍になることもあります。詳しくは時間を計測するの項を参照ください。以下ではそれぞれの段階のやり方、気をつけていること、そしてその理由を詳しく解説します。

Readable について

Readable は英語論文をレイアウトを保ったまま日本語に翻訳するツールです。僕が作りました。

実は、Readable はこの日課を快適にするために自分用に作ったツールが原型となっています。今でも僕自身、この日課をこなすために Readable をバリバリ使っています。

そういう経緯なので、この記事でお話するような論文速読をこなすためには非常に適したツールとなっています。論文速読の際には皆さんぜひ一度使ってみてくださいね。

readable.jp

🧐 論文の選び方

現在の方針は以下の通りです。

まず、今自分がやっている研究内容とは直接関係がないものを選ぶ。査読で読まないといけない論文も、この日課では読まない。これらの論文はどのみち読むことになるので、そうではない論文を読むのが日課の目的です。(だたし、後述のように最初は研究内容直結のものを読むことをおすすめします。)

第二に、選定になるべく時間がかからないようにするために、ある程度自動的に選択できるような手段を構築してシステマティックに選ぶ。論文選定は日課の最初のステップです。ここで躓くと、日課にスムーズに入っていくことができなくなり、そのために日課を開始するのを先延ばしにしてダラダラしてしまうことになります。何も考えなくても論文を選べるような仕組み作りをしていくことで、最初のステップで弾みをつけ、サボりを防ぐことができます。この点でも、論文の選び方は日課において非常に重要な点です。

以下に、僕がこれまでに試したおすすめの選び方を紹介します。最高の方法が一つだけある訳ではありません。どれも一長一短であり、僕はこれらを数ヶ月周期で移っていっています。

自分の研究内容と直接関係あるものを読む(特におすすめ)

これは上述した第一の条件に相反していますが、初心者にはこの選び方が非常に有効です。僕自身、日課を始めた最初の数ヶ月はこの方針で論文を選んでいました。

具体的には僕の専門はグラフニューラルネットワークなので、こちらのレポジトリ https://github.com/naganandy/graph-based-deep-learning-literature/tree/master/conference-publications を片端から一本ずつ読んでいきました。同様のレポジトリは “awesome [分野名] papers” などで調べれば出てくるかと思います。レポジトリ内の読む論文が尽きた後は、関連する国際会議のプロシーディングスを graph などの単語で検索して片端から読んでいきました。

github.com

この方法を初心者におすすめする理由は、第一に、当然ですが、ここで読んだものは自分の研究に直接役立ちます。研究を始めたてのころは色んなことに手を出す余裕もなく、研究のリズムも確立できていません。日課に論文読みを組み込むことで、確実に研究を進められるようになります。

第二に、専門外の論文を読むのは一筋縄ではいきません。難しすぎるとすぐ挫折してしまうため、比較的スムーズに読めるトピックからはじめるのをお勧めします。

第三に、上達のスピードが目に見えるほど早いことです。専門を絞ると論文のバリエーションはそこまで多くありません。特定の分野の論文を読むことに集中すれば、1 ヶ月から 3 ヶ月程度で主要なパターンをカバーすることができます。3 ヶ月あれば約 100 本ですから、小さい国際会議であればプロシーディングス全て、大きい国際会議であってもサブ分野の論文全て読みきることができます。これをこなすと、その分野のプロの最先端の知見に一気に迫ることができます。

この論文の選び方をした時に起こる重要な現象は「飽きる」ことです。これは一見悪いようですが非常に良い兆候です。この手法と似たようなものは前にも見たなとか、この著者はいつも同じようなパターンの論文を書くなといったようなことが、意識的、あるいは感覚的に掴めるようになるというのは、その分野に精通した証拠に他なりません。こう来たらどうせ次はこう来るだろう、ほら当たった、というような予測ができるようにまでなれば、自分でその分野の論文が書けるようになります。次はこうなって、その次はこうなって…と逐次的に紡いでいけば論文ができあがります。(さながら言語モデルの next token prediction です。)

初心者のうちはひとつの分野に絞り、パターンが見えて飽きてくるまで続けたあと、すなわちひとつの分野に精通したあとに、他の分野に移ると良いでしょう。他の分野に移る際は、その集中した分野を軸足に隣接分野に視野を広げてもよいですし、全く違う分野に挑戦するのも良いかと思います。

完全にランダムに選ぶ

国際会議のプロシーディングスを完全にランダムに選ぶことも試しました。関連する国際会議 (僕の場合 NeurIPS, ICML, KDD など)のプロシーディングスから自動で一本ランダムで選び通知するスクリプトを作ったりもしました。これは前述の第一と第二の基準を完全に忠実に守ることになります。

完全にランダムに選ぶと、馴染みのある国際会議であってもこんな論文があったのか、こんな種類の研究があるのかと、初めのうちは驚くことになります。今までいかにバイアスを含んだ論文の選び方をしていたかを痛感します。この選び方は見識を広める上で非常に役に立ちます。

大きな欠点としては、専門外の論文は読みづらいので、時間も心理的な負担もかかることです。自分と宗教を異にするようなグループが書いたものは特に時間がかかりストレスも大きいです。日課は 1 日 1 本必ず読むと決めているので、そのような論文に当たった場合でも最後まで読み通しています。これを繰り返していると、守備範囲外の論文であってもある程度までは読めるようになってきます。

これはかなり力が付く読み方なのですが、なにぶん骨が折れるので、なかなか継続できません。スケジュールに余裕がある期間や、選び方のテーマを切り替えるタイミングなどで、短期的に差し挟んでたまに行うぐらいが丁度良いと思います。

被引用数の多い順に選ぶ(特におすすめ)

これは質の高い論文を安定して選べるのでおすすめです。

権威ある国際会議やジャーナルといえども、読むに値しないような論文にまみれています。

一方で、読む前に論文の価値を推定するのはとても難しい問題です。色々試行を錯誤した中で、最も簡単で効果のある指標は被引用数であるということに結論になりました。冒頭で述べた通り、簡単に選べるというのが重要であり、被引用数は簡単さと精度の良いトレードオフを達成します。

この選び方をより楽にするために https://psearch.joisino.net/ というツールも自分用に作りました。(最近はデータを更新していません。需要があればまた更新します。)

psearch.joisino.net

同様のツールを自分用に作りたい方は、Semantic Scholar が便利な API とデータを用意してくれているのでオススメです。

被引用数でソートをするには、全ての論文を用いる方法と、年や国際会議やジャーナルでフィルタした後にソートをする二通りが考えられます。

国際会議やジャーナルでフィルタリングするのは、簡単に関連論文をフィルタリングすることができ、かつ権威ある国際会議やジャーナルであれば良いクオリティフィルターにもなります。

最新の国際会議のみに限って被引用数でソートをすると不安定になることに注意は必要です。というのも、まだ十分な時間が経過していないために被引用数が安定せず、かつ過去にリジェクトされて再投稿されたものほど時間の利が働いて多くの引用が集まり、結果としてリジェクト経験論文ばかりが上位に来るようになるからです。そのような論文も、引用が集まっているからには基本的には良い論文なのですが、クセのあるものも多いので頭に留めておくと良いでしょう。

最もおすすめなのは年を限定することなく、特定の国際会議やキーワードの中で被引用数でソートするということです。こうすると自然と古典的な論文が上位に来ます。古典を読むことは中長期的に非常にみてとても力がつきます。また、やはり古典は古典となっているだけあって、読んでいて面白いものが多いです。ランダムな論文だと記述が完結しておらず、理解に苦しみ、イライラすることがありますが、古典ではそういうことはなく表現も上手なものが多いと感じます(あまりに古いとスタイルが違いすぎて読むのが大変になります。ここでいう古典は機械学習分野の場合、2000 - 2010 年くらいを指しています。)この点でも日課で読むには古典は適していると言えます。

トピックごとに重要な論文を読んでいく

一週間ごとにひとテーマを決めて、そのテーマに沿って論文を選ぶということをしていました。

具体的には、”causal inference week” や ”uncertainty week” や “prompt week” などと銘打って一週間連続で関連する論文を読みました。

一週間というのは、ちょうどその分野を概観するに足る長さで、かつ飽きが来ず、かつ多くのテーマを渡っていけるので、良い長さだと感じています。一週間でまだ物足りない場合や、途中で自分に合っていないと気づいた場合には、テーマごとに柔軟に長さを変更しました。

欠点は論文を選ぶのが難しいということです。システマティックにはなかなか選べず、ひとつ目の論文は Google Scholar などでそれなりに苦労して選び、その後、Connected Papers などで関連する文献を引用数の多い順に選んでいく戦略を取りました。ツールの力を借りたとはいえなかなか大変でした。また、テーマを毎週選ぶというのもなかなか大変でした。20 週くらいやりましたが、最後はテーマを無理やり捻り出す感じでした。

www.connectedpapers.com

この種の論文の選び方は、コンスタントに読み進める日課よりも、興味の持ったタイミングでまとまったサーベイとしてやっていく方が向いているように思います。日課でやるとすれば、軽く興味を持ったトピックとその論文をどこかにメモしておき、たまに引っ張り出して読んでいく方式が良いでしょう。

研究者ごとに論文を読んでいく

上記のトピックごとと同じように、一週間ごとに一人研究者を決めて、その人の書いた代表的な論文を順に読んでいきました。

具体的には僕の場合、Christos Faloutsos, Aleksander Mądry, Charles Elkan などを選びました。(彼らの論文はとても面白いものばかりなのでおすすめです)。

一週間その人の論文を読み続けると、その人の癖や、どういう方向性で研究を進めているかといったことが分かります。これは自分で研究する時の引き出しの一つとして活用することができるので、研究者としての能力を上げるにはとても良い方法です。

Google Scholar Citations を使えば、その人の引用数の多い順に簡単に論文を選ぶことができるのも利点です。

初心者のうちは、良い研究者を選ぶのはなかなか難しいかもしれません。Google Scholar Citations を使えば分野ごとに有名な研究者を選ぶことができます e.g., https://scholar.google.com/citations?view_op=search_authors&hl=ja&mauthors=label:machine_learning 慣れてくると、よく見かける研究者や自分の嗜好にあう研究者で絞っていくとよいでしょう。

📝 論文メモの書き方

論文メモは力を入れて書いています。時には論文を読むのと同等かそれ以上の時間をかけて論文メモを書いています。読んだことを忘れてしまっては意味がないので、このステップは非常に重要です。

メモを書くうえで重要なことは、第一には、問題設定をできるだけ詳細に書くことです。手法は細かいところを忘れても自分で補完できますが、問題設定はそうはいきません。問題設定はメモの中で一番気を使って書いている箇所です。自分の研究をしている時や査読をしているときに、あの既存研究はこの設定に使えるかな、ということが確認したくなることがよくあります。これをチェックするために、条件はできるだけ細かいところまで書いておくべきです。教師データは必要か?必要ならばどういう形式か?出力はどういう形式で得られるのか、分類だけか、回帰問題にも使えるのかなどです。これらをちゃんとメモしておくと、原論文を見返さずともメモを見るだけでわかるようになり、あとあと役に立ちます。

第二に、どういう内容のものであったかを簡単に確認できるようにするということは重要です。後でこんな論文があったなとぼんやり思い出したとき、当該論文を探し出すのは時間がかかります。すぐに正誤をチェックできると便利です。僕はメモの一行目に一行で完結なまとめを書いて、それを読めば迅速なチェックができるようにしています(記事冒頭の論文メモのサンプルを参照)。

第三に、検索フレンドリーにすることです。「提案手法は」と書くのではなく、少なくとも一箇所では提案手法名を書き下して、手法名および手法の略称でテキスト検索したときに引っかかるようにするべきです。また、実験で使われているデータセット名は書き下すよう心がけています。これは、サーベイ中や査読中に、論文に登場するデータセット名で検索することで直接比較できる過去の論文をすぐに引っ張ってこれるようにするためです。

第四に、メモを読み返すとそこから論文の概要を自力で復元できる程度の粒度は保つことです。上述の第二と第三の点で検索に引っかかるようにして、所望の論文メモを見つけたあと、原論文に戻らずともメモだけで目的が完遂できると作業効率がとても上がります。メモを読むことになるのは大抵数ヶ月後や数年後です。あまりに簡潔ではメモを読んでも全く意味が取れません。数年経つと別の研究トピックに移っていることもあり、その時には当時の細かい感覚は忘れてしまうので、必要と思う以上に緻密に書くことが肝要です。

上記の要件を満たすような、できるだけ簡潔でかつ分かりやすく技術は、日課として論文メモを書いていると自然と上達していきます。ライティング技術の向上という点でも論文読みの日課は有用だと感じています。

以上のことができていると、ミーティング中に人から文献を訪ねられた場合であったり、考察中にこんな論文があったなと思い出したときにただちに検索し確認できるため、とても便利です。

最後に、もう一つ重要なことは、論文の感想をメモに含めていることです。メモのメインの部分ではできるだけ論文の主張を忠実に記述し、感想のところで面白いと感じた箇所や、論文の主張に対する反対意見、あるいは評価において怪しいと思った点を自分なりに述べることにしています。この感想部分は長文になることもしばしばあります。この感想は後で読み返した時に論文を読んだ感覚を呼び起こすのに役に立ちます。しかしそれ以上に、この感想パートがある故に論文を読む行為が受け身ではなく主体的かつ創造的な営みとなることが重要であると考えています。既存の研究に賛成であるとか反対であると述べるのは研究における最も基礎的な行為です。完璧な論文などないので、何かしら欠点は見つかるはずです。そのような箇所を言語化することで新しい研究のアイデアが見つかることもあります。あるいは素直に面白いと思った箇所は、自分の研究や論文に取り入れられるようストックしておくと後々役に立つでしょう。

メモを取るためのツールは好みで良いと思います。僕はひとつの Markdown ファイルに全てのメモをまとめています。このファイルはテキストだけで 3.8 MB もあります。検索するのが大変になってきたので自分用にこのメモ専用の簡単な検索ツールを作ったりもしました。流石にこのやり方は万人向けではないので、Notion を使ったり Google Docs を使ったり、ブログ記事にまとめたり、各々の好みでツールを選ぶのが良いかと思います。

⏳ 時間を計測する

日課をこなすときには毎回時間を計っています。

具体的には冒頭で述べた三つのフェーズ、すなわち内容を把握するフェーズ、周辺情報を調べるフェーズ、論文メモを書くフェーズ、それぞれの時間をストップウォッチで計っています。

これを行う理由の第一は、ダラダラするのを防ぐためです。どんどん数字が進んでいくので、気が散ってぼーっとしてしまったときにすぐに作業に戻ることができます。また、明確に数字として出てくるので、集中力が足りなかったといった反省が終わった直後にすぐにフィードバックできます。

第二には論文を読んだり、ちょっとした研究メモを書いたり、査読する際にかかる時間の感覚が非常に正確になることです。20 分かければこの程度の解像度で理解ができる、40 分かければこの程度というようことがあらかじめ見積もれるようになります。この感覚は、締め切り直前に追加で緊急でサーベイしないといけない際や、査読業務のスケジュールを確定させる際に非常に役立ちます。また、作業の気が進まない大きな要因は不確実性です。どれだけ時間がかかるか分からないという状態よりも、30 分でこれが出来るなというのがあらかじめ分かっている状態の方が、査読やサーベイ作業を始める時の心理的ハードルも下がり、研究がスムーズに進むようになります。

計ったタイムは以下のように Google スプレッドシートでまとめています。

計測時間のスプレッドシート

過去の統計と比較して自動で色を付けるようにすると、今日はメモに時間をかけすぎた、というようなフィードバックも分かりやすくできるのでおすすめです。

🤗 論文メモを公開する

書いた論文メモは毎日研究室 Slack のパブリックチャンネルに投稿しています。

投稿することで、他人に見られているという意識が働き、丁寧にメモを書くようになるほか、サボるのを防ぐことができます。

また、投稿する論文メモが元になってディスカッションがはじまることもあります。毎日研究の話題が投下されることで、研究室 Slack の賑やかしにも貢献していると思っています。

なぜ完全にオープンにしないのか、ですが、一つは歴史的な経緯、もう一つはあまり他人に見られると気兼ねなく書けなくなるということがあります。面白くない論文はちゃんと面白くないとメモに書いてあります。あまり辛辣なのは研究室 Slack に投稿するときにもいちいち削除しています。読んだ論文の共同研究者が身近にいたというようなことはよくあるので、これが原因でトラブルになるのは避けたいと考えています。

とはいえ、もっと広く公開すると喜んでくれる人もいるかと思うので、今後どのように公開していくかについては検討中です。

📜 表現集の作成

論文を読んでいて気に入ったフレーズがあればメモして表現集にまとめています。これは日課に限ったことではないですが、論文を読む上で取り入れるとよい習慣です。

僕は以下のように原文と自動翻訳した日本語を並べて列挙しています。

  • We hope that this benchmark is useful to the community and inspires more research on uncertainty under dataset shift (Can You Trust Your Model's Uncertainty? Evaluating Predictive Uncertainty Under Dataset Shift) このベンチマークがコミュニティにとって有用であり、データセットシフトの下での不確実性に関するより多くの研究を刺激することを期待しています。
  • View synthesis results are best viewed as videos, so we urge readers to view our supplementary video for convincing comparisons. (NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis) ビューイング合成の結果は、動画で見るのが一番わかりやすいので、読者の皆様にはぜひ補足動画をご覧いただき、納得のいく比較をしていただきたいと思います。
  • While we could not solve this challenge sufficiently within the scope of this work, the fact that this is reproducible even in the minimalistic variant proves that this a fundamental problem shared by all offline training settings, and is a critical problem for the community to study in the future. (A Minimalist Approach to Offline Reinforcement Learning) 今回の作業範囲では、この課題を十分に解決することはできませんでしたが、ミニマムなバリエーションでも再現可能であるという事実は、これがすべてのオフライントレーニング設定に共通する基本的な問題であることを証明しており、コミュニティが今後研究すべき重要な問題であると考えています。

日本語を付けているのは、後で適切なフレーズを探すときに目で追いやすいからです。自動翻訳を使っているのは作業コストとの兼ね合いです。

これらのフレーズは、英語の構文的な勉強はもちろんですが、研究や論文執筆における視点や構成方法を取り入れることを大事な目標としてまとめています。研究に欠点がある場合にもそういう方向でまとめるとポジティブな印象になるのか、とか、アピールポイントはこうするとより確実に強く伝えられるのか、ということが分かる表現をできるだけストックしています。構文だけであれば『アカデミック・フレーズバンク』など表現がまとまった成書があります。しかし、より抽象的な視点や構成方法を多く学ぶには、やはり論文を自分で読む中で、文脈を理解しながら自分で採取していくしかないように思います。

www.phrasebank.manchester.ac.uk

取り入れたフレーズは後に自分で論文を書く時に使います。もちろんそのままコピペするのはダメですが、構文や視点を取り入れるくらいは良いでしょう。

🔨 他のツールについて

最近は言語モデルや要約ツールの性能が上がり、これらを論文読みに取り入れている人も多いかと思います。現状では、僕はそれらのツールは日課の論文読みには取り入れていません。

理由の第一は、慣れると普通に読んだ方が早いからです。そもそも、論文にはアブストラクトという、著者自身が書いた最高の要約が付いています。また、品質の高い論文であれば、図表の位置や説明の順序も考え抜かれています。特に、権威のある国際会議に通っているような論文では、論文の構成について非常にこだわっているものが多いです。論文の流れに慣れてくれば、流れに沿って拾い読みする方が早く正確に読めます。半年も日課を続ければ読み方はかなりの程度身につきます。

第二に、本文を読むことは自分で論文を書く際に参考になります。上述のように表現集を作ることもできます。また、自分で論文を書く際には理由の第一で述べた「論文の流れ」というのを習得して自分でも構成できるようになることが求められます。品質の高い論文を原文のまま多く読むことは論文執筆の上達の近道です。

とはいえ、ツールも日進月歩なので、自分の肌に合うものが見つかれば、今後はそのようなツールを取り入れていくことになると思います。現状、Readable が上記の点と便利さの良い妥協点になっています。

⌚️ いつ読むべきか

論文を読むタイミングは朝イチに固定しています。日課をはじめたてのころは他の時間帯も試しましたが朝イチが良いという結論に到達しました。

いったん別の作業をはじめてしまうと、そちらに集中してしまったり、なかなかキリの良いタイミングが訪れずに、日課をこなすタイミングを失ってしまいます。一度タイミングを逃すと習慣が途切れてしまいます。長く続けるには途切れうる要因を極力排除するべきです。朝イチや昼休憩の直後など、強制的に訪れるキリの良いタイミングを活用するのが継続のコツです。

なぜ昼ではなく朝なのかついては、第一には昼はミーティングが入り阻害される場合が多いこと、第二には論文読みは大きな集中力が必要なので朝の方が捗ること、第三には僕が早起きであることが理由です。

いずれにしても、阻害されることなく毎日固定した時間帯に行えることが重要です。時間帯については各々の生活リズムに合わせて選ぶのが良いかと思います。

😣 日課の欠点

大変です。骨が折れます。時間も大きく削られます。

特に、論文締め切り前などバタバタしている期間は継続するのはかなりの意志力を要求されます。

それでも、やる価値は大いにあります。論文読みの日課のおかげで幅広い分野の知識を身につけることができました。論文の読み方や書き方も以前に比べてはるかに上達しました。

三年間なんとかやってこれたのは、これまで述べてきた、論文選びの作業コストを下げるであったり、メモを公開することで追い込むであったり、読むスケジュールを固定化するといった工夫があってこそです。また、少しでも日課の負荷を下げるために開発した Readable をはじめとするツールも役立ちました。これらの合わせ技でなんとか途切れずに今まで続けられています。

忙しい時期には論文の選び方を工夫して、簡単めな論文を選ぶ、たとえば理論系ではなく実験系の論文を重点的に選ぶ、といったことも有効かと思います。

大変だからといって、二日に一回にするとか、週一回にするというのはあまりおすすめしません。毎日やるというリズムは強力なので、これを破ると長続きしません。また、特に機械学習系ではスピード感が大事なので、一日一本、三ヶ月で百本というスピードで論文に触れられるのは研究をする上で大きな強みになります。

大変な場合は、アブストラクトだけ読むとか、イントロまで読むとか、目標分量を下げるのが良いと思います。調子づいてきたら分量を上げていけばよいでしょう。

まとめ

論文読みの日課は大変ですが、やる価値はあります。三年やってもやり切ったという感じではなく、まだまだ読むべき論文は多いなと感じています。これからもこの日課は続けていくつもりです。

以上で述べたことが唯一の方法ではありません。あくまでも一例として捉え、部分的にでも取り入れて、皆さんの読み方のスタイル作りに役立てて貰えればと思います。

連絡先: @joisino_ / https://joisino.net