Human In The Loop実装してみた ― Part① ダッシュボード ―
Human In The Loop実装してみた ― Part② 検証ツール ―
の続きです。
■ これまでの流れ
- Part①:目標設定、使用データ紹介、モニタリング用ダッシュボードの実装
- Part②:有識者用検証ツールの実装
- Part③:HITL(①と②+モデル再学習の仕組み) ←今回
※ 前提条件や目標、利用技術などの詳細はPart①、Part②をご確認ください。
■ HITL実装結果
##Part③で何をやるか
Part①ではモニタリング用のダッシュボードを実装し、Part②では有識者判定を効率化させる検証ツールを実装しました。最終回となる今回は、作成したダッシュボードと検証ツールに、モデルを再学習する仕組みを追加することで、以下のシナリオのHuman In The Loopを実演します。(実演する範囲は以下「イメージ」のモニタリング、有識者判定、知見反映の部分)
■ シナリオ※
- 検知モデルが未知検知(機械学習モデルは異常と判定)
- 検証者が未知検知部分を検証、正常と判定
- 判定を受け、該当部分をモデルが正常と判定するよう再学習を実行
※ 未知データの確認をダッシュボードで、検証を検証ツールで行います
今回はじめて出てくるのは「モデルの再学習」の部分です。実装に入る前に、再学習について簡単に説明し、HITLにおける再学習の重要性を整理します。
##再学習とHITL
再学習とは「ある学習をしてから一定の期間を経て再び学習してその学習効果を保持すること」を意味し、AIにおいてはモデル運用時の品質劣化を避けるための仕組みとして組み込むことがあります。[参考1]
一部の安定した環境を除き、現実のデータは時間と共に傾向が変化するため、過去のデータを学習した学習済モデルを運用する場合、適切なタイミングでモデルを調整することが推奨されます。
ある程度の精度劣化が許容される場合は数か月に一回などの定期的な調整を検討することもありますが、異常検知などの迅速に対応しなければならないタスクでは、リアルタイムにモデルを調整することが必要となります。
HITLのように再学習させる仕組みをあらかじめ設けておくことで、定期的であれリアルタイムであれ、適切なタイミングでモデルを調整することが可能となります。
##実装
以下に分けて実装していきます。
1. ダッシュボード
2. 検証ツール
3. HITL(①と②+モデル再学習の仕組み)← 今回
##3.HITL実装
■ 実装内容
- 目標:ダッシュボード+検証用データ送付+再学習
- 確認:検証へ送付するデータを選択し確認
- 開始と終了の時間を指定する
- 更新:検証へデータを送付する
- 再学習:再学習フラグを更新→再学習してフラグを戻す
■ 実装イメージ
■ 実装結果
##再学習について注意点
このシリーズでは教師有モデルとして決定木系のLightGBMを使用しています。これは、比較的高速で前処理が楽といった理由で採用していますが、このモデルは再学習の際、ニューラル系のような追加学習はできず、全データで学習しなおさなくてはならないというデメリットがあります。
そのため、データが膨大になると再学習のラグが大きくなってしまったり、メモリが足らずエラーになってしまったりすることが想定されます。大量のデータを扱うタスクでは、モデルをニューラル系にしたり、学習し直すデータの範囲を絞ったりすることも検討してください。
また、今回のモデルに限らず、少数の未知データの検証結果をきちんと再学習で反映させるためには、対象データへの重みづけを強くするなどの工夫が必要になります。こういった微調整は繰り返すことで既存の学習を脅かしてしまうことがあるので、その点は注意して運用する必要があります。
##まとめ
今回はダッシュボードと検証ツールに、モデルを再学習する仕組みを追加することで、Human In The Loopを実演しました。
ダッシュボード、検証ツール、再学習の仕組みを組み合わせることで、未知の入力に対して素早く検知、検証、再学習が可能になることが分かりました。また、入力データやモデルを変更することで、監視などのタスクに応用できると考えております。
本シリーズはあくまでデモとしてHuman In The Loopのイメージを掴んでいただくために作成しているため、本実装は実際の運用を保証するものではないということをご了承ください。改善点やご質問などあれば、コメントいただければ幸いです。
##参考
-
Dashで機械学習ができるWebアプリを作る [Step1]
https://wimper-1996.hatenablog.com/entry/2019/10/28/dash_machine_learning1
※ Dashのテーブルデータ処理などで参考にさせていただきました -
コード公開(予定)
http://github.com/utmoto -
plotly
https://plotly.com/