機械学習デザインパターン

―データ準備、モデル構築、MLOpsの実践上の問題と解決

[cover photo]
TOPICS
Data Science
発行年月日
PRINT LENGTH
414
ISBN
978-4-87311-956-4
原書
Machine Learning Design Patterns
FORMAT
Print PDF EPUB
Ebook
4,180円
Ebookを購入する
Print
4,180円

本書は、機械学習で繰り返し登場する課題を30のパターン(データ表現、問題表現、モデルの訓練、再現性、対応性、運用性、説明性、公平性などに関するもの)に分類し、それぞれについてベストプラクティスを提示・解説するデザインパターン集です。すぐ動かせるコード例とデータセットを豊富に含み、手を動かしながら機械学習を学びたい初心者の実践的な入門書としても、現場のデータサイエンティストやエンジニアのリファレンスとしても有用な内容となっています。著者のGoogle Cloudのデータ分析&AI部門トップとしての豊富な経験に基づく実用本位の一冊です。

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

第1刷正誤表


2021年11月更新


p172、7行目

【誤】
1,018回の単精度演算が必要で、それには14日かかります。
【正】
1018回の単精度演算が必要で、それには14日かかります。

目次

はじめに

1章 機械学習デザインパターンの必要性
    1.1 デザインパターンとは
    1.2 本書の利用方法
    1.3 機械学習の用語
        1.3.1 モデルとフレームワーク
        1.3.2 データと特徴量エンジニアリング
        1.3.3 機械学習のプロセス
        1.3.4 データおよびモデルに関するツールの活用
        1.3.5 役割分担
    1.4 機械学習の共通課題
        1.4.1 データ品質
        1.4.2 再現性
        1.4.3 データドリフト
        1.4.4 規模
        1.4.5 複数の異なる目的
    1.5 まとめ

2章 データ表現のパターン
    2.1 シンプルなデータ表現
        2.1.1 数値入力
            2.1.1.1 スケーリングが望ましい理由
            2.1.1.2 線形スケーリング
            2.1.1.3 非線形変換
            2.1.1.4 数字の配列
        2.1.2 カテゴリ型入力
            2.1.2.1 ワンホットエンコーディング
            2.1.2.2 カテゴリ型変数の配列
    2.2 デザインパターン1:特徴量ハッシュ(Hashed Feature)
        2.2.1 問題
        2.2.2 解決
        2.2.3 うまくいく理由
            2.2.3.1 語彙に含まれない入力
            2.2.3.2 値の種類の多さ
            2.2.3.3 コールドスタート
        2.2.4 トレードオフと代替案
            2.2.4.1 バケットの衝突
            2.2.4.2 分布の歪み
            2.2.4.3 集約的な特徴量
            2.2.4.4 ハイパーパラメータチューニング
            2.2.4.5 暗号化ハッシュ
            2.2.4.6 処理の順番
            2.2.4.7 空のハッシュバケット
    2.3 デザインパターン2:埋め込み(Embeddings)
        2.3.1 問題
        2.3.2 解決
            2.3.2.1 テキストの埋め込み
            2.3.2.2 画像の埋め込み
        2.3.3 うまくいく理由
        2.3.4 トレードオフと代替案
            2.3.4.1 埋め込み次元の選択
            2.3.4.2 オートエンコーダ
            2.3.4.3 文脈言語モデル
            2.3.4.4 データウェアハウス内の埋め込み
    2.4 デザインパターン3:特徴量クロス(Feature Cross)
        2.4.1 問題
        2.4.2 解決
            2.4.2.1 BigQuery ML内の特徴量クロス
            2.4.2.2 TensorFlowの特徴量クロス
        2.4.3 うまくいく理由
        2.4.4 トレードオフと代替案
            2.4.4.1 数値特徴量の取り扱い
            2.4.4.2 値の種類の多さの扱い
            2.4.4.3 正則化の必要性
    2.5 デザインパターン4:マルチモーダル入力(Multimodal Input)
        2.5.1 問題
        2.5.2 解決
        2.5.3 トレードオフと代替案
            2.5.3.1 表形式データの複数の表現方法
            2.5.3.2 テキストのマルチモーダル表現
            2.5.3.3 画像のマルチモーダル表現
            2.5.3.4 マルチモーダル特徴量表現とモデルの解釈可能性
    2.6 まとめ

