機械学習の研究者を目指す人へ

機械学習の研究を行うためには、プログラミングや数学などの前提知識から、サーベイの方法や資料・論文の作成方法まで、幅広い知識が必要になります。本レポジトリは、学生や新社会人を対象に、機械学習の研究を行うにあたって必要になる知識や、それらを学ぶための書籍やWebサイトをまとめたものです。

目次

  1. プログラミングの準備
  2. 数学の準備
  3. 基本的なアルゴリズムとその実践
  4. サーベイの方法
  5. スライドの作り方
  6. 論文の書き方
  7. 参考資料

1. プログラミングの準備

まず最初に、自分でコードを書けるようになる必要があります。機械学習の論文で実験を行っていないものはほとんどありません。そして機械学習の研究を始めた後に、プログラミングの勉強を一からする余裕はありません。そのため、事前にプログラミングについて勉強しておくことをおすすめします。

前提として、大学の一般教養等で、情報処理に関する基本的な内容を学んでいることとします。具体的には、下記を理解していることです。

1) 様々な対象がコンピュータ上で、どのように2進列として表され、そして処理されるかを説明できる。
2) どのように計算がプログラムとして表されるかを理解する。
3) プログラミングにおける基本概念、つまり、変数、分岐、繰り返し、配列、サブルーチンなどを説明できる。
4) ハードウェアシステムとして、そしてソフトウェアシステムとして、コンピュータの基本構造を理解する。

(東京工業大学 コンピュータサイエンス第一から引用)

もし自信がない場合は、「プログラムはなぜ動くのか 第2版」などを読むといいと思います。また、参考書などで基本情報技術者試験の勉強をするのも良いと思います。(実際に試験は受けなくても良いです。)

Pythonを勉強しよう

機械学習で最も用いられているプログラミング言語はPythonです。「みんなのPython 第4版」はPythonの入門書として有名な1冊で、Pythonの仕様を幅広く説明したものになります。その分500ページと分厚くなっているので、手っ取り早く勉強したい場合はもっと簡単な入門書でも問題ないと思います。また、他のプログラミング言語の経験がある方は、公式のチュートリアルを読めば十分だと思います。

もしプログラミング言語を初めて勉強する場合は、実際に手を動かすことを意識してください。教科書を読むだけではプログラミングできるようになりません。まずは教科書に書いてあることを実際に入力するところから始めましょう。

次に、実際に自分でコードを書いてみるのが良いと思います。機械学習の場合、NumPySciPyscikit-learnを用いてコードを書いてみるのが良いと思います。これについては3節で改めて述べます。

分かりやすいコードを書けるようになろう

コードを書く際に大切なのは、分かりやすいコードを書くことです。分かりづらいコードを書いてしまうと、自分で何をしようとしていたか分からなくなり、バグがあった場合に発見するのが困難になります。「リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック」には、分かりやすいコードを書くためのノウハウがまとまっています。

2. 数学の準備

機械学習を学ぶ上で大切なのは、必要な数学を理解していることです。アルゴリズムを勉強するのであれば、大学一年で学ぶ微分積分・線形代数に加えて最適化数学を理解していれば、ある程度までは問題ないと思います。学習理論を勉強するのであれば、さらに難しい数学が必要になります。まずはアルゴリズムの勉強を行うための準備をするのが良いと思います。その上で、必要になった数学を適宜学んでいくのが良いと思います。

前提として、大学一年で学ぶ微分積分・線形代数をある程度理解していることとします。例えば、「解析入門」「線型代数入門」などをある程度理解してれば問題ないと思います。完璧に理解してる必要はありません。分からない事があった時、調べたり振り返ったりして理解できればとりあえずは大丈夫です。

もし自信が無い場合は、「キーポイント線形代数」などのわかりやすい本で勉強するのが良いと思います。

最適化数学を学ぼう

機械学習で行っているのは、基本的にはモデル、つまり関数の最適化です。「これなら分かる最適化数学 - 基礎原理から計算手法まで」は、勾配法や最小二乗法、最尤推定などの最適化手法についてまとめた一冊です。この本を読んでおけば、論文で出てくる数式はある程度理解できるようになると思います。

他の書籍としては、「機械学習のための連続最適化」などもおすすめです。

3. 基本的なアルゴリズムとその実践

機械学習には膨大な数の問題設定やアルゴリズムが存在するため、一度にすべてを学ぶのは困難です。ますはクラス分類や回帰、クラスタリングなどの基本的な問題設定と、それらにおける代表的なアルゴリズムを勉強するのが良いと思います。

アルゴリズムを学ぶ上で大切なのは、アルゴリズムがどのように導出されたか理解することです。式展開を丁寧に追っていって、分からないところがあったら立ち止まって考えるようにしましょう。また、実際に実装してみること・動かしてみることも理解の手助けになります。まずはscikit-learnやPyTorchなどのチュートリアルを行ってみるのが良いと思います。余裕があればNumPyなどを用いて一から書いてみるのが良いいと思います。

機械学習の全体像を学ぼう

まず最初に、 「機械学習・データマイニング分野の概要」で機械学習分野の全体像を学ぶのが良いと思います。また、機械学習分野の国際会議についても説明されています。これについては4節で改めて述べます。

基本的なアルゴリズムを学ぼう

「わかりやすいパターン認識 (第2版)」は、1998年に第一版が刊行されて以来、機械学習の入門書として長く読み継がれている一冊です。機械学習の基本的な問題設定やその解き方についてまとまっています。 機械学習の入門書は数多く出ているので、他の入門書でも問題ないと思います。例えば、「はじめてのパターン認識」なども分かりやすいと思います。

少し難し目の入門書として、パターン認識と機械学習(上巻下巻)があります。こちらも2006年に出版されて以来、機械学習の入門書として長く読み継がれている一冊です。読む際には、「パターン認識と機械学習の学習 普及版」という解説書が有志によって公開されていますので、一緒に読むことをおすすめします。英語版は著者によって無料で公開されています。

前述したとおり、機械学習には多くの問題設定・アルゴリズムがあるので、すべてがまとまった1冊というのはありません。そのため、興味がある問題設定・アルゴリズムに関する本を読む必要があります。例えば、教師なし学習についてより詳しく知りたい場合は、「続・わかりやすい パターン認識 -教師なし学習入門-」などがおすすめです。

深層学習の基礎を学ぼう

深層学習は機械学習の一分野で、従来の機械学習と比べて高い性能を達成したことで注目されています。「深層学習」は、深層学習の基本や、自己符号化器・畳込みニューラルネット・再帰型ニューラルネットなどのよく用いられているモデルについて説明しています。他の本では、「これならわかる深層学習入門」などもおすすめです。

scikit-learnやPyTorchのチュートリアルをやってみよう

scikit-learnはPythonの機械学習ライブラリです。Pythonの数値計算ライブラリであるNumPySciPyを用いて、数多くのアルゴリズムが実装されています。実際にアルゴリズムを使ってみることで理解が深まるので、プログラミングの勉強も兼ねて、scikit-learnのチュートリアルをやることをおすすめします。また、チートシートが公開されているので、参考にしてください。

PyTorchはPython用の深層学習フレームワークで、深層学習界隈ではTensorFlowと並んで最もよく用いられています。PyTorchのチュートリアルを行うことで、実際に深層学習をどのように実装するかを理解できると思います。

また、NumPyなどを用いてアルゴリズムを一から実装するのも良いと思います。その際には、「機械学習の Python との出会い」や、「Python による科学技術計算の概要」が参考になると思います。

4. サーベイの方法

プログラミングや数学、機械学習の基礎について一通り学んだあとは、サーベイのフェーズに移ります。サーベイとは、自身が興味のある分野・技術に関する論文をピックアップして読むことです。本節では、サーベイのやり方について説明します。

国際会議論文を読もう

まず最初に、機械学習分野の国際会議を把握するところから始めましょう。機械学習分野では、国際会議、そのなかでもトップカンファレンスと呼ばれる会議に論文を通すことが一つの目標とされています。そのため、最先端の論文はトップカンファレンスに集まります。トップカンファレンスに採択された論文を読むことで、自分の興味のある分野・技術の現状や、現在注目されている研究課題などを把握することができます。また、自身が興味を持った論文が、どのような会議に採択されているかを調べることで、その論文の対外的な評価を知ることができます。

機械学習の国際会議については、3節で紹介した「機械学習・データマイニング分野の概要」によくまとまっています。また、1ページだけ切り出したものが「ML, DM, and AI Conference Map」にあります。

主要な国際会議を抜粋すると、下記の通りです。

例えば、機械学習系であればNeurIPSやICML、ICLRあたりがトップカンファレンスと呼ばれています。「国際会議名 proceedings」などで検索すれば、採択された論文を調べることができます。気になった論文をピックアップしてみましょう。

論文の読み方としては、「国際会議論文の読み方・書き方」が参考になるので、論文を読み始める前に是非目を通してみてください。

事前に伝えておきたいのは、論文を読むのは時間がかかるということです。慣れてくれば数時間で論文を読むことができるようになりますが、最初の頃は数日以上かかることが多々あります。それはしっかりと理解しようとしている証拠であり、決して読むのが遅いわけではありません。根気強く読んでいきましょう。

Google Scholarを活用しよう

Google Scholarは、Googleが運営している論文検索サイトです。気になったキーワードがあれば、このサイトで検索することで関係する論文を調べることができます。期間ごとに調べることができるので、今年投稿された論文、のように条件付けることもできます。

Google Scholarの便利な機能として、「ある論文を引用している論文を調べる」機能があります。検索結果の下に「引用元」というリンクがあり、それを辿ることで、その論文に関係している後続研究を調べることができます。この機能を用いることで、自身が興味のある分野・技術の関連研究をもれなく調べることができます。

arXivをチェックしよう

arXivとはプレプリント、つまり国際会議等に採択される前の論文などを投稿するサイトです。現在の機械学習分野では、国際会議に投稿する前にarXivで論文を公開する場合が多いです。そのため、いち早く最新手法をチェックしたい場合は、arXivにも目を通す必要があります。

arXivには毎日論文が投稿されており、論文はカテゴリごとに分かれています。例えば、機械学習系であればcs.LGstat.MLなどのカテゴリに投稿されます。こまめにチェックして、気になった論文があったらピックアップすると良いと思います。

注意しなければいけないのは、arXivにある論文はプレプリントが多く、クオリティが保証されていないということです。半年後にトップカンファレンスに通るような論文もあれば、クオリティがあまり高くない論文もあります。そのため、いきなりarXivにある論文から読み始めるのではなく、トップカンファレンスに通った論文を何本か読んで、論文のクオリティをある程度判断できるようになってからarXivに目を通すことをおすすめします。

5. スライドの作り方

サーベイが進んでいくと、サーベイの内容や、サーベイに基づいた自分のアイデアについてディスカッションする機会が訪れます。この時、伝わりやすいスライドを作れるかどうかで、ディスカッションの質が変わってきます。

まず最初に、見やすいスライドの作り方について学びましょう。「伝わるデザイン」は高校生向けの資料ですが、見やすいスライドの作り方について非常にまとまっています。

次に、専門的な内容が伝わりやすくなる方法について学びましょう。「プレゼン・ポスターで自分の研究を『伝える』」は、専門的なスライドを作る上でのコツがまとまっています。また、「足立研セミナー: 英語プレゼン技法」 [動画] [資料] も参考になるでしょう。

スライドを作る上で大切なのは、試行錯誤することです。最初から分かりやすいスライドを作れる人はいません。何度も発表を繰り返して、色々な人の意見を聞きながら、自分なりのスライドの作り方を確立してください。

6. 論文の書き方

自身のアイデアが有用であることを確認できれば、論文を書くフェーズに移ります。論文を書く際には大切なのは、とにかく書いてみることです。4節で紹介した「国際会議論文の読み方・書き方」「優れた研究論文の書き方」などに目を通して、論文の基本的な構造を把握したあと、とにかく書いてみましょう。

次に、論文をブラッシュアップしましょう。日本語論文であれば「松尾ぐみの論文の書き方」、英語論文であれば「松尾ぐみの論文の書き方:英語論文」「AI系トップカンファレンスへの論文採択に向けた試験対策」「Stanford大学流科学技術論文の書き方」などに目を通し、査読を突破できるような論文にしていきましょう。もし共著者がいる場合は、何度でも共著者に論文を読んでもらってコメントしてもらいましょう。英語論文を書く際は、「ネイティブが教える 日本人研究者のための論文の書き方・アクセプト術」や、「マスターしておきたい技術英語の基本 -決定版- 」などにも目を通して、適切な英文の書き方を身に着けましょう。また、もし出せるのであれば、英文添削にも出しましょう。

事前に伝えておきたいのは、論文のブラッシュアップにかかる時間は、初稿を完成させる時間より長いということです。例えば初稿を上げるのに1ヶ月かかった場合、ブラッシュアップに1ヶ月以上かかることは当然のように起こります。実際には〆切があると思いますので、ブラッシュアップに時間が取れないことも多いとは思いますが、それくらいのスケジュール感で論文を書くように気をつけましょう。

7. 参考資料