こんばんはエンジニアの眠れない夜です。
ディープラーニングはパラメータのチューニングが難しく、いいスコアを出すためには職人技とも言える技術が必要です。
しかし、そんな問題を解決してくれるのがAutoSklearnです。
今回はそんなAutoSklearnについてご紹介します。
AutoSklearnとは?
ディープラーニング(機械学習)を使って予測を行うためには下記のようなステップがあります。
- データの収集
- ラベルの作成
- 前処理
- モデルの構築
- パラメータのチューニング
これらが全ていい感じにできた時に初めてディープラーニングは高い精度で予測ができます。
データが何も無いところから始めると、非常にステップが多く膨大なコストが掛かります。
そして、繰り返しになりますがディープラーニングのモデルの構築とパラメータのチューニングは特に職人芸で高度な知識を要します。
※ ある程度の精度を求めるのであれば知識があまりなくても総当たり的にいろいろ試しているとぼちぼちの精度は達成できます。
しかし、AutoSklearnはこの難しく面倒な
- モデルの構築
- パラメータのチューニング
を自動でやってくれるというスグレモノです。AutoSklearnのようにデータから自動でモデルを作ってくれるものをAutoMLと呼びます。AutoMLで検索するとAutoSklearnに限らずいろんなサービスが出てきます。
- データの収集
- ラベルの作成
- 前処理
モデルの構築パラメータのチューニング
5ステップが3ステップになり、ディープラーニングのハードルがかなり下がった気がします。
データの収集
日々のサービスでログを取ったり、APIやスクレイピングでどこかから情報を集める
ラベルの作成
目的に応じてラベルを作成
前処理
集めたデータだけでは予測しづらい問題に対して補助的な情報を加えたり、いらない情報を削ぎ落とす。
このあたりはディープラーニングに詳しいというより、予測したい問題に自分が精通しているかが重要になります。
これで準備OKです。これならディープラーニングや機械学習についてあまり知らなくてもできそうな気がしますね。
AutoSklearnのデメリット
AutoSklearn中の詳しいアルゴリズムは分かりませんが、すごくざっくり説明すると
いくつかのモデルを構築し、ランダムにパラメータを設定して、良さそうなものを残す。
更にいいスコアが出るものがないかを何度も何度も繰り返して探していきます。
↑この探索方法にも強化学習、遺伝的アルゴリズム、グリッドサーチなどなど…いろんなものがあって日夜研究が進んでいます。
「何度も何度も繰り返し計算する」というところがポイントで、全く見当外れなところも含めて何度も何度繰り返し計算します。
ディープラーニングは1回の学習を実行させるだけでも膨大な計算コスト(≒時間)がかかります。
なのでAutoSklearnはなかなかいい精度を出してくれるのですが、結果が出るまでに数時間や数十時間を要します。
気長に待ちましょう…
この時間がかかるという部分が最大のデメリットなのですが、これはPCの計算速度が上がれば上がるほど安価になります。
最終的には簡単なタスクならデータを放り込んで、後はAutoSklearnのようなAutoMLにやらせてしまえば予測ができてしまう。
ということも十分に考えられます。
こういった自動でモデルやパラメータの設定の精度は現状、人に勝つこともありますが負けることもある。(どちらかというと人に負けることが多い)
※ 但し、ここでの人はディープラーニングにすごく精通している人なので凡人とは格が違います。
時間とともに高精度で少ない計算コストになっていくことは間違いないので、機械学習の知識がなくてもデータさえあればディープラーニングを活用したものを作ることができる!という場面は今後どんどん増えていくはずです。
AutoSklearnを使ってみよう!
AutoSklearnのことはなんとなく知っていただけたと思うので定番の0〜9までの手書き文字を予測するMNISTをAutoSklearnで学習・予測してみましょう!
AutoSklearnの最大のデメリット計算コストが膨大にかかる問題ですが、定番のGoogleColabを使いましょう。
手元にGPUの環境がなくても40万円もするグラフィックボードをGoogleが無料で使わせてくれるという最強のGoogleColabを使えばMNISTなら1時間もかからずに学習が終了します。
サンプルを用意したので、AutoSklearn with MNIST から実行してもらえばMNISTの学習と予測が始まります。
【注意】「ランタイム」から「ランタイムの変更」で「GPU」を選択してから実行してください。None(CPU)のまま実行すると10倍くらい時間がかかります。
最終的な手書き文字の予測結果は 99.11% の精度を出すことができました。
※ AutoSklearnはモデルやパラメータが毎回微妙に異なるので結果が変わります。
WikiにはMNISTの最高スコア(人力)は 99.79%とあるので、それには及びませんが「知識0!」で99.11% の精度を出せるのはなかなか大したものです。
まとめ
ディープラーニング(機械学習)を極めるには長い長い道のりが必要ですが、「使う」ことにフォーカスすると案外簡単に使えるようになります。
AutoSklearn with MNISTでは「学習済みモデルをファイルに保存」→「ファイルからモデルを作成して予測をする」という部分も含まれています。
計算コストのかかる学習はGoogle Colabで済ませて、
予測はAutoSklearnのDocker を使って公開すれば、サクッとディープラーニングを利用したサービスを公開することも可能です。
「使う」ことが目的の人は難しい数式を勉強するのも大切ですがまずは「動く」ものを作って後から理解を深めるために勉強をしていくのも良いのではないかと私は思います。
いつか if文 や for文 と同じくらい「プログラマなら誰でもディープラーニングは使えるよね。」
みたいな未来が来ると技術の進化がもっともっと加速して面白い世の中になるんじゃないかな?と期待しています。
コメントを残す