最終更新日:
同氏によると機械学習モデル製品は製品化された直後がもっとも高精度であり、以降時間の経過とともに精度が劣化してしまいます。こうした劣化の原因として、コンセプトドリフトが指摘できます。この概念はモデルが開発された当初に使われていた学習データと製品化された後に入力されるデータのあいだで特徴上の差異が生じた結果、モデルの予測精度が劣化してしまう、ということを意味しています。
コンセプトドリフトによる性能劣化に対する対策として、同氏は以下のような3つの対策を提案しています。
- 定期的な性能レビューを実施したうえで、劣化が認められた場合にはモデルの再構築と再訓練を行う「マニュアル学習」。
- 入力データに対して特定の重みを設定して、データの重要度に差異をつける「重みデータの設定」。例えば、新しい入力データに対して重みを大きくする、という設定が考えられる。
- 機械学習モデルの性能評価と(必要になった場合)再訓練をシステムに組み込んで自動的に実行する「継続学習」。
以上のように解説したうえで、AI製品は伝統的なソフトウェア製品のように開発が完了したらプロジェクトが終了するというわけではなく、品質を維持するための評価と保守の計画をプロジェクトに含めることが重要、と同氏は主張しています。
同氏が強調するAIプロジェクトにおける評価・保守計画の重要性は、設計と開発に注目が集まりがちな風潮に警鐘を鳴らしていると言えるでしょう。
なお、以下の記事本文はAlexandre Gonfalonieri氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。
機械学習モデルの予期せぬ劣化のせいで失敗したいくつかの機械学習プロジェクトを経験した後、わたしは機械学習モデルの劣化に関する自分の経験をシェアしようと思った。実のところ、機械学習モデルのメンテナンスに比べてモデルの設計と開発のフェーズに関して誇大な宣伝が存在しているように感じていたのだ。
一度製品化されてしまえば、機械学習ソリューションはメンテナンスなしでも完璧に動作するという思い込みは誤っており、こうした思い込みはほとんどの企業が自社のAI製品を市場に投入する時に間違いを犯すことにも現れている。
機械学習モデルが製品化されたその瞬間から、そのモデルの劣化は始まっている。
なぜ機械学習モデルは時とともに劣化するのか?
読者諸氏はすでに知っていることであろうが、データは成功する機械学習システムにおけるもっとも重要なコンポーネントである。ところで精確な予測精度をもたらしてくれる関連データセットをそろえて素晴らしいスタートを切ったとしても、そうしたデータはどのくらいのあいだ精確な予測精度をもたらしてくれるだろうか?
すべての機械学習プロジェクトにおいて、データが時間の経過とともに変化していくことを予測することがカギとなる。いくつかのプロジェクトにおいて、わたしはこうしたデータの変化を過小評価してしまったため、高い予測精度を実現することが困難となった。わたしの意見ではPoCステージを終えてプロジェクトが信頼に足るものと感じたらすぐに、モデルをアップデートし続ける計画の余地を設けるべきなのだ。
実のところ、機械学習モデルはそれが使われた始めたまさにその瞬間に予測精度が最高となる。この現象はコンセプトドリフト(concept drift)と呼ばれ、学界においては20年以上熱心に研究されてきた一方で、産業界で応用された機械学習モデルのベストプラクティスであってもいまだにしばしば無視されている。
コンセプトドリフトとは:モデルが予測しようとしている目的変数の統計学的特性が、時間の経過とともに予期せぬかたちで変化してしまうことを意味する。この現象は、予測精度が時間の経過とともに劣化するという問題の原因となっている(※訳註1)。
コンセプトドリフトの具体例を挙げると、「シンギュラリティ」という単語はレイ・カーツワイル氏の著作『シンギュラリティは近い(邦題:ポスト・ヒューマン誕生 コンピューターが人類の知性を超えるとき)』が出版された2005年(邦訳は2007年)以降は「AI用語」に分類されるべきだが、それ以前は「一般名詞」として分類されるべきである。
また引用された以上のグラフは、コンセプトドリフトが生じたためにデータを分類する境界線に変化が生じたことを示している。
コンセプトドリフトにおいてカギとなるのは、単なる計算機とは対照的に機械学習モデルはまさに現実的な世界と相互作用している、ということだ。もしあなたの機械学習モデルが店舗商品の需要と価格を予測するのに使われているとしたら、あなたは説明変数として今週の天気、日付、そして競争相手が取り入れているような変数を考慮するだろう。
コンセプトドリフトの見地に立つとデータの全般的な分布に変化がなくても、データに対するわれわれの解釈は時間の経過とともに変わってしまう。こうしたモデル解釈の変化は、データの同一性/類似性が時とともに劣化したなかでエンドユーザがモデルの予測を解釈することの原因となる。データと(モデルが予測する)コンセプトの両方が同時にぶれていくので、いっそう厄介なこととなる…。
とりわけヒトの行為に依存したモデルが劣化しやすいかも知れない、とわたしは気づいた。コンセプトドリフトによる予測モデルの劣化により生じるリスクは、プロジェクトの本質にもとづいた不可避なものとして明らかに予期されるべきである。それゆえ、ほとんどのプロジェクトの場合において、モデルの定期的なレビュースケジュールと再訓練が設けられるべきなのだ。
さらには、ほとんどのモデルは与えられた学習データを反映したパターンだけを抽出できている。良いモデルは学習データの本質的なものを抽出し、本質的でないものは無視する。こうした事態によって汎化性能(generalization performance)が作られるのだが、モデルが汎化に適応できる程度には限度がある。
汎化とは:モデルが作成されるのに使われたデータ分布から抽出された未知かつ新規のデータに対して、モデルの能力がが正しく適用されることを意味している。汎化はオーバーフィッティング(過学習)の概念と密接に関係している。もしオーバーフィッティングが生じていれば、汎化は適切に行われない。
強化学習における汎化とオーバーフィッティングに関しては、AINOW翻訳記事「強化学習における汎化の数量化について」で論じている。OpenAIのブログ記事を原文とするこの記事では、学習データが多いほどオーバーフィッティングを回避できることを報告している。
汎化性能をテストする最適な方法とは、モデルがどのように現実世界において動作するか長期間にわたって観察することだ。こうした観察プロセスに関して少なくとも(以下に解説するマニュアル学習と重みデータの設定という)ふたつの主要な手法がある。
どのようにしてモデルの劣化を妨げるのか?
モデルの性能劣化対策として自明のように思われながらも重要なのが、モデル開発後にその性能を監視することだ。もしモデルのすべての特徴を監視するには手間がかかりすぎると感じるならば、データ分布において変化が生じてしまうとモデルの性能を深刻に歪めてしまういくつかの重要な特徴だけを監視してもよい。AI製品をリリースする前に、こうしたモデルの歪みを監視するプロセスに関する(適切に監視対象となる要素を特定した)戦略を策定することを強くおすすめする。
モデルの監視とは、継続的プロセスである。
もしモデルの性能劣化が観察されたならば、モデル設計を再構築する好機である。モデルを再設計する巧妙なやり方はモデルを一新したり再訓練したモデルを作成することではなく、モデル性能を改善してより堅牢かつ高精度にするような追加的な特徴について考えることだ。
以上のステップが完了したら、新規もしくは改善した特徴セットとパラメーターを使ってモデルを再構築するのだ。この段階における目標は、最高の予測精度を実現する最適化されたモデルを特定することである。こうしたモデルは、データドリフト(※訳註3)に対してよく汎化する。
モデルを再構築しても性能が改善されないという事例をわたしはいくつか見てきた。そうした場合においてはモデルが間違いを犯している事例を分析したうえで、現状の特徴セットとは別の新しい特徴の特定を助けてくれるような傾向を探すのだ。そうして得られた知識にもとづく新しい特徴の作成は、モデルに学習すべき新しい経験を与えることができる。
マニュアル学習
新しいデータを使ってモデルをメンテナンスするよくあるソリューションのひとつとして、そのモデルを最初に構築した時と同じプロセスを使って訓練と実装を行う、というものがある。こうしたソリューションはマニュアル学習と呼ばれる。読者諸氏がご想像した通り、このプロセスには手間がかかる。どのくらいの頻度で再学習すべきなのか。1週間に1度?毎日?答えは構築した機械学習アプリに依存する。
手動で(マニュアルで)モデルを学習していると、モデルの予測精度を改善する新しいアルゴリズムや様々な特徴セットを発見する、ということも起こり得る。実際、定期的にレビュープロセスを実行するというのはいいアイデアであろう。とは言えわたしが真っ先に言いたいのは定期的レビューを実行すればモデルの予測精度を改善するような様々なアルゴリズムや新しい特徴セットを見つけるかもしれないが、機械学習システムを継続的によい状態を保つうえで定期的レビューは必要不可欠なものではないのだ。
もしかしたら、毎月あるいは毎年モデルをアップデートするにしても、先月あるいは前年から集めたデータを使うことができるのだ。
以上の説明は、安定したモデルを再訓練するために適切な量の履歴的に古いデータを集めて実施されるバックテストを意味しているとも言える(※訳註4)。
本記事の文脈ではレビューの結果、機械学習モデルの再訓練が必要になった場合に最新のデータを学習データとして活用しなくてもよい、ということをバックテストになぞられて表現している。
重みデータ
劣化したモデルを改善するもうひとつのソリューションが重みデータである。実のところ、重要な入力データに重みをつけることができるアルゴリズムもある。
データの古さに反比例して重くするという重みシステムを使うのも興味深い。つまり、より最近のデータにはより多くの注意を払い(重みを大きくする)、古いデータにはあまり注意を払わない(重みを小さくする)というわけだ。
継続学習
モデル劣化対策としてわたしのお気に入りのアプローチが、継続的にモデルの評価と再訓練ができる自動システムを構築することである。継続学習の利点は、諸々のプロセスが完全に自動化できることにある。
- 新しい学習データを入手したら、それを保存すること。例えば、もしアップデートされた市場における住宅価格あるいはリアルタイムで生成されるデータを入手したら(保存すること)。
- 新しいデータが十分な量になった時は、現行の機械学習モデルに対して予測精度に関するテストを実施すること。
- もし時間の経過とともにモデルの予測精度に劣化が見られたら、新しいモデルを構築し実装するために新しいデータ、もしくは新しいデータと古い学習データを混合して使うこと。
一般的に言えば、よく考えられたスケジュールにもとづいたモデルの調査を伴う賢明なモデル監視体制は、製品化されたモデルの予測精度を保つうえで重要である。重要な変数のチェックを優先すると同時に予測精度に変化が生じた場合に警告を発する設定は、モデルが動作することで生じる効用を奪ってしまう環境の変化に驚かせられないことを保証する。
データポイントが互いに高い程度に独立しているような入力変数を監視する場合には、統計的プロセス制御における管理手法のひとつである管理図(※訳註6)が、変化の過程を検知するのに使うことができる。
モデルドリフトへの対処法
機械学習モデルの成功は、訓練されたモデルをメンテナンスする計画をいかに策定するかに依存している、ということをわたしは強調したい。過去のいくつかのプロジェクトにおいて、モデルの運用に不慣れなビジネスリーダーがモデルをメンテナンスする必要性をわかっていなかったことをわたしは思い知らされてきた。
機械学習モデルの製品化にはモデルの監視とメンテナンスが含まれる。
新鮮なデータセットを使った状態でのモデルの性能は、定期的に評価されるべきである。こうした性能のトレースは視覚化され定期的に比較されるべきである。定期的な性能評価によって、モデルの稼働プロセスに介入して改修する時期を特定することができる。機械学習システムの性能を評価する指標には、いくつかのものが存在する。
AI製品の予測精度は、混合行列にある4つの値を使って算出される。算出される値には正解率、適合率、再現率、F値がある。これらの評価指標は、AI製品の目的に沿ったものを選択すべきである。
機械学習モデルが劣化する原因は発見することができるし、明示的に図式化することもできる。モデルの性能劣化が再発することによる時間的な影響については研究されて理解が進んでおり、その対策も調査されている。それゆえモデルの性能指標を効率的に収集すれば、プロジェクトにおいてデータサイエンスチームがモデルの性能劣化と格闘することができるのだ。それでは、あなたがモデル性能をトレースしていると想定してみよう。
モデル性能の指標を定期的に観察して、モデルの再訓練と再構築に関するトリガーを設定する一連の手順は必要不可欠である。こうした手順がないと性能劣化を見つけられたとしても、そうした劣化を解決する余地がシステムにないことになる。
投資とチーム
技術的側面に加えて、機械学習モデルを製品化した後にもプロジェクトに最高のデータサイエンティストとエンジニアを保持しておくことをわたしは強くすすめる。伝統的なソフトウェアのプロジェクトとは対照的に、機械学習モデル製品を実装後には運用チームがそれに対処して、エンジニアたちは次の大きなモデルの構築に移っていく。機械学習モデルとAIシステムにおける数多くの技術的挑戦のなかには、それらの予測精度を保つことがあるのだ。
顧客が使っている機械学習製品あるいはサービスの予測精度を維持するために投資することも必要である。このことは機械学習製品は伝統的なソフトウェア製品と比較して、運用するのに高額な限界費用を要することを意味する。
メンテナンス費用
機械学習モデルを高品質に保つためには、理想的にはデータが届く度にアルゴリズムを再訓練すべきである。反対にコストを最適化するためには、再訓練は可能な限り少なくすべきである。
明らかにいくつかの機械学習の実用事例では技術的負債(※訳註8)が生じているために、ほかの事例より多くの将来的なメンテナンスを必要としている。機械学習製品の開発における技術的負債によって生じる特有のリスク要因には様々なものがある。そうした要因には無数の確率的変数、データの依存性、再帰的フィードバックループ、パイプライン・プロセス、システム構成の設定、そして機械学習アルゴリズムの性能に関する予測不可能性を助長するそのほかの様々なものがある。
以上のような技術的負債をめぐる複雑性が累積すればするほど、効率的なメンテナンスを実行するのに不可欠であるモデルを劣化させている根本原因に対する分析がいっそう困難になる。
機械学習モデルの性能を維持するという面倒事は、完全には自動化できないだろう。いかなる自動化のシナリオを作ったとしても、機械学習モデルはすきのない綿密な調査、批判的な思考、そして高度に訓練されたデータサイエンティストだけが提供できる手作業による努力を必要とするのだ。
原文
『Why Machine Learning Models Degrade In Production』
著者
Alexandre Gonfalonieri
翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)
編集
おざけん