こんにちは
僕は、モナレッジ開発したりいわゆるエンジニアをさせていただいているわけですが、会社では機械学習エンジニアとしてお仕事をしております。
ちなみに私は
株式会社Fusicという福岡のIT企業の機械学習チームのエンジニアとしてお仕事をしています。
https://fusic.co.jp/members/79
そんなこんなで今日は珍しく業務に近い機械学習やデータサイエンスに近いお話をしていきます。
対象とする人は
- 機械学習エンジニアやデータサイエンティストを志す人
- 機械学習プロジェクトやデータドリブンのプロジェクトに関わる可能性があるが、何から手を付ければよいのかイメージのわかない人
はじめに
機械学習やデータサイエンスというと、高度な数学を求められる印象があると思います。
それゆえに、食わず嫌いで敬遠してしまった方もいるのではないでしょうか?
確かに、研究分野で第一線で活躍されている方は高度な数学理論をうまく活用して新しい発明などにつながっている例も多く見かけるので一定のレベル以上の数学に関する知識が求められると思います。
一方で、実際にプロジェクトで利用する際には必ずしも高度な数学を求められるわけではないのかなとも思っています。もちろん、数学に明るく理論的なことがわかることに越したことがないことは強調しておきます。
とはいえ、最近は典型的な機械学習モデルや統計関連のパッケージやモジュールが公開されているので利用するだけならお手軽にできるようになってきました。もちろん、中で何が起きているのかは把握していることに越したことはないですが、入力と出力(出力の意味)を把握しておけばとりあえず使えるかなと思います。
とはいえ、僕は大学で暗号やデジタル署名、マルウェアなどセキュリティに関する研究室だったので機械学習やデータサイエンスの研究をしていたわけではないので、入社して(2020年入社)からのスタートでした。そのころになると、比較的教材や情報、モジュールなどが充実していて第一歩を踏み出す環境はかなり整っていたと思います。
今回は参考になった資料などを思い出して、これからスタートする人の参考になればと思います
基礎的なことを勉強するときによかった教材
最低限の数学(統計よりの数学)を学ぶ
大学で統計学などをしっかりやられた方からしたらかなり簡単に思えてしまうかもしれませんが、内容を忘れてしまった方や、これから始めたい方はぜひ手に取ってほしい本ですね。
おすすめできる理由として、各トピックに関して
- 理論の解説
- pythonでの実装
- scipy, numpyなどを使った実装
の三弾構えになっていることです
scipy, numpyはpythonで利用できる統計・数値計算などを扱うライブラリである程度の統計処理を数行のコードで簡単に実装できるものです。
最初に分かりやすい具体例を交えた理論に近いところを勉強して、生のPythonで愚直に実装して、モジュールを使って短いコードで実装できる方法を学ぶ。
このような流れで、同じ機能を3方向から学ぶという意味でかなり定着率が他の参考書に比べて定着率が高いなという実感がありました。
機械学習
scikit-learnというpythonで機械学習とかを行うときに簡単に呼び出せるパッケージなのですが、この本は主にscikit-learnを使った紹介が多い本でした。
ただ、1周目はかなり難しいと思いますが何度か見直している内に雰囲気がつかめてきますのでわからなくてもとりあえず進める精神でやってみると良いと思います。
機械学習というとディープラーニングのイメージが強いと思いますが、達成したいことによってはディープラーニングではない手法を使った方が良い場面もあります。そんな時のために頭の中の引き出しを増やすという意味でもscikit-learnのことをサッと触れておくのは良いと思います。
とりあえず何のモデルがどんなことをできるのかくらいをサッとおさえるくらいはしておいて損はないかと思います。
ディープラーニング
通称「おさかな本」
この本はディープラーニングを最初に学ぶにはかなり良い本だと思います。理論的なことを学び、numpyを使って実装していく本です。実際にディープラーニングのモデルを実装するとなるとpytorchやtensorflowを使うことが多いですが、初めからその手のものを使ってしまうとブラックボックスのまま使ってしまうことになるので最初くらいはしっかりとこういう実装をしておくのも良いでしょう。
勾配降下法やCNNのところの解説は初心者でもかなりわかりやすい解説がされているのでお勧めです。
学部生時代に購入した本ですがこの本は5回くらい読み直しましたね。
一冊で一通り勉強したい人向け
達人データサイエンティストによる理論と実践シリーズ
僕が読んだのは第2版なのでこの新しい青色のカバーのやつは読んだことないのですが、非常にボリューミーではあるのですが、古典的な機械学習の手法からディープラーニングの入門までカバーしているのでこれ一冊でもかなりの範囲が学習できるでしょう。
webコンテンツ
- メディカルAI専門コース オンライン講義資料
https://japan-medical-ai.github.io/medical-ai-course-materials/
医学系のデータサイエンスを最終着地点とした教材ではありますが、機械学習エンジニアやデータサイエンティスト界隈でもバズった教材です。
医療系に興味が無くても、教材のクオリティがものすごく高いので勉強になるところがめっちゃ多いと思います。しかもgoogle colabでサンプルのnotebookが公開されているので環境構築の手間がなく、実際に動くコードで学ぶことができます。
このクオリティの教材が無料で閲覧可能なのは本当にありがたいです。
注意
ここまで紹介した本などに関するレビューは、あくまで僕個人の感想なのでリンク先のレビューとか、目次とか読んで取捨選択していただければと思います。
基礎からのステップアップ
さて、これまでに紹介したのは入門書としてよさそうな教材を紹介しました。
主にピュアなPython、使ってもnumpyなどの数値計算モジュールで実装するものが大半です。
これから紹介するのは、pytorchという機械学習の実装を行う際によく使われるフレームワークを用いた実装などが紹介されているものです。個人的な感覚ではありますが比較的業務レベルに近い参考書になるかと思います。
特に近年は論文実装でpytorchがよくつかわれています。tensorflow実装ももちろんありますが、比較的pytorch実装の方が良く見かける印象があります。フレームワークの思想としては、tensorflow1系は直感的ではないところが多く(言葉を忘れたw)、pytorchの方が直感的に実装ができるイメージがあります。
tensorflow2系からは、pytorch同様な思想で設計ができるようになったので使いやすさはあまり変わらなくなった印象がありますが、論文実装でpytorchが多いため新しいモデルとかをどんどん試して使ってみたいという場合はpytorchから始める方が良いでしょう。
一方でtensorflowはより運用向きなところもあると思います。例えばtensorflow jsなどフロントエンドでモデルを実行させるためのものであったり、プルーニングなどでモデルの軽量化などをやりやすいのはtensowflowに軍配が上がる印象があります。このように、それぞれ特色があるのでどちらもできたことに越したことはありませんが、強いてどちらからやるべきかという質問に対して答えるなら、独断と偏見になりますがpytorchをお勧めします。個人的にはpytorchの方が使いやすく、直感的に実装ができて、いろいろな場面で使えて便利だなとおもった印象があるのでw
こういうフレームワーク戦争は、Ruby on rails VS Laravelみたいなものだと思うので、好きな方を選べばいいと思います。とりあえず両方眺めてみて性に合う方を使うのが良いと思います。どちらのフレームワークを使っても素晴らしい機械学習モデルの実装はできるので。
(僕は論文で理論を読んでも、実装に落とし込むのにものすごく時間がかかるので、論文実装が多いpytorchなら自分で実装する手間が小さいからというセコい理由もあります... ぴえん)
pytorchでおすすめの参考書
弊社の新卒で入ってきた方に研修で一通りやってもらっている書籍でもあります。僕も入社して最初にこれやってました。
とにかくわかりやすくて、一番おすすめできる本です。
githubにコードが公開されており、issueでさまざまな質問や改善点が報告されており、筆者の小川さんが丁寧に回答をしてくださっていることに本当に感銘を受けてます。
参考書の中ではAWSでの実装を想定した中身だったのですが、自分はgoogle colabで実装できるようにいろいろいじったりしていて躓いたときにissueを通して質問をした際にも丁寧な回答をいただくことができました。的確かつ丁寧な回答をいただけて本当に筆者の小川さんには感謝をいくらしてもしきれないほどです。
会社で物理本を購入したのですが、私個人としてもお金を払いたかったのでkindle版を個人でも買ったほどです。
本の内容も素晴らしいのですが、もし躓いたときはgithubのissueを参考にすると大体の課題は解決すると思いますので、githubのissueも含めてという意味では値段を大幅に超える価値を得られると思いますので、ぜひ手に取ってほしい一冊です。
内容も
- 画像分類と転移学習(VGG)
- 物体検出(SSD)
- セマンティックセグメンテーション(PSPNet)
- 姿勢推定(OpenPose)
- GANによる画像生成(DCGAN、Self-Attention GAN)
- GANによる異常検知(AnoGAN、Efficient GAN)
- 自然言語処理による感情分析(Transformer)
- 自然言語処理による感情分析(BERT)
- 動画分類(3DCNN、ECO)
と盛りだくさんで、よくよくあるテーマに関して網羅しているところが素晴らしいと思います。
画像、自然言語処理、動画、のすべてに対して網羅できるので最初に紹介した資料などで基本を押さえたうえで、この本を参考にしながら実装をするというのはかなり実務に近い、身になる教材になると思います。
実務経験や、機械学習をテーマにした研究の経験や実績がない方は特に一回これをやっておくといいぞと声を大にしておすすめできる書籍になります。
それぞれのテーマを深める
これまで紹介したのは、統計、データサイエンス、機械学習に関連する網羅的な、広く薄くというイメージのものでしたが、これから紹介するのは特定のテーマを深堀するためのものになります。
最初からこの手のものを手にとってもチンプンカンプンだと思いますがそれぞれのテーマを深堀していくという意味では有用な資料を紹介します。
ウェブ最適化ではじめる機械学習 ―A/Bテスト、メタヒューリスティクス、バンディットアルゴリズムからベイズ最適化まで
web系のお仕事をされている方が開発したシステムの運用が数年と経って、DBにある程度データがたまってきました。これからたまったデータを活用したり、A/Bテストをして経営判断をしたりなどの際に必要な数学的な背景から、実装までを面倒見てくれる参考書です。
個人的にはコードが多い参考書なので、理論+コードとして二方面の理解ができるのでかなりおすすめができます。専門書?としては日本語が理解できれば比較的理解ができる入門書にちかいレベル感の本だと思います。
機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)
ベイズはここ最近注目されているテーマですね。
一番身近なのは条件付確率の式でしょうか。因果→結果の関係性を結果→因果の方向に変換が数式的にできてしまうことから始まり、信頼区間(機械学習で学習データの密度にばらつきがある場合にもうまく説明ができる)などをうまく説明ができる理論だったりするので、ベイズに関するところは完全には理解できなくても、「ふーん、そんなこともあるんだ」という雰囲気をつかむだけでも結構価値があると思います。
ベイズは統計の分野でも結構目にするのでこれを機に、基礎と応用を体系的に学ぶのもおすすめです。
ガウス過程と機械学習 (機械学習プロフェッショナルシリーズ)
ガウスが関わる理論は雰囲気だけでもさらっておくといい気がしますよねw
正直、青本はプロ向けなので相当難しいので僕はあまり理解はできませんでした。
しかし、ガウスといえばガウス分布など、天才数学者ガウス様のいろいろな応用先があるので雰囲気をつかむにはいいかと思います。
論文追い
書籍などはどうしても二次情報になってしまいます
一次情報から知識を得ると意味では論文から知識をアップデートできるのが良いかと思います。
Arxiv
arxivでは査読前の論文が読めます。
機械学習系の論文はほんとんどここで公開されているので定期的に見に来る癖をつけておくとよいでしょう。
おすすめ論文
僕はたまたま自然言語処理系の案件にアサインされているため自然言語処理系でおすすめの論文を紹介します。
最近は、自然言語処理の発展が目覚ましくtransformerなども画像側での応用(ViTなど)も多いので知っておいて損はないでしょう
Attention Is All You Need
https://arxiv.org/abs/1706.03762
近年のtransformerなどに影響があった論文。とりあえずざっと把握しておくことをお勧めする
論文読みと合わせて解説記事とかも読むと理解の助けになるかも
BERT
https://arxiv.org/abs/1810.04805
大規模モデルを教師無し学習でpre-trainをし、特定のtaskにfine-tuningするという流れを自然言語で適用したもの。
自然言語処理とかでは最近はデファクトスタンダードといえるほど、よく使われている印象。googleの検索エンジンでも使われているとか。
BERTを用いて得られるベクトル表現はかなり応用が利くので、BERTをベースにした研究やアプリケーションはかなり多い。できることや原理はぜひ理解しておきたい。
論文に関しては知っておいた方がいいものが多すぎるので、いったんここまで
終わりに
ざっと、入門の参考書やweb教材から日本語で学べるものを中心に紹介しました。
論文などは英語で出てきますが、有名どころは日本語での解説記事などが出てくるのでぜひ読んでみると良いでしょう。それで概要を把握したうえで一次情報の論文などにアクセスすると注目すべきところがイメージできると思うので学習の助けになると思います。
二次情報から入ることは、理解の助けになることもあるとは思いますが、一次情報にアクセスして情報を確かめるという習慣は、技術に限らずリテラシーとしてぜひ身に着けてほしい能力です。
ちょくちょく今後も参考になった資料は追加で改定期かもしれないので、この記事または、別記事で書くかもしれませんが、ちょくちょく参考にしていただければなと思います