アルパカログ

プログラミングとエンジニアリングマネジメントがメインです。時々エモいのも書きます。

「仕事ではじめる機械学習」はゼロから作りはじめた初心者の頭を冷やすのにうってつけ

「仕事ではじめる機械学習」はディープラーニング入門の1冊目と言われる「ゼロから作るDeep Learning」の次に読むのがおすすめです。

www.oreilly.co.jp

なぜなら「ゼロから作るDeep Learning」は初心者にもわかりやすいがゆえに、あらゆる問題がディープラーニングで解決できてしまうんじゃないかという万能感を感じてしまうからです。

本書はそんな幻想に「待った」をかけてくれます。本書で紹介されている一文を紹介しましょう。

機械学習は技術的負債の高利貸しのクレジットカード」というタイトルの論文があるほど、機械学習を含んだシステムは通常のシステム以上に技術的負債が蓄積しやすいのです。

どうです?興味が出てきましたか?

以下、内容を自分なりにまとめました。

1章 機械学習プロジェクトのはじめ方

機械学習プロジェクトの流れについて、何をどういった順で行うのかが説明されています。

  1. 問題を定式化する
  2. 機械学習をしないで良い方法を考える
  3. システム設計を考える
  4. アルゴリズムを選定する
  5. 特徴量、教師データとログの設計をする
  6. 前処理をする
  7. 学習・パラメータチューニング
  8. システムに組み込む

特筆すべきはやはり「2. 機械学習をしないで良い方法を考える」でしょう。

前述したように、機械学習は技術的負債が蓄積しやすい技術です。機械学習以外の既存技術で実現できるのならコストの高い方を選ぶ道理はないでしょう。

機械学習の研究では4と7について重点的に取り扱いますが、実務では1~8の全てを行う必要があります。この事実だけでも機械学習プロジェクトの難しさが想像できます。

では成功させるためにはどうしたら良いのでしょうか?著者は次の4者の存在が重要だと述べています。

  1. プロダクトに関するドメイン知識を持った人
  2. 統計や機械学習の明るい人
  3. データ分析基盤を作れるエンジニアリング能力のある人
  4. 失敗しても構わないとリスクを取ってくれる責任者

人工知能を扱える人材は先端IT人材と呼ばれ、需要に対して供給が大きく不足しているという現状があります

私自身に当てはめて考えてみますと、CREという職種柄、ある程度CSに関するドメイン知識があります。

今は機械学習の勉強中なので、1と2を兼ね備えた人材を目指していけば市場価値のある人材になれそうです。

2章 機械学習で何ができる?

機械学習でできることを次のように分けて、それぞれのアルゴリズムの特徴を説明しています。

  • 分類
  • 回帰
  • クラスタリング
  • 次元削減
  • その他
    • 推薦
    • 異常検知
    • 頻出パターンマイニング
    • 強化学習

分類

本書では次のアルゴリズムが紹介されています。

ここではロジスティック回帰、SVM、k-NN、ランダムフォレストだけまとめておきます。

ロジスティック回帰

線形分離可能な対象を分離するアルゴリズムパーセプトロンとの違いは下記。

項目 ロジスティック回帰 パーセプトロン
活性化関数 シグモイド関数 ステップ関数
損失関数 交差エントロピー誤差 ヒンジ損失
正則化 あり なし

シンプルな方法であることから、機械学習アルゴリズムを比較する際のベースラインとしてよく使われる。

SVM

分類問題を解くときに非常によく利用され、線形分離可能なだけでなく非線形分離が必要の問題にも適用できる。

学習も高速で、マージンを最大化することで過学習を抑えることができること、カーネルを使って線形分離不可能なデータでも高次元のベクトルに変換することで線形分離できるという特徴がある。

k-NN

未知のデータが入力された際、近くの既知データk個の所属クラスの多数決によってクラスを決める。非線形分離が必要な問題にも適用できる。

「近くの既知データ」との距離には、2点間の直線の長さであるユークリッド距離や、データ群の平均からの近さだけでなく分散も考慮したマハラノビス距離が用いられる。

ランダムフォレスト

決定木から派生したアルゴリズムで、利用する特徴量の組み合わせをいくつか用意して決定木に学習させ、性能が良かった学習器の予測結果を多数決で決めるというもの。

決定木の決定境界は直線にならないため、線形分離不可能な問題に利用するのが良い。

