📚

機械学習システムデザインを読んだので内容をまとめてみる

2024/08/01に公開

はじめに

はじめまして。地方でデータサイエンティストとして働いているミヤと言います。
以前通読した機械学習システムデザインという書籍について、内容をメモ書きしつつ学習をしていましたので、改めてブログ記事という形で内容をまとめ直し、投稿しようと思います。
この書籍は、機械学習システムを実務において導入していく中で考慮すべき点を網羅的にまとめている書籍となっています。
文字が多く硬派な内容となっていますが、MLOpsに興味があり実践していきたい方には必読の一冊と言えます。
MLOps領域の書籍は、翻訳されていないものも多いので、日本語訳された貴重な一冊と言えるでしょう。

https://www.oreilly.co.jp/books/9784814400409/

内容

この書籍は、実用的な機械学習システムの構築という複雑なプロセスを詳細に解説しています。
コードでの説明はなく、文章のみで機械学習の実装に向けて考慮すべきことが網羅的に記されています。
データシステムの基礎、特徴エンジニアリング、モデル開発、オフライン評価、データの分布シフトと監視、継続学習、そして運用環境でのテストなど、機械学習システムのライフサイクル全体にわたる多岐にわたるトピックを網羅しています。
本書は、機械学習システムの技術的な側面だけでなく、倫理的な考慮事項やチーム構成といった人間的な側面にも焦点を当てています。さらに、クラウドインフラやMLOpsツールについても詳しく解説し、読者が実運用レベルの機械学習アプリケーションを実現できるように導きます。

1章 機械学習システムの概要

この章では、機械学習モデルを実用化する際に必要な知識について解説されています。

  • 機械学習のユースケース: 機械学習は、消費者向けアプリケーション(例:レコメンドシステム、音声認識)とエンタープライズ向けアプリケーション(例:リソース割り当ての効率化)の両方に広く普及している。
  • 機械学習が適しているケース: 機械学習は、複雑なパターンを持つタスク、大量のデータが必要なタスク、常に変化するパターンを持つタスクなどに適しています。倫理的に問題がある場合、シンプルな解決策で十分な場合、費用対効果が見合わない場合には、機械学習は適していない。
  • 研究分野の機械学習と実現場の機械学習の違い: 研究分野では、きれいなデータセットを用いて単一の目標(ベンチマークデータセットでの最高性能など)を目指すが、実現場では、ノイズの多いデータ、変化するデータ、偏ったデータなどを扱う必要があり、様々な利害関係者からの要求を考慮する必要がある。
  • 機械学習システムと従来のソフトウェアシステムの違い: 従来のソフトウェアシステムは明示的なルールに基づいているが、機械学習システムはデータからパターンを学習する。そのため、機械学習システムは複雑なパターンを持つタスクに適している。

2章 機械学習システム設計の概要

この章では、機械学習システム設計の全体像と、設計時に考慮すべき事項について解説されています。

  • ビジネス目標と機械学習の目標: 機械学習プロジェクトは、ビジネス目標に基づいて開始され、その目標を達成するために機械学習の目標を設定する必要がある。ビジネスの指標に影響を与えない限り、機械学習の指標は重要視されないことに注意が必要。

  • 機械学習システムの要件: 機械学習システムは、信頼性、拡張性、保守性、適応性という4つの重要な特性を備えている必要がある。

  • 反復的な開発プロセス: 機械学習システムの開発は、一度で完了するものではなく、継続的な監視とアップデートが必要となる反復的なプロセスである。 プロセスは以下のステップから成り、各ステップ間を行き来しながら開発が進められる。

    1. プロジェクトスコープの決定: プロジェクトの目標、制約、リソースなどを定義し、利害関係者を特定。
    2. データエンジニアリング: データソースの選定、データの収集・加工・保存などを行う。
    3. 機械学習モデルの開発: 訓練データを用いてモデルの選択、訓練、評価を行う。
    4. デプロイ: 開発したモデルをユーザーが利用できるようにデプロイする。
    5. 監視と継続学習: デプロイしたモデルのパフォーマンスを監視し、環境や要求の変化に適応するために継続的に更新する。
    6. ビジネス分析: モデルのパフォーマンスをビジネスゴールと照らし合わせて評価し、分析する。
  • 機械学習の問題の組み立て: ビジネス上の問題を、機械学習で解決可能な形に定義する必要があります。その際、入力、出力、目的関数を明確に定義することが重要。

  • マインド vs データ: 機械学習システムの成功には、高性能なアルゴリズムよりも、質の高いデータが重要であることが近年では常識となっている。

  • 機械学習システム設計の重要性: 機械学習システムは複雑な要素が絡み合っており、システム全体を考慮した設計が不可欠。

