bonotakeの日記

ソフトウェア工学系研究者 → AIエンジニア → スクラムマスター・アジャイルコーチ

ディープラーニングをやる人向け『仕事ではじめる機械学習』のオススメと注意点

はじめに

明けましておめでとうございます。今年もよろしくお願いします。

たまたま昨年末に、Facebookの謎な対応により始めてしまったはてなブログ、「次書くかどうかわからない」とは書きましたが、次も書いてみることにしました。

なぜそう思ったか、理由は2つあります。1つは、日頃はTwitterかFacebookばっかりやっている自分ですが、そっちだとどうしても書いたものが流れてしまって、あとから自分で見返したくても見返せないこと(特にFacebook。TwitterはTwilog使ってるのでまだマシ)。

もう1つは、とある本について、どこかに書き留めておきたいなぁ、と思ったこと。

その本の名前は、『仕事ではじめる機械学習』です。

仕事ではじめる機械学習

仕事ではじめる機械学習

経緯

この本、最初は同人誌だったものが、オライリーから昨年10月に電子書籍として発売されたところ、ベストセラーとなって、今月1/16に紙の本(ソフトカバー本)が改めて発売するとのこと。

僕はこの本、電子書籍が出た割と直後くらいに買いまして、非常に感銘を受けました。

早速、機械学習(ディープラーニングですが)でメシを食っている勤務先にも布教しました。会社でも電子書籍を購入しまして*1、エンジニアだけではなく、ビジネス開発やセールスのメンバーにも読んでほしい、と、社内Slackで宣伝しまくりました。

ただ、一方で。

「機械学習」でなく「ディープラーニング」を飯の種にしている人間からすると、多少気になる点があり、ついこんなツイートを。

そしたらその後、著者の1人である有賀さんに初めてお会いしたとき、いきなり「ディープラーニングだとどこが違うんですか?」などと質問され、(わーおしっかりチェックされとるやんかーい!)と冷や汗をかいたり……

そんなこんながありましたんで、(たぶん沢山有るので今更ですが)簡単ながらこの本の紹介と、普通の機械学習(ML)でなくディープラーニング(DL)を使う人の場合、どういう点に注意して読めばいいのか、という辺りを書きたいと思います*2。

『仕事ではじめる機械学習』のススメ

この本、何がいいかといいますと、あくまで「ビジネスで機械学習システムを組む人のための本」、になっているということです。

「機械学習」ではなく、「機械学習システム」*3であることがポイント。機械学習をすることが主目的ではなく、あくまで、実現したい製品/サービスのために機械学習を用いる、というスタンスが首尾一貫している、ところがいいのです。

ですので、機械学習そのもののテクニカルな説明は、要点は押さえつつも最低限に抑えられています。それよりも、機械学習をどう使うか、機械学習プロジェクトをどうマネジメントするか、機械学習製品・サービスをどう構築するか、のノウハウ解説に力点が置かれています。こういう本は、洋書を含めて他にないのではないでしょうか。

特に1章『機械学習プロジェクトのはじめ方』には「機械学習をしなくて良い方法を考える」という項目があります。そこでは機械学習をシステムに組み込むデメリットもしっかり書かれています。一般企業の中で機械学習を使おうか、と考えるときには、当然こうした、メリット・デメリットを天秤にかけた冷徹な視点が必要です。

まぁ私のいるディープラーニング専業の会社では「ディープラーニングを使わない」=失注、なわけですが(汗)、ただ、お客さんに「ディープラーニングならなんでもできるに違いない」といった過度な期待とともに依頼されて「何だよできねーのか」と失望される、よりは、冷静にこうした視点で臨んで頂いたほうが、僕らも助かりますし、いま過熱気味のAI/DL業界にとっても、その後のハイプの暴落度合いが小さくなるんじゃないか、と思っています。

ディープラーニングの人向け注意点

一方で、MLでなくDL視点で読んだ場合、この本がどういう点で「違う」のか、を、僕なりにさらっとまとめてみます。

主要なアプリケーションの違い

この本の後半(第7~9章)、応用事例として挙げられているのは、「映画の推薦システム」「Kickstartarの分析」「マーケティング資源の効率化」です。いずれも、データ分析とその応用、の話です。MLを用いるのは殆どの場合データ分析なので、これは当然です。

一方DLに興味がある人がやりたいのは、ある種のデータ分析もあるとは思いますが、多くは「画像認識・生成」「音声認識」「自然言語処理」といったものへの応用じゃないかと思います。 データ分析、といえばその通りなのですが、恐らくピンと来ない人も多いのではないかな、と思います。 なのでDLに関しては、もっと違った応用事例を読みたいな、と思ってしまいます。

