機械学習の研究をするときに気をつけるべきこと

<style type="text/css">
dd.a { line-height: 150%; }
</style>

> この記事は、著者であるMITのPhD学生 Tom Silver氏から許可をいただき、[Lessons from My First Two Years of AI Research](http://web.mit.edu/tslvr/www/lessons_two_years.html?utm_campaign=Artificial%2BIntelligence%2BWeekly&utm_medium=web&utm_source=Artificial_Intelligence_Weekly_78) を意訳（+リンク&文体の修正）したものになります。ここに感謝申し上げます。

# 2年間AIの研究をして得た教訓

最近AIの研究を始めようとしている友人から、**2年前始めたときに知っていればよかったこと**を聞かれました。これから述べることは、私がこれまでに学んだ教訓です。それは、一般的な人生の教訓から、AIに限定されたコツまであります。役立つと思う人がいることを願います。

# はじめに

## 「くだらない」質問をしても大丈夫な人を見つけよう

始めの時期は同期に怖がってしまい、**自分の専門知識のなさを露呈してしまうかも**しれないと、基本的な質問をすることをためらっていました。質問しても大丈夫だと感じるようになるまでには、何ヶ月もかかりました。それでもその質問は形式ばっていました。
今では、3, 4人の相談相手がいます。もっと早く見つけていればよかった！今までは、検索しないといけない専門用語で溢れかえっていて大変でした。**今では、わからなかったらすぐに質問するようになり、混乱する前に解決**しています。

## 異なる分野から研究のインスピレーションを得よう

何に取り組むべきかを決めることは、研究の中で最も難しいことです。次に述べるのは、長い実績を持つ研究者が採用している一般的な戦略です。

1 . 　**異なる分野の研究者と話すこと**
彼らがどのような問題に興味を持っているかを聞いて、その問題を**コンピュータサイエンスの文脈で再定義**してみます。既存の技術では十分に分析できなそうな、データセットがあるかどうかを尋ねます。
機械学習の中で最もインパクトのある研究の多くは、生物学/化学/物理学、社会科学、または純粋数学と合わさることで生まれます。例えば、マウスの行動のデータセットがきっかけとなった、Matthew Johnson らによる [NIPS 2016年の論文](https://arxiv.org/pdf/1603.06277.pdf)や、量子化学への応用について書かれた Justin Gilmer らによる[ICML 2017年の論文](https://arxiv.org/pdf/1704.01212.pdf)などが考えられます。

2 . 　**単純なベースラインをコーディングして、問題の感触をつかむこと**
例えば、[倒立振子](https://gym.openai.com/envs/Pendulum-v0/)を制御するためのコードをよく書いてみたり、自然言語のデータセット上で bag-of-words のモデルがどこまで通用するか試してみてください。
ベースラインを書いているときに、予期せぬ状況に遭遇することがよくあります。コードの実装もしくは自身が想定しているモデル自体の間違いです。言うなれば**コードと思考のバグ**です。それを直していきベースラインが機能する頃には、問題をより深く理解し、他のアイデアを思いつくようになっています。

3 . 　**気に入った論文の実験を拡張すること**
実験の手法と結果をよく読み、拡張できそうな箇所がないか探してください。一番簡単な拡張を最初に考えて、論文の方法で十分ではないのか比較してみましょう。このどちらでもないベースラインの手法を考え、その手法の何が不足しているか考えてみましょう。

# 可視化ツールと可視化技術に時間をかける

私が研究コードを書くときの戦略は、まず**可視化スクリプトを作成**することです。残りのコードが書き終わったら、可視化スクリプトを実行することで、自分のコードが想定しているモデルと一致しているかどうかを素早く検証することができます。さらに重要なのは、優れた可視化ができれば、**自分の思考やコードのバグがはるかに明確**になり、解釈しやすくなります。もっと言えば、コードが完成したら、人に見せるためのきれいな図やビデオが手に入ります！

手元にある問題に対して適切な可視化を思いつくのはコツのいることです。
モデルを反復的に最適化している場合（ディープラーニングなど）は、損失曲線をプロットするのが常に良いスタート地点です。また他にも、[ガイド付きバックプロパゲーション](https://arxiv.org/pdf/1412.6806.pdf)など、（特に畳み込み）ニューラルネットワークの学習済み重みを、可視化して解釈するためのテクニックも数多く存在します。
<img width=400px alt="tensorboard.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265273/1edff55e-8c5b-bf3d-3ee6-60615bc35d63.gif"></img>
<font color="Gray">[Tensorboard](https://www.tensorflow.org/tensorboard/
)は、[Tensorflow](https://www.tensorflow.org)のディープラーニングモデルを可視化するための一般的なGUI</font>

強化学習やプランニングでは、明らかに可視化すべきなのは、環境でのエージェントの行動であり、それがアタリゲームであっても、ロボットタスクであっても、単純なグリッド世界（例えば、[OpenAI Gymの環境](https://gym.openai.com/envs/#classic_control)）であっても同じです。設定によっては、価値関数が訓練によってどのように変化するか（下図）や、探索した状態の木を可視化することも可能です。
<img width=400px alt="qlearning.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265273/a62629a5-edb3-754b-8dc9-60b5f05aea31.gif"></img>

<font color="Gray">Q-learningで学習されている価値関数は、それが表すグリッド世界上で可視化できる（[Andy Zeng](http://andyzeng.github.io/pacmanRL)氏より）</font>

グラフィカル・モデルを扱う場合、1次元または2次元の変数の分布が推論の間に変化する様子を視覚化することは、非常に有益です。
<img width=400px alt="Kalman_filter_animation,_1d.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265273/b0431f22-3b9b-b7ba-769d-770b11eeba96.gif"></img>
<font color="Gray">エビデンスが蓄積されるごとに分布をプロットすることで、グラフィカルなモデルのデバッグが格段に楽になる（[Wikimedia](https://commons.wikimedia.org/wiki/File:Kalman_filter_animation,_1d.gif)より）</font>


有効な可視化技術のバロメーターの一つは、可視化を分析するときに覚えておかないといけない情報量を推定することです。下手な可視化では、作成するために書いたコードを詳細に思い出す必要があります。

## 研究者や論文の根源にあるモチベーションを見つける

同じ学会で発表し、同じ専門用語を使っている、人工知能の研究者ですが、研究へのモチベーションが正反対になることもあります。それを明確にするために、そう言った分野に別の名前を提案する人もいます（例えば、Michael Jordanの最近の優れた[ブログ記事](https://medium.com/@mijordan3/artificial-intelligence-the-revolution-hasnt-happened-yet-5e1d5812e1e7)で。）。
少なくとも**研究のモチベーションには3つの主要なまとまり**があります。

* **数学**：知能システムの基本的な性質と限界は何か？
* **工学**：どのようにすれば、代替手法よりもよく現実問題を解決する知能システムを開発できるか？
* **認知**： 人間や他の動物に見られるような自然の知能をどのようにモデル化することができるか?

これらのモチベーションは共存しうるもので、AI論文には、複数の観点から見ても興味深いものが多いです。さらに、個々の研究者は、これらのモチベーションのうちの1つ以上に突き動かされていることが多く、それがAIの分野をまとめるのに役立っています。

しかし、これらのモチベーションは対立することもあります。私の友人や同期の中には、明らかに「工学」派の人もいれば、主に「生物学」に興味を持っている人もいます。既存技術を巧妙に組み合わせることで、ベンチマーク上の最先端を打ち破ることを示した論文は、 工学派の人々の興味はそそるでしょうが、認知派の人々からはあくびをされたり軽蔑の目で見られてしまうかもしれません。逆のことも起こるでしょう。理論的な結果や単純な結果だけで、生物学的な妥当性や認知的な関連性を主張している論文の場合です。

優れた論文や研究者は最初にモチベーションを述べますが、根源的なモチベーションは埋もれていることが多いです。モチベーションが明らかでない場合に備えて、**それぞれの観点から論文の内容を検討**することが有用だと私は気づきました。

# 研究コミュニティから情報を得る

## 論文を探す

AIの論文はかなりアクセスしやすく、しばしば[arXiv](https://arxiv.org/)で公開されています。現在出されている論文の数の多さは刺激的ではありますが、同時に圧倒されてしまいます。しかし、多くの人々が**良いものだけを選別**してくれています。

例えば、Andrej Karpathyは[arXiv sanity preserver](http://arxiv-sanity.com/)を運営しています。便利な論文のソート、検索、フィルタリング機能を備えており、便利なウェブサイトです。
[Miles Brundage](https://twitter.com/Miles_Brundage)は、かつては毎晩軽く調べたarXiv論文のリストをツイートしていました。現在これは[Brundage Bot](https://twitter.com/BrundageBot)に引き継がれています。他にも多くの人が時々興味深い文献を共有しています。私はツイッターでお気に入りの研究者をフォローすることをお勧めします（[私がフォローしている人たち](https://twitter.com/tomssilver/following)）。
Redditがお好きなら、[r/MachineLearning](https://www.reddit.com/r/MachineLearning/)も良いですが、投稿は学術的な研究者よりもMLのエンジニアに向けられていることが多いです。他にも、ジャック・クラークは " [Import AI](https://jack-clark.net) "、デニー・ブリッツは "[The Wild Week in AI](https://www.getrevue.co/profile/wildml) "と呼ばれるニュースレターを発行しています。

（訳注：日本語で、[有益なツイートをする人](https://lionbridge.ai/ja/articles/twitter-ai-ml/)やニュースレターを配信する人（[piqcy](https://www.getrevue.co/profile/icoxfog417/), [akira](https://note.com/akira_tosei)など）もいます。）

国際会議の**プロシーディングが公開されたときにスクロール**してみるのも価値があります。
三大会議は、[NeurIPS](https://nips.cc)、[ICML](http://icml.cc/)、[ICLR](https://iclr.cc/)です。他にも、[AAAI](https://aaai.org/Conferences)、[IJCAI](https://ijcai20.org)、[UAI](http://auai.org/uai2020/index.php)などの評判の高い一般聴衆向け会議があります。
それぞれの専門分野には、より具体的な会議もあります。コンピュータビジョンでは[CVPR](http://cvpr2020.thecvf.com/)、[ECCV](https://eccv2020.org/)、[ICCV](https://openaccess.thecvf.com/ICCV2019)、自然言語では[ACL](http://acl2020.org/)、[EMNLP](https://2020.emnlp.org)、[NAACL](https://naacl.org)、ロボット工学では[CoRL](http://www.robot-learning.org/)（学習）、[ICAPS](http://icaps20.icaps-conference.org/)（プランニング、ただしロボティクスに限定されない）、[ICRA](http://www.icra2020.org/)、[IROS](https://www.iros2020.org/)、[RSS](http://www.roboticsconference.org/)です。より理論的な研究では[AISTATS](http://aistats.org)、[COLT](http://www.learningtheory.org/colt2020/)、[KDD](http://www.kdd.org/kdd2020/)などがあります。
出版の場としては学会が圧倒的に主流ですが、ジャーナルもあります。[JAIR](http://jair.org/)と[JMLR](http://jmlr.org/)は、この分野に特化した最も著名な2つのジャーナルです。時折、[Nature](https://www.nature.com/)や[Science](https://www.sciencemag.org)のような一般的な科学雑誌にも注目度の高い論文が掲載されることがあります。

同じように重要なのですが、**古い論文を見つけるのははるかに難しい**ことが多いです。「古典的」とされる論文は、参考文献を辿ったり、大学院の授業のリーディングリストを閲覧したりすることで発見できることが多いです。古い論文を発見するもう一つの方法は、その分野に長くいる教授を見つけて、その教授の初期の研究、つまり教授になるまでの道を切り開いた研究を探すことです。また、それらの教授にメールで追加の参考文献を求めることもできます（忙しくて返事ができない場合は気を悪くしないようにしてください）。あまり知られていない、あるいは見落とされている古い論文を見つける一貫した方法を私は知らないです。[Google Scholar](https://scholar.google.com) でキーワードを検索することくらいです。

## 論文を読むのにどのくらいの時間をかけるべきか？

私は、過去の研究に費やすべき時間について、2つの共通のアドバイスを聞いたことがあります。

1. **始めたばかりのときはすべての論文を読みなさい**
   大学院の最初の学期や1年は論文を読むだけでいいとよく言われます。

2. **この最初の上昇期以降は論文を読むことに時間をかけすぎないように**
   後者の根拠は、既存手法に偏っていない方が創造的に問題を提起して解決しやすいだろうということです。
   
（訳注：日本とアメリカでは[大学院のプログラム](https://www.yumakawaguchi.com/overseascollege/1342/)が異なります。）

個人的には、前者のアドバイスには賛成ですが、後者のアドバイスには反対です。
私は、オリジナルの研究のための時間が残っている限り、常に可能な限り多くの論文を読むべきだと思います。難しい問題に対して、他の人が試したことをよく知らなければ、斬新で優れた手法を思いつくだろうという考えは、現実的ではないし傲慢な考えです。

確かに、問題に対する新鮮な視点が鍵を握っているかもしれませんし、素人が既成概念にとらわれない発想で長年の課題を解決した話は感動的です（例：講義に遅刻してきた[George Dantzig](https://www.reddit.com/r/todayilearned/comments/3m915w/tilonce_george_dantzig_was_late_for_the_class/)）。しかし、専門の研究者はこのような幸運なジャンプをあてにはできません。そうではなく、時間の大部分は、根気よくじっくり進み、論理的に問題を切り取っていくことに費やされます。その場合、関連する論文を読むことは、**現在地を把握し次に何を試すべきかを知るためには、はるかに効率的**な方法です。（Julian Togeliusの [何でも屋と研究者の違い](http://togelius.blogspot.com/2016/04/the-differences-between-tinkering-and.html) も見てください。）

できるだけ多くの論文を読むことに関しては、一つ重要な注意点があります。論文の内容を熟考するのに時間を使うことは、読むことと同じくらい重要だということです。次から次へと論文を読み漁るよりも、**一握りの論文を一日かけて丁寧にメモを取り、それぞれの論文を振り返る**方が良いでしょう。論文は読めるだけ読んでいいですが、無理しては読まないようにしましょう。

## 会話 >> 動画 > 論文 > 会議の講演

論文は、よくわからない研究のアイデアを理解するための最も身近な情報源であることは間違いありません。しかし、どのような方法が最も効率的なのでしょうか？

この質問に対する答えは人によって異なるかもしれません。私の場合は、（理想的には、問題のアイデアをすでに理解している人と）**会話をすることが、理解への最短かつ最も効果的な方法**であることがわかりました。そのような人がいない場合は、論文の著者が招待講演を行っているなど、そのテーマに関する動画を見ることで、非常に良い洞察が得られます。
発表者が生の聴衆に話しかけているとき、発表者は簡潔さよりも分かりやすさを優先する傾向があります。ところがほとんどの論文執筆ではこの優先順位が入れ替わっており、単語数が重要で、背景の説明はその分野に精通していない証拠とみなされることすらもあります。
最後に、国際会議での短い講演は、学ぶ機会だというよりも形式的なものであることが多いです。もちろん、その後の発表者との会話は非常に貴重なものになるでしょう。

## 誇大広告に注意

成功したAI研究は世間の注目を集め、その結果、より多くの人々がその分野に参入し、その結果、より成功したAI研究につながる。このサイクルはほとんどが好循環ですが、一つ悪質な副作用を挙げるなら、それは誇大広告です。クリック数を稼ごうとするジャーナリスト、投資家や採用を争う企業、注目度の高い出版物や引用を目指す研究者は、誇大広告バブルを膨らませる罪を犯しています。ヘッドラインやプレスリリース、論文を評価する際には、このような**悪質な意図がないかと留意すること**が重要です。

NIPS 2017では、数百人の聴衆が集まった部屋での論文発表のQ&Aの部分で、著名な教授がマイクを取り（「誇大広告警察を代表して」）、論文のタイトルに「想像力」という言葉を使っていることについて著者を諌めました。私はこの種の公の場での対立については複雑な感情を持っており、たまたまこの問題の特定の論文が好きだったこともあります。しかし、教授のフラストレーションには完全に共感しました。AI研究における誇大広告の最も一般的で不快な症状の1つは、古いアイデアの名前を、派手な新しい専門用語に変更することです。これらの流行語には注意してください。主に実験と結果に基づいて論文を判断してください。

# 研究マラソンを走る

## 常に測定可能な進捗を生んでいること

初期の頃、研究プロジェクトを探すときには、何時間も何時間もブレインストーミングに費やしました。当時の私にとってブレーンストーミングとは、机に突っ伏して、漠然とした直感が具体的な洞察にまとまるのを期待することでした。ブレーンストーミングの一日の終わりに、私はしばしば疲れと落胆を感じていました。果たしてこれは研究なのだろうか？

もちろん、研究を進めるためのレシピはありませんし、暗闇の中でさまようのもプロセスの一部（ほとんど）です。しかし今では、**測定可能な目標を中心に研究を構成した方が、はるかに簡単で充実したものになる**とわかりました。

次に何をしようとしているのかほとんどわからない場合、次の目標は次のようにするといいでしょう。

* 漠然としたアイデアを可能な限り詳細に書き留めておくこと
* アイデアを書いている途中でやっぱりダメだと除外した場合は、除外した理由を書く（全てを無かったことにして、進捗を失うのではなく）
* アイデアがない場合、読んだ論文や同期との会話を進捗とする

私は現在、どんな日でも一日の終わりまでに、**自分がしたことの何らかの具体的な証拠があるように**しています。そうすることでやる気は高まるし、たとえそのアイデアが今後使われないとしても、そのアイデアで一日をまた浪費してしまうかもしれないと心配する必要がないです。

## 行き詰まりに気づくこと、詰まった時の引き返し方を学ぶ

実績のある研究者は、良いアイデアに多くの時間を費やしていますが、それは**悪いアイデアに費やす時間が少ないから**です。良いアイデアと悪いアイデアを見分けることができるかどうかは、経験によるところが大きいようです。それにもかかわらず、どんなレベルの研究者であっても、しばしば次のような判断に迫られます。研究アイデアの結果が出ていない、あるいは欠陥があるとき。

A. これからもそのアイデアを支持する、あるいは改変して良いものにしようとするか
B. そのアイデアを完全に捨てるのを正当化しようとするか

個人的には、B. をするべきだったのに、A. をやることに時間を費やしてしまったことを後悔しています。特に初期の頃は、同じところで何度も行き詰まり、そこに無駄に長く留まっていました。なぜそのアイデアを捨てることに消極的だったかというと、すでに費やしていた時間が無駄になるんだと勘違いしていたからです。

私は今でも、研究に詰まった時に引き返すと、失望感のようなものを感じています。しかし、今私が心掛けていることは、**引き返すことは前進なんだ**と思うことです。コストは十分使われましたが、沈んだのではありません。もし今日この行き止まりを経験していなかったら、明日も同じことを考えていたかもしれません。行き詰まりは終わりではない。それも健全な人生の一部である。このような言葉が響くことを願っています。そうでない場合は、[Feynmanの格言](https://www.goodreads.com/quotes/38125-we-are-trying-to-prove-ourselves-wrong-as-quickly-as)もあります。

## 書け!

私は以前、非常に有名なAI研究者に、初期のコツを教えてもらう機会がありました。彼のアドバイスは単純でした。

**書け！ブログ記事や論文を書くことはもちろんだが、さらに重要なのは、一日中考えを書き留めなさい。**

それからは、単に考えているときと、積極的に書いているときでは、進捗が明らかに違うことに気がつきました。

## 心身の健康は研究の前提条件である

学術研究者には、科学的発見を追求することに夢中になって睡眠やセルフケアを気にしないものだ、という危険なイメージがあります。そのような行動を理想として同じように努力することに対して、私は罪悪感をずっと感じてきました。

今では（少なくとも合理的なレベルでは）、**運動や精神的な休憩は投資であって、気晴らしではない**と理解しています。4時間寝て8時間仕事をするよりも、8時間寝て4時間仕事をしたほうが生産性が格段に上がりますし、そこから波及して得られる効果は言うまでもありません。

難しい問題に対処している途中でやめるのは、非常に難しいことです。私は今でも疲弊や挫折を通り越してまで何かに没頭してしまった結果、**休憩しないことには何も進まないような状態**になりがちです。でも、一歩離れて深呼吸ができたときは、「やってよかった」といつも思います。このことを心に刻んで、研究キャリアの次の段階に進んでいきたいと思っています。

# 謝辞

この投稿の初期バージョンを読んで、素晴らしいフィードバックを提供してくれた Hannah Blumberg, Kate Donahue, Mihail Eric, Ankit Gupta, Eric Purdy, Austin Stone, Scott Swingle に感謝します。