最終更新日:
第3次AIブームが到来する前の2000年代後半までは、機械学習を学ぶ人は専ら大学研究者でした。こうした事情により、当時の機械学習の教科書は数学的理論の理解を重視したものとなっていました。理論重視の教科書作りはその後も引き継がれ、現在入手できる機械学習の教科書も初学者に理論から学ばせる傾向のものが少なくありません。
同氏は、機械学習を使って実用的なAIモデルを開発したいエンジニアにとっては、理論重視の教科書は学習の妨げになっていると批判します。エンジニアが習得すべきなのは機械学習の背景にある数学的理論ではなく、具体的な開発環境でAIモデルを活用する実践的ノウハウです。こうした実践的ノウハウは、実際にAIモデルを構築するプロジェクトを実行することによってもっとも効率的に習得できる、と同氏は主張します。
もちろん、同氏は機械学習に関連する数学的理論を軽視しているわけではありません。批判しているのは、初学者が理論を最初に学ぶことです。反対に同氏が推奨するのは、プロジェクトを実行するなかで興味がわいたり、深い理解が必要になったりした時に理論を学ぶことです。
同氏が主張する「実践を通して開発スキルを習得する」という学習方法は、実のところ、「PBL(Project Based Learning:課題解決型学習とも呼ばれる)」や「アクティブ・ラーニング」として知られているものです。こうした学習方法は、プログラミング教育の必修化に伴い、教育現場でも注目を集めています。実際、文部科学省、総務省及び経済産業省は、2019年9月に共同してアクティブ・ラーニングによるプログラミング教育を推進する活動として「みらプロ」を開始しました。この活動の一環として、Googleが提供する教育用AIモデル開発ツール「TM2Scratch」を使ったAIモデルの構築体験を通して、AIの社会的意義を学ぶ授業が東京都の小学生を対象として実施されました。
これからのAI業界は、アクティブ・ラーニングを経験した人材が流入してくると予想されます。実践学習型の人材が増えれば、AIモデル開発の教育方法も実践重視のものが主流になっていくかも知れません。
なお、以下の記事本文はCaleb Kaiser氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。
目次
機械学習モデルを使ってソフトウェアを構築する方法を学ぶ
免責事項: 以下の内容は、機械学習チームに対する私の観察に基づくものであり、機械学習業界の学術的な調査ではない。本記事は、本番環境でモデルを実装するためのオープンソースプラットフォームであるCortexのコントリビュータという私の立場から執筆している。
もしあなたがソフトウェア開発者であれば、少なくとも機械学習には多少なりとも興味を持っているだろう。予測を行うために自分自身を教育するアルゴリズムという機械学習の概念は、ある種の…クールさがある。
しかしながら、もしあなたが機械学習を勉強しようと決めて,標準的な推奨事項に従った場合,あきらめる前に線形代数と多変量微積分を正規に2週間学習するというチャンスに恵まれるだろう。
線形代数のような数学を学ぶ理由は、機械学習の入門書のほとんどが開発者向けではなく、この分野の研究者向けのものだからである ― こうした事情が、機械学習を使って製品を作りたいと考えている開発者にとって問題となっている。
製品を作りたいのか、それとも研究をしたいのか
2000年代後半までは、機械学習は多かれ少なかれ研究者が独占的に取り組む問題であった。有意義な方法で機械学習を製品として使用している企業は、ほとんどなかった。
そのため機械学習のために使える入門書の多くは、研究の観点からアプローチして書かれていた。ニューラルネットワークを数学的な観点から説明することから始まり、機械学習の背後にある理論、例えばバックプロパゲーション(誤差逆伝播学習法)や敵対的ネットワークのようなものをすべて説明していた。
大学が関係していない資料でも、ある程度はこのパターンを踏襲している。例えば、以下の画像はTensorFlowの「初心者のための TensorFlow 2.0 入門」から直接引用している。
上の画像を見て、私が紛らわしい言葉が書かれている箇所を敢えて選んでいると思うのであれば、入門資料の全体を読むことをお勧めする。
機械学習の背後にある数学にすでに精通しているか、数学を学ぶことに興奮しているならば、このアプローチはあなたのために機能するだろう。しかし、主に機械学習を使って何かを構築したいと考えているのであれば、このアプローチはあなたが探しているものとは必ずしも一致しないかも知れない。
プログラミング学習を引き合いにして言えば、このアプローチは最初にアセンブリを学習してコードを書くことを学ぶようなものだ(※訳註1)。事実上、このように学ぶ開発者はいない。
注記:もしあなたが何らかの形でアセンブリ言語でコードを学習したのであれば、私はあなたの怒りに満ちたコメントを受け入れよう。そして、あなたが使っているどんな不分明な分散型Linuxにもインストールできるブラウザを持っていることに感動すらするだろう。
あなたがコードを学んだとき、おそらくは高水準のプログラミング言語でhello worldを書いて学び始めただろう(※訳註2)。そして、プロジェクトに少しずつ複雑なものを導入していくうちに、必要に応じてどんどん低レベルのプログラミングを学んでいったはずだ。
この学習パターンは、ソフトウェアを構築する人のあいだでは成功している。というのも、理論ではなく物を構築することを優先しているからだ。もしあなたが論文を発表するよりもレコメンデーションエンジンを作りたいと思っているのであれば、構築を優先することこそが、機械学習を学習する際にとるべきアプローチなのだ。
アセンブリ言語は、現在のソフトウェア開発では主流のプログラミング言語とは言い難いが、極度に最適化が必要な場合のような限定的な局面で今でも使われることがある。
ソフトウェアを構築して機械学習を学ぶ方法
もしあなたが講座を受講することで最高の学習をするタイプの人であれば、実装という応用から始めるトップダウン形式であり、機械学習を実際に実行してみて学ぶアプローチをとっていることでおそらく多くの口コミの支持を得ているfast.aiの「Practical Deep Learning For Coders(コーダーのための実践的ディープラーニング)」コースがベストなリソースだろう。
この記事の目的はfast.aiを大いに宣伝することではないが、その創設者(Jeremy HowardとRachel Thomas)は開発者に実際にものを作ってもらったうえで、作ったプロジェクトに関連する基礎理論に飛び込んでもらうことを通じて、ディープラーニングを教えるコースをいくつか用意している。彼らの教育スタイルを知るには、Rachel Thomasの以下のトーク動画をチェックしてみてみよう。
あるいは、あなたがはじめに渦中に飛び込んで物事を構築することで最もよく学ぶタイプの人であれば、機械学習を始めるにあたっては、他のニッチなプログラミングと同じようにすればよいだろう。興味がありそうなプロジェクトを選んで飛び込むのだ。飛び込んでもらうために、私は初心者向けのNLPプロジェクトの巨大なリストをまとめてみた。
あなたが作って学ぶ方法で学習すると想定した場合,以下に示す学習手順は機械学習を使って構築することがどのようなものかを理解するための良いアプローチとなるだろう。
- テキストの自動補完機能やナンバープレートの識別モデルの構築、というような目標を設定する。
- あなたのプロジェクトに合った事前学習済みのモデルを見つける。GPT-2またはYOLOv3は、以上で例に挙げたプロジェクトに対応している(※訳註3)。
- お好みであれば、gpt-2-simpleのようなライブラリを使ってモデルをファインチューニング(自分のデータに合わせてカスタマイズ)することもできる(※訳註4)。
- 最後に、モデルをマイクロサービスとして実装する。
モデルをAPIとして実装したら、他のWebサービスと同じようにリクエストできるようになるので、そのAPIのまわりにアプリケーションを構築することができる。
ナンバープレートを識別するモデル構築を解説したこのMedium記事を読むと、機械学習に精通した一人のエンジニアが作成した現実の世界で使えるアプリケーションの開発過程を見ることができる(以下の動画も参照)。
作って学ぶアプローチでは、様々な人気のあるモデルアーキテクチャや機械学習へのアプローチ、そしてそうした開発技法がどのようなアプリケーションに適しているかを学ぶことができる。さらに重要なこととして、モデルから実際の製品を構築するために不可欠な機械学習のインフラストラクチャについても学ぶことができる。
事前学習済みの機械学習モデルを活用した開発手法については、本記事著者のKaiser氏が執筆したAINOW翻訳記事『ディープラーニングはもう難しくない』を参照。
機械学習を使って構築できるようになったら、次は理論を学ぼう
あなたがエンジニアであれば、おそらく以前に何らかの認証処理を実装したことがあるだろう。こうした時、(おそらくは)パスワードをハッシュ化したことだろう(※訳註5)。
パスワードのハッシュ化を設定するときに、独自のハッシュ化アルゴリズムを書いただろうか。 何週間もかけて暗号化の勉強をしただろうか。それともbcryptを使っただろうか(※訳註6)。
同様に、最初のウェブアプリケーションを構築したとき、何週間もかけてデータベースの勉強をしただろうか。データベースをゼロから自分で書いただろうか。それともお気に入りのフレームワークに付属しているORMなら何であれ、それを使ったのではないだろうか(※訳註7)。
ソフトウェア開発で通用するロジックは機械学習にも当てはまる。もしあなたがソフトウェアを構築するのが好きな人なら、機械学習を使ってソフトウェアを構築することから始めてみよう。ソフトウェアを構築する時は、基礎となる機械学習の理論をツールや事前学習モデル、さらにはフレームワークから抽象化して脇に置いておこう。その後、好奇心がわいたり、プロジェクトでより複雑なものが必要となったりしたら、使った機械学習がどのように機能するのかを理解するために理論を覆っていたフードの下を深く掘り下げてみてよう。
Omer Spillinger氏、David Eliahu氏、Vishal Bollu氏に感謝の意を捧げる
ユーザのパスワードをハッシュ化しておけば、ハッシュ化したパスワードが盗まれたとしても、ハッシュ化される前のパスワードは知られない。
bcryptはC、Java、Pythonといった様々な高水準プログラミング言語で使うことができる。
PythonにおいてORMを使えば、SQLをクラスのように扱うことができる。つまり、SQLの詳細な構造や理論を意識しなくてもデータベースを使えるのだ。
▼YouTubeでも解説!
原文
『Don’t learn machine learning』
著者
Caleb Kaiser
翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)
編集
おざけん