ジョイジョイジョイ

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

モデルパラメータの算術

深層モデルのパラメータを一列に並べてベクトルにします。このベクトルは大規模なモデルであれば何十億次元にもなります。一見、意味のない数値の羅列のようですが、このベクトルはベクトルとして深い意味があることが分かってきています。例えば、 \theta_1 \theta_2 を異なるパラメータベクトルとすると、

 \displaystyle \theta_3 = \frac{\theta_1 + \theta_2}{2}
 \displaystyle \theta_4 = 2 \theta_1 - \theta_2
をパラメータとして持つモデルはちゃんと機能します。本稿では、このようなモデルパラメータの算術を用いた手法とその背後にある理論について解説します。

モデルスープ

モデルスープ [Wortsman+ ICML 2022] は複数のモデルパラメータを平均することで性能を上げる手法です。事前学習モデル  \theta_0 \in \mathbb{R}^d からはじめて、様々なハイパーパラメータで訓練した結果のパラメータを  \theta_1, \theta_2, \ldots, \theta_n \in \mathbb{R}^d とします。これらを平均したベクトル

 \displaystyle \theta_{\text{unif}} = \frac{\theta_1 + \theta_2 + \ldots + \theta_n}{n}
は個々のモデルよりも性能が高く、分布のシフトにも頑健であることが分かっています。このように、様々なハイパーパラメータで訓練した結果のパラメータを平均して混ぜ合わせることをモデルスープといいます。

モデルスープの性能比較 [Wortsman+ ICML 2022]。横軸:通常の画像分類性能。縦軸:分布シフト下での画像分類性能。モデルスープは個々のモデルよりも高い性能を達成している。

典型的な訓練の手順では、様々なハイパーパラメータで訓練したあと、検証用データで性能を評価し、最も良かったモデルを残しそれ以外は破棄します。モデルスープは本来破棄していたはずのモデルも材料として活用して性能を上げられることが利点です。追加の訓練時間も必要ありません。また、検証用データセットが必要無い点も魅力的です。

モデルスープはアンサンブルと似ていますが、推論時間とデプロイの単純さの点で大きな違いがあります。 n 個のモデルをアンサンブルすると、推論時間は  n 倍になりますが、モデルスープでは通常のモデルと推論時間は変わりません。また、実環境にデプロイする際、アンサンブルでは複数のモデルを管理する点で煩雑になりますが、モデルスープでは単一のモデルに統合されているため、通常のモデルと同じようにデプロイできます。

上に述べた方法は一様スープと呼ばれる最も簡単なバージョンです。貪欲スープと呼ばれるバージョンでは、検証用データセットを用いて、モデルを検証性能の良い順番に並べ、一つずつスープ(集合)に追加していきます。最初は最も検証性能の良いモデルだけがスープに入っています。ここに検証性能の良い順にモデルを入れ、スープ内のパラメータの平均を取ったモデルの検証精度が上がるならば追加を正式に決定し、下がるならば追加するのを取りやめます。全てのモデルの処理が終わったあとの、スープ内のパラメータの平均を取ったものが最終的なモデルです。貪欲スープは検証用データが必要で、手順も少し複雑になりますが、一様スープよりも性能が良いことが確認されています。

モデルスープに加えられるモデルは全て同じ事前学習モデルからファインチューニングしたものであることに注意してください。一般に、異なるランダム初期化パラメータから始めて訓練したモデルどうしの平均を取っても良いモデルにはなりません。これは、直観的には、異なるランダム初期化パラメータではモードの整合性が無いため、単純に平均するとめちゃくちゃなことになるからです。具体的には、ニューラルネットワークの順列不変性が重要な役割を果たすことが知られています [Entezari+ ICLR 2022]。ニューラルネットワークニューロンは適当に並び替えてもモデルの関数としての振る舞いは変化しません(下図)。しかし、この並べ替えによりパラメータは次元が入れ替わり、ベクトルとしては全く別のものになります。異なるランダム初期化パラメータから始めたモデルではこの並び替え方が合っていないので、別の次元を別の次元と平均することになり、結果がめちゃくちゃになります。Git Re-Basin [Ainsworth+ ICLR 2023] という手法は、ニューロンのマッチング問題を解くことで、並び替え方が合っていないモデルどうしを整列します。異なるランダム初期化パラメータから始めたモデルでであっても、Git Re-Basin を行ってから平均を取ると、良いモデルになることが確認されています。

順列不変性の分かりやすい図 [Chijiwa 2023]。ニューロンを入れ替え、伴って接続する重みの次元を入れ替えると、パラメータベクトルしては全く異なるが関数としては同じモデルが得られる。

確率的重み平均 (stochastic weight averaging; SWA) [Izmailov+ UAI 2018] もモデルスープと同様に、パラメータの平均を取ることで性能を上げる手法です。確率的重み平均では、学習後にある程度大きな学習率で SGD を走らせ、モデルパラメータの列  \theta_1, \theta_2, \ldots, \theta_n \in \mathbb{R}^d を得て、これらを平均します。1 回の学習パスで作れるお手軽なモデルスープと見なすこともできます。

モデルスープはアンサンブルの近似と見なすことも可能です。 f(\cdot; \theta) をモデルの表現する関数とします。アンサンブルは

 \displaystyle f_{\text{ens}}(x) = \frac{1}{n} \sum_{i = 1}^n f(x; \theta_i)
というように、関数空間で平均を取ります。ここで、 f \theta = \theta_{\text{unif}} の周りで  \theta についてテイラー展開すると、
 \displaystyle f(x; \theta_i) = f(x; \theta_{\text{unif}}) + (\theta_i - \theta_{\text{unif}})^\top \nabla_{\theta} f(x; \theta_{\text{unif}}) + O(\|\theta_i - \theta_{\text{unif}}\|^2)
となります。これをアンサンブルの式に代入すると、
 \displaystyle f_{\text{ens}}(x) - f(x; \theta_{\text{unif}}) = \frac{1}{n} \sum_{i = 1}^n (\theta_i - \theta_{\text{unif}})^\top \nabla_{\theta} f(x; \theta_{\text{unif}}) + O(\|(\theta_i - \theta_{\text{unif}})\|^2)
となります。ここで、 \theta_{\text{unif}} の定義より
 \displaystyle \frac{1}{n} \sum_{i = 1}^n (\theta_i - \theta_{\text{unif}}) = 0
に注意すると、モデルスープとアンサンブルの差は
 \displaystyle f_{\text{ens}}(x) - f(x; \theta_{\text{unif}}) = \frac{1}{n} \sum_{i = 1}^n O(\|(\theta_i - \theta_{\text{unif}})\|^2)
となります。すなわち、モデルスープとアンサンブルの差は二次以下となります。事前学習モデルからファインチューニングした場合、パラメータの変化量は小さく、 \|(\theta_i - \theta_{\text{unif}})\| も小さく、一様モデルスープとアンサンブルは関数としても近いと考えられます。前述のように、アンサンブルでは推論の計算時間が  n 倍になり、デプロイも煩雑になるのに対し、一様モデルスープは同等の効果を単一のモデルで達成することができます。

タスクベクトル

タスクベクトル [Ilharco+ ICLR 2023] は、タスクの学習を表すベクトルです。タスクの学習や忘却 (unlearning) をタスクベクトルの算術により実現できます。

タスクベクトルの概要 [Ilharco+ ICLR 2023]。タスクベクトルの加算・減算により、そのタスクを学習・忘却することができる。

事前学習モデル  \theta_0 \in \mathbb{R}^d からはじめて、タスク A のデータセットでファインチューニングした結果を  \theta_1 としたとき、 \tau_A = \theta_1 - \theta_0 をタスク A のタスクベクトルといいます。