回帰

教師あり学習の1つで、入力データから連続値を予測する。

本書では次のアルゴリズムが紹介されています。

  • 線形回帰 (Linear Regression)
  • 多項式回帰 (Polynomial Regression)
  • Lasso回帰 (Lasso Regression)
  • Ridge回帰 (Ridge Regression)
  • Elastic Net
  • 回帰木 (Regression Tree)
  • SVR (Support Vector Regression)

クラスタリング

教師なし学習の1つで、データの傾向を掴むために使われる。

似ている組み合わせをまとめていく階層的クラスタリング (Hierarchical Clustering)や、距離の近いもの同士をk個のグループの分割する k-means などがある。

次元削減

高次元のデータからできるだけ情報を保存するように低次元のデータに変換すること。

主成分分析 (Principal Component Analysis) が有名だが最近は t-SNE も可視化のために人気がある。

異常検知

外れ値検知 (Outlier Detection) とも言う。通常、異常データの件数はとても少ないため、単純に分類モデルを学習しようとすると常に「正常」を出力してしまう。

データに極端な偏りがあるという特徴から、教師なし学習が使われることが多い。scikit-learn では SVM ベースの One Class SVM などで異常検知ができる。

3章 学習結果を評価しよう

評価の指標として次の4つが紹介されている。

  • 正解率 (Accuracy)
  • 適合率 (Precision)
  • 再現率 (Recall)
  • F値 (F-measure)

正解率

偏りがあるデータに対して単純な正解率は意味をなさないことがほとんど。

100件中60件がスパムだったとして、100件全てをスパムと判定すると正解率60%になってしまう。

適合率

出力した結果がどの程度正解していたかを表す指標。

スパム分類の例で言えば、スパムと予測したうち本当にスパムだった割合。

再現率

出力した結果が実際の正解全体のうちどの程度カバーしていたかを表す指標。

スパム分類の例で言えば、全スパムのうちスパムであると予測した正解の割合。

F値

適合率と再現率の調和平均。適合率と再現率のバランスが良いほどF値が高くなる。

4章 システムに機械学習を組み込む

実際のWebアプリケーションシステムにどのように機械学習のシステムを組み込めば良いかパターン分けして説明されている。

予測モデルをWebアプリケーションから直接 (内部API経由で) 利用するのか、HTTP 等のAPI 経由で利用するのかなど。

ログ設計にも言及されている。保存していない情報を後から増やすのは困難であるため、設計時点でどんな情報を保存するか、どんな形式にするかはよく検討しておく必要がある。

5章 学習のためのリソースを収集しよう

学習データをどうやって用意するか、方法ごとのメリット・デメリットについて説明されている。

機械学習では十分な量の良質なデータが必要になるため、プロジェクトにあった手法を採用しなければならない。

6章 効果検証

ある施策によってどれだけ影響を受けたか、効果検証について説明されている。

ここではログの汚染検定を繰り返し行うことの危険について特筆しておく。

ログの汚染とは、

  1. 学習モデルの予測によってユーザの行動に影響を与える
  2. ユーザの行動ログは学習モデルに間接的に影響を受けたものである
  3. バイアスのかかったログを学習データとしてしまう

というもので、技術的負債の1つとされている。

検定を繰り返し行うことの危険とは、良い結果を出したいという試行錯誤が偽陽性の確率を増やしてしまうというもの。

WebサービスでA/Bテストを実施しているときの状況はこれに近く、有意になったところでテストを止めてしまうというように、容易に起こり得るということに注意しなければならない。


感想

私はまさに業務でディープラーニングを使ったシステムの構築を検討しているところで、もし本書を読まないままプロジェクトを開始していたらと思うと恐ろしいです。

何事も一面だけを見て判断するのではなく、多面的に見て判断すべきです。ディープラーニングは今もてはやされています (もちろん革新的な技術であるのは理解しています) が、かといってなんでもかんでもディープラーニングが最適ではありません。

仮にディープラーニングが最適だとしても、なぜ最適なのか、他の手法と比較してどう優れているのかが説明できなければ説得力に欠けるでしょう。

AIやディープラーニングが声高に叫ばれる今、本書の知識を有しているかが重要になってくるだろう、そう思わせてくれた一冊でした。

こちらもあわせてどうぞ

alpacat.hatenablog.com