数学嫌いが深層学習の査読付き論文を通すまで

# はじめに
大学・大学院まで画像系の深層学習の研究をしていました。
結果的には、国内発表3回・査読付き論文1本・修士卒業・（学術の課外活動で）学長賞受賞、という感じで、よい大学院生活を送れたと思っているのですが、元々自分は機械学習・深層学習に必須であるはずの数学が苦手でした。

- 数学IIBぐらいまでは辛うじてついていけた
- 数学ⅢCで数学にはセンスの壁がありそうだと感じる
- 研究室の恩師のデジタル信号処理・統計学の講義は最低評価の可
- 微分方程式の講義に関しては、欠席0にも関わらず落とす
- 微積分の授業中の課題は[Wolfram Alpha](https://www.wolframalpha.com/)で解く

という感じで、数学に関しては今も苦手意識がややあります。

ただ、ネット上を見ていると、数学がもともと得意だった人が機械学習に取り組む例が多いなと感じ、数学が苦手な人（端的に言えば文系の人）でも、やる気があれば学術的なレベルもできるよということを書くために、自分の学びの遍歴を書きながら、こういう観点で勉強すればいいのでは？ということを列挙してみます。

著者の前提として画像系の研究室に所属していました。
また、TensorFlowなどの深層学習フレームワークが出始めた頃で未解明の部分が多かった時代なので、今は少し違うかもしれません。

# まず手を動かす
基本的に数学が苦手であるほど、手を動かした方がいいと思います。
何もわからないけれどなんか手元では動いている、という状況は、とりあえずなにか進捗があるという心の平静を生んでくれます。
## チュートリアルに取り組む
チュートリアルとして、Kerasブログの[Building powerful image classification models using very little data](https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html)をおすすめします。
[<img width="1280" alt="Building powerful image classification models using very little data" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326601/5c62493f-00b3-a86c-dea6-d96ea4cd8bd8.png">](https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html)


Keras(TensorFlow)ではなく、PyTorchを使うという人がいるかもしれませんが、考え方やり方は基本的に同じなので、このチュートリアルをおすすめします。

このチュートリアルの良いところは、犬と猫を分類するというタスクを通して、どのようにすれば高精度な分類にできるかを一通り学ぶことができる点にあります。

深層学習では他のタスクで成功したモデルを異なるタスクで活用する転移学習というアプローチがよく取られますが、スクラッチ（何も学習していないモデルで学習する）から始めて、転移学習で学習させて高精度が分類を実現するという一通りのやり方をこのチュートリアルで学ぶことが出来ます。2値分類であれば、学習するデータを入れ替えれば、これだけでも最初の研究の実験が出来てしまいます。
## 古典的手法を超えてみる
深層学習は多くの分野でブレイクスルーをもたらしており、（特に画像系の分野では）正解率という観点だけで考えれば、古典的手法を超えることは容易に可能です。

そのため、研究の最初の段階では研究室の先輩と同じ実験設定（こういうデータからこういうクラスを予測したい）にして、手法に深層学習を導入することでその手法を精度を超えるということを自分は行いました。

このときに「5年前にこの結果を出せていたら、それだけで修士論文が書けると思う」という先生の言葉を聞いて、深層学習の凄さを実感しました。

## 分からなくていいと割り切る
これは数学が苦手な人に特に贈りたいのですが、深層学習で出てくる数式があまり理解できなくても、深層学習の研究は出来ますし、人が言っていることもだいたい理解できます。

もちろん、畳み込みの演算や誤差逆伝播法など、数学的にこうやって計算すると定義されているものについては一通り押さえていく必要はありますが、その集合である深層学習モデルの中で何が起こっているかは基本的にブラックボックスで誰にも分かりません。もはやそれを解釈しようとするのをやめろという論文すらあります。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ブラックボックスの機械学習モデルを解釈する方法を編み出すのをやめなさい、という批判論文。解釈手法は元のモデルを完全に説明できない(もしできたら解釈可能な手法と互換になる)だけでなく、「説明」は多くの場合説明になってないなど様々な点が指摘されている。<a href="https://t.co/QZ4iBrwxJb">https://t.co/QZ4iBrwxJb</a></p>&mdash; piqcy (@icoxfog417) <a href="https://twitter.com/icoxfog417/status/1205303286544257024?ref_src=twsrc%5Etfw">December 13, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

そのため、最初のうちはわからないけど手を動かす、でいいと思います。研究を進めていく中で、機械学習や統計学の知識がついてきて、自然と「こういうことなのかも？」と考察できるときが来ます。その時までは、フレームワークの力を活用しながら、パズルのように手を動かして、経験を貯めていく方が良いと自分は考えます。

# 古典的な手法を知る
深層学習の原理は分からなくてもいいとは言いながらも、深層学習以前の古典的な手法は押さえておかなければ、論文の中で納得感を出すことや手法の解釈が難しくなることは事実です。一通り手を動かしたあとは、数学にも少し向き合う必要はあるかなと思います。

## 輪読
自分はもちろん数学に苦手な意識があるので、自分から勉強することは少なく研究室の輪読にすごく助けられました。

[<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326601/256acf8f-1cfd-8a28-b623-3010b2589780.png">](https://www.amazon.co.jp/B07GQV1X76)
[深層学習](https://www.amazon.co.jp/B07GQV1X76)
大学院2年生のときに読んだのですが、それぞれの項で様々な論文が紹介され、深層学習の歴史が一望できるような本になっています。Ian Goodfellow先生の研究自慢のような一面はないとは言えないので、これだけで全てというのは禁物ですが、研究レベルの深層学習を押さえることができる本だと思います。

[<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326601/5285628a-005b-968e-ce01-d8dbd6ecbbaf.png">](http://faculty.marshall.usc.edu/gareth-james/ISL/)
[<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326601/bc952b90-4fea-b958-c789-e6926a72ff9e.png">](https://www.amazon.co.jp/432012362X)
[An Introduction to Statistical Learning](http://faculty.marshall.usc.edu/gareth-james/ISL/)
[統計的学習の基礎](https://www.amazon.co.jp/432012362X)
この二冊に統計学と機械学習の基本を徹底的に叩き込まれました。輪読という環境下だったので、無理をしてでも読んでいましたが、[An Introduction to Statistical Learning](http://faculty.marshall.usc.edu/gareth-james/ISL/)だけでもいいかなと思います。どちらも英語であれば無料で読めます。

[<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326601/63a870aa-a9b0-2a7c-7d8c-1d51dccada5d.png">](https://gihyo.jp/book/2019/978-4-297-10740-6)
その他に社会人になってから、[わけがわかる機械学習](https://gihyo.jp/book/2019/978-4-297-10740-6)という本も読んだのですが、これもおすすめです。そもそも確率って何？モデルって何を表している？というところから始まり、どういうことをしたいからこういう風に考えるんだよということを、数式を使って丁寧に解説してくれています。

数学が苦手でもいいですが、上に上げた本や先生や同期の手を借りながら、数式が表したい気持ちは理解したほうが研究は進めやすいかなと思います。

# 著名な学会の論文からアイディアをもらう
研究のアイディアはどうするの？というときにはアンテナを立てることが一番だと思います。

## 自分の分野の著名な学会を知る
分野ごとに大きな学会というものが必ずあると思います。

自分の研究分野は動画像認識だったので、CVPRやICCV、国内ではCVIM・MIRUの研究をよく追っていました。やはり大きな学会の研究は洗練されていたり着目点が優れている研究ばかりなので、大きな研究会の研究は追うべきだと思います。

画像認識系のCVPR、ICCVは現在では完全読破を目指すグループがすぐに日本語でサーベイをあげてくれるので、特にやりやすいです。【[cvpaper.challange](http://xpaperchallenge.org/cv/survey/)】の方々、研究ではお世話になりました。

## 強いアイディアを自分の分野に落とし込む

大きな学会の中で自分の研究テーマに近いものを見つけたら、それを自分の研究テーマに落とし込めないかを考えてみます。

完全に同じものであれば落とし込めないですが、研究目的やアプローチ・データなどが完全に一致することは修士レベルであれば多くないと思います。反対に、似た研究が大きな学会にないということも少なく、だいたいは似たような研究があると思います。

自分は一人称視点映像認識（Egocentric Activity Recognition）というニッチ分野だったこともあり、世界的な学会でもアプローチがかぶることは少なかったです。そのため、その論文中での着目点やデータの入力/出力の設計方法などを大いに学ばせてもらい、それを自分の研究に反映させました。

達人は真似から入ると言いますし、こういう研究の仕方も自分はありかなと思っています。
（博士レベルになれば、もっと独創的な手法が必要かもしれませんが…）

# 論文を書けるようになる
これは機械学習の勉強に直結はしませんが、研究で苦労しないために簡単に書いてみます。

## 何に役に立つ？を説明する
これは大学1年生まで遡るのですが、当時の回路理論の先生が言っていた話がいまだに自分の中の工学の定義を決めています。

「理学部はこの世の真理を追求している。
だから、回路理論を学んだら、それがなぜそう動くのかを理解しなければいけない。
でも君たち工学部がやるべきことは、人々の役に立つものを作ること。
だから、それがどうやって動いてどういう結果をもたらすかがわかればいい。」

特に深層学習の分野は未解明なことが多く、なぜそうなるかを追求したら終わりません。しかし、それがよくは分からないけどうまくいき、そしてこういう問題を解決することができる、という説明はできると思います。

「イシューからはじめよ」のイシュードリブンではないですが、ある問題があり、こういう問題を深層学習で解決できるんだ、という考え方をしていると、論文は書きやすいなという気持ちがありました。

## わかりやすい説明の型を知る

自分も論文を書くのがずっと苦手だったのですが、読書猿さんのブログを読んだことでだいぶうまくかけるようになりました。
https://readingmonkey.blog.fc2.com/blog-category-25.html

結局、論文は書き方を知らないというだけで、こういう型を知ったり、先生に添削をしてもらうことを繰り返すうちに
話の組み立て方や言い回しなどが定着してくると思います。

本で学びたいという人には、「理科系の作文技術」が有名で一読の価値アリです。
[<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326601/69be2169-7169-39a6-3fa9-2dd6a6f6c874.png">](https://www.amazon.co.jp/dp/4121006240)


# 終わりに

今回は、自分の機械学習/深層学習の遍歴を書いてみました。

研究を通してずっと思っていたことは、機械学習においては理解するよりも手を動かしたほうが早いということです。
コンピュータがこれだけ発達した今の世の中では、人間が考えるよりもコンピュータが考えたり学習したりするほうがうまくできることがたくさんあります。

機械学習/深層学習もコンピュータがやってくれると割り切って、あとは必要なことをやっていけば、数学が得意じゃなくても意外となんとかなるのではないかなと思っています。エンジニアリングの力を信じましょう。

今年も頑張っている学部/院のみなさんの論文が無事に完成することを願っています。