タスクベクトルの算術により学習や忘却が実現できることが知られています。例えば、パラメータ  \theta_0 + \tau_A + \tau_B が表すモデルは、タスク A と B の両方の性能が高くなります。また、事前学習モデルを言語モデル、タスク C を悪口をいうタスクとし、悪口から構成されるテキストコーパスで学習をしてタスクベクトル  \tau_C を得たとき、パラメータ  \theta_0 - \tau_C が表す言語モデルは悪口を言わないモデルになります。

また、面白いことに、単語ベクトルと同じようにタスクベクトルもタスクの類推処理ができます。単語ベクトルでは、king - man + woman ≈ queen となることが知られていますが、これと同様のことがタスクベクトルでもできるのです。例えば、タスク A を Amazon レビューの言語モデリング、タスク B を Yelp レビューの言語モデリング、タスク C を Amazon の感情分析とすると、パラメータ  \theta_0 + \tau_C + (\tau_B - \tau_A) が表すモデルは Yelp レビューの感情分析で良い性能を達成します。他にも、タスク A を犬の写真データ、タスク B をライオンの写真データ、タスク C を犬のイラストデータとすると、パラメータ  \theta_0 + \tau_C + (\tau_B - \tau_A) が表すモデルはライオンのイラストを正しく分類できます。このように、所望のタスクのデータを全く、あるいは少量しか持ち合わせてない場合にも、異なるドメインのデータにより構成したタスクベクトルの演算により、所望のタスクを解けるようになるのです。

モデルパラメータとニューラルタンジェントカーネル

このようなモデルパラメータの算術はニューラルタンジェントカーネル (Neural Tangent Kernel; NTK) を考えると見通しが良くなります [Ortiz-Jimenez+ NeurIPS 2023]。

事前学習モデルのパラメータを  \theta_0 \in \mathbb{R}^d としたとき、このモデルで定義されるニューラルンタンジェントカーネル  K とは、

\begin{align}K(x, x') &\stackrel{\text{def}}{=} \phi(x)^\top \phi(x') \\ \phi(x) &\stackrel{\text{def}}{=} \nabla_{\theta} f(x; \theta) \in \mathbb{R}^d \end{align}
のことです。これは、 \phi(x) を特徴ベクトルとし、内積により類似度を測定していると解釈できます。ニューラルンタンジェントカーネルが大きい  x, x' は似ていると見なします。(なお、タンジェント (tangent) とは接線・接平面のことです。勾配  \phi(x) = \nabla_{\theta} f(x; \theta)接平面を表します。)

確率的勾配降下法 (SGD) によりファインチューニングを行い、

 \displaystyle \theta_{i + 1} = \theta_i + \alpha_i \nabla_{\theta} f(x_i; \theta_i)
と更新していきます。ここで、 \alpha_i \in \mathbb{R} は関数出力についての損失の勾配  \frac{\partial L}{\partial f} と学習率の積です(一般性を失うことなく  f の出力は一次元であると仮定しています。)学習率は小さい正の値であり、  \frac{\partial L}{\partial f} の正負は損失関数によって異なります。その訓練サンプルにとって、出力を大きくするべきであれば  \alpha_i は正の値を取り、出力を小さくするべきであれば  \alpha_i は負の値を取ります。ファインチューニングによりパラメータ  \theta_n が得られたとします。

訓練の過程であまりパラメータが動かなかったとし、 \theta = \theta_0 の周りの  \theta についてのテイラー展開により一時近似すると、パラメータ  \theta_n が表す関数は

\begin{align} f(x; \theta_n) &\approx f(x; \theta_0) + (\theta_n - \theta_0)^\top \nabla_\theta f(x; \theta_0) \\ &= f(x; \theta_0) + (\theta_n - \theta_0)^\top \phi(x) \end{align}
と表されます。つまり、事前学習時からの差は、 \phi(x) を特徴抽出器とする線形モデルであると見なすことができます。

また、モデルパラメータ更新の履歴を展開すると、

\begin{align} f(x; \theta_n) &\approx f(x; \theta_0) + (\theta_n - \theta_0)^\top \nabla_\theta f(x; \theta_0) \\ &= f(x; \theta_0) + (\theta_n - \theta_0)^\top \phi(x) \\ &= f(x; \theta_0) + \left(\sum_{i = 0}^{n - 1} \theta_{i + 1} - \theta_i \right)^\top \phi(x) \\ &= f(x; \theta_0) + \left(\sum_{i = 0}^{n - 1} \alpha_i \nabla_{\theta} f(x_i; \theta_i) \right)^\top \phi(x) \\ &\stackrel{\text{(a)}}{\approx} f(x; \theta_0) + \left(\sum_{i = 0}^{n - 1} \alpha_i \phi(x_i) \right)^\top \phi(x) \\ &= f(x; \theta_0) + \sum_{i = 0}^{n - 1} \alpha_i K(x_i, x) \end{align}
となります。ここで、(a) では  f(x_i; \theta_i) \approx  f(x_i; \theta_0) と近似しました。どの訓練データ  x_i とも似ていないテストデータについては、二項目のカーネルの値がゼロになるので、事前学習モデルの出力と等しくなります。ある訓練データ  x_i と似ている場合は、 (\theta_{i + 1} - \theta_i)^\top \phi(x) \approx \alpha_i K(x_i, x) の項が非ゼロとなり、事前学習モデルにその訓練データの学習分が加わったものが出力となります。複数の訓練データと似ている場合にはそれらの学習分すべてが加わることになります。その訓練サンプルにとって、出力を大きくするべきであれば  \alpha_i は正の値を取り、出力を小さくするべきであれば  \alpha_i は負の値を取ることを思い起こしてください。似ている訓練サンプル  x_i にとって出力を大きくするべきであれば  \alpha_i K(x_i, x) は正であり、出力を小さくするべきであれば  \alpha_i K(x_i, x) は負となり、これらの影響を累積したものがファインチューニングモデルの出力になります。

特定のテストサンプル  x についての議論ではなく、関数

\begin{align} f_{\text{diff}}(x) \stackrel{\text{def}}{=} \sum_{i = 0}^{n - 1} \alpha_i K(x_i, x) \end{align}
をパルツェン窓による関数表現だと見なすとより分かりやすくなります。訓練データは自身の周囲に  K(x_i, x) というパルツェン窓を通して影響を及ぼします。

パルツェン窓(この図は正のみであるが、関数を小さくするべきときには  \alpha_i は負の値もとる。)

ここまでくると、(1) 訓練データ、(2) モデルパラメータ、(3) モデルが表す関数、の関係が明瞭になります。訓練データは  (\theta_{i + 1} - \theta_i) \approx \alpha_i \phi(x_i) という項を通じて、モデルパラメータに影響を与えます。これは、関数値を変化させるべき量に応じて、訓練パラメータにそのサンプルのニューラルタンジェントカーネル特徴量  \phi(x_i) を足し合わせることに対応しています。また、これはモデルが表す関数という観点では、カーネル \alpha_i \phi(x_i)^\top \phi(x) = \alpha_i K(x_i, x) に応じて値を上下させていることに対応しています。

タスク A の訓練データ  D_A で訓練したモデルパラメータ  \theta_A には、 D_A 中の訓練データのニューラルタンジェントカーネル特徴量が加えられています。タスク A のタスクベクトルは、ニューラルタンジェントカーネル特徴量の重み付き和になります。

