数学分からず機械学習しても良いじゃん。だってエンジニアだもの。
こんにちは、石川(@Aidemy)です。はてなブログからnoteにちょっと浮気したつもりでしたが、noteのほうが書き心地が良いので今日もnoteです。
機械学習には数学の予習が必要なのか?
さて、以下のツイートがそこそこファボられまして。『人工知能プログラミングのための数学がわかる本』の著者としては黙っておれん!ということで、noteにまとめます。結論としては(数学の参考書を執筆しておきながらw)「数学の予習は不要だと思う派」ではあります。
勿論、数学が完全に不要と言っているのではなく、入り口として数学は不要だよね、という趣旨です。概ね同意のツイートも多く、こんな感想が寄せられました。
ちなみにデータサイエンティストの巨匠、TJOさんは以下のように言及されていました。
もちろん、機械学習エンジニアとして腕を磨いていくなら、線形代数や微分・確率統計などのテーマは押さえておくべきと感じます。特にTwitter機械学習界隈はプロ意識の高いが多いので、数学をしっかりやるべき、という意見が多いように感じます。しかし、私としては、「機械学習エンジニアならそんなに数学を重視しなくても良いのでは?」と思ってしまう派です。
低レイヤーは分からなくてもモノづくりできる、がこの10年のトレンド
低レイヤーとはコンピューターのアーキテクチャに近い領域を指します。例えば、CPUやメモリ、ネットワーク通信などに関する知識です。ハードウェアの上に、Windows, LinuxなどのOS、そしてミドルウェアが載ることで、低レイヤーな知識が無くでも、アプリが制作できるようになりました。
デプロイ環境に関しても同じです。今まではサーバーを自己管理し、個人がメンテナンスをする必要がありました。現在は、IaaS(AWSやGCPなど)を利用することで、サーバーの物理的メンテンナスに気を払わなくてもWebアプリを実装できます。しかし、IaaSには、環境構築の手間や保守のためのメンテナンスは必要です。そのため、最近はPaaS(Herokuなど)も使われることも多く、環境構築や保守さえも不要で、プログラミングコードをアップロードするだけで、アプリにすることができるようになりました。このように、インフラの知識の要求水準はどんどん低下しています。
機械学習も同じで、GPUのアーキテクチャが分からなくても、CUDAとtensorflowがミドルウェアとして載ってるお陰でブラックボックスでも実装できます。さらに、ラッパーライブラリKerasを使うことで、configファイルを書くような分かりやすさで機械学習モデルの実装が可能となるのです。
エンジニアは理論より実装できることが大事
エンジニアは理論より実装が求められる職業だと思っています。WEBアプリを制作する中で、原因不明のバグが起こったり、再現性の無いバグが起ることは度々あります。その時に、原因を特定せずとも、対処方法を考えてバグを解消するのは、よくあることです。初学者は、エラーの意味を一つ一つ原因分析し、プログラミングが嫌いになってしまうこともあると思いますが、そこで躓くべきではないと思うのです。
繰り返しになりますが、機械学習に関しては、チューニングを行う際に数学の知識が合ったほうが良いに越したことはありません。しかし、それはあくまで本質ではなく、数学は実装スピードを上昇するために必要なスキルの一つ、と認識しても間違いではないと思います。(サイエンティストよりの仕事や、事象の「説明」を重視する統計の専門家の場合は、この限りではありませんが。)
エンジニアとして働きたいのではれば、中身はブラックボックスでも、アウトプットがキチンと出れば良い。例えば、麻酔がなぜ人間に聞くのかは正確には解明されていませんが、日常的に使われているのはあまりに有名です。この考え方こそが工学的なものの見方(≠現象の本質の理解を目的とする理学的なものの見方)では無いでしょうか?
それでも数学を知りたい、そんな方には...!
しかし、向上意欲の高い方であれば、数学の知識も付けたくなるはずです。そんな方には、『人工知能プログラミングのための数学がわかる本』がオススメです。この本は、Aidemyの副教材として、数学を復習したいエンジニアのためにデザインされた本です。
この本は機械学習の数学に特化しているので、「微分は扱うけど積分は扱わない」という、なかなかイノベーティブな参考書だと思っています。そのぶんAmazonのレビュー欄は賛否両論で、少し荒れてはおりますがw 私としては、かなり自信を持って提供しているので、興味はある方は一冊、ぜひお買い求めください。