3章 問題表現のパターン
    3.1 デザインパターン5:問題再設定(Reframing)
        3.1.1 問題
        3.1.2 解決
        3.1.3 うまくいく理由
            3.1.3.1 不確実性を捉える
            3.1.3.2 目的を変える
        3.1.4 トレードオフと代替案
            3.1.4.1 バケット化した出力
            3.1.4.2 不確実性を捉える他の方法
            3.1.4.3 予測の精度
            3.1.4.4 予測範囲の制限
            3.1.4.5 ラベルバイアス
            3.1.4.6 マルチタスク学習
    3.2 デザインパターン6:マルチラベル(Multilabel)
        3.2.1 問題
        3.2.2 解決
        3.2.3 トレードオフと代替案
            3.2.3.1 2つのクラスを持つモデルにおけるシグモイド出力
            3.2.3.2 どの損失関数を使うべきか
            3.2.3.3 シグモイド関数の出力の解析
            3.2.3.4 データセットに対する考慮
            3.2.3.5 ラベルが重複している入力
            3.2.3.6 一対他
    3.3 デザインパターン7:アンサンブル学習(Ensemble)
        3.3.1 問題
        3.3.2 解決
            3.3.2.1 バギング
            3.3.2.2 ブースティング
            3.3.2.3 スタッキング
        3.3.3 うまくいく理由
            3.3.3.1 バギング
            3.3.3.2 ブースティング
            3.3.3.3 スタッキング
        3.3.4 トレードオフと代替案
            3.3.4.1 訓練と設計にかかる時間の増加
            3.3.4.2 バギングとしてのドロップアウト
            3.3.4.3 モデルの解釈可能性の低下
            3.3.4.4 問題に対する適切なツールの選択
            3.3.4.5 他のアンサンブル学習の手法
    3.4 デザインパターン8:カスケード(Cascade)
        3.4.1 問題
        3.4.2 解決
        3.4.3 トレードオフと代替案
            3.4.3.1 決定的な入力
            3.4.3.2 単一のモデル
            3.4.3.3 内部整合性
            3.4.3.4 訓練済みのモデル
            3.4.3.5 カスケードの代用としての問題再設定
            3.4.3.6 稀な状況での回帰
    3.5 デザインパターン9:中立クラス(Neutral Class)
        3.5.1 問題
        3.5.2 解決
        3.5.3 うまくいく理由
            3.5.3.1 合成データの場合
            3.5.3.2 現実世界での場合
        3.5.4 トレードオフと代替案
            3.5.4.1 専門家の意見が分かれる場合
            3.5.4.2 顧客満足度の予測の場合
            3.5.4.3 埋め込み表現を改善する方法として
            3.5.4.4 中立クラスを用いた問題再設定
    3.6 デザインパターン10:リバランシング(Rebalancing)
        3.6.1 問題
        3.6.2 解決
            3.6.2.1 評価指標の選択
            3.6.2.2 ダウンサンプリング
            3.6.2.3 クラスの重み付け
            3.6.2.4 アップサンプリング
        3.6.3 トレードオフと代替案
            3.6.3.1 問題の再設定とカスケード
            3.6.3.2 異常検知
            3.6.3.3 少数派クラスに含まれる例の数
            3.6.3.4 異なる手法の組み合わせ
            3.6.3.5 モデルアーキテクチャの選択
            3.6.3.6 説明可能性の重要性
    3.7 まとめ

4章 モデル訓練のパターン
    4.1 典型的な訓練ループ
        4.1.1 確率的勾配降下法
        4.1.2 Kerasの訓練ループ
        4.1.3 訓練デザインパターン
    4.2 デザインパターン11:価値ある過学習(Useful Overfitting)
        4.2.1 問題
        4.2.2 解決
        4.2.3 うまくいく理由
        4.2.4 トレードオフと代替案
            4.2.4.1 補間とカオス理論
            4.2.4.2 モンテカルロ法
            4.2.4.3 データ駆動離散化
            4.2.4.4 非有界の入力空間
            4.2.4.5 ニューラルネットワークの知識蒸留
            4.2.4.6 1つのバッチによる過学習
    4.3 デザインパターン12:チェックポイント(Checkpoints)
        4.3.1 問題
        4.3.2 解決
        4.3.3 うまくいく理由
        4.3.4 トレードオフと代替案
            4.3.4.1 早期打ち切り
            4.3.4.2 ファインチューニング
            4.3.4.3 エポック再定義
    4.4 デザインパターン13:転移学習(Transfer Learning)
        4.4.1 問題
        4.4.2 解決
            4.4.2.1 ボトルネック層
            4.4.2.2 転移学習の実装
            4.4.2.3 訓練済み埋め込み
        4.4.3 うまくいく理由
        4.4.4 トレードオフと代替案
            4.4.4.1 特徴量抽出とファインチューニング
            4.4.4.2 画像とテキストに焦点を当てる理由
            4.4.4.3 単語埋め込みと文埋め込み
    4.5 デザインパターン14:分散戦略(Distribution Strategy)
        4.5.1 問題
        4.5.2 解決
            4.5.2.1 同期訓練
            4.5.2.2 非同期訓練
        4.5.3 うまくいく理由
        4.5.4 トレードオフと代替案
            4.5.4.1 モデル並列化
            4.5.4.2 より良い性能をより低コストで実現するASIC
            4.5.4.3 バッチサイズの選択
            4.5.4.4 I/Oウエイトの最小化
    4.6 デザインパターン15:ハイパーパラメータチューニング(Hyperparameter Tuning)
        4.6.1 問題
            4.6.1.1 手動チューニング
            4.6.1.2 グリッドサーチと組み合わせ爆発
        4.6.2 解決
        4.6.3 うまくいく理由
            4.6.3.1 非線形最適化
            4.6.3.2 ベイズ最適化
        4.6.4 トレードオフと代替案
            4.6.4.1 フルマネージドハイパーパラメータチューニング
            4.6.4.2 遺伝的アルゴリズム
    4.7 まとめ