タスクベクトルの和の直感的な説明 [Ortiz-Jimenez+ NeurIPS 2023]。ファインチューニングをすることは、訓練データ集合によるパルツェン窓を追加していると解釈できる。タスクどうしに関連がない場合には、タスクベクトルを足し引きすることで、関数空間内でそれぞれ独立にタスクの効果を追加削除できる。

タスク A のタスクベクトルとタスク B のタスクベクトルの和は、タスク A のデータセットとタスク B のデータセットのニューラルタンジェントカーネル特徴量の和集合が加えられていることになります。これが、タスクベクトルの和により学習が起こる直観的な説明になります。

また、モデルスープについても、スープにニューラルタンジェントカーネル特徴量を追加していっていると見なすことができます。訓練データは同じなので、これでは恩恵は説明しきれていませんが、直観的にはハイパーパラメータ毎に少し異なる角度で特徴量が足し合わされるためにロバストに類似度を測れるようになっていると考えることができます。

おわりに

深層モデルのパラメータは意味のない数値の羅列のように考えがちですが、よく分析すると理論的にも実験的にも深い意味があるというのはとても面白いと思いました。ここ 1~2 年で急速に発展が進んだトピックであり、今後も面白い研究結果がどんどん出てきそうに思います。

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

『Human-in-the-Loop 機械学習』

共立出版さまより『Human-in-the-Loop 機械学習』をご恵贈いただきました。一通り読み終えたので感想を共有します。

映り込みが激しくて写真を撮るのが難しいことで有名な表紙

本書は機械学習モデルを訓練するためのデータを人間がどのように用意するかという問題を扱っています。本書の前半では能動学習というラベル付けデータの選び方の技法が、本書の後半では人間が付けたラベルの管理方法やラベル付けのための適切なインターフェースが紹介されています。

機械学習におけるデータをいかに作るかということは私自身とても注目している領域です。『Active Learning from the Web(能動学習を使ってウェブから機械学習データを収集する)』という論文を書いたこともありますし、PDF 翻訳サービスの Readable では能動学習に基づいたアノテーションを実際に行っています。そのため本書は非常に興味を持って読ませていただきました。

いかにしてデータを作るかということは機械学習を扱っている方は皆さん重要に感じているトピックかと思います。本書では

良いデータと簡単なアルゴリズムで最高の結果が得られることがよくあるのに対し、悪いデータを使って構築された最高のアルゴリズムが良い結果を生むことはほとんどありません。

と述べられていますが、これは私も全面的に同意します。良いデータを集めることが機械学習プロジェクトの成否を左右するといっても過言ではありません。

しかし、このトピックについてのノウハウは産業界・学術界の両方においてほとんど公開されてきませんでした。本書でも著者は

機械学習の講義は、どのコンピュータサイエンス学科にもありますが、学習データ作成の講義はほとんど存在しません。

と述べています。私自身、研究をしていてもデータの作り方についての論文は極端に少ないと感じています。というのも、(私を含めて)技術オタクはアルゴリズムの改善や数理的な側面に強く興奮し、データ作成仕事になると泥臭く感じて途端に興味を失うという性向が一因かと思います。本当はアルゴリズムよりもデータの方が大事にもかかわらず。

本書はこの問題に正面から取り組んでいます。機械学習データの作成方法をまとまった形で提供している資料はたいへん貴重です。B5 版(よくある学術書より二回り大きい)428 ページと大ボリュームです。また、人間が介在すると数理的にはきれいな議論にはなりづらいという問題点については、著者の豊富な経験に基づき、完璧でないかもしれないが現実的に役に立つような解決策や議論を提供するという方式を取っています。まさに今から機械学習データを用意しようと考えている方にとっては大いに役立つ本だと思います。

一方で、研究者としては賛否が分かれる点も多いように感じました。明確なメリット(賛)は論文を読むだけでは触れられない新しいトピックに触れられることです。ここから新しい研究のアイデアに繋がることもありそうです。デメリット(否)は標準的な研究文献の流れは汲んでいないことです。著者オリジナルの内容がかなり多く、今から能動学習の研究をする人が文献調査のためにこの本を読むと偏った認識を持つことになりそうです。章末の文献案内は品質が高いので、研究目的の方は文献案内に基づいて原論文に読む方が有益かもしれません。本書は学術書というよりは技術書や実用に重きを置いた本であると認識して読むと間違いが少ないと思います。

以降では前後半の内容にそれぞれ触れたのち、本書の特徴について感じたことを良い面も悪い面も詳しく述べていきます。

🤸‍♀️能動学習パート(前半部)

能動学習とは、数ある候補の中からどのデータにラベルを付けるかを考えながら、反復的にラベルを付けることで高い精度の機械学習モデルの得る手法です。

能動学習の根拠は「すべてのデータは同じ価値ではない (Not All Data Is Created Equal)」と説明されることがあります。そもそも有用なデータと有用でないデータがあることもあります。また、ラベル付きデータが増えていくにつれて新たにラベルを付ける効果は逓減しますが、手持ちのラベルによって、あまり価値が逓減していないデータとほとんど情報がないデータに分かれることもあります。

例えば将来の大気中のCO2濃度を予測する問題を考えてみましょう。日付 x を受け取り、CO2濃度 y を予測する問題です。訓練データとして

  • 1987年7月28日は346.0ppm
  • 1987年7月23日は344.2ppm
  • 1987年7月30日は349.6ppm
  • 1987年8月1日は351.6ppm
  • 1987年8月3日は345.6ppm

というものが与えられると、1987 年の話はもういいよとなるかと思います。一方、

  • 1990年1月1日は360.1ppm
  • 2000年1月1日は374.0ppm
  • 2010年1月1日は394.4ppm
  • 2020年1月1日は419.0ppm

というデータが与えられると、増加トレンドがあることが分かり、ある程度の精度で将来のCO2濃度を予測できるようになるかと思います。このように、どの日付 x にラベルを付けるか(濃度を測定するか)ということは構築できる予測モデルの精度に大きくかかわってきます。効果的な選定方法を自動で選ぶのが能動学習の技術です。

本書の能動学習パートの展開は比較的とオーソドックスな展開のように感じました。最小確信度サンプリングやアンサンブルベースの手法など、産業界でも学術界でも人気のある定番手法が一通り紹介されています。ただしオーソドックスな展開の中にも、本書の特徴、実用重視や著者の経験、が色濃くにじみ出ています。これらの点については後述します。

📝アノテーションパート(後半部)

後半部分では、アノテーション(ラベル付け)の方法について解説しています。第 7 章「アノテーターとの協同」や第 11 章「データアノテーションのためのインターフェース」など、学術界ではあまり扱われてこなかったトピックが詳しく説明されています。私は個人的には、この第 7 章と第 11 章が新鮮で、本書の中で最も面白いと感じました。

第 7.2.4 節「社内のアノテーション会議を定期的に行う」は特にお気に入りです。

この会議は、チームビルディングの練習にもなります。組織のあらゆる場面の人々を 1 つの部屋に集めれば、(長時間になる場合は食べ物や飲み物を用意して)非常に楽しく、社内の誰もが機械学習アプリーケーションに貢献できるようになるでしょう。このような会議を実施することで、全員が少なくとも 1 時間、データのアノテーションを行いながら、エッジケースに遭遇したらそれについて議論できます。私が働いてきた多くの会社では、「アノテーション・アワー」が多くの人が 1 週間のうちで一番好きな時間でした。

なんとも楽しそうではありませんか!また、実際に生産的でもありそうです。単純作業は他の人と一緒に行った方が生産的になるという社会的促進の理論 [Zajonc 1965] とも整合性があります。私も「アノテーション・アワー」を実施したいと思いました。

以下では私が感じたこの本の特徴を議論していきます。

👫人間が主人公

