同氏が考える機械学習初学者向けの学習の指針とは、以下のような6項目にまとめることができます。
- オンライン講座はどれも内容は似たようなもの。内容より学ぶ興味を掻き立ててくれる教師を探せ。
- ツールではなくプログラミング言語に精通せよ。
- 学習過程で開発したモデルは、開発環境で終わらせずに本番環境に実装せよ。
- 機械学習初学者に必要な数学の知識は、直面している問題を解決するのに必要なだけのもの。
- オンライン講座の修了証を集めるのではなく、スキルを磨け。
- 開発したモデルは共有せよ。
なお、AINOWではこの記事のほかにもBourke氏が執筆した記事の一部を翻訳しており、それらには以下のようなものがあります。
機械学習の独学について考えてみる?覚えておくべき6つのこと
わたしの機械学習エンジニアキャリア1年目で学んだ12のこと【前編】および【後編】
私はいかにしてTensorFlowデベロッパー認定資格に合格したか
Bourke氏が執筆している記事は、機械学習エンジニア志望者の役に立つと同時に学ぶ勇気を与えてくれるものと言えます。同氏こそが「学ぶ興味を掻き立ててくれる教師」かも知れません。
後編にあたる以下の記事本文では、学習の指針における項目4~6を掲載します。
なお、以下の記事本文はDaniel Bourke氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。また、翻訳記事の内容は同氏の見解であり、特定の国や地域ならび組織や団体を代表するものではなく、翻訳者およびAINOW編集部の主義主張を表明したものでもありません。
「研究したい」
モノを作ることが研究になる。あなたはモデルをより速く、より良く動作させたいと思うだろう。そのためには、別の仕方で実行する方法を研究する必要がある。研究論文を読み、それを模倣し、さらに改良していくことになるだろう。
「機械学習を始める前にどのくらいの数学を知っておけばいいのか」、と私はよく聞かれる。
この質問に対して、いつも私は「走り出す前にどのくらい歩くか知るべきだろうか」と答えている。
実際には以上のように言わず、普段はもっと優しく「あなたの数学の知識で、今取り組んでいる問題を解決できますか」というようなことを言う。この質問に対して、もし解決できるならば、あなたの数学の知識は十分であり、そうでなければ、もっと数学を学ぼう。
余談だが、私は『機械学習のための数学』という本を注文した。これから1、2ヶ月かけてじっくり読んでいこうと思っている。もっとも、オンラインで無料のテキストを読んだだけで、基礎をカバーするには十分すぎるほどではあるが。
修了証の前にスキル
私は複数のオンライン講座の修了証を取得してきたが、そんなことは愚かだった。
修了証が多い=スキルが多いという考えにとらわれていたのだ。
1.75倍速の講義を最後までやり遂げ、自動試験に合格してオンラインで進捗状況を共有することばかりして、私は燃え尽きていた。
私はスキルを習得するためではなく、コースを修了するために自分を最適化していたのだ。というのも、誰かが説明しているのを見ている方が、自分でやり方を覚えるより簡単だったからだ。
何と愚かな。
真実は次の通りである。試験で習ったことは全部忘れた。実験で学んだことは全部覚えている。
とはいうものも、以上のように言ったからといって、オンライン資格や講座に時間を費やす価値がないというわけではない。講座は基礎的なスキルを身につけるのに役立つ。しかし、自分のプロジェクトに取り組むことで、特定の知識(教わることのできない知識)を身につけることができるのだ。
- 修了証を積み重ねるのではなく、スキルを積み重ねよう(そして、自分の仕事を共有することでスキルを証明する、スキルの共有については後ほど)。
- 講座を増やすのではなく、すでにやった講座を繰り返そう。
- 最新のツールを探すのではなく、一番長く使われているものの使い方を自分なりに改善しよう。
- より多くの教材を探すのではなく、自分の棚にある最高の本を再読しよう。
学習は(何であれ)直線的に進むものではなく、同じ本を2回読んだ方が(それがある程度の実質的な内容を持っている限り)積読よりも良いのだ。
私はよく生徒に、私の講座の卒業証明書を共有する人を見ると私もとても誇らしく思うのだが、むしろ私の講座を修了することよりも講座から自分に必要な部分だけを見つけて、それを自分の仕事に生かすようにしなさい、と伝えている。
何かを追加する前に自問自答してみよう。「自分はすでに終えたことから得られる汁を吸い尽くしているのか」と。
いかにして始めるか
まず何よりも重要なのが、どんな教材よりも「私は学べない」というメンタリティから脱却することだ。そんなメンタリティは〇ソだ。あなたはすでに興味を持っている。あなたなら学べるのだ。
インターネットのおかげで、新しいタイプの狩猟採集民が誕生した。そして、あなたが挑戦すると決めたならば、自分の道を切り開くためのリソースを集めることができる。
とは言え、次に進むべき道が設定されていない。行く手には道が記された地図ではなく、コンパスが設定されている。そのコンパスとは何か。それはアクセス可能なオンライン教材だ。
それではオンライン教材を使って、基礎を固めよう。
初心者パス(6~12ヶ月以上)
もし私がもう一度学び始めるのであれば、機械学習と絡まり合ったソフトウェアエンジニアリング(※訳註2)の実践をはるかに多く学ぶだろう。
また、データサイエンティストのChris I.氏は、AINOW翻訳記事『機械学習エンジニアが職を失いつつある。しかし、とにかく機械学習を学ぼう』において、優れたソフトウェアエンジニアが優れたデータサイエンティストになるのは簡単だがその逆は困難、と主張している。
私の最大の目標は、人々が交流できるものをもっとたくさん作ることだと思っている。
機械学習の具体的な部分に関して、以下の教材が学ぶのに役立つ。
- 機械学習の概念 – 機械学習がどのような問題に利用できるのか、またどのような問題に利用すべきなのかを理解する。こうしたことを学ぶのに「AIのエレメント」は最適だ。
- Python – Pythonというプログラミング言語自体、および機械学習に特化したフレームワークである NumPy、pandas、matplotlib、Scikit-Learn、pythonlikeyoumeanitや、それぞれのフレームワークに関する公式ドキュメントをチェックしよう。
- 機械学習ツール – 主にJupyter Notebookを使用する。
- 機械学習の数学 – 3Blue1BrownやKhan Academyから線形代数、同じくKhan Academyから行列操作と微積分、または単純に『機械学習のための数学』という本を読むこと。
以上と並んで、私なら以下もこなす。
- freeCodeCamp – Web開発のスキルを身につけるために。
- CS50とCS50 artificial intelligence – 基礎的なコンピュータサイエンスと人工知能のスキルのために。
- The Missing Part of Your CS Degree – CS50で欠落している部分のために、そして、いずれ使うことを余儀なくされるツールに関する知識をカバーするために。
- 『Hands-On Machine Learning with Scikit-Learn and TensorFlow 』(邦訳『scikit-learn、Keras、TensorFlowによる実践機械学習 第2版』)の第1部 – 最も有用で実績のある機械学習技術の大部分をカバーしている。
初級者パスだけでも学ぶべきことがたくさんある。そこで私の場合、自分の知識を集約するためにStreamlitやfreeCodeCampで学んだウェブ開発のスキルを使って、1~2個のマイルストーンプロジェクトを構築した。そしてもちろん、これらのプロジェクトはGitHubで共有した。
上級パス(6~12ヶ月以上/継続中)
機械学習の基礎的なスキルを身につけたら、次のようにして基礎のうえにスキルを積み上げよう。
- fast.aiのカリキュラムのすべて – 多くのディープラーニングや機械学習のテクニックに関する実践的なユースケースを確認できる。fast.aiの講座を見ていたら、クライアントのために作っていたソリューションに流用できたほどだ。
- deeplearning.aiのカリキュラムのいずれか – もっとも興味のあるものを選んでみよう。fast.aiの実践的なアプローチを理論的に補完する。
- Full-stack deep learningのカリキュラム – このカリキュラムで、これまで学んできた機械学習の知識とWeb開発の知識を結びつけていこう。
- 任意のひとつの(あるいは複数の)研究論文を模倣する。
- 『Hands-On Machine Learning with Scikit-Learn and TensorFlow 』(邦訳『scikit-learn、Keras、TensorFlowによる実践機械学習 第2版』)の第2部 – TensorFlowに焦点を当てているが、この書籍のコンセプトは機械学習を多くの様々なアプリケーションへ橋渡しをすることにある。
繰り返しになるが、これらを経て、人と人との交流ができるプロジェクトを作ることで、私は知識を集約した。
上級者向けマイルストーンプロジェクトの例としては、機械学習モデルを利用したウェブアプリケーションがある。
カリキュラム例
大学の学位のために出費して得られるもののなかで最も大きなものは、説明責任と構造のふたつだ。
幸いなことに、それらの両方を自分で手に入れることができる。
私は説明責任と構造をかたちにするために自分のAI習得カリキュラムを作ったが、あなたも似たようなことができる。
実際、もし私がもう一度学び始めるとしたら、Jason Bennの「どうやって私はウェブ開発、ソフトウェア開発、そして機会学習を学んだか」(※訳註3)に近いものに従うと思う。これは私が作ったカリキュラムに似ているが、より多くのソフトウェアエンジニアリングの実践を含んでいる。
同氏がまとめた機械学習エンジニアになるための教材は、この記事に挙げられているものと重複しているものが多い。ただし、同氏が教材を推奨するにあたっては、ディープラーニングを専門にする場合とデータサイエンスに精通する場合ではキャリアパスが異なることを指摘している。
他の人と一緒に学べる(小さな)コミュニティを見つけることができれば、それは大きなボーナスだ。しかし、コミュニティで学ぶことに関しては、私にはまだはっきりしたことは言えない。
10億ドルに値するアイデアとは、人々が自己駆動型(self-driven)のカリキュラムを作成し、同じような道を歩んでいる他の人々と交流できるプラットフォームを開発することだ。私が「自己駆動型」と言ったのは、すべての知識の大部分は独学から学ばれるからである。インストラクターの役割は、知識を手渡しで教えるのではなく、刺激を与え、導き、挑戦をうながすことにある。
Friends, does exist a platform which allows students to:
– Create their own curriculum’s (e.g. collecting various online resources)
– Find and interact with students on similar paths
– Ask questions in a shared knowledge baseIf not, why not?
Has this been tried before?
— Daniel Bourke (@mrdbourke) August 10, 2020
友よ、学生が以下のようなことをできるプラットフォームは存在しているだろうか。
– 自分自身のカリキュラムを作る(例えば、様々なオンライン講座を集める)
– 同じような学習過程をこなしている学生を見つけ交流する
– 共有されたナレッジベースで質問を尋ねるもしそうしたものがなければ、なぜないのか。
こんなプラットフォームは過去に試みられたことはないのか。
仕事を共有する
学ぶこと、読むことは息を吸うことに似ている。構築すること、作ることは息を吐くことに近い。学ぶにしても、作るにしても息を止めてはいけない。
教材の消費と自分自身による創作のバランスをとろう。
例えば、6週間かけて学習した後、6週間かけて成果を共有する仕事をやり遂げることで、知識をまとめるのだ。
共有した仕事は、最新の履歴書に記載できる。
それでは、どこで仕事を共有するか。
GitHubと自分のブログがよいだろう。必要に応じて他のプラットフォームも利用しよう。機械学習プロジェクトに関しては、実行可能なColabノートブックで共有するのが最低条件となる。
足りないことは何か
この記事で書いたすべてのことは、栄養学の学部を卒業し、オンライン講座の学費を支払うために週末にUberのドライバーをしながら9ヶ月間寝室で機械学習の勉強をして過ごし、機械学習の仕事を得て、その仕事を辞めて機械学習のオンライン講座を作った私の経験によってバイアスがかかっているものだ。
私は、技術的なスキルを学ぶためにコーディングブートキャンプや大学に行った経験がないので、自分のやり方とそれらの違いを比較することはできない。
とはいえ、この記事ではコーディングと数学の話をしているので、それらを知ってうまく使えるようになるか、そうでないかのどちらかしかないとも言える。コーディングと数学の知識は学ぶ手段によって変わるものではないと知っていれば、選ぶ教材の内容は、どのように学ぶかというほど重要ではない。
この記事の動画版
この記事に沿って過去3年間のクリップをいくつかまとめ、いくつかのポイントを再収録した。すべてのポイントはこの記事と同じではないが、記事のテーマに沿った動画になっている。以下の動画を参照のこと。
1,000日でなんとか髪を伸ばし、ヒゲを生やし、コーディングスキルを身につけることができた。
原文
『How I’d start learning machine learning again (3-years in)』
著者
Daniel Bourke
翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)
編集
おざけん