見出し画像

過学習(Overfitting): AI システムの開発における本質的な問題

 以前、集合学習や、交差検証に関する記事、また機械学習のECへの応用に関する記事等で、繰り返し、AIシステムにおけるモデルのロバストネスを高め、「過学習(Overfitting)」をいかに防いでいくかが大事であると述べました。


 今回は、そもそもその「過学習」とは何なのかということについて簡単に述べたいと思います。機械学習ベースの AI システムの構築においてはとても本質的な、悩ましい問題であり、常に回避策を慎重に考え、実行しておく必要があります。

 まず、過学習は機械学習の代表的な二分野、「教師あり学習」「教師なし学習」のどちらにおいても起こる問題です。(例えば、データを表現する値に重複があるなどのノイズが有るケースです。)ですが、過学習を考えるときは教師あり学習のケースの方がわかりやすいため、教師あり学習を例に説明します。教師あり学習では、事前に与えられたサンプルとなるデータをいわば「教師からの例題(教師情報)」とみなして、それを参考に法則性を導出します。法則性の導出は、モデルのフィッティングと表現することが一般的です。ここにおいて過学習とは文字通り、学習しすぎた状態を指します。サンプルデータに対して極端に忠実な法則性を導出する、すなわちサンプルデータにフィットしすぎたモデルを作ってしまう (Overfitting) ということです。これにより、サンプルデータは完璧に処理できるが、実際の本番で発生するデータに対しては柔軟に対応できず、AIが実戦で全然精度を出してくれないような事態になります。受験勉強を例にすれば、参考書を暗記してしまったので参考書の例題は100%解けるのだけど、実際の大学入試で理解力を問う一歩踏み込んだ問題を出されてしまったら全く対応できない、みたいな感じでしょうか。(しかしこの例は実は説明上のものに留まらず、過学習を防ぐための戦略を考える上では意外と役に立つ視点です。)

 過学習は、サンプルデータが実際の本番において発生しうるデータの分布をどれだけカバーしうるかということによって起こる問題でもあります。サンプルデータが本番データと同様に近しい値の構成、分布でできているのであれば過学習は起こりません。しかし、サンプルデータをそのような完璧な状態で作れるかというと現実には難しいわけです。サンプルデータは常にその位置づけからデータ量が必要十分な量よりも少なくなる宿命にあります。それではということで学習済みモデルを借用してきたり、最近、流行りつつある Data Augmentation テクニックによってサンプルデータ量を増やすことで対応したとしても、それが本番データの分布に著しく反していたら過学習を招きます。また、サンプルデータが完璧につくれなかったとしても、サンプルデータにもフィットし(=biasが少ない)、実際の本番データにもフィットする(=varianceも少ない)状態にモデルが到達できればそれでいいような気もしますが、これらは悲しいかなトレードオフの関係にあり、運任せな面があります。それゆえ過学習は避けがたく、かつ根が深い問題になります。


 実際のプロジェクトでは、プロジェクトの抱える状況や取りうるアプローチによってどうしてもサンプルデータがとても少なくなるケースや、モデルに組み込んでいないモデルの外の環境の要因を過小評価してしまっていて、外部環境変化に対応できないケース等があります。例えば金融商品の値段を予測していくモデルを作ってもサンプルとなるデータが、物体認識での画像データ等とくらべて圧倒的に少ないですし、例えば災害や政治動向、あるいは新しい金融規制の整備などの影響を実際は大きく受けますし、またそれらは過去に例のないことでも普通に起こるので、どうしてもバックテストは完璧なのに実際の予測では思うようにいかないみたいなことがあります。また、インプットデータが高品質化してしまうというケースもあります。低解像度の画像データで学習した医療AIは、その後のカメラの進化で、インプットデータが高解像度になってしまい、過学習による誤診断を行い、場合によっては人命を危険にさらす侵襲性のある検査や処置へとつなげてしまう可能性がありえます。インプットデータの高品質化により、モデルが過学習状態へと変わってしまうというのはある種の盲点です。


 あるいは、サンプルデータになぜか本番データで絶対に入ることのないデータ(すなわち、間違い)が混入しているという悲しいことも実際のプロジェクトでは起こりえます。あるいは、本番のデータの分布がとてつもなくユニークで(あるいはぐちゃぐちゃで、、、)、サンプルデータをどのようにどこまでとるのかが難しい等のケースも考えられます。またそのような特異性をカバーしようと複雑なモデルを目指してしまい、学習がうまくいかないこともありえるでしょう。これらはどれも基本的な機械学習においては過学習につながっていきます。逆に単純すぎるモデルを目指してしまうと、過学習(Overfitting)の逆の Underfitting を招くこともあります。


 そのため、教師あり学習の適用時には、実際に発生する本番データへの理解をしっかりもち、モデルの自由度や複雑さ、また学習結果をサンプルデータとは別に用意されたテストデータを用いる交差検証を通して点検しつつ、必要であればデータを縮約したり、離散化したりしてデータの持ち方を変え、モデルの複雑さを適度におさえつつ、過学習をできるかぎり防いでいく心構えが必要です。

(ところで、大量にサンプルデータを確保できた Deep Learning での学習においては、上記のような過学習の恐れがあるケースに置いても、アプリケーションによってモデルが大きいほどロバストネスが高く汎化性能が高くなることもあるので、モデルの複雑さと過学習の関係は一概にはいえません。またそれが、非線形でパラメーター数が非常に大きい学習という Deep Learning の世界の奥深さでもあります。余談でした。)


おまけ

本文中で、Data Augmentation について言及しておりますが、別途以下の記事として執筆しております。こちらもご参照ください。


この記事が気に入ったらサポートをしてみませんか?