Upgrade to Pro — share decks privately, control downloads, hide ads and more …

機械学習の技術的負債

 機械学習の技術的負債

機械学習の技術的負債に関する論文を紹介

Sculley, David, et al. "Machine learning: The high interest credit card of technical debt." (2014).

解説動画はこちら
https://youtu.be/qneWB9DzxXs

More Decks by 西岡 賢一郎 (Kenichiro Nishioka)

Other Decks in Technology

Transcript

  1. 今回紹介する内容 • Machine Learning: The High-Interest Credit Card of Technical

    Debt ◦ 機械学習: 技術的負債という高金利のクレジットカード ◦ Sculley, David, et al. "Machine learning: The high interest credit card of technical debt." (2014). • 高金利のクレジットカードのように、機械学習が技術的負債を蓄積していく
  2. 背景 • ソフトウェアエンジニアは新しい製品やサービスを迅速に生成するという難題に直面 • 実行速度とエンジニアリングの質のジレンマが存在 技術的負債 • Ward Cunninghamが1992年に導入した概念 •

    意思決定のコストを定量化するための概念 技術的負債の解消方法 • リファクタリング、ユニットテストのカバー範囲の拡大、使われなくなったコードの削除など 機械学習における技術的負債 • 機械学習は通常のコードと同じ複雑性だけでなく、より大きなシステムレベルでの複雑性を持つ ◦ 機械学習特有の技術的負債の様々なパターンを説明し、その対処などについて論じる 機械学習と複雑なシステム
  3. • 複雑なモデルが境界を侵食 ◦ もつれ ◦ 隠れたフィードバックループ ◦ 宣言されていない使用者 • データ依存による負債

    ◦ 不安定はデータの依存関係 ◦ 活用されていないデータの依存関係 ◦ データの依存関係の静的分析 ◦ 修正のずれ • システムレベルのスパゲッティコード ◦ Glue code ◦ Pipeline Jungles ◦ 使われなくなった実験コードパス ◦ Configuration Debt • 外部データの変更を扱う ◦ 動的システムでの固定された閾値 ◦ 相関関係が相関しなくなるとき ◦ モニタリングとテスト • 結論 Outline
  4. • 複雑なモデルが境界を侵食 ◦ もつれ ◦ 隠れたフィードバックループ ◦ 宣言されていない使用者 • データ依存による負債

    ◦ 不安定はデータの依存関係 ◦ 活用されていないデータの依存関係 ◦ データの依存関係の静的分析 ◦ 修正のずれ • システムレベルのスパゲッティコード ◦ Glue code ◦ Pipeline Jungles ◦ 使われなくなった実験コードパス ◦ Configuration Debt • 外部データの変更を扱う ◦ 動的システムでの固定された閾値 ◦ 相関関係が相関しなくなるとき ◦ モニタリングとテスト • 結論 Outline
  5. • 機械学習はデータソースを混合させるツールのため、もつれが生まれる • CACE Principle ◦ Changing Anything Changes Everything

    ◦ 具体例) ▪ x1 ~ xnの特徴量を例にあげると、x1の値の分布を変えるとそのほかのすべての特徴 量も変化 ▪ 新しい特徴量xn+1の追加、ある特徴量xjの除外でも同様にそのほかのすべての特徴 量が変化 • このようなもつれにより分離をして改善を行うことが事実上不可能になる • 特徴量以外にもモデルの予測に影響を与えるもの ◦ ハイパーパラメータ、正則化の強さ、学習設定、訓練データのサンプリング方法etc • 緩和策 ◦ モデルを分離してアンサンブルを実施 (scalabilityに課題あり) ◦ 高次元可視化ツールによってモデルの予測の振る舞いに対して深い洞察を得ること ◦ より複雑な正則化手法の使用 (新たな負債になる可能性もあるという課題) もつれ 機械学習システムのver1をリリースすることは用意だが、その後改善を行うことが困難
  6. • 現実世界の行動から学ぶシステムはフィードバックループの一部になる ◦ 具体例) ▪ CTR予測ではユーザのクリックを訓練用のラベルとして依存 ▪ 訓練用のラベルが以前の予測に依存 ▪ 予測結果が新たな予測結果に影響する

    • フィードバックループによってシステムの性能の分析が困難になる 隠れたフィードバックループ 隠れたフィードバックループを探して可能なかぎり取り除くことが望ましい
  7. • 複雑なモデルが境界を侵食 ◦ もつれ ◦ 隠れたフィードバックループ ◦ 宣言されていない使用者 • データ依存による負債

    ◦ 不安定はデータの依存関係 ◦ 活用されていないデータの依存関係 ◦ データの依存関係の静的分析 ◦ 修正のずれ • システムレベルのスパゲッティコード ◦ Glue code ◦ Pipeline Jungles ◦ 使われなくなった実験コードパス ◦ Configuration Debt • 外部データの変更を扱う ◦ 動的システムでの固定された閾値 ◦ 相関関係が相関しなくなるとき ◦ モニタリングとテスト • 結論 Outline
  8. 活用されていないデータの依存関係 • 活用されていないコード依存が大抵必要のないものであるのと同様に、活用されていないデータ依 存は精度向上のための増分価値がほとんどない入力機能や信号が含まれる • 活用されていないデータ依存関係はシステムが変更に対して不必要に脆弱になる 機械学習モデルに侵入する活用されていない依存関係 • 古い特徴量 •

    絡み合った特徴量 • 微小な特徴量 ◦ 取り除いても精度に影響は出づらいと考えられるが、 システムはこれらの不必要な機能の変更に対して脆弱」 緩和策 • 特定のモデルからここの機能を削除した場合の効果を定期的に評価 • より広い対策として、未使用の依存関係をクリーンアップすることの メリットの周知も重要
  9. データの依存関係の静的分析 ソフトウェアエンジニアリング • コンパイラとビルドシステムによって静的解析が可能 機械学習システム • データ依存の負債の主要な問題は静的分析の実施が難しいこと • データ依存はさらなる追跡ツールが必要 •

    すべての人がすべての個々の特徴量の状況を知っているわけではない ◦ 例) 辞書のアップデート、ある特定の信号の計算の停止 ◦ ->利用するすべての人を見つけて対応することは困難 • 自動化ツールを用いずに安全な変更を行うことは困難 緩和策 • データソースと特徴量をアノテーションする特徴量管理ツールの導入 • Googleのチームでは以下を達成 ◦ 1クオーターにつき何千行もの特徴量に関するコードを安全に削除 ◦ ヴァージョン確認とそのほかの問題を自動化
  10. 修正のずれ • 問題Aに対するモデルaは存在するがAと少し異なる問題A'に対する解決策が必要な場合 ◦ 例) CTRを最大化する問題Aに対するモデルaとCVRを最大化する問題A'に対するモデルa’ • 問題Aを入力として小さな修正を学習するモデルa’を学習したい • 既存のaを微修正したver1の作成は簡単

    課題 • 補正モデルはaにシステム依存していて、 モデルを改善するための解析コストが高くなる 緩和策 • 様々なユースケースを区別するための特徴を追加 • 同一のモデル内で直接補正を学習可能
  11. • 複雑なモデルが境界を侵食 ◦ もつれ ◦ 隠れたフィードバックループ ◦ 宣言されていない使用者 • データ依存による負債

    ◦ 不安定はデータの依存関係 ◦ 活用されていないデータの依存関係 ◦ データの依存関係の静的分析 ◦ 修正のずれ • システムレベルのスパゲッティコード ◦ Glue code ◦ Pipeline Jungles ◦ 使われなくなった実験コードパス ◦ Configuration Debt • 外部データの変更を扱う ◦ 動的システムでの固定された閾値 ◦ 相関関係が相関しなくなるとき ◦ モニタリングとテスト • 結論 Outline
  12. Glue Code • 機械学習研究者は自己完結型のパッケージを開発する傾向 • 自己完結型のソリューションはデータを出し入れするために大量のサポートコードが必要になる ◦ このようなコードシステムをGlue codeという 課題

    • Glue codeはある特定のパッケージの特質性に対してシステムをフリーズさせる • 結果的にGlue codeはほかの機械学習のアプローチを伴う実験を難しくする 緩和策 • Glue code削減のためには特定のアルゴリズムをシステムの中で再実装することが必要 ◦ 機械学習システムのコードのうち実際に機械学習を行っているのはごく一部。 システムにつなぎ込むためのAPIなどはGlue codeになる ◦ RやMATLABの機械学習パッケージを使うよりも、C++やJavaで 再実装する方がいい戦略
  13. Pipeline Jungles • Glue codeの特別な場合としてパイプラインジャングルが存在 ◦ スクレイプ、結合、サンプリングなどがジャングルのように入り組んだ状態 • これらのパイプラインの管理エラーの検出、障害からの回復は困難かつ高コスト •

    パイプラインジャングルのテストのためにはend-to-endな統合テストが必要になることもある 緩和策 • データ収集と機能抽出を総合的に考えて回避 • パイプラインジャングルを破棄して 最初から設計し直すというアプローチ 根本原因 • 研究とエンジニアリングの役割が過度に分離されている • 役割が分離されていることによりデータ収集や機能抽出などを 総合的に考えることが難しくなっている ◦ エンジニアと研究者が同じチームで取り組むとよい
  14. • 複雑なモデルが境界を侵食 ◦ もつれ ◦ 隠れたフィードバックループ ◦ 宣言されていない使用者 • データ依存による負債

    ◦ 不安定はデータの依存関係 ◦ 活用されていないデータの依存関係 ◦ データの依存関係の静的分析 ◦ 修正のずれ • システムレベルのスパゲッティコード ◦ Glue code ◦ Pipeline Jungles ◦ 使われなくなった実験コードパス ◦ Configuration Debt • 外部データの変更を扱う ◦ 動的システムでの固定された閾値 ◦ 相関関係が相関しなくなるとき ◦ モニタリングとテスト • 結論 Outline
  15. モニタリングとテスト • ユニットテストやend-to-endなテストでは不十分 ◦ システムをリアルタイムでモニタリングすることが重要 何をモニタリングするのか • 予測バイアス ◦ 予測ラベルが観測ラベルの分布と等しくなっているか

    • システムの行動制限 ◦ システムの健全性を確かめるために行動制限を設定して実施することが有効 ▪ 例) ポイント付与アルゴリズムなどで想定外にユーザにポイントを付与しすぎてい ないか ◦ システムが特定の行動に対して限界に達した場合にアラートを作動
  16. • 複雑なモデルが境界を侵食 ◦ もつれ ◦ 隠れたフィードバックループ ◦ 宣言されていない使用者 • データ依存による負債

    ◦ 不安定はデータの依存関係 ◦ 活用されていないデータの依存関係 ◦ データの依存関係の静的分析 ◦ 修正のずれ • システムレベルのスパゲッティコード ◦ Glue code ◦ Pipeline Jungles ◦ 使われなくなった実験コードパス ◦ Configuration Debt • 外部データの変更を扱う ◦ 動的システムでの固定された閾値 ◦ 相関関係が相関しなくなるとき ◦ モニタリングとテスト • 結論 Outline