あと敢えて述べるなら、この本では主にWebがフロントエンド、DBがバックエンドにあるシステムが想定されていて、MLは確かにWebシステム・Webサービスで用いることも多いのですが、DLの場合はどうなんだろう?とは思います。これは僕の会社が主に組み込み系を主体にやっているせいもあるんですが、相対的にWebシステムへの応用度合いは、MLより低いのでは?と思います(この辺はあくまで僕の肌感覚で、実際のところはわかりません)。

適用の仕方の違い

MLにおいては、特徴量の設計(feature engineering)が、品質の良いシステムを構築するための重要なファクターになります。特徴量とは、「機械学習の予測モデルに 入力をする情報のこと」(同書より引用)です。どの特徴量を選ぶか、どう機械学習に組み入れるかで、機械学習の精度がガラッと変わってしまいます。

一方DLでは、どの特徴量を用いるかも学習されるため、DLシステムの開発者が気にする必要はほとんどありません。よって、DLではこの工程は事実上省かれることになります。

DLでは、MLの「アルゴリズムの選定」に相当する「ネットワークの選定」が最初のポイントになってきます*4。多くは、これまで様々な大学・企業が色々なアプリケーション向けに設計した既知のネットワーク(画像からの物体検出なら「YOLOv2」、とか)のうち良さそうなものを選定することになります。場合によってはオリジナルのネットワークを組む人もいるかもですが、「実際に性能が出るのか」の評価から行わないといけないので、ごく稀です。【1/9追記】ここ、同僚からツッコミがありました。ベースラインとしては既知のネットワークを使うけど、そこに色々手を加えてカスタマイズすることはよくあるとのこと。なので訂正しときます。【追記おわり】

あとは、教師データの準備がML以上に大きな比重を占めます。特徴量などを人手で設計する必要がなくなった分、DLでは大量の教師データが必要で、これをどこからどうやって調達するか、が実は一番大変だったりします。

その後は、ひたすら計算機をぶん回して学習させます(バッチ学習の場合)。ここが極めて時間がかかる(場合によっては数日とか)ので、DLを専業にしている会社は学習時間をいかに短縮するかのノウハウが色々あったりするようです。

……ん? ウチ? あれ、どうだったかな(汗)

とはいえ

やはりDLもMLの一種ですし、共通点は多いです。教師データをどう準備するか、(ハイパー)パラメータのチューニング、実システムにおける問題点への対処方法、などなど。

過学習や汎化性能などの問題も当然ありますし、恐らく気にしている人は気にしているかもですが、DLは一般的な傾向として汎化性能が高いこともあって、普通のMLほど敏感になる必要はないかもしれません。ただし、「トレンドの変化などで入力の傾向が変化する」(同書より引用)可能性は、アプリケーションによってはDLでも発生し得て、なのでやはりDLシステムでも気をつけなければなりません。

最後に

ということで『仕事ではじめる機械学習』、極めて面白いしオススメなのですが、僕の感想は究極的には、次の一言に尽きます。

いやホント、誰か書いて。

……と、こういう場合の典型的な切り返しが「言い出しっぺがやれ」だったりするんですが。

実は水面下で、「ディープラーニング版『仕事ではじめる機械学習』になるかもしれない本」の企画を進めています。まったく同じ趣旨になるかどうかはわかりませんが、ディープラーニングで仕事をしたい人向けの本を世に出すべく、画策中です。

そんなすぐには出ないかもしれませんし、企画がポシャるかもしれませんが、まぁ、乞うご期待、ということで。

【1/9追記】かなり反響あったんで、補足を書きました。↓ bonotake.hatenablog.com 【追記おわり】

*1:「紙で読みたい」という人もいたので、ソフトカバー本発売決定にあたり、そちらも予約注文しています。

*2:読み終わってから少し時間が経っているので、詳細に突っ込んだ話はしません。読み終わった当時は色々と思っていたこともあったのですが、今は若干記憶がぼやけ気味なのが残念。もう少し早くにまとめておくべきだった。

*3:この用語が本で用いられているわけではありません。ただ前回の記事でも述べましたが、僕は現在「機械学習工学研究会」(機械学習のためのソフトウェア工学を研究する会)を立ち上げようとしてまして、そのコミュニティの中で僕はこういう用語を使っています。

*4:1/8追記:有賀さん(chezouさん)からブコメ頂いてる通り、この辺は『仕事ではじめる機械学習』でも軽く触れられています。

注:bonotakeは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。