3章 データエンジニアリングの基礎知識

この章では、機械学習システムにおけるデータエンジニアリングの基礎について解説されています。

  • データソース: 機械学習プロジェクトでは、ユーザーが入力したデータだけでなく、システム生成データ、内部データベース、サードパーティーデータなど、様々なソースからのデータを利用する。それぞれのデータソースの特徴を理解し、適切に扱うことが重要。
    • ユーザー入力データは、形式が不適切な場合があり、プライバシー規制の対象になる可能性がある。
    • システム生成データには、システムの状態やイベントを記録するログ、ユーザーの行動履歴などがある。 ログデータは大量になる可能性があるため、効率的な保存と解析が求められる。
    • サードパーティーデータは、近年、ユーザーのプライバシー意識の高まりから利用が制限されつつある。
  • データフォーマット: データの保存形式には、CSV、JSON、Parquet など様々なフォーマットがある。機械学習では、大量のデータを効率的に処理するために、列指向のバイナリフォーマットである Parquet がよく用いられる。Parquet は、データの圧縮率が高く、クエリ処理速度が速いという利点がある。
  • データモデル: データモデルは、データをどのように表現するかを定義します。代表的なデータモデルには、リレーショナルモデル、ドキュメントモデル、グラフモデルなどがある。
    • リレーショナルモデルは、データをテーブルの形式で表現する。データの整合性を保ちやすい一方、複雑な関係を表現するには不向き。
    • ドキュメントモデルは、データを JSON のような柔軟な形式で表現する。複雑なデータ構造を表現しやすい一方、データの整合性を保つのが難しい場合がある。
    • グラフモデルは、データ間の関係を表現するのに優れています。ソーシャルネットワークの分析などに用いられる。
  • データフローの形態: 複数のプロセス間でデータを連携させる方法には、データベース、サービス、リアルタイム伝送の3つの形態がある。
    • データベース経由のデータ受け渡しは、シンプルだが、処理速度が遅いという欠点がある。
    • サービス経由のデータ受け渡しでは、REST API や RPC API を利用する。マイクロサービスアーキテクチャーでよく用いられる。
    • リアルタイム伝送は、大量のデータを高速に処理する必要がある場合に適している。Apache Kafka や Amazon Kinesis などが利用さる。 pubsub モデルとメッセージキューモデルの2つの主要な形態がある。

4章 訓練データ

この章では、機械学習モデルの訓練に使用するデータ, つまり訓練データの重要性について解説し、効果的な訓練データを作成するための様々なテクニックを紹介しています。

  • サンプリング: 現実世界の全てのデータを入手することは不可能なため、機械学習モデルの訓練には、現実世界のデータから適切な方法でサンプリングしたサブセットを使用する。サンプリングには、非確率サンプリングとランダムサンプリングがある。
    • 非確率サンプリング は、特定の基準に基づいてサンプルを収集する。実装が容易である一方、サンプルに偏りが生じやすいという欠点がある。例えば、自動運転車の開発で晴れの日のデータばかりを集めてしまう、といったケースが挙げられる。
    • ランダムサンプリング は、母集団内の全てのサンプルが等しい確率で選ばれるようにする。代表的なランダムサンプリングの手法として、単純ランダムサンプリング、層化サンプリング、リザーバーサンプリングなどが挙げられる。
  • ラベル付け: 教師あり学習では、訓練データにラベルを付与する必要がある。ラベル付けには、大きく分けて手作業によるラベル付けとプログラムによるラベル付けがある。
    • 手作業によるラベル付け は、人間がデータを見てラベルを付与するため、高精度なラベルを取得できるが、高コストで時間がかかるという欠点がある。専門知識が必要な場合、その分野の専門家を探してきてラベル付けを依頼する必要があり、さらにコストがかかる。
    • プログラムによるラベル付け は、ルールベースのプログラムや既存の機械学習モデルを使用してラベルを自動的に付与する。この手法は、弱教師学習半教師学習転移学習能動学習 の4つに分類されます。
      • 弱教師学習 は、ヒューリスティックなルールを用いてノイズの多いラベルを自動的に生成する。例えば、医療分野では、看護師のメモに特定のキーワードが含まれているかどうかで緊急性を判断するルールを作成し、ラベル付けに活用することが考えられる。
      • 半教師学習 は、少量のラベル付きデータと大量のラベルなしデータを使用して、新たなラベルを生成したり、モデルの精度を向上させたりする。例えば、ラベル付きデータが少ない状況で、データの類似性を利用してラベルなしデータにラベルを付与する手法がある。
      • 転移学習 は、あるタスクで学習したモデルを別の関連するタスクの学習に利用する。例えば、画像認識のタスクで学習したモデルを、医療画像の診断に応用するといったケースが挙げられる。
      • 能動学習 は、機械学習モデルが学習に有効なデータを選択し、人間にラベル付けを依頼する手法。これにより、ラベル付けのコストを抑えつつ、モデルの精度を効率的に向上させることができる。
  • データの不均衡: 現実世界のデータは、特定のクラスに偏っている場合が多く、このようなデータの不均衡は、機械学習モデルの学習を難しくする要因となる。例えば、不正取引検知では、不正取引の件数は正当な取引に比べて極端に少ないため、データの不均衡が発生する。
    • データの不均衡に対処するために、損失関数の変更データのリサンプリング適切な評価指標の選択 などの手法がある。
  • データオーグメンテーション: データオーグメンテーションとは、既存のデータに何らかの変換を加えることで、データ量を人工的に増やす手法。例えば、画像認識のタスクでは、画像を回転させたり、反転させたり、ノイズを加えたりすることで、新たな訓練データを生成できる。

5章 特徴エンジニアリング

この章では、生のデータから機械学習モデルの入力となる特徴量を抽出・変換するプロセスである特徴エンジニアリングについて解説しています。

1. 特徴エンジニアリングにおける一般的な処理

  • 欠損値の処理:現実世界のデータには、欠損値が含まれていることがよくある。欠損値をそのままにしておくと、モデルが正しく学習できない可能性があるため、適切に処理する必要がある。具体的な方法として、欠損値を含むサンプルを削除する、欠損値を平均値や中央値などの代表値で補完する、などが挙げられる。
  • スケーリング: 特徴量の値の範囲が大きく異なる場合、モデルが正しく学習できない可能性がある。例えば、年齢と年収という2つの特徴量を扱う場合、年収の値が年齢に比べてはるかに大きいため、モデルは年収をより重要な特徴量と判断してしまう可能性がある。これを避けるため、特徴量の値の範囲を適切な範囲に変換するスケーリングが重要となる。代表的なスケーリングの手法には、最小値と最大値を使って値をの範囲に収める方法や、標準化などがある。
  • 離散化: 連続値の特徴量を、いくつかの区間に分割し、離散値に変換する処理。例えば、年収を「低所得」「中所得」「高所得」のようなカテゴリーに分類するなどが挙げられる。この処理は、モデルの解釈性を高めたり、過学習を防ぐ効果も期待できる。ただし、境界値の設定が難しい場合があり、注意が必要。
  • カテゴリー特徴量のエンコーディング: カテゴリー変数をモデルに扱う場合、数値に変換する必要がある。例えば、「婚姻状態」という特徴量が「独身」「既婚」の2つの値を持つ場合、それぞれを0と1に変換するなどが考えられる。この処理を、カテゴリー特徴量のエンコーディングと呼ぶ。代表的な手法としては、one-hotエンコーディングやラベルエンコーディングなどがある。
  • 特徴交差: 複数の特徴量を組み合わせて、新たな特徴量を作成する。例えば、「婚姻状態」と「子供の数」を組み合わせて、「独身, 0」「既婚, 2」「独身, 1」のような新たな特徴量を作成できる。特徴交差によって、特徴量間の相互作用をモデルに学習させることができる。
  • 離散的および連続的な位置埋め込み: 自然言語処理などで、単語の順番をモデルに学習させるために、位置情報を埋め込む手法がある。それぞれの単語に、文中の位置に対応するベクトルを割り当てることで、モデルは単語の順序情報を考慮できるようになる。

2. データリークの回避

データリークとは、モデルの訓練段階で、本来使用すべきではない情報が漏れてしまい、モデルの性能を過大評価してしまう問題を指す。データリークを防ぐためには、データの分割、スケーリング、特徴エンジニアリングなどの各段階で注意する必要がある。

データリークの主な原因としては、時間ベースのデータリーク、分割する前にスケーリングしてしまう、予測時にのみ入手できる情報を含む特徴量の利用、ターゲットリーク、データ生成プロセスからのリークなどが挙げられる。

データリークを防ぐためには、以下の点に注意する必要。

  • 時間ベースのデータ分割: 時系列データなど、時間に依存するデータの場合、ランダムにデータを分割するのではなく、時間で分割する必要がある。
  • 分割後のスケーリング: スケーリングは、データ全体ではなく、訓練データのみに基づいて行う必要がある。
  • データ生成プロセスの理解: データがどのように生成・収集・処理されたかを理解し、リークの可能性を考慮する必要がある。
  • 特徴量の重要度の確認: モデルが特定の特徴量に過度に依存していないかを確認する必要がある。

3. 優れた特徴量の設計

優れた特徴量とは、予測したいターゲットに対して予測能力が高く、未知のデータに対しても汎用性があり、モデルの解釈性を損なわない特徴量のことを指す。

  • 特徴重要度: モデルの性能に影響を与える特徴量の度合いを定量的に評価すること。特徴重要度を分析することで、重要な特徴量を特定したり、不要な特徴量を削除したりすることができる。
  • 特徴量の汎化: モデルが未知のデータに対しても正しく予測できるように、特徴量を設計する必要がある。特徴量が特定のデータセットに過剰に適合していると、未知のデータに対しては性能が低下してしまう可能性がある。

6章 モデル開発とオフライン評価

この章では、開発したモデルを実環境にデプロイする前に、オフラインで十分に評価することの重要性を説いています。

  • モデルの開発と訓練

    • モデル選択: 最先端のモデルが必ずしも最適なモデルであるとは限らない。
    • 評価指標: 精度や適合率など、タスクに適した指標を選択することが重要。
    • アンサンブル: 複数のモデルを組み合わせることで、単一のモデルよりも高いパフォーマンスを実現できる。
    • 実験管理とバージョン管理: 再現性を高めるためには、実験やデータ、ソースコードを適切に管理することが重要。
    • 分散訓練: 大規模なデータセットやモデルを扱うために、複数のマシンに処理を分散できる。
    • AutoML: ハイパーパラメータのチューニングやモデル選択などを自動化できる。
  • モデルのオフライン評価: モデルをデプロイする前に、オフラインでそのパフォーマンスを評価する必要がある。

    • ベースライン: ランダムな予測や単純なルールベースのモデルなど、最低限のパフォーマンスを満たしているかを確認する。
    • 評価手法: ホールドアウト検証やクロスバリデーションなど、さまざまな評価手法がある。
    • 不変性テスト: 特定の属性を変更してもモデルの予測が変わらないことを確認する。たとえば、人種に関する情報を変えてもローンの審査結果が変わらないなど。
    • スライスベースの評価: データ全体だけでなく、特定のサブグループにおけるモデルのパフォーマンスを評価する。

7章 モデルのデプロイと予測サービス

この章では、開発した機械学習モデルをどのように実環境にデプロイするか、バッチ予測とオンライン予測などの考慮事項について解説しています。

  1. 機械学習におけるデプロイの誤解
    • 誤解1:一度にデプロイする機械学習モデルは1つか2つしかない → 現実には、企業は多数の機械学習モデルを運用しており、その数は数百にも及ぶことがある。
    • 誤解2:デプロイは一度だけ行えばよい → モデルは、データの変化やビジネス要件の変更に応じて継続的に更新する必要がある。
    • 誤解3:機械学習エンジニアはデプロイについて心配する必要はない → 機械学習エンジニアは、モデルのデプロイと運用に必要なインフラやプロセスについて理解しておく必要がある。
  2. バッチ予測 vs. オンライン予測
    • バッチ予測:事前に大量のデータに対して予測を行い、その結果をデータベースなどに保存しておく方式。
      • メリット:複雑なモデルにも対応可能。
      • デメリット:ユーザーの嗜好の変化に追従しにくい。
    • オンライン予測:リクエストに応じてリアルタイムに予測を行う方式。
      • メリット:ユーザーの嗜好の変化に迅速に対応可能。
      • デメリット:モデルの複雑さや計算コストが課題となる。
      • バッチ特徴:データウェアハウスなどに保存されている履歴データから計算された特徴。
      • ストリーミング特徴:リアルタイムに生成されるデータから計算された特徴。
  3. モデル圧縮
    • モデルのサイズを縮小することで、ストレージ容量や帯域幅の節約、推論速度や消費電力の向上を図る。
    • 手法:プルーニング、量子化、知識蒸留など。
  4. クラウドとエッジでの機械学習
    • クラウドコンピューティング:豊富な計算資源を利用できる。
      • デメリット:データ転送やプライバシーに関する懸念。
    • エッジコンピューティング:データ処理の低遅延化やプライバシー保護の強化が可能。
      • デメリット:エッジデバイスの計算能力やバッテリー容量が課題。

8章 データ分布のシフトと監視

この章では、実環境にデプロイされた機械学習システムで発生する可能性のある障害の原因と、その対処法について解説しています。

  1. 機械学習システムの障害の原因
    • ソフトウェアシステムの障害: 機械学習システムを含むあらゆるソフトウェアシステムに共通する障害。例:ハードウェアの故障、ネットワークの停止、ソフトウェアのバグ。
      • 多くの場合、人的エラーが原因となる。
      • 機械学習分野の実務経験が浅い企業や、大規模な機械学習システムを運用した経験が少ない企業では、ソフトウェアシステムに関連する障害が発生しやすくなる。
    • 機械学習特有の障害: 機械学習システム特有の障害。例:データ収集や処理に関する問題、ハイパーパラメーターの不備、訓練パイプラインと推論パイプラインの不整合、データ分布のシフト、エッジケース、フィードバックループの悪化。
      • 検出や修正が難しく、機械学習システムの信頼性を損なう可能性がある。
      • 本章では、データ分布のシフト、エッジケース、フィードバックループの悪化という3つの問題に焦点を当てる。
  2. データ分布のシフト: 訓練データと実環境のデータの分布が異なるために発生する問題。
    • 原因
      • 現実世界のデータは複雑で常に変化しているため、訓練データで完全に表現することは不可能。
      • 選択バイアスやサンプリングバイアスなど、訓練データの作成過程で生じるバイアスも原因となる。
    • データ分布のシフトの種類
      • 共変量シフト: 入力データの分布のみが変化するシフト。
      • ラベルシフト: ラベルの分布のみが変化するシフト。
      • コンセプトシフト: 入力データとラベルの関係性が変化するシフト。
    • データ分布のシフトの検出
      • 統計的手法: 訓練データと実環境のデータの統計量を比較する。
      • 機械学習ベースの手法: 訓練データを使って、データ分布のシフトを検出するモデルを学習する。
    • データ分布のシフトへの対処
      • モデルの再訓練: 新しいデータを使ってモデルを再訓練する。
      • ドメイン適応: 訓練データの分布を、実環境のデータの分布に適応させる。
      • 転移学習: 異なるが関連するタスクで訓練されたモデルを、対象のタスクに適応させる。
      • 堅牢なシステム設計: データ分布のシフトの影響を受けにくいシステムを設計する。
        • 変化の少ない特徴を使用する。
        • 市場や地域ごとに異なるモデルを使用する。
  3. 監視と可観測性
    • 監視: 問題発生時の判断に役立つ指標を追跡・測定・記録すること。
      • 運用上の指標: システムの健全性を把握するための指標。例:レイテンシー、スループット、リクエスト数、CPU使用率、メモリ使用率。
      • 精度に関する指標: モデルの予測精度に関する指標。例:適合率、再現率、F値、AUC。
      • 予測の監視: 予測値の分布や外れ値を監視する。
      • 特徴の監視: 特徴量の分布や欠損値を監視する。
      • 生の入力の監視: 特徴量を抽出する前の生の入力データを監視する。
    • 可観測性: 問題の原因を調査できるように可視化するシステムを構築すること。
      • インストルメンテーション: 可観測性を実現するための仕組みを組み込むこと。例:関数にタイマーを追加する、特徴量中の NaN の数をカウントする、入力データの変換状況を追跡する。
      • 監視ツール: 指標を収集・可視化するためのツール。例:Amazon CloudWatch, GCP Cloud Monitoring, Datadog, Grafana.
      • アラート: 監視システムが問題を検出した際に、適切な担当者に通知する仕組み。
        • アラートのポリシー: アラートの条件を定義する。
        • 通知の宛先: アラートを通知する宛先を指定する。

9章 実環境での継続学習とテスト

この章では、データの変化に適応するために、デプロイされたモデルを継続的に学習・更新する方法について解説しています。

  1. 継続学習
    • 継続学習(Continual Learning)とは: 運用環境にデータが入力されるたびにモデルを自動更新するのではなく、定期的にモデルを再訓練し、環境の変化に適応させるプロセス。
    • 継続学習の必要性: データの傾向は時間とともに変化するため、モデルを継続的に学習させないと、精度の低下や予期せぬ動作につながる可能性がある。
    • 継続学習の課題:
      • データの鮮度: 継続学習には、可能な限り最新の状態に保たれたデータが必要となる。
      • ラベルの遅延: データのラベル付けに時間がかかる場合、モデルの更新が遅延する可能性がある。
      • 安全性: 悪意のあるデータによってモデルが騙され、誤った学習をしてしまうリスクがある。
      • 評価: モデルを更新するたびに、そのパフォーマンスを適切に評価する必要がある。
    • 継続学習の段階:
      • ステージ 1: 手動でのゼロからの訓練: モデルの更新を手動で行う段階。
      • ステージ 2: 再訓練の自動化: 定期的にモデルを自動で再訓練するスクリプトを作成する段階。
      • ステージ 3: 自動化、ステートフル学習: 前回の学習状態を引き継いでモデルを更新するステートフル学習を導入する段階。
      • ステージ 4: 継続学習: データ分布のシフトを自動的に検知し、モデルを自動で更新する段階。
    • モデルを更新する頻度: データの鮮度の価値と、モデルの更新に必要なコストのバランスを考慮して決定する。
      • データの鮮度の価値: 新しいデータでモデルを更新することで、どの程度パフォーマンスが向上するかを測定する。
      • モデルイテレーション vs. データイテレーション: モデルのアーキテクチャを変更するモデルイテレーションと、新しいデータで既存のモデルを更新するデータイテレーションのどちらを優先するかを検討する。
  2. 実環境でのテスト
    • 実環境でのテスト(オンライン評価)の必要性: 静的なテストデータセットでは、実際の運用環境におけるモデルの動作を完全に把握できない。
    • 実環境でのテストの種類:
      • シャドウデプロイ: 新しいモデルを本番環境と並行して稼働させ、実際のトラフィックを使用してテストする。
      • A/Bテスト: トラフィックを複数のモデルに分割し、それぞれのモデルのパフォーマンスを比較する。
      • カナリアリリース: 一部のユーザーに対してのみ新しいモデルを公開し、段階的に公開範囲を広げていく。
      • インターリービング試験: 複数のモデルの予測結果を交互に表示し、ユーザーの反応を比較する。
      • バンディット: 試行錯誤を通じて、最も効果的なモデルを選択する。

10章 MLOpsにおけるインフラとツール

この章では、機械学習システムの開発と運用を支えるインフラとツールの重要性について解説しています。

  • インフラの必要性
    • 機械学習システムは複雑なため、優れたインフラの恩恵が大きい。
    • 適切なインフラは、プロセスの自動化、専門知識の量とエンジニアリング時間の削減に役立つ。
    • その結果、開発とデプロイの高速化、不具合発生の抑制、新たなユースケースの実現が可能になる。
  • インフラの要件
    • 企業の規模、アプリケーションの数、専門性によって異なる。
    • シンプルなユースケースでは、Jupyter Notebook や TensorFlow Lite などで十分な場合もある。
    • 自動運転車や Google 検索のような、独自の要件や規模を持つアプリケーションの場合、高度に専門化したインフラが必要となる。
    • 多くの企業は、不正検出、価格最適化、チャーン予測、レコメンドシステムなどの一般的なアプリケーションに、妥当な規模で機械学習を使用している。
    • 本章では、妥当な規模のアプリケーションに必要な、標準化が進む汎用的なインフラに焦点を当てる。
  • インフラの構成要素
    • ストレージとコンピューティング
      • ストレージ層: データの収集と格納を行う。HDD、SSD、Amazon S3、Snowflake などが挙げられる。
      • コンピューティング層: モデルの訓練や特徴量の計算などに必要な計算能力を提供する。CPU、GPU、AWS EC2、GCP などが挙げられる。
    • リソース管理: 利用可能な計算資源を最大限活用するためのツール群。Airflow、Kubeflow、Metaflow などが挙げられる。
    • 開発環境: データサイエンティストがモデルの開発や実験を行うための環境。
      • Jupyter Notebook、VS Code、PyCharm など、さまざまなツールが使われる。
      • 開発環境の標準化と再現性の確保が重要となる。
      • Docker などのコンテナ技術を用いることで、環境の再現性と可搬性を高めることができる。
    • 機械学習プラットフォーム: 機械学習アプリケーションの開発とデプロイを効率化する共有ツールセット。
      • モデル開発: モデルの訓練、評価、実験を行うためのツール。
      • モデルストア: モデルのバージョン管理、メタデータ管理、デプロイなどを一元管理するシステム。
      • 特徴ストア: 特徴量の定義、計算、共有、再利用を可能にするシステム。
  • 構築か購入か
    • 機械学習インフラを自社で構築するか、外部のサービスを利用するかを決定する必要がある。
    • 判断基準としては、コスト、制御、柔軟性、利用可能なツールの成熟度、社内の人材や専門知識などが挙げられる。
  • 機械学習プラットフォームの例
    • Google Cloud AI Platform
    • Amazon SageMaker
    • Microsoft Azure Machine Learning
    • Databricks

11章 機械学習の人的側面

この章では、械学習システムの設計におけるユーザー体験や、開発チームの組織体制、責任あるAIなどについて解説しています。

  • ユーザー体験: 機械学習システムは、従来のソフトウェアシステムとは異なる振る舞いをするため、ユーザー体験に影響を与える可能性がある。
    • 一貫性の確保: 同じ入力に対して異なるタイミングで異なる結果が返されることがあるため、ユーザーに混乱が生じないように、可能な限り一貫性を確保することが重要。
    • 「ほぼ正しい」予測との戦い: 機械学習システムは確率的な性質上、常に完璧な予測を行うことはできない。ユーザーは「ほぼ正しい」予測に不満を感じることがあるため、予測の精度とユーザーの期待値のバランスを考慮する必要がある。
    • スムーズな失敗: システムが失敗した場合でも、ユーザーに不快感を与えないように、適切なエラーメッセージや代替手段を提供することが重要。
  • チーム構成: 機械学習システムの開発には、データサイエンティスト、機械学習エンジニア、運用担当者など、多様なスキルを持つ人材が必要。これらの専門家をどのように組織するかによって、プロジェクトの成功に大きな影響が及ぶ。
    • 機能横断的なチームのコラボレーション: 開発、運用、ビジネスなどの異なる専門分野からなるチームが協力して作業することで、より効果的に機械学習システムを開発・運用できる。
    • エンド・ツー・エンドなデータサイエンティスト: 開発プロセス全体を理解し、責任を持って実行できるデータサイエンティストは、コミュニケーションのオーバーヘッドを減らし、プロジェクトの効率を高めることができる。
  • 責任あるAI: 機械学習システムは、倫理的な問題を引き起こす可能性があるため、責任あるAIの原則に基づいて開発・運用することが重要。
    • 無責任な AI:ケーススタディ
      • ケーススタディ I:自動成績システムの偏り: 特定のグループに対して不公平な結果をもたらす可能性があるため、バイアスを最小限に抑えるように設計する必要がある。
      • ケーススタディ II:「匿名化」されたデータの危険性: 匿名化されたデータであっても、個人のプライバシーを侵害する可能性があるため、データの収集・利用には十分な注意が必要。
    • 責任ある AI のフレームワーク
      • 公正性: 特定の個人またはグループに対して不当に有利または不利になるようにシステムを設計または使用しないようにする必要がある。
      • 説明責任: システムの設計、開発、デプロイ、使用に関する明確な責任と説明責任を確保する必要がある。
      • 透明性: システムの動作方法を理解し、その決定に異議を唱えることができるように、透明性を確保する必要がある。
      • プライバシー: 個人情報のプライバシーを保護する必要がある。
      • セキュリティ: システムが悪用されたり、不正アクセスされたりしないように、セキュリティを確保する必要がある。
      • 社会的有益性: システムは社会全体に利益をもたらすように設計・使用されるべき。
      • モデルカードの作成: モデルの目的、データ、パフォーマンス、倫理的な考慮事項などを文書化したモデルカードを作成することで、透明性と説明責任を向上させることができる。

MLOps関連の参考書籍

私が通読した書籍に限りますが、MLOps周りで参考になる書籍をまとめます。

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


主に企業の機械学習エンジニアに向けて、実務で遭遇する課題とその解決策となりうるデザインパターンを紹介しています。
本書は、最新の機械学習アルゴリズムやモデルアーキテクチャ、研究分野のテーマではなく、既存のモデルやツールをどのように活用し、実用的な問題を解決するかに重点を置いています。具体的には、データ表現、問題表現、モデル訓練、対応性のある運用、再現性、責任あるAIといったカテゴリーにおけるデザインパターンと、それらの関連性について解説しています。さらに、機械学習プロジェクトのライフサイクルや、パターンを用いた具体的な事例も紹介しています。

Googleのエンジニアが書かれていることもあり、BigQueryMLやtensorflowなど、ベンダーやフレームワークに偏りがある点は注意が必要です。

https://www.oreilly.co.jp/books/9784873119564/

仕事で始める機械学習


MLOps領域において日本人の著者が書かれている書籍です。
本書は機械学習をビジネスに活用したいエンジニアを主な対象としており、機械学習プロジェクトの進め方やシステムへの組み込み方、データ収集、仮説検証など、実践的な内容に焦点を当てています。

機械学習の基礎を理解した上で、実際のビジネスへの活用方法を学びたいエンジニアにとって、実践的なガイドとなることを目指しています。
https://www.oreilly.co.jp/books/9784873119472/

AIエンジニアのための機械学習システムデザインパターン


本書は、機械学習モデルを実用化するシステム構築に焦点を当て、モデルの学習、推論システムへのリリース、運用・改善といったMLOps全体を網羅しています。 特に、様々な課題に対するデザインパターンとアンチパターンを具体的なコード例とともに示し、本番環境で運用可能な機械学習システムの設計と実装方法を解説しています。 また、DockerやKubernetesを用いた推論システムの構築や、性能評価、品質維持といった運用フェーズについても詳しく解説されています。
「機械学習システムデザイン」は、メタ的な概念理解に焦点を当てているのに対し、本書は実践的なMLシステム構築のための書籍となっています。続編の構築実践ガイドも出版されているので併せて学習すると理解が深まると思われます(私は未購入)。

https://www.seshop.com/product/detail/24571

このほか、おすすめの書籍などあれば、コメントいただけると幸いです。

おわりに

今回は「機械学習システムデザイン」の内容をまとめさせていただきました。
機械学習プロジェクトには専門知識を持つエキスパートと、全体を取りまとめるジェネラリストの存在が求められます。機械学習システムを自社に導入する際には、プロジェクトメンバーがこの書籍にある内容を共通認識として持つことができれば、円滑に進めることができるのではないでしょうか?
私もまだまだ勉強中ですので、引き続き学習を進め実践的な場に対応できるようなスキルを養っていきます。

今後もデータサイエンス関連の各分野における、おすすめ教材を紹介していきたいと思います。

Discussion