本書では単に人間が機械学習パイプラインに組み込まれているのではなく、人間が主人公として扱われています。

例えば、本書の第一章で反復プライミング効果が

アノテーターがソーシャルメディアの投稿に感情分析のラベルを付けているときに、連続して 99 件のネガティブな感情の投稿に遭遇すると、100 件目の投稿がポジティブでも、ネガティブとラベル付けしてしまう間違いが発生しやすくなります。[中略] ネガティブの連続で注意力が低下したことによる単純なミスも否定できません。

と導入され、以降もプライミング効果やアノテーターの自己効力感・当事者意識についてことあるごとに触れられています。研究でも [Eickhoff WSDM 2018, Draws+ HCOMP 2021] のように人間的な側面が扱われることがありますが、それはどちらかというと傍流だったのに対して、本書では積極的にこのような人間的な側面に触れて重要性を強調しています。

能動学習において、データ選定の基準を複数用いて合併することがしばしばあります。これは学術的には、バイアスを軽減する・頑健性を高める・汎化性能を高めるなどと説明することができ、私もこのように理解していました。しかし、この方法は様々なデータを見せることでアノテーターを飽きさせず、アノテーターの自己効力感を高め、またアノテーターが多様なデータを見て学習することでラベル付けの精度が上がりやすくなるという人間的な側面からのメリットもあります。私にはこのような考え方が抜け落ちていたのですが、本書を読めばこのような人間的な側面からも説明できるようになりました。

後半部のアノテーションパートでは特に人間に焦点を当て、報酬の決め方やアノテーターへの依頼方法や非協力的なアノテーターへの断り方など、人と人のコミュニケーションについて詳しく説明があります。「アノテーションプロジェクトの目的と、アノテーションにより生み出される価値をワーカーに共有するべきです。自分が価値を生み出していることを知れば、だれでも気分が良くなるものです。」など、それはそうだというようなことも、それはそうということだからこそ明示的に文書化していることがあまりないので、このような形でまとまっていることは有益だと感じました。

💪著者の豊富な経験

著者の Robert (Munro) Monarch は様々な機械学習データ作成プロジェクトを率いてきた経験があり、本書の内容は著者の経験に基づいて執筆されています。これには良い面と悪い面があるように感じました。

良い面はもちろん、豊富な経験に裏打ちされた実用的な技術が学べることです。過去に実際に行われたデータ作成プロジェクトの経験を基にしながらの説明は非常に説得力があります。また、学術界で行われている研究では、存在しない問題を作り上げて数理的に解いている場合が少なくありませんが、本書はそのようなことはなく、確実に存在する問題、というのも多くは著者が自ら経験した問題、のみを取り上げることで、確実に役に立つ議論になっていることが多いと感じました。

悪い面は著者の経験に全面的に依存している点です。このことは、議論のあとに根拠として引用を示すという伝統的な引用スタイルを本書は採用しておらず、巻末に参考文献がないことからも見て取れます(ただし各章末に文献案内はありこちらは品質が高いです。)このため、著者を信頼して主張を受け入れざるを得ず、議論の余地がある場合には疑ってかかる研究者からすると納得がしきれない議論も散見されました。

これらの特性は切っても切れないコインの裏表ではあります。前述のように、機械学習データ作成のノウハウは産業界・学術界の両方においてほとんど公開されておらず、伝統的な引用スタイルに従うことを要求するとそもそも本書はどのような人の手にかかっても書けなかったことと思います。どうしてもブートストラップせざるを得ないため、このようなスタイルになったのでしょう。

このことが強く表れているのは著者が考案した ATLAS という手法についてのくだり(第 5.4 節)です。

ATLAS は本書の執筆時点ではまだあまり検証されていないアルゴリズムですが、有用なので、ここで紹介します。私が ATLAS を考案したのは 2019 年末で [中略] ATLAS は私が実験してきたデータでは成功していますが、まだ産業界では広くは利用されていませんし、アカデミアでピアレビューを受けて検証もされていません。

ATLAS はちょっとした手法ではなく、本書でも繰り返し登場する重要な手法です。

自著で手法を自作して紹介できるというのはある意味とても「強い」です。 私も本を書いていて、本の流れ的に話したいことがあるのだけども世の中にはそういう研究が無いために泣く泣くストーリーを変更したり、歯切れの悪いような論調になることはあります。その穴を自分で埋めてしまえばまっすぐなストーリーできれいに話を進めることができる訳です。これはなかなかできることがでありません。それができているのは著者がこの分野について深い洞察を持っていることの証左でしょう。しかもこの ATLAS という手法はたしかに納得感があり、ちゃんとピアレビューを受けると採択されるだろうなという手法でもあります。また、このことはインターネットから寄せ集めた情報だけを書いた書籍ではないことも裏付けています。ATLAS を含め本書の多くの内容は他では得ることのできないオリジナリティでありそこが本書の大きな強みにもなっています。

🤫暗黙知への言及

前述の著者の経験にも関連しますが、本書では暗黙知を文書化しており非常に好ましく思いました。

このことは例えば第 5.1.1 節で紹介されている

この手法は、多くの企業が必要に迫られてそれぞれ独自に考案したものなので、広く普及しているにもかかわらず、一般的な名称はありません。

というくだりに見て取れます。この手法は論文ではあまり使われることがなく、論文を読んでいるだけでは気づけないため、このような形で文書化することは研究者にとっても大いに役立ちます。

また、

私の知る限り、能動学習に適用する場合の、各種のクラスタリングアルゴリズムの普遍的な優劣を深く研究した人はいません。多くの研究は特定のクラスタリングアルゴリズムに焦点を当てており、包括的な研究は存在しません。もしあなたがこのトピックに興味があるなら、素晴らしい研究テーマになるでしょう。

というように「存在しない研究」にも言及しています。「存在しない研究」は本当に無いのかを確認することが非常に難しいですし、これを明記することは勇気がいることだと思いますが、明記することで今後この分野で研究しようとしている人のためになるような形になっていることはとても良いと思いました。

🥳数理なし

本書は徹底的に数理的な内容が排除されています。そもそも数式がほとんどなく、たまに登場しても高校数学の基礎程度のものです。良い面は気楽に読み進められることです。悪い面は系統的な理解が難しいことです。

手法を説明するためにはある程度の数式を使わなければ難しいようにも思いますが、それを回避するために本書では具体例と一枚の図で手法を説明しています。これは斬新であり違和感があった部分でもありました。これはその手法がどういうものなのかをざっくり眺めるためには良い方法であり、一方で細かい動作については想像で補完するしかなく理解を深めるのは難しかったです。また、なぜその手法が良いのかということについても多くは言葉でのみ説明がされており、納得感が薄い箇所もありました。例えば本書でモデルベースの外れ値サンプリングと呼ばれている、活性化値が小さいものは不確実であるとする手法において、なぜ活性化値が小さいと不確実と言えるのかは(言いたいことは分からないでもないものの)深くは納得できませんでした。私としては全体的にもう少し数理を入れてくれてもよかったのになと感じました。

また、説明に数理が必要な手法は本書では扱われていません。例えば、GLAD [Whitehill+ NeurIPS 2009] など項目応答理論に基づいたアノテーションの集約方法やワーカー能力の推定方法は人間参加型の機械学習分野では盛んなトピックですが、本書では言及されていません。アノテーションの集約方法については、本書では単純な算術で行える範囲の手法が紹介されています。一定以上に数理的な手法は現場では必要なく、状況に合わせて基本的な解決策を選ぶ方が重要であるという信念に基づいているのだと感じました。実際、本書でも

実際に現場で能動学習システムを構築する開発者としては、先進的なアルゴリズムを試す前に、まずは簡単な解決策を試してみるべきです。

と述べられています。この方針は本書では一貫しており、そのような本であるということを念頭に置いて読み進めると間違いがないと思います。

数理的・学術的な側面にも興味がある場合は『ヒューマンコンピュテーションとクラウドソーシング (機械学習プロフェッショナルシリーズ)』が良い入門書になります(私の指導教員の著書です。)こちらは A5 版 127 ページとよりコンパクトなので、ざっとクラウドソーシングの概要に知るのにも便利です。かなりスタンスが異なるので、二冊の本を読み比べてみると面白く、多角的な視点が身につくと思います。

まとめ

今までほとんど無かった、機械学習用のデータを作成するための書籍です。実用性を強く重視しており、まさに今から機械学習データを用意しようと考えている方にとっては大いに役立つ本だと思います。研究者にとっては良い面と悪い面がありますが、新しいトピックに触れたい方や、逆にアカデミア流に凝り固まった考えをほぐしたい方にはぴったりだと思います。

Amazon: Human-in-the-Loop 機械学習

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

2023 まとめ

2023 も色々やりました。

↓去年 joisino.hatenablog.com

研究

今年はあまり論文を出版できませんでした。去年 10 本出版しましたとか言って調子に乗っていたのに……。優しい内臓先生の「私は過去の自分と比較するのが好きです。高確率で勝てるので。」という言葉が好きなのですが、私は負けました。悔しい。調子良かった年だけ貼るのも良くないのでちゃんと今年も貼ります(偉い)。

本の執筆

去年一年ずっと執筆していた『最適輸送の理論とアルゴリズム』が無事出版されました。買っていただいた皆様ありがとうございます。まだ買っていない方も、まだこの本を読む人生の楽しみがあるということでおめでとうございます。

また書きたいな〜と言っていましたが早速執筆の機会をいただき、同じ機械学習プロフェッショナルシリーズより『グラフニューラルネットワーク』を出させてもらうことになりました。お声がけいただいた編集さん、ありがとうございます。今年一年はずっとこの執筆に取り組んでいました。おかげで最高の本に仕上がったと確信しています。来年の上半期(分散高)に発売予定なのでぜひともよろしくお願いします。

執筆は好きなのでこれからも続けていきたいですね。出版の打診ってどういう仕組みで行われているのか分かっていないのですが、編集さんに菓子折りでも持っていけばいいんですかね?たぶん本が売れる方が重要な気がするので、興味を持った方は買っていただけるととても助かります。レビューも励みになります。よろしくお願いします。

Readable

去年リリースした PDF 翻訳のサービスの Readable についてたくさん活動しました。人工知能学会全国大会 (JSAI) のゴールドスポンサーになったりしました。

人工知能学会全国大会 (JSAI) のゴールドスポンサーになりました。
デカ企業いっしょにロゴが並ぶとテンションが上がります。

4 日間 2 人でスポンサーブースを切り盛りしていたのですがめちゃくちゃ大変でした泣。身の丈に合わない背伸びをすると苦労するらしいです。来年は澄ました顔でスポンサーできるように頑張ります。

12 月には新しくなったデザインをお披露目することもできました。ぜひ使ってみてくださいね。

readable.jp

趣味

プリティーシリーズ

新作発表されました。本当にありがとうございます……。12 月に発表されたのですが、このおかげでやや劣勢だった 2023 年が最高の一年になりました。来年が楽しみすぎます。それ以外にもライブや V ライブなど充実した一年でした。本稿を書くにあたって 2022 まとめ - ジョイジョイジョイを読み返したのですが、去年はこの欄から絶望が漂っていて笑わせてもらいました。新作が発表された今となっては余裕の表情です。本当にありがとうございました。

ひがしやしき

今年もずっとひがしやしきを聴いていました。

新アルバム NYAN NYAN INNOVATION (OPEN) もリリースされました。めでたい。kasunohone 好きだったのでアルバム入りして嬉しいです。新曲の中では鍋アニメヘイガイズウィーハブギフトフォーユーが好きです。

www.youtube.com

ライブは 2 回あったのですがどちらも行けず泣。来年はライブ参加したいです。

まんがタイムきらら

今年は『アイドルビーバック!』と『エイティエイトを2でわって』という好きな先生のカムバックがありました。アイビバは本稿執筆時点でめちゃくちゃ良い盛り上がりを見せております。これからの展開が楽しみです。一方、エイティエイトはけいおんなどの流れを汲む伝統的なきらら日常系の作品です。それでいてギャグがモダンなので新しい風を感じられます。最近はぼざろや星屑テレパスのように共感系の作品がトレンドですが、読者が観葉植物になるこういうタイプもやはり読みたくなります。古(いにしえ)のオタクの皆さんもおすすめです。

seiga.nicovideo.jp seiga.nicovideo.jp

既刊作品も『きもちわるいから君がすき』『ぬるめた』『ばっどがーる』など引き続き盛り上がりを見せております。本稿執筆時点での最新号はきもすきとぬるめたの展開が激しく目が離せませんね。きもすき、きもすぎ〜!!

seiga.nicovideo.jp seiga.nicovideo.jp

読書

今年も色々な本を読みました。今年も特に面白かったベストテンをいきなり発表します(時系列順)

IBIS で横井さんに『習得への情熱』を薦められて見事に刺さりました。時代は人力推薦システムです。習熟やそれに向けた心構えのような意識の深いところで起こる作用は言語化がとても難しいと思うのですが、それを明瞭に言い表していて驚きました。感覚的には認めていたものの意識の表層に上がってこなかった事柄がうまく表現されており読んでいて心地が良かったです。

去年はこの欄で「もっと勢力的に外へアウトプットしていきます」と意気込んでいましたが、果たせたかは際どいです……。 論文読みの日課について - ジョイジョイジョイ みたいにガッツリめのブログ記事を書いたり、パネルディスカッションに参加したり、アウトプットは心がけてはいましたが出力総量は客観的に見てあまり多くないですね泣。どこにも出さずにお蔵入りした技術メモなどは多くあるので、もっとアウトプットのハードルを下げて出力総量を増やしていきたいです。ということで、来年の抱負も「もっと勢力的にアウトプットする」にします(留年)。

おわりに

以上!

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

君たちはどう研究するか

IBIS 2023 のパネルディスカッション「君たちはどう研究するか」にて研究の取り組み方についてお話しました。この記事はそこでお話した内容を編集したものです。

🔍研究テーマの決め方について

僕は研究テーマ選びはあまり重要ではないと考えています。どういうテーマにめぐり合うかは運なので、そこで思いつめても仕方がありません。なので、僕は自分から積極的にテーマを探しにいくということはしていません。それよりも、テーマを決めたあとの掘り下げ方という自分でコントロールする部分に集中して研究に取り組んでいます。

その人の地力によって、テーマとして成立させられるストライクゾーンが決まってくると考えています。初心者うちは、王道のテーマで王道のストーリーでしか成立させられないので、このストライクゾーンが狭く、それ以外のテーマは良いテーマではないと判定して見逃してしまいます。しかし、王道のテーマは多くの人が考える混みあった領域なので、そこで勝負していくのは難しいです。なので、ストライクゾーンを広げて、他の人がそのテーマ大丈夫?と思うようなところや、あまりにもナンセンスなのでテーマとしてカウントせずに見逃してたようなところを、テーマとして成立させられるような実力を付けることがまずは大事です。それができるようになると、自然とオリジナリティーのある研究ができるようになっていきます。

以前の記事「論文読みの日課について」でも紹介したように、僕は毎朝論文を読む日課にしています。そこでは研究テーマそのものを見つけることは目標にしていません。それよりも、テーマの掘り下げ方の引き出しを増やすことを目指して論文を読んでいます。掘り下げ方のパターンがたくさん身につけば、どのようなテーマであれ、面白く仕上げることができるようになっていきます。

普段論文を読んだり、他の研究をしていると、何かしらは研究テーマを思いつくと思います。例えば、「生成モデルを使って研究テーマを自動生成する方法」とか、テーマ選びは重要であると思うのなら「研究テーマだけから被引用数を予測するモデルを作ってテーマによる違いを分析する」とか何でも良いです。些細なものであっても、それが自分の中から出てきたアイデアであれば大事にしてメモしておくべきです。今はそのテーマは成立しないと思ったとしても、将来的に実力が付いて成立させられるようになることもあります。また、寝かすことでアイデアが良くなることもあります。例えば今は生成モデルが過熱していますが、今生成モデルについて考えている些細なことを、数年後に生成モデルが落ち着いた頃に試すと意外と面白いとなることもあります。すでに誰かにやられているテーマかどうかも気にする必要もありません。掘り下げ方が身についてくると、同じテーマでも取り組み方次第で自分らしさを織り込んだ全く別の研究として仕上げることができるようになっていきます。

というわけで、テーマ選びは悩みすぎずに、何でも良いのでさっさとはじめて、さっさと終わらせるのが一番です。そうしているうちに実力もついてきて、ストライクゾーンが広がって、自然と自分らしい研究ができるようになってきます。

📆 研究プロジェクトの進め方

僕は一つの研究プロジェクトは一か月を目安に終わらせるようにしています。サーベイや予備実験などの準備に 1 週間、実際に論文を書いたり実験をするのに 2 週間、最後の調整に 1 週間ほど使っています。

僕は論文のプロジェクトは 1 枚の Google Docs で管理しています。準備の段階では思いついたフレーズやサーベイの内容をひたすらそこに書きつけていきます。ある程度素材が溜まってきたら、素材を論文の形に落とし込んでいきます。

以前の記事「論文の書き方」でも紹介したように、論文を書く際には、まずはいわゆる吐き出し稿 (vomit draft) を最速で仕上げることに注力します。この時には、英語の誤りは気にせず、適切な引用先が分からなければ空欄にしておきます。というのも、白紙の原稿は不安を煽るので、初稿が出来上がるまではどうしても原稿に向き合うのを先延ばしにしてしまうからです。一番良くないのは締め切り近くでも白紙の部分があるために投稿をあきらめてしまうことです。初稿さえできれば未知の要素がなくなるので、ぐっと原稿に向き合いやすくなります。また、初稿さえできてしまえば、品質はともかく投稿には間に合わせることができます。とにかく間に合わせるのが一番大事なことです。初稿が出来上がったあとは、要所要所を調整していって、ベストエフォート品質で締切に間に合わせるということを常に意識しています。

僕は結構プロジェクトを終えるのが早いと自負しています。これはメッセージを伝えることを明確なゴールにしているからというのが一つの理由です。論文も結局は書き手から読み手へのコミュニケーションツールです。読者がその論文を読んだときにどういうメッセージを受け取るかということが最も重要です。なので、その論文を読んだあとに読者がどういうメッセージを受け取るのかという最後の部分をはっきりさせて、そこにたどり着きさえすればその過程は何でもよしとして論文を構成していきます。定理とか、実験とか、提案手法さえも、このメッセージを伝えるための手段に過ぎないと考えています。なので、うまく証明できないとか、実験が上手くいかないときには、潔くあきらめて他の手段を探すようにしています。自分がなぜそのメッセージを強く信じているんだっけということを考えていくと、どうしたらそのメッセージをうまく伝えられるかは自ずと答えが出てきます。

自分がそのメッセージを強く信じている度合はとても重要です。そのメッセージを強く信じてさえいれば、いかに実験がうまく行かなくても、いや、でもこうだと何か他の手段を考えつくことができます。論文にも自然と説得力が出て、査読で何が来てもはっきりと打ち返すことができます。

ただし、想定外の実験結果などにより、自分でもそのメッセージを強く信じられなくなってくることがあります。このときには、そのまま進むと泥沼化してしまうので、一度冷静になってそのプロジェクトを見直すべきです。本当にそのメッセージが正しいのかを客観的に確かめにかかるべきです。そこでやっぱりこのメッセージは間違えていたという確信を得るに至ると、「〇〇を信じている方がいるかもしれませんが実は違います」という新しいメッセージで研究プロジェクトのテコ入れをすることができます。僕の ICML 2022 の論文 Re-evaluating Word Mover’s Distance もこのような経緯でこういう形仕上がりました。

メッセージは、プロジェクトを開始したときにはうまく言語化できない感情のような状態ですが、最終的には 1~2 文くらいで言語化し、研究発表するときにはスライドの最後に Take Home Message として掲載しています。僕の研究における例は Speakerdeck のスライドから確認できます。

論文 10 ページくらいを費やして 1~2 文のメッセージを伝えれば良いと考えるとずいぶん気が楽になると思います。逆に、10 ページ書いて 1~2 文だけかと思うかもしれませんが、皆さんが過去に読んだ論文を思い返してみると、9 割の論文はそんなのあったなというくらいではっきり思い出せないと思います。ということは、1~2 文でも明確に読者の心に刻むことができれば、上位 1 割に入ることができます。なので安心して 1~2 文のメッセージをいかに明確に伝えるかということに注力して論文を書いてください。

このように、どういうメッセージを伝えるのかというゴールをはっきりさせて、そこをめがけて進んでいくというのを意識してプロジェクトを進めるようにしています。こうすると、迷走することなく、しっかりと成果を出すことができるようになると思います。

😵‍💫 研究がうまくいかないときの対処法

一番大事なのはアウトプットのハードルを下げることです。アウトプットが止まるのが最悪で、悪循環に陥ってしまいます。なので、些細なことでも中途半端でも良いので、アウトプットをして前に進まなければいけません。どれだけ考えても成果がない場合は、成果がないこと、そのテーマに 1 カ月取り組んだけれども難しすぎて何も成果が得られませんでしたということを素直にアウトプットすれば良いです。そうすると、同じような境遇に陥りそうな人を救うことができます。

僕の ICML 2022 の論文 Re-evaluating Word Mover’s Distance もそんな感じで、もともとイケてる手法を提案しようとしていたのですが上手くいかず、結局上手くいかないということを論文にしました。どうすれば上手くいくかということは提案していません。それでいいと僕は思っています。論文にするには何か素晴らしい結果を報告しないといけないという固定観念を捨て去って、自分が何に取り組んできたのか、何を考えたのかということを一番大事にしてアウトプットすれば良いと思います。

また、手を動かせば進むようなことに取り組むこともおすすめです。サーベイ論文を書くのはとてもよいアイデアだと思います。既存手法を再実装して GitHub に公開したり、ブログに入門記事を書いて間口を広げるというのも良いと思います。

そもそも、なぜ研究するのか、なぜ論文を書くのかというと、究極的には誰かの役に立つためだと僕は思っています。特に、研究コミュニティーの役に立つためです。つまり、研究コミュニティーにプラスになったら成功と言えます。

既存手法を再実装して GitHub に公開するというのも、コミュニティーのためには大いに役立ちます。論文を書いて出版するのと同じか、ひょっとするとそれ以上の効果さえ生めるかもしれません。なので、そういう活動が肌に合っていると思えば、そちらに取り組むのが良いと思います。

一番大切なことは、とにかくアウトプットをすることです。ゼロよりは何か捻り出すほうが断然良いです。そして、自分が持っているもののなかで、どれをアウトプットすればコミュニティーのためになるかということを基準にアウトプットすることを決めていけばよいと思います。コミュニティーの役に立つことを続けていれば、長期的には研究コミュニティーから逆に自分が大事にされる番が回ってくると思います。

📝 論文の書き方

今回の内容は抽象的な考え方を中心にお話しました。具体的な論文の書き方については、以前の記事「論文の書き方」に書いたのでそちらも参照ください。

おわりに

このような言語化の機会を与えていただいたことに感謝です。これまで感覚的に研究を進めることが多かったので、言語化しているうちに自分でもハッとさせられることが多くありました。研究の取り組み方は三者三様だと思いますが、一つの事例として皆さんの参考になれば幸いです。

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

論文読みの日課について

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

ほぼ毎朝、というのは本当にほぼ毎朝です。この三年のうち読まなかった日はワクチンの副反応でダウンしている日など、あわせて 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

2022 まとめ

2022年にはいろんなことがありました。

研究

今年もたくさん研究をして論文を書きました。主著だけでも10本出版しました。記念のスクリーンショットです。

出しすぎで草

これについての想定アンチコメントは「研究は量より質」です。
ごもっともです。すみませんでした。

本の執筆

この1年はずっと『最適輸送の理論とアルゴリズム』という本を書いていました。ベストセラー記念のスクリーンショットです。

たくさん予約いただきありがとうございました。

本屋大賞への投票もよろしくお願いします。
(追記:本屋大賞受賞の対象外だそうです。すみませんでした。)

本を書くのは初めての経験でした。僕は論文執筆のスピードは速い方だと自負しているので、本を書くのも余裕だろうとたかをくくっていましたが、計算違いでした。本を書き上げるのはめちゃくちゃ大変です(主に長大な原稿の整合性を保つ点と、論文よりも広いスコープの読者に配慮する必要がある点)。これから本を書く予定の皆さんは覚悟しておきましょう。執筆経験のおかげで、世に流通している本達へのリスペクトがアップしました。

なんだかんだ言っても、本の執筆は楽しかったです。いつかまた。

Readable

Readable という PDF 翻訳のサービスをリリースしました。もともと自分の論文読みを快適にする補助ツールとして長い間使っていたのですが、8月頃自分の研究に行き詰まったときに、本腰を入れてサービス化に乗り出しました。

ありがたいことに、これがとてもバズって10万いいねなんていうとんでもない数の反応を頂きました。反応いただいた方ありがとうございました。

さらにサービスを便利にするべく11月末に有料のプロ版もリリースしました。こちらも多くの人に利用していただきありがとうございます。論文読みが快適になること請け合いなので、皆さん是非 Readable へのご登録お願いします。

readable.jp

趣味

プリティーシリーズ

今年一番ショックだった出来事は、11年半続いたプリティーシリーズのアニメが終了したことです。人生の一部と化していたのでなかなか立ち直ることができませんでした。というか、まだ立ち直れていません。一週間のリズムが崩れまくりです。これを克服するのは来年の大きな課題です。

ひがしやしき

今年は1年中ひがしやしきの音楽を聴いていました。1人のアーティストにここまではまったのは人生で初めてです。ドストライクなアーティストに出会えるのはインターネットのめちゃいい点ですね。

聴きすぎで草

好きなひがしやしきベストテンをいきなり発表します(順不同)

今年行われたひがしやしきファーストライブにも参加しました。地下ライブハウスに行くなんて人生で初めてで、ピアスを開けた兄ちゃんがタバコを吸っていたりしてびびり散らしたりしました。とてもいい人生経験になりました。

アニメオタクやまんがタイムきららオタクの方はひがしやしきを聞きましょう。これは勧誘ではなく義務勧告です。

読書

今年も色々な本を読みました。特に面白かったベストテンをいきなり発表します(時系列順)

中でも面白かったのは『脚本を書くための101の習慣』です。映画の脚本執筆と論文執筆は似ているので普段から脚本執筆の本をよく読んでいましたが、この本は特に刺さりました。「好きなことを書く。市場の要求に応えて書こうなんて思わないこと。市場の要求なんてわかりはしないからね。自分が一番の客だと知っておくといい。」という言葉は勇気づけられますね。一方で「重要なのは君が誰を知っているかじゃなくて、誰が君を知っているかということだ」 という言葉は、引きこもりグセのある僕には大ダメージでした。もっと勢力的に外へアウトプットしていきます(来年の抱負)。

おわりに

以上!

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

論文の書き方

どのようにして論文を書いているかを尋ねられることが最近よくあります。場当たり的に回答することが多かったのですが、このことについて改めてしっかり考えて公開することにしました。

ここで扱う内容は、科学者とはこうあるべき、という理想論ではなく、等身大の大学院生がいかにして論文を捻りだすかという実践的な方法論です。科学者の規範に照らすと適切ではない内容もあるかと思いますがご容赦ください。その代わり、現役の大学院生にとってはただちに活用できる内容になったと思います。

以下では時系列に沿って各段階の方法について述べていきます。

イデアを考える

まずは論文のアイデアを収集します。僕は普段からネタ帳にアイデアを書き溜めていき、論文を書こうと思い立ったタイミングでその中からアイデアを一つ(または二つの組み合わせ)を選んで作業をはじめます。

どのようにアイデアを得るかはあまり一貫性がありません。ここでは代表的な二つの方法を紹介します。

論文や教科書読んでいて思いつく

これはやりやすい方法かと思います。気をつけないといけないことは、論文で提案されていることを改善することを目指すと、得てしてインクリメンタルな研究となりインパクトが小さくなることです。

おススメの方法は、既存論文に書かれている言い訳を覆す方法です。例えば、論文 A で「タスク X の実データは利用できないので人工データで代用する」と書かれていれば、タスク X の実データを収集して公開できないか考える、論文 B で「アプローチ Y は動作が遅すぎて実用的でないので比較からは除外する」と書かれていれば、アプローチ Y を高速にする方法を考える、といった要領です。

この方法の利点の第一は、新規性が担保されることです。こんな手法やデータがあったらいいなと自分で勝手に考えると、よくよく調べたところ同じような手法やデータが見つかり新規性がなかったということが多くあります。論文中で「ない」と述べられていれば、存在しないか、存在していたとしても何かしらの問題があるのでしょう。これにより、実は新規性がなかったと後で発覚する失敗を避けることができます。

第二の利点は、潜在的な顧客が確保できることです。タスク X の実データを収集して公開すれば、おそらく論文 A の著者は利用してくれるはずです。アプローチ Y の高速な手法を提案すれば、論文 B の著者は利用してくれなくとも、比較には含めてくれるか、引用してくれる可能性はあります。また論文 A, B の著者がいるということは、コミュニティーには他にも興味を持ってくれる研究者がいると期待できます。これにより、研究内容が独りよがりになる失敗を避けることができます。

日常生活の不満を解消するアイデアを考える

ビジネスや発明では基本的なアプローチかと思います。

このアプローチの利点は、自分という顧客を確保できること、自分の欲求に基づくのでモチベーションが保ちやすいことです。

欠点は論文化が難しいことです。日常生活の不満を解消するためには、解法は複合的になることが多く、性能を高めようとするほど設定が特殊化していきます。一方、研究に必要なのは普遍性と再現性です。自分の用途に特殊化した複雑な手法から良い論文を生成するのはなかなか難易度が高いです。慣れていないとあっという間に「素人思考・素人実行」な論文ができあがります。このため、日常生活から研究のアイデアを考えるのは、初心者こそやりがちですがむしろ上級者向けです。まずはインクリメンタルな研究を無難にこなして研究に慣れてからこの方向性に進むのがおすすめです。

このパターンの論文を書くときのコツは、いったん自分の用途にカスタマイズした手法を考え、そこから核となる普遍的な構造を抽出することです。最初から普遍的な手法を考えるよりも取っかかりやすく軸がブレづらいのが利点です。

論文化するアイデアを選ぶ

よし、論文を書くぞと思い立ったタイミングで、前述のネタ帳からアイデアを選びます。

イデアの選定で気をつけているのは、第一には、良い面も悪い面もハッキリしたアイデアを選ぶことです。多くの人に受け入れられなくても、良い面を受け入れてくれる少数の人に強く突き刺されば十分です。査読者全員から weak accept を貰って採択されるくらいであれば、strong accept と strong reject を貰って不採択を食らってやるというくらいの気概で選んでいます。

この基準で選ぶに際しては、論文を書き終わったあとに「こういう論文を書きました」と Twitter に投稿する場面を想像しています。グダグダ説明が必要になりそうならあまり良いアイデアとはいえず、短い言葉や 1 枚の画像で良い面を伝えられれば良いアイデアと言えます。

ハッキリしたアイデアであれば、読者のペルソナを想定しやすく、この後の論文執筆がやりやすくなります。また、学会で発表する際にも、アイデアを短い時間で確実に伝えられ、有益なディスカッションに繋がることが多くなります。

第二に気をつけているのは、できるだけアイデアを寝かせておくことです。最近思いついた最高のアイデアよりも一年前に思いついたそれなりのアイデアを優先するくらいの感覚で選んでいます。

研究でよくある失敗は、研究し始めた段階では素晴らしいアイデアに思えても、一年後には、あるいは研究の途中で既に、つまらないと感じてきてしまうことです。思いつきたてのアイデアは特に魅力的に見えますが、その分色褪せるスピードも早いので、一年後にはつまらなくなる可能性が高いです。一方、一年前に思いついたそれなりのアイデアは既に一年耐えたのだから一年後にもそれなりを保っていることが期待できます。また、最近思いついたアイデアのモチベーションは開始した時点がピークであとは下降するだけですが、昔思いついたアイデアはやってみると意外と面白いじゃんと上昇するケースも多くあります。研究は長期戦なので、こういう長期的なモチベーションコントロールは重要だと考えています。

イデアを一年も寝かすとライバルに先を越されると心配してしまうかもしれませんが、数か月を争うようなアイデアに取り掛かるのはそもそも博打度が高いです。あえて一年寝かすという制約を付けることは、そのような移り変わりの激しい分野から遠ざかることにもつながるので、むしろ利点であると考えています。

サーベイする

イデアを選び終わるとサーベイを行います。サーベイは最初に行う派と最後に行う派がいるようですが、僕はできるだけ先に行います。なぜなら、サーベイで見つけた類似研究が論文の方向性を決定づけるからです。

サーベイによって類似研究が見つかると、その研究と自分の研究の差異を考えます。全く同一のアイデアであることはあり得ないので、小さなことでも何かしらの差は見つかるはずです。また、物事には必ず良い面と悪い面の両面があるものなので、差さえ見つかればそこから提案法の優位な点を抽出できるものです。例えば、提案法は既存法よりも大胆な近似を行っている場合、精度は悪いが高速に動作するでしょう。この場合、時間制約が厳しいアプリケーションや、大規模処理が必要なアプリケーションを考えれば、提案法の良い面が強調できます。論文を書く際には、この差が強調されるようにストーリーを構築して、この差が強調されるように実験設定を考え、この差が強調されるように書き進めていくことになります。既存研究との差は、論文を書き進める方向性を決定づけるものなので、できるだけ早い段階で確定していることが望ましいです。

予備実験を行う

論文を本格的に書き始める前に、アイデアがちゃんと動作するかを予備実験で確かめておきます。ここで気をつけているのは、できるだけ最初の段階から最終形に近い形で実験を行うことです。つまり、人工データ→小規模実データ→大規模実データの順で段階的に実験するのではなく、最初から大規模実データを使って実験を行います。うまく出版できるかは実データにおける実験の成否にかかっているので、予備実験では、この条件がクリアできるかを確認することにまずは全力を注ぎます。この予備実験は実弾(本実験)の前の曳光弾のようなイメージです。

論文を書く

論文を書くにあたっては、まずはいわゆる吐き出し稿 (vomit draft) を仕上げることに注力します。この時には、英文法の誤りは気にせず、適切な引用先を知らなければ空欄にしておきます。特に、引用文献を調べ始めると芋づる式に文献が見つかり際限なく時間がかかるので、最初のフェーズ(アイデアを選んだ直後に方向性を定めるフェーズ)でサーベイは十分に行ったことを信じて、まずは書ききることを目指します。

この方式を採用する理由は先延ばしを避けるためです。初稿が完成するまでは、サーベイが足りないとか、ストーリーが固まっていないとか、様々な先延ばしの言い訳を考えてしまいます。この先延ばしの根本的な要因は、初稿が書き上がるまでは不確定要素が多く、そのために様々な可能性を模索してしまって手に負えなくなることだと思っています。なので、できるだけ早く初稿を書き上げて不確定要素を無理やり確定させてしまいます。その後で、局所探索的に改善を行い、ベストエフォート品質で締切に間に合わせるということを常に意識しています。

推敲する

原稿ができあがった後は推敲を重ねます。ここはひたすら地道に、印刷して赤ペンを持って推敲することを時間間隔をあけて繰り返します。

論文を書くのに慣れないうちは、特に意識して推敲を繰り返すことをおすすめします。初心者が書く論文は多くの場合、推敲が不十分です。推敲が十分でない論文は日本語が不自然な Amazon の商品説明のようなもので、読者は商品(提案手法)の品質まで悪いんじゃないかと勝手に想像してしまいます。推敲不足のせいでリジェクトされるのは悲しいので、やりすぎなくらいに原稿をチェックすることをおすすめします。

一方で、論文を書くのに慣れた後(主著で十本程度論文を書くことを経験した後)は、推敲を止めるタイミングにも気をつけています。慣れてくると最低限の体裁は初期の段階で整えられるようになります。また、研究が軌道に乗ってくると論文化したいアイデアがどんどん溜まっていきます。こうなると推敲を最後まで重ねて打率を 1 パーセント上げるよりも打数を稼ぐ方が効率的になってきます。慣れるとずっと推敲したくなってきますが、時にはグッとこらえて次に進むことも重要です。

精神的に大事なこと

イデアをちゃんと深掘れば何か面白いものが書けるはず、という自信は研究を進める上で重要です。この自信は、アイデアの筋が良いという自信と、どのようなアイデアであれ面白く仕上げられるという自信の両面から成ります。前者については、何が既にやられていて何がまだやられていないかという分野の地図をまずは頭の中に構築して、こっちに進めばまだ見つかっていない面白い発見があるだろうという感覚を養うのが重要です。後者については、研究をして辿り着いた先にある成果物のみをあてにするのではなく、そちらに進んだということそのもの、そしてその過程で見た色んな材料・景色を基に研究のストーリーを構築できるようになるのが大切だと感じています。これらの感覚が得られると、精神的にも業績的にも安定して仕事を進めることができるようになりました。

おすすめ文献

Eamonn Keogh の How to do good research, get it published in SIGKDD and get it cited! は何度も読み返して大きな影響を受けました。ぜひご一読をおすすめします。

おわりに

ビビっときたやり方があればぜひ取り入れてみてください。皆さんのとっておきの論文の書き方もいつかお聞かせ願います。

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