5章 対応性のある運用のパターン
    5.1 デザインパターン16:ステートレスサービング関数(Stateless Serving Function)
        5.1.1 問題
        5.1.2 解決
            5.1.2.1 モデルのエクスポート
            5.1.2.2 Pythonでの推論
            5.1.2.3 Webエンドポイントの作成
        5.1.3 うまくいく理由
            5.1.3.1 オートスケーリング
            5.1.3.2 フルマネージド
            5.1.3.3 言語中立
            5.1.3.4 強力なエコシステム
        5.1.4 トレードオフと代替案
            5.1.4.1 カスタムサービング関数
            5.1.4.2 多重シグネチャ
            5.1.4.3 オンライン予測
            5.1.4.4 予測ライブラリ
    5.2 デザインパターン17:バッチサービング(Batch Serving)
        5.2.1 問題
        5.2.2 解決
        5.2.3 うまくいく理由
        5.2.4 トレードオフと代替案
            5.2.4.1 バッチとストリームのパイプライン
            5.2.4.2 バッチサービング結果のキャッシュ
            5.2.4.3 ラムダアーキテクチャ
    5.3 デザインパターン18:継続的モデル評価(Continued Model Evaluation)
        5.3.1 問題
        5.3.2 解決
            5.3.2.1 コンセプト
            5.3.2.2 モデルのデプロイ
            5.3.2.3 予測結果の保存
            5.3.2.4 正解値の取得
            5.3.2.5 モデルの性能評価
            5.3.2.6 継続的な評価
        5.3.3 うまくいく理由
        5.3.4 トレードオフと代替案
            5.3.4.1 再訓練のトリガー
            5.3.4.2 スケジュールされた再訓練
            5.3.4.3 TFXを用いたデータ検証
            5.3.4.4 再訓練間隔の推定
    5.4 デザインパターン19:2段階予測(Two-Phase Predictions)
        5.4.1 問題
        5.4.2 解決
            5.4.2.1 第1段階:オフラインモデルの構築
            5.4.2.2 第2段階:クラウドモデルの構築
        5.4.3 トレードオフと代替案
            5.4.3.1 スタンドアロン単一段階モデル
            5.4.3.2 特定の使用場面でのオフラインサポート
            5.4.3.3 準リアルタイム多予測処理
            5.4.3.4 オフラインモデル向けの継続的な評価
    5.5 デザインパターン20:キー付き予測(Keyed Predictions)
        5.5.1 問題
        5.5.2 解決
            5.5.2.1 Kerasでのパススルーキーの渡し方
            5.5.2.2 既存モデルへのキー付き予測機能の追加
        5.5.3 トレードオフと代替案
            5.5.3.1 非同期サービング
            5.5.3.2 継続的評価
    5.6 まとめ

6章 再現性のパターン
    6.1 デザインパターン21:変換(Transform)
        6.1.1 問題
        6.1.2 解決
        6.1.3 トレードオフと代替案
            6.1.3.1 TensorFlowやKerasでの変換
            6.1.3.2 tf.transformを使った効率的な変換
            6.1.3.3 テキストと画像の変換
            6.1.3.4 他のパターンによる解決
    6.2 デザインパターン22:繰り返し可能な分割(Repeatable Splitting)
        6.2.1 問題
        6.2.2 解決
        6.2.3 トレードオフと代替案
            6.2.3.1 単一のクエリ
            6.2.3.2 ランダムな分割
            6.2.3.3 複数カラムを考慮した分割
            6.2.3.4 繰り返しが可能なサンプリング
            6.2.3.5 時系列の分割
            6.2.3.6 分類された分割
            6.2.3.7 非構造化データ
    6.3 デザインパターン23:スキーマブリッジ(Bridged Schema)
        6.3.1 問題
        6.3.2 解決
            6.3.2.1 スキーマブリッジ
            6.3.2.2 拡張されたデータ
        6.3.3 トレードオフと代替案
            6.3.3.1 スキーマの統合
            6.3.3.2 カスケード法
            6.3.3.3 新しい特徴量の処理
            6.3.3.4 データの精度向上の扱い
    6.4 デザインパターン24:ウィンドウ推論(Windowed Inference)
        6.4.1 問題
        6.4.2 解決
        6.4.3 トレードオフと代替案
            6.4.3.1 計算オーバーヘッドの軽減
            6.4.3.2 ストリーミングSQL
            6.4.3.3 一連の系列のモデル
            6.4.3.4 状態を持つ特徴量
            6.4.3.5 予測リクエストをバッチ処理する
    6.5 デザインパターン25:ワークフローパイプライン(Workflow Pipeline)
        6.5.1 問題
        6.5.2 解決
            6.5.2.1 TFXパイプラインの構築
            6.5.2.2 Cloud AI Platform上でパイプラインを実行する
        6.5.3 うまくいく理由
        6.5.4 トレードオフと代替案
            6.5.4.1 カスタムコンポーネントの作成
            6.5.4.2 パイプラインにCI/CDを統合する
            6.5.4.3 Apache AirflowとKubeflow Pipelines
            6.5.4.4 開発と本番環境のパイプライン
            6.5.4.5 問題領域特化のパイプライン
            6.5.4.6 機械学習のパイプラインにおける系統的な追跡
    6.6 デザインパターン26:特徴量ストア(Feature Store)
        6.6.1 問題
        6.6.2 解決
            6.6.2.1 Feast
            6.6.2.2 Feastからデータを取得する
        6.6.3 うまくいく理由
        6.6.4 トレードオフと代替案
            6.6.4.1 他の実装
            6.6.4.2 変換パターン
    6.7 デザインパターン27:モデルバージョニング(Model Versioning)
        6.7.1 問題
        6.7.2 解決
            6.7.2.1 モデルユーザのタイプ
            6.7.2.2 管理サービスによるモデルのバージョニング
        6.7.3 トレードオフと代替案
            6.7.3.1 他のサーバレスのバージョン管理ツール
            6.7.3.2 TensorFlow Serving
            6.7.3.3 複数のサービング関数
            6.7.3.4 新しいモデルと新しいバージョン
    6.8 まとめ

7章 責任あるAIのパターン
    7.1 デザインパターン28:経験的ベンチマーク(Heuristic Benchmark)
        7.1.1 問題
        7.1.2 解決
        7.1.3 トレードオフと代替案
            7.1.3.1 開発時のチェック
            7.1.3.2 人間の専門家
            7.1.3.3 利用価値
    7.2 デザインパターン29:説明可能な予測(Explainable Predictions)
        7.2.1 問題
        7.2.2 解決
            7.2.2.1 モデルのベースライン
            7.2.2.2 SHAP
            7.2.2.3 デプロイしたモデルによる説明
        7.2.3 トレードオフと代替案
            7.2.3.1 データ選択の偏り
            7.2.3.2 対比分析とサンプルに基づく説明
            7.2.3.3 説明可能性の限界
    7.3 デザインパターン30:公平性レンズ(Fairness Lens)
        7.3.1 問題
        7.3.2 解決
            7.3.2.1 訓練前
            7.3.2.2 訓練後
        7.3.3 トレードオフと代替策
            7.3.3.1 Fairness Indicators
            7.3.3.2 データ評価の自動化
            7.3.3.3 許容リストと禁止リスト
            7.3.3.4 データの拡張
            7.3.3.5 Model Cards
            7.3.3.6 公平性と説明可能性
    7.4 まとめ

8章 パターンのつながり
    8.1 パターンの一覧
    8.2 パターン間の相互作用
    8.3 機械学習プロジェクトにおけるパターン
        8.3.1 機械学習ライフサイクル
            8.3.1.1 発見段階
            8.3.1.2 開発段階
            8.3.1.3 デプロイ段階
        8.3.2 AI活用成熟度
            8.3.2.1 戦術的段階:手動開発
            8.3.2.2 戦略的段階:パイプラインの活用
            8.3.2.3 変革的段階:完全に自動化されたプロセス
    8.4 利用場面とデータ種別ごとに共通のパターン
        8.4.1 自然言語理解
        8.4.2 コンピュータビジョン
        8.4.3 予測分析
        8.4.4 推薦システム
        8.4.5 不正・異常検知

索引