in

AIモデルの性能が想定以下、問題を特定するためには?

文/ Flow AI Blog 編集部

【要約】AIモデルのパフォーマンス最適化の3つのステップ:
1. 学習データの学習不足(Underfitting)問題の調整
2. テストデータの過学習(Overfitting)問題の調整
3. AIモデルのデバッグ

FLOW AIは元トレンドマイクロ社のベテランITマネージャーであるチャールズ・チャン氏を招き、長年最前線でAIチームを管理してきた経験と、AIプロジェクトの実行経験についてお話をお伺いしました。

これまでの授業で、ビジネス命題とデータ精度の定義や、最適のアルゴリズムの見つけ方などを紹介してきましたが、いよいよAIモデル導入のラストマイルに差し掛かりました。最後に解決すべき難題は、もしモデルのパフォーマンスが低下した場合、それをどう改善すべきかということです。

AIモデルの誤学習、その原因は?

AIモデルというのは、「データから特徴を抽出し、アルゴリズムでトレーニングを行った一種のロジック」を指します。つまり、AIモデルを構成する要素はデータ、特徴とアルゴリズムの3つです。

(画像出典:トレンドマイクロ社)

AIモデルのトレーニング成果が芳ばしくなかった場合、いくつかのポイントから調べていくといいでしょう。例えば、データの質が悪い、適切にアノテーションされていない、データ特徴の選択に偏りがあったのではないかなど。あるいは、そもそもアルゴリズムとの相性が悪かったのか?もしかすると、答えが上記のすべてになることもあり得ます。

そのため、プロジェクトマネージャーがビジネス向けのAIプロジェクトを運営する時、エンジニアに「何でバイアスができたと思う?」みたいな自由回答形式な質問より、まず問題の範囲を絞って考えられる原因を一つずつ見直していくほうが、より効果的なコミュニケーションを図れます。

可能な原因を突き止めたら、次はデバッグの流れを作っていきます。

ゼロからモデルのデバッグができるようになるまで

AIモデルのトレーニングは、子供に何かを教えるのと似ています。まず重要箇所に線を引いた教科書(アノテーション済みの学習データ)を渡し、正しく学習したかどうかを確認するために小テスト(テストデータ)も実施します。

「モデルの学習成果がよくない」というのは少々抽象的に感じますが、ざっくり言うと「処理済みの正解データを与えたのに間違った答えを学習してしまった」、これを学習不足(Underfitting)と言います。

学習不足を改善するために、まずモデルの学習成果を検証するテストデータに問題があるのではないかと疑う人もいます。実はその逆で、真っ先に疑うべきはモデルに与えた学習データに間違いはないかを確認することです。

学習データで出した結果が不調の理由は、3つほど考えられます。

(画像出典:トレンドマイクロ社)

1つ目は、フィーチャー・コリジョン(Feature Collision)と呼ばれる問題で、全く異なる2つの対象オブジェクトが同じデータ特徴を持っていることを指します。例えば、AIモデルを犬と猫を区別できるように訓練するには、理論上差の大きい体型と顔を特徴とすべきでしょう。仮に毛色と体重だけにした場合、AIは同じくらいの体重の黒猫と黒犬を見分けることが非常に難しくなります。

この場合、両者を区別できるよう、学習する特徴量を増やす必要があります。

2つ目は、データアノテーションの品質に関係します。同じ特徴なのに、アノテーターが誤って違うタグにしてしまい、AIが混乱してしまいます。自動運転車のAIモデルの学習データを例に挙げますと、2台の普通乗用車のうち1台は正しくタグをつけられたのに、もう1台が誤ってバスとしてラベリングされたら、モデルはどっちが正解なのかわからなくなり、誤学習が発生します。

これまでの記事で何度も述べてきたように、精確なデータ収集とデータ処理はモデルの学習に大きく影響を与えます。そのため、モデルを正しく学習させたければデータ特徴の抽出やアノテーションについては慎重に検討する必要があります。

そして3つ目は、アルゴリズムの複雑性が十分ではない、もしくはトレーニング自体に問題がある可能性もあります。

アルゴリズム選びはビジネス命題の複雑さと密接に関連しており、命題が複雑な場合、単純すぎたアルゴリズムを採用するとモデルの学習がうまくいかない可能性が高まります。記憶のない生徒が、たくさんの文章を覚えられないのと同じです。前回はツリーベースのアルゴリズムについて触れましたが、これはパラメータを調整するだけでAIモデルの複雑性を決められるので立ち上げに向いています。また、複雑性の高いモデルのトレーニングが十分でない場合、学習データを投下してもうまく機能しない可能性があります。

まとめますと、モデルをデバッグするためにはまずデータ特徴が正しくかつ充分に抽出されているか、アノテーションの品質に問題はないか、モデルの複雑性は十分であるか、トレーニングは足りているか…などを確認してから再学習(Retrain)を行うといいでしょう。

学習データでのパフォーマンスに問題がなければ、次のステップであるテストデータでの性能検証に進みます。

学習データに問題がない場合、どうやってテストデータを校正するの?

テストデータでのパフォーマンス不振は、どういうことでしょうか?

簡単に例えるなら、AIモデルが学習したデータは認識できてもそれ以外はからっきしな、勉強しかできない人間に訓練されたようなものです。開発終盤になると、モデルが普通の人にとってありえないような例外ケースばかり記憶して、それを通例として認識してしまうこともあります。

これは過学習(Overfitting)と呼ばれる状況で、アルゴリズムの高すぎる複雑性に反応してモデルが無理やり学習データを覚えてしまったことに起因する可能性があります。その裏にある原因は、当初からアノテーションの精度が悪い、もしくは学習データの量が少なすぎてモデルが参照できなかったなどが候補として挙げられます。

これを解決するには、モデルの「正規化(Regularization)」を試してみるといいでしょう。つまり、モデルのコスト関数を調整して複雑性を適度に下げることでより良いテスト結果を得ることです。

しかし、正規化をして、半日もかけていろんな特徴で試しても運悪くテストデータでのパフォーマンスを改善する方法が見つからない場合もあります。

こういう時、一旦振り返ってデータの性質を観察することをお勧めします。もしかすると、学習データとテストデータの性質が大きく食い違っているのではありませんか?

機械学習はビジネス命題によって、多くの複雑な運用シーンと絡むことになるかもしれないので100%完璧な結果を出すことは難しいです。機械学習にとって、学習データとテストデータの分布状況が一致していればベストな学習効果を得られますが、これはあくまで「理想」です。逆に両者の性質がかけ離れすぎていると、良い結果を出すのが難しくなり、トレーニングも大変なことになります。

例えば、文字認識AIの開発に使用される学習データはアラビア数字で、テストデータは中国語としましょう。中国語のテストデータを数字ベースのAIモデルに投下したら、どんなによく訓練されたモデルでもいい結果を出せません。何故なら、そもそも両者のデータ属性は大きく乖離しています。

どうしてもデータ属性がかけ離れている状況でモデルのパフォーマンスを向上させないといけない場合は、1つ方法があります。それは、テストデータから半分ほど抽出してそれを学習データとしてモデルに与えることです。そうすれば、モデルは中国語の識別方法を学び始め、パフォーマンスも目に見えて改善されるでしょう。

学習データで安定した結果を出せるようになって、テストデータの段階に移行しても前述のやり方でまず両方のデータ性質の異同から確認すれば問題ありません。再学習して結果に納得できたら、引き続きデータ量を増やしてAIモデルの性能を更に引き上げることができます。

これが、AIモデルのデバッグができるまでの一連の流れです。

これからの記事では、データアノテーションの作業と判断に支援するラベルシステムの構築の仕方や、効果評価、社内でのDevOps精神の推進経験などを皆様と共有したいと思います。また次の記事でお会いしましょう。

関連記事
AI命題の見つけ方
AI モデルが育つには、どのくらいのデータが必要?


AI命題の見つけ方

AIモデルが正しく学習したかを確かめる方法