研究における評価実験で重要な7つのこと

# はじめに
自身の研究を論文としてまとめる際には、自分の提案手法の有効性を、理論的な説明だけではなく実験的にも示す必要があります。トップカンファレンスにおいては評価実験は網羅的で隙がないことが前提となり、中堅カンファレンスでは評価実験をしっかりしていれば大体通るという印象があります。

本ポエムでは、卒業研究の季節に向けて、評価実験において個人的に重要だと思っていることを書いていきたいと思います。

突っ込み、改善提案、最後のTIPSの拡充等、大歓迎です。

## 前提
コンピュータサイエンス分野を想定としています。また、筆者の専門はコンピュータビジョンであるため、ピュアな機械学習に関する研究等では当てはまらない内容もあると思います。
また、ある程度確立された問題設定下での研究を想定しています。研究自体が全く新しい問題設定を行っているケースでは、ベースラインとなる手法自体も自分で考えないといけないなど、評価実験の設計自体が非常に重要となります。

# 自身の研究に批判的な疑問を持つ
評価実験は本来、自身の研究に対して、こういうケースではどうなるんだろう？と疑問に思う内容（仮説）を自分自身が腹落ちするまで検証していけば、十分な内容が得られるはずです。
その結果、理想的には、「その研究を一番知っているはずの人間（＝自分）」ですら突っ込みどころがなくなります。であれば、今その研究を聞いた人間（査読者、プレゼンの聴衆）が考える突っ込みどころなど、ほとんどがカバーされることになるでしょう。
そしてその過程で得られた考察を、より多くの読者が疑問に思うであろうことを優先して取捨選択することで、必要十分な評価実験の章ができあがるというわけです。

さて、自分自身の研究に対し、適切な（批判的な）疑問を持つことは、ある程度の訓練が必要かもしれません。これはすなわち、他の人の研究に対して適切な疑問を持てるかということと同値であり、普段からこの手法はこういうケースではどうなるのだろう？と思いながら論文を読んだり、研究発表に対し積極的に質問をする（考える）ことで鍛えられるので、常にそういう意識を持つようにしましょう。

手っ取り早く自身の研究に対して批判的な疑問が欲しければ、研究室や職場で、自身の研究を発表すれば良いでしょう。そこでの質問は、そのまま論文の評価実験で回答すべき内容の候補となります。

# 適切なベースラインを選定する
評価実験を行う上でまず重要なことは、適切なベースラインの選定です。なるべくシンプルな（だがナイーブすぎない）デファクトと言える手法をベースラインとして選定し、そのベースラインに対し提案手法を導入し、どのような効果があるかを検証していくことが重要となります。
ごちゃごちゃした既存手法に対して提案手法を導入して効果があったとしても、特定の既存手法を前提とした手法なのか、汎用性な手法なのかの判断が難しくなるため、なるべくシンプルなベースラインを選定すべきです。
逆にベースラインがあまりにもナイーブな手法では、何をやっても効果があるように見えるため、このベースラインの選定のさじ加減はセンスが問われるかもしれません。

# 提案手法を構成要素に分解する
さて、ベースラインが決まれば、それに提案手法を導入して、どの程度効果があるかを検証することになります。
しかし、その前に一度、提案手法と言っているものが、独立した構成要素に分解できないか見直してみましょう。多くのケースで複数の構成要素に分解できるのではないでしょうか。

提案手法を独立した構成要素に分解することは、いくつかの観点で非常に重要です。
まず、独立した構成要素に分解できれば、それぞれの構成要素はより汎用的で、適用範囲の広い手法であると言うことができます。
そして、そのような分解をしていくうちに、余分な前提がなくなり、提案手法が本質的に何をしているかが明確になるはずです。例えば、同じようなアプローチの既存手法はないと思っていたとしても、構成要素に分解して、その構成要素レベルで同じような機能性を持った既存手法がないかと考えてみると、本質的には同じようなことをしている手法があるかもしれません。
あるいは、既存手法についても上記のような分解を行うことで新たな発見があることもあるのではないでしょうか。

# 提案手法の構成要素を独立に評価する
さて、提案手法がいくつかの独立した構成要素に分解できたとしましょう。あるいは、最初から複数の提案を行っている研究もあると思います。
このようなケースでは、各構成要素が全て有効であるということを示す必要があります。

以下では提案手法が独立したA, B, Cという構成要素から構成されると仮定します。

||精度|
|:--|:-:|
|既存手法|80%|
|提案手法（A+B+C）|90%|

さて、上記の表のような評価結果があったとして、納得できるでしょうか？
A, B, Cの構成要素がそれぞれどの程度重要なのか、そもそも全部必要なのかという疑問が発生すると思います。
このケースでは（A+B+C）と書いてあるため、上記のような疑問が発生すると思いますが、自分の提案手法が、本質的には複数の構成要素に分解できるにもかかわらず自分では1つの構成要素だと思っていると、結果的に上記のような評価をしてしまうことがありうるため、前述の複数の構成要素に分解するということが重要になるのです。

||精度|
|:--|:-:|
|既存手法|80%|
|提案手法（A）|84%|
|提案手法（A+B）|87%|
|提案手法（A+B+C）|90%|

上記ではどうでしょうか？何となく良さそうですが、実は提案手法（C）だけで90%の精度がでるのではないか？と突っ込むこともできます。
あるいは、そこまでではなくとも、提案手法（C）が89%だとしたらどうでしょうか？その場合、利用者観点からすると、わざわざA, Bといった実装をしなくともある程度の精度がでるのであれば、Cだけを利用するということが魅力的な選択肢になりえます。
これは、A, B, Cが、実は独立ではなく本質的には同じような効果をもたらすようなもので、Cがその上位互換であった場合に起こりえます。特にCが既存手法である場合には注意が必要です。

上記を考慮すると、A, B, Cそれぞれを利用する/しないの８通りの組み合わせを評価することが理想的ということになりますが、構成要素が多くなると評価も大変になり、結果もごちゃごちゃしてしまう可能性があります。
そのようなケースでは、下記のように各構成要素を1つだけ抜いた手法を比較するablation studyを行うことで、提案手法からどの構成要素を抜いたとしても大きく精度が低下することを示し、結果的にどの構成要素も重要であると主張することができます。

||精度|
|:--|:-:|
|既存手法|80%|
|提案手法（Aなし）|86%|
|提案手法（Bなし）|87%|
|提案手法（Cなし）|87%|
|提案手法|90%|


# 同じ機能性を持った既存手法と比較する
これまで、提案手法を複数の構成要素に分解し、独立して評価することを行いました。
その過程で、各構成要素単位では、同じ機能性を持った既存手法がピックアップされたかもしれません。
既存手法との比較を行う場合にも、提案手法の構成要素を独立に評価したように、既存手法と同じ機能性を持った構成要素単位で比較を行いましょう。

例えば、提案手法はA, B, Cという構成要素からなり、既存手法はX, Yという構成要素からなるケースを考えます。ここで、AとXは同じ機能性を持ち、CとYは同じ機能性を持つとします。
この場合には、提案手法（A+B+C）と既存手法（X+Y）の比較だけではなく、例えば下記のような比較を行うと説得力が増すでしょう。

||精度|
|:--|:-:|
|ベースライン|80%|
|ベースライン＋A|85%|
|ベースライン＋X|83%|
|ベースライン＋C|86%|
|ベースライン＋Y|84%|
|提案手法（A+B+C）|95%|
|既存手法（X+Y）|87%|

すわなち、AとX、CとYは交換できる機能要素であるが、どちらも提案手法のほうが性能が良いということを示すことができます。
さらに、既存手法（X+B+Y）との比較まで行っていれば、公平性も担保されるので、上記の提案手法の有効性に関しては文句のつけようがなくなります。

# 提案手法のハイパーパラメータを評価する
提案手法に複数のハイパーパラメータ（以降単にパラメータ）が含まれているケースがあります。
機械学習の分野では、交差検証でパラメータを決定する前提であったり、パラメータに関してはかなりシビアに評価されている一方、コンピュータビジョン分野では、このようなパラメータが、本文中に単に「実験ではα=0.5, β=0.1, γ=0.9とした」とだけ記載されているケースも多いです。

提案手法のロバスト性という観点では、これらのパラメータ設定が性能に対してセンシティブでないことを示すべきであり、少なくとも、それらのパラメータを変更した際に、どのように精度が変化するか、それは何故かといった考察をすべきです。
もしくは、交差検証でなくとも、何かしらのヒューリスティックによって自動的にパラメータを設定するような手法自体を検討し、複数のドメインで妥当な精度を実現できることを示すことができると良いでしょう。

そもそも論としては、調整が必要なパラメータは少ないほうがよく、大量のパラメータを含む手法は単に過学習しているだけなのではと思われるので、なるべくシンプルな手法を目指しましょう。


# 既存（State-of-the-Art）手法と比較する
上記までの評価がしっかり行われており、最後に著名な既存手法との比較が行われていれば、構成としては万全でしょう。
データセットや評価フレームワークが確立されている問題設定であれば、既存手法の論文中の数字をそのまま持ってきて比較とする形で良いでしょう。
深層学習分野では、上記の前提が満たされていたり、実装が公開されていることが多いので、（精度さえ出せれば）この評価は簡単なので、どの論文も同じような結果が乗っているケースが多いですね。

精度が既存手法まで出ない場合はどのような対応が考えられるでしょうか？個人的には、精度の数字を追うことにそこまで意味はないと思っているのですが、論文を書く上では避けられない問題です。
1つには次のようなアプローチが考えられます。
これまで提案手法や既存手法を独立した構成要素に分解したり、同じ機能性を持った構成要素を比較することを行ってきました。そのうち、既存手法の構成要素で、提案手法に同じ機能性を持った構成要素がないものを探してみましょう。
その構成要素を提案手法に取り入れることで、精度が改善する可能性があるはずです。
トップカンファレンスの論文でも（だからこそ？）、最後の比較実験において、提案手法に精度をブーストする構成要素を追加しているケースも多いです。
あるいは、同じ機能性を持った構成要素を入れ替えてみることも考えられます。それで精度が上がった場合には、残念ながらその構成要素については有効性がないということになりますが、全体的な精度が向上するのであれば、残った構成要素を提案手法として、全体の構成を見直せば良いと思います。

# その他のTIPS
その他、思いついたら追加していこうと思います。

## 高速化手法の評価
### 高速化なしと比較する
提案手法に、高速化に関する提案が入っていることも多いと思います。
高速化は近似によって精度の低下を伴うケースが多いと思いますが、必ず高速化を行っていない手法をベースラインとして評価しましょう。
その高速化を行っていない手法が精度的には上限となり、その精度の上限に対して、高速化版でどの程度精度が近づけているかを評価することが重要です。
精度上限に近ければ、速度を維持しながら精度を改善するような検討はもはや不要であり、逆に高速化の効果は著しいが、精度もかなり下がるようであれば、まだ何か改善の余地があるのではないか、等を考える指標になります。

### 本当にその高速化って重要？
例えば画像検索においては、ざっくりと特徴抽出→検索といった処理フローになることが多いです。さて、この検索部分の高速化に取り組み、100倍の高速化を実現できたとします。スゴイです。
しかし、実は、もともと特徴抽出に1秒かかっていて、検索には0.1秒しかかかっていなかったとするとどうでしょう？ありがたみが薄れてしまいますね。
実応用上は、ボトルネックとなっている処理から高速化していくのが常ですが、得てして手法から入ると上記のような結果になることもありうるため、その高速化が本当に一番重要なのかを考えてみることも重要です。

もちろん、真に汎用的な手法であれば上記の限りではありませんが、タイトルやイントロで、画像検索のための〜のような前提をうたっているとそのような突っ込みが入ることもあるかもしれません。