# 機械学習デザインパターン(オライリー)まとめ ## データ表現 - スケーリング(min-max,クリッピング、Zスコア正規化、ウィンザライズ) - 非線形変換(一様分布でも正規分布でもないケース) - カテゴリ型(ワンホットエンコーディング) ### 特徴量ハッシュ - 問題 - カテゴリ型特徴量に関連する問題(不完全な語彙、値の種類の多さに伴うモデルの大きさ、コールドスタートなど) - 解決 - 文字列表現の決定的かつ可搬性のあるハッシュをバケット化(1000カテゴリを100に集約するなど)し、データ表現における衝突をトレードオフを許容する - バケットが衝突するケースも発生する。事前に把握可能な場合やカテゴリ数に歪みがある場合特徴量ハッシュは使わない ### 埋め込み - 問題 - 値の種類が多く、関係性の近さの保持が重要な特徴量 - 解決 - 問題上で関係のある情報が保持されるように値の種類が多いデータを低次元の空間にマッピングするデータ表現を学習 - 埋め込みを使用することで、トレードオフとしてデータの表現が失われる。(高次元→低次元)その見返りとして、項目間の関係の近さの情報を得る ### 特徴量クロス - 問題 - 特徴量が持つ関係性を学習する上でのモデルの複雑性の不足 - 解決 - 入力値の組み合わせを明示的に個別の特徴量とし、モデルによる入力間の関係性を加速 - シンプルなモデルにより高い複雑さと表現力を与え、より多くの内容を表現できるようになる ### マルチモーダル入力 - 問題 - 複数のデータ表現(例:画像と数値特徴量など)が存在する場合の選択方法 - 解決 - 使用可能なデータ表現を連結 ## 問題表現 ### 問題再設定 - 問題 - 数値予測の信頼性、順序カテゴリ、予測範囲の限定、マルチタスク学習などの関する問題 - 解決 - 機械学習の問題における出力の表現方法の変更、例えば回帰問題を分類問題として表現する - 例として降水量を予測する問題を数値を予測する回帰ではなく、降水量の範囲(0-0.05,0.5-1)を解く分類にするなど ### マルチラベル - 問題 - 1つの訓練サンプルに対し、複数ラベルの割り当て - NNの場合、モデルの最終出力層で使用される活性化関数を変更しアプリケーションがモデルの出力をどのように利用するかを設計で指定(例:猫(0.89)、犬(0.02),ウサギ(0.09)など - 解決 - マルチホット配列を用いてラベルをエンコーディングし、出力層としてシグモイド関数を使用 ### アンサンブル学習 - 問題 - 複数の機械学習モデルを組み合わせ、その結果を集約して予測する機械学習の手法を指す。小中規模の問題における偏り(bias)と分散(variance)のトレードオフ - 解決 - 複数の機械学習モデル組み合わせて各モデルの結果を集約し予測を生成(バギング、ブースティング、スタッキング) - アンサンブル学習の短所は、訓練と設計に時間がかかること、解釈性の低下などのがある ### カスケード - 問題 - 機械学習で扱う問題を複数に分割する際の保守性やドリフトの問題 - 複数のモデルを作成し、あるモデルの出力が後続モデルの入力となる - 解決 - 機械学習システムを、訓練・評価・予測のための統合ワークフローとして扱う - カスケードのワークフローを管理するために**ワークフローパイプライン**パターンの適用を考える - カスケードパターンはベストプラクティスとは言えない。複雑になり場合によっては性能低下を招く ### 中立クラス - 問題 - サンプルの一部の分類ラベルに、基本的に任意となる値が不在 - 解決 - 分類モデルに、現在のラベルとは独立した追加の中立ラベルを追加(正常、異常、その他など) - 中立クラスを設けるには適切なデータ収集が必要 ### リバランシング - 問題 - 非常に不均衡なデータ(正常データは多いが、異常データが極端に少ない) - 解決 - ダウンサンプリング、アップサンプリング、複数の項目に応じて重みづけされた損失関数の使用 - 異常ケースなど稀にしか発生しないイベントを検出するモデルを構築する際にはモデルの予測方法の理解が重要 - 説明可能性のため、SHAP,What-If ToolなどのOSSフレームワークなども役に立つ ## モデル訓練 ### 価値ある過学習 - 問題 - 物理ベースのモデルや力学系を学習するための機械学習 - 解決 - 訓練データセットで意図的に過学習させるため、標準的な汎化技術の適用見送り - 未知のデータが存在しないようなケース(観測値がすべて列挙できる)は有用 - なぜ機械学習かというと古典的な計算手法は膨大な計算量と時間が必要で、機械学習で近似解を得たほうがメリットがおおいケースなどで利用 ### チェックポイント - 問題 - 計算機の不具合により、長時間の訓練ジョブ中に進捗成果の消失 - 解決 - モデルの全状態を定期的(各エポック終了時など)に保存して部分的に訓練されたモデルを利用でき、最初ではなく中間点から訓練を再開可 - 中間チェックポイントを保存することで、対応性を高めるだけではなく、早期打ち切りやファインチューニングも実装できる ### 転移学習 - 問題 - 複雑な機械学習モデルを訓練するために必要となる大規模データセットの不足 - 解決 - 訓練済みモデルの一部の層を取り出して重みを凍結し、訓練対象とせずに類似問題の解決のため新モデルで利用 - ファインチューニングでは訓練済みの重みを更新する - 重み固定の範囲を決定するのにおすすめは段階的ファインチューニング ### 分散戦略 - 問題 - 大規模なニューラルネットワークの訓練は長時間を要し、実験の遅い進行 - 解決 - 複数ワーカーにまたがる大規模化、キャッシュの利用、ハードウェア高速化、並列化により訓練ループを実行 ### ハイパーパラメーターチューニング - 問題 - 機械学習モデルにとって最適なハイパーパラメータの決定方法 - 解決 - 最適化手法(手動、グリッドサーチ、ランダムサーチ、ベイズ最適化)に訓練ループを導入し、モデルにとって最適なハイパーパラメータの組み合わせを特定 - パラメータチューニングツール(keras-tuner,optuna) ## 対応性のある運用 ### ステートレスサービング関数 - 問題 - 機械学習システムが本番環境で1秒あたり数千から数百万の予測リクエストを同期的に扱えなければならない状況 - 解決 - 機械学習モデルをステートレス関数としてエクスポートし、スケーラブルな方法で複数クライアントによる共有 - RESTエンドポイントを提供するフレームワークでデプロイする - TensorFlowではSavedModel、その他ONNXなどを使ってプログラミング言語に依存しないフォーマットでエクスポートする ### バッチサービング - 問題 - 一度に1つのリクエストを扱うよう設計されたエンドポイントでは、大量データに対しモデル予測を実行すると処理が追いつかず大幅に遅延 - 解決 - 分散データ処理に一般的に用いられるソフトウェア基盤(MapReduce,Apach Spark,BigQuery Apatch Bean)を使用して、一度に多数のインスタンスに対し非同期に推論実行 - オンラインサービングとバッチサービングの両方をサポートする本番機械学習システムを**ラムダアーキテクチャ**と呼ぶ ### 継続的モデル評価 - 問題 - データドリフト、コンセプトドリフト、あるいはモデルにデータを与えるパイプラインにおける変更に伴い、デプロイしたモデルの性能が経年劣化 > コンセプトドリフト > モデルの入力と目的とする推論対象の関係が変化したときに発生する 例:クレジットカードの不正検知は、敵対者側が適応する。カードにICが付けば不正の方法も変わるなど >データドリフト >予測モデルに与えられるデータが訓練時に使用したデータから変化したことを指す。 例:データが変わってしまっている。特徴量分布が時間によって変化してしまうなど - 解決 - モデルによる予測を継続的に観察し性能を評価することで、デプロイしたモデルが目的に適合しなくなった際の検知 - モデルのバージョンと予測リクエストのタイムスタンプを記録、定期的に実行し評価指標が下回った場合、再学習をするなどの使い方 ### 2段階予測 - 問題 - もともと大規模で複雑なモデルの性能をエッジデバイスや分散デバイスにデプロイした場合も維持する必要性 - 解決 - エッジデバイスに組み込む場合は少ないバイト数で表現する**量子化**と呼ばれるプロセスがとられる - 利用の流れを2つの段階に分けて、シンプルな段階のみをエッジ上で実行。複雑なモデルはクラウドで処理する - 例1:Google Home - ウェイクワード(Ok Google)はエッジ上で実行、xxをしてもらえますか?などの処理はクラウド) - 例2:工場の異音検知 - 異常な音の検出はエッジ、通常の音から故障を暗示させる情報を割り出すのはクラウドなど - スタンドアロン単一段階モデルといった自己完結のモデルを作成する(例:Google翻訳のオフラインモデル) ### キー付き予測 - 問題 - 大規模な予測ジョブを投入した際に、モデルへの入力に対応して返されたモデルの予測マッピング方法 - 解決 - 予測の間を通して、モデルの入力を予測へと結び付けられて、クライアントが扱い可能なキーの受け渡し ## 再現性のパターン ### 変換 - 問題 - モデルへの入力はモデルが求める特徴量の形に変形される必要があり、その変換プロセスは訓練と運用の両方で一貫している必要性 - 推論時にどのような特徴量でモデルが訓練されたのか、どのように特徴量を解釈すべきか、入力がどのように変換されたかという詳細を知る必要がある - 解決 - モデルへの入力を特徴量に変換するために用いる変換方法を明示的にとらえて保存 ### 繰り返し可能な分割 - 問題 - データ分割時には、プログラミング言語や擬似乱数のシードとなる初期値に関係なく、軽量で再現性のある方法の重要性 - チュートリアルなどでは訓練・テスト・検証データをランダムに分割することが推奨されているが、現実的な状況では難しい(例:フライト遅延予測では到着遅延に強い相関がある) - - 解決 - 行と行の間の関係を捉える列を特定し、ファームハッシュアルゴリズムを使用して、利用可能なデータを訓練データ、検証データ、テストデータの各データセットに分割 ### スキーマブリッチ - 問題 - データスキーマが変更されていると、新データを利用可能になっても再訓練時に新旧両データを使用不可 - 新しいデータで訓練し、訓練モデルを置き換えるためには多くの時間が必要 - 解決 - 古いデータのスキーマを新しいデータに合わせて橋渡し(ブリッジ)する - 新しいデータと古いデータでは項目が違う可能性もあるため、データ拡張の際は確率的な方法、静的な方法を用いてブリッジする ### ウィンドウ推論 - 問題 - 一部のモデルでは訓練・運用間の歪みを避けるため、推論実行について連続したインスタンスの列の必要性や、一定時間枠ごとの特徴量集約の必要性 - 解決 - モデルの状態を外部記録し、ストリーム分析パイプラインからモデルを呼び出すことで、動的かつ時間に依存した方法で特徴量を計算し、訓練と運用の両方で正しく繰り返し可 ### ワークフローパイプライン - 問題 - 機械学習のワークフローをスケールアップする際、各ステップについて試行錯誤を個々に実施し性能を追跡する必要性 - 解決 - 機械学習ワークフローの各ステップを個別のコンテナ化させたサービスとし、それらを連鎖させて一度のREST API呼び出しで実行可能なパイプラインを構築 ### 特徴量ストア - 問題 - 特徴量エンジニアリングにおける場当たり的な取り組みはモデル開発を遅延させ、各チームの取り組みの重複や作業の流れの非効率化 - 解決 - 機械学習モデルの構築に使用され、プロジェクトやチーム間で共有可能な特徴量データセットを格納・記録する中心的な場所として特徴量ストアを設置 - 機械学習のためのOSSの特徴量ストア**Feast**などもある ### モデルバージョニング - 問題 - ただ1つのモデルを本番環境に置いた状態での性能監視やモデル変更を伴うスプリットテストの難しさ、さらには既存ユーザーを阻害しない形でのモデルの更新の難しさ - 解決 - デプロイしたモデルに対して後方互換性を実現するため、変更後のモデルを、異なるRESTエンドポイントを持つマイクロサービスとしてデプロイ ## 責任あるAI ### 経験的ベンチマーク - 問題 - 複雑な評価指標を使ってモデルを説明しても、ビジネスの意思決定者が必要としている直感的な理解を獲得困難 - 解決 - 機械学習モデルを、シンプルで分かりやすい経験的な事柄になぞらえる ### 説明可能な予測 - 問題 - デバッグあるいは規制・遵守基準のために、でもるが特定の予測をする理由の把握が必要 - 解決 - モデルの予測の理由や方法を理解し、機械学習システムに対するユーザの信頼を高めるため、モデルの説明可能性手法を適用 - OSSのライブラリであるSHAPは特徴量の寄与度を得るためのAPIを提供する ### 公平性レンズ - 問題 - バイアスにより機械学習モデルが全ユーザを平等に扱わないこととなり、一部のグループに対し悪影響を及ぼす可能性 - 解決 - 訓練前にデータセット内のバイアスを特定するツールを使用し、訓練済みモデルを公平な目で評価してさまざまなユーザグループや場面における予測の公平性確保 ## パターンの繋がり ### AI成熟度 Google Cloudが公開したホワイトペーパー(https://services.google.com/fh/files/misc/ai_adoption_framework_whitepaper.pdf)によると、企業のAI導入に向けた成熟度は一般に、戦術的、戦略的、変革的の3つの段階に分類できる。それぞれの段階で使われる機械学習ツールが高度化していく。 ## 追加整理している周辺のデザインパターン https://pl.csie.ntut.edu.tw/asianplop2020/papers/AsianPLoP_2020_paper_13.pdf ## 使えそうなパターン - 中立クラス - マルチラベル - リバランシング - チェックポイント - 転移学習 - ハイパーパラメーターチューニング - 継続的モデル評価 - ワークフローパイプライン - モデルバージョニング - 経験的ベンチマーク - 特徴量ストア(畳み込み層のconv層) ## 不明点 - カスケードやアンサンブル学習は使い方次第ではアンチパターンにもなりえる?
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up