機械学習戦略 2 - 深層学習システムの最適化

エラー分析の実行

人間が実行できるタスクを実行できる学習アルゴリズムを作成したいが、その学習アルゴリズムがまだ人間のパフォーマンスに達していない場合、アルゴリズムが犯した間違いを手動で検査することで、次に何をすべきかアイデアが得られる可能性があります。このプロセスはエラー分析と呼ばれます。

cat 分類器をデバッグしていて、90% の精度を達成したとします (これは 10% の誤差に相当します)。これを開発セットで実行しても、望ましい目標にはまだ程遠いです。チームのメンバーは、アルゴリズム分類エラーの例を調べ、アルゴリズムが一部の犬を猫として分類していることに気づきました。チームメイトが犬の写真のアルゴリズムを最適化する方法について提案します。猫の分類器が犬の写真に対してより適切に処理できるようにし、アルゴリズムが犬を猫に分類しないようにするには、犬用にさらに多くの犬の写真を収集し、犬のみを処理するいくつかのアルゴリズム関数を設計します。しかし問題は、特に犬を対象としたプロジェクトを始めるべきかということです。このプロジェクトは、犬の写真のエラーを減らすアルゴリズムを取得するのに何か月もかかる価値があるでしょうか? あるいは、プロジェクトに数カ月費やす代わりに、まったく機能しないことが判明することになるかもしれません。この方向に努力する価値があるかどうかをすぐに知ることができるエラー分析プロセスを次に示します。

まず、たとえば、ラベルが間違っている開発セットのサンプルを 100 個収集し、開発セット内のラベルが間違っているサンプルのうち、イヌであるものがいくつあるかを一度に 1 つずつ手動で確認します。ここで、実際に、100 個のラベルが間違っているサンプルのうち、犬は 5% だけであるとします。つまり、ラベルが間違っている 100 個の開発セット サンプルのうち、5 個が犬であることを意味します。つまり、典型的な 100 個のエラー サンプルのうち 100 個のサンプルでは、​​犬の問題を完全に解決したとしても、100 個のエラーのうち 5 個しか修正できません。言い換えると、犬の写真に関するエラーが 5% のみである場合、犬に関する質問に多くの時間を費やしても、エラー率は 10% から 9.5% に低下するだけです。その後、これは無駄な時間である、あるいは費やす必要があると判断できますが、少なくともこの分析では上限が示されています。犬の問題に対処し続けると、アルゴリズムのパフォーマンスの上限を向上させることができます。機械学習では、これをパフォーマンスの上限と呼ぶことがあります。これは、どこまでが最善であり、犬の問題を完全に解決することがどれだけ役立つかを意味します。

しかしここで、別のことが起こったとします。たとえば、これら 100 個のラベルが間違っている開発セットのサンプルを調べたところ、実際には写真のうち 50 枚が犬のものであることがわかり、つまり、そのうちの 50% が犬の写真であることがわかりました。あなたの犬の問題を解決するのにうまくいくかもしれません。この場合、実際に犬の問題を解決した場合、エラー率は 10% から 5% に低下する可能性があります。次に、エラー率を半減する方向を追求し、誤ってラベルが付けられた犬の写真の問題を減らすことに重点を置くことが価値があると判断するかもしれません。

機械学習では、手作業を軽蔑したり、人工的な値を多用しすぎたりすることがあります。しかし、アプリケーション システムを構築したい場合は、この単純な手動の統計ステップとエラー分析により、多くの時間を節約し、最も重要な方向性や最も有望な方向性を迅速に判断できます。

エラー分析を行う場合、複数のアイデアを同時に並行して評価することもできます。エラー分析を実行するには、開発セットまたはテスト セットでエラー サンプルのセットを見つけ、間違ってラベル付けされたサンプルを観察し、偽陽性と偽陰性を確認する必要があります。統計はさまざまなエラーに属します。タイプのエラーの数。その過程で、新しいエラーの種類を特定するようになるかもしれません。エラーの例を確認して、他の要因が分類子に干渉していることが判明した場合は、途中で新しいエラー タイプを作成できます。つまり、合計数に占めるさまざまなエラー マーク タイプの割合を数えることにより、どの問題を最初に解決する必要があるかを特定したり、新しい最適化の方向性についてのインスピレーションを得ることができます。

間違ってラベル付けされたデータのクリーンアップ

教師あり学習問題のデータは、入力 x と出力ラベル y で構成されます。データを確認すると、出力ラベルの一部が間違っていることがわかります。データ内のラベルの一部が間違っています。これらのラベルを修正するのに時間を費やす価値はありますか?

まず、トレーニング セットについて考えてみましょう。深層学習アルゴリズムは、トレーニング セット内のランダムなエラーに対して非常に堅牢であることがわかります。ラベル付けされたサンプルがランダムなエラーからそれほど遠くない限り、ラベル付けを行う人が注意を払わなかったり、誤って間違ったキーを押したりした可能性があります。エラーが十分にランダムである場合は、代わりにこれらのエラーを放っておいても問題ありません。それらを修正するには時間がかかりすぎます。

もちろん、トレーニング セットを実行し、ラベルを確認して修正することは問題ありません。これらのエラーを修正することが重要な場合もあれば、放っておいても問題ない場合もあります。データ セット全体が十分に大きい限り、実際のエラー率はそれほど高くない可能性があります。

深層学習アルゴリズムはランダムなエラーに対しては堅牢ですが、系統的なエラーに対してはそれほど堅牢ではありません。たとえば、タグ付け者が白い犬を猫としてタグ付けし続ける場合、それは問題です。なぜなら、分類器が学習した後、すべての白い犬を猫として分類するからです。しかし、ランダム エラー、またはランダムに近いエラーは、ほとんどの深層学習アルゴリズムでは問題になりません。

開発セットとテストセットこれらのラベル エラーのあるサンプルがある場合はどうすればよいでしょうか? 開発セットまたはテスト セットに対する誤ってラベル付けされたサンプルの影響が懸念される場合は、通常、エラー分析中に追加の列を追加して、誤ってラベル付けされたサンプルの数もカウントできるようにすることをお勧めします。たとえば、これら 100 個のサンプルのうち、誤ってラベルが付けられた 100 個のサンプルの影響をカウントすると、分類子の出力は開発セットのラベルと一致しません。サンプルのいくつかについては、分類子の出力が異なる場合があります。ラベルが間違っているためです。分類子が間違っているからではありません。この場合、追加の列にラベルを付けて、ラベル エラーの割合をカウントできます。

最終的な統計結果が開発セット内のラベル エラーの割合が 6% であると仮定すると、これらの誤ってラベル付けされたサンプルを修正する価値はあるでしょうか? これらのラベル付けエラーが開発セットでのアルゴリズムを評価する能力に重大な影響を与える場合は、時間をかけて誤ったラベルを修正する必要があります。ただし、開発セットを使用してコストの逸脱を見積もる能力に大きな影響を与えない場合は、おそらく、それらの処理に貴重な時間を費やす必要はありません。

誤ってフラグが立てられたデータを手動で修正する価値があるかどうかを判断するには、具体的な例を挙げてください。まず、開発セット全体のエラー率を調べます。システムが全体の精度 90% に達しているため、エラー率が 10% であると仮定し、次に、誤ったラベル付けによって引き起こされるエラー率をカウントします。エラーの 6% がラベル付けエラーによるものであると仮定すると、10% の 6% は 0.6% になります。現時点では、他の理由によって引き起こされたエラーを確認する必要があるかもしれません。開発セットに 10% のエラーがある場合、0.6% はそれらはラベルの間違いによるもので、残りの 9.4% は犬と猫の間違いなどの他の理由によって引き起こされます。したがって、この場合、訂正に集中する必要があるエラー率は 9.4% であり、マーク エラーによって引き起こされるエラーは全体のエラーのほんの一部にすぎないため、これを行う必要がある場合は、次のこともできます。さまざまなエラー ラベルを手動で修正しますが、現時点ではそれが最も重要なタスクではないかもしれません。

さまざまなディストリビューションからのデータを使用した、さまざまなディストリビューションでのトレーニングとテスト

このアルゴリズムは、トレーニング セットを形成するのに十分なラベル付きデータを収集した場合に最も効果的に機能します。そのため、多くのチームはあらゆる手段を使ってデータを収集し、それをトレーニング セットに積み上げて、たとえ一部のデータであってもトレーニング データを大きくしています。データの大部分は、開発セットやテスト セットとは異なるディストリビューションから取得されます。
ここに画像の説明を挿入します
ユーザーが携帯電話で撮った写真をアップロードするモバイル アプリを開発していて、ユーザーがアプリからアップロードした画像が猫のものかどうかを識別したいとします。これで、2 つのデータ ソースができました。1 つは、本当に重要なデータの配布です。これは、右側のアプリケーションなどのアプリケーションからアップロードされたデータです。これらの写真は、一般にアマチュアっぽく、フレーミングがあまり良くなく、一部の写真は、ぼやけていても。もう 1 つのデータ ソースは、クローラー プログラムを使用して Web ページをマイニングし、それらを直接ダウンロードすることです。このサンプルでは、​​プロ仕様のフレーミング、高解像度、プロ仕様の写真を使用した猫の写真を多数ダウンロードできます。アプリのユーザー数が少ない場合、ユーザーがアップロードした写真は 10,000 枚しか収集できませんが、クローラーを通じて Web ページをマイニングすることで大量の猫の写真をダウンロードでき、これまでに 200,000 枚以上の猫の写真がダウンロードされています。アルゴリズムのパフォーマンスについて本当に関心があるのは、最終的なシステムがアプリケーションからの画像の配布をどの程度適切に処理するかということです。最終的にはユーザーが右のような画像をアップロードすることになるため、分類器はこのタスクで適切に実行する必要があります。ここで行き詰まってしまったのは、その分布からのサンプルが 10,000 個しかない比較的小規模なデータ セットがあり、別の分布からのはるかに大きなデータ セットもあり、画像がどのようなものであるか、そして実際に処理したいものとは異なるためです。同じ。ただし、トレーニング セットが小さすぎるため、これら 10,000 枚の画像を直接使用することは望ましくありません。これらの 200,000 枚の画像を使用すると効果があるようです。ただし、ジレンマは、これらの 200,000 枚の画像が、希望するディストリビューションからのものではないということです。では、どうすればよいでしょうか?

ここでのオプションの 1 つは、2 つのデータ セットを結合して 210,000 枚の写真を作成し、これらの 210,000 枚の写真をトレーニング、開発、テスト セットにランダムに分配することです。このようにデータセットを設定することには、いくつかの利点と欠点があります。利点は、トレーニング セット、開発セット、テスト セットがすべて同じディストリビューションから取得され、管理が容易になることです。ただし、このデメリットは小さくないということです。つまり、開発セットを見ると、多くの画像が Web からダウンロードした画像からのものであることがわかります。それは、あなたが本当に気にするデータの分布ではありません。本当に扱いたいのは携帯電話からの画像です。開発セットをセットアップする目的は、チームに何を目指すべきか、そしてそれを目指す方法を伝えることであることに注意してください。エネルギーのほとんどは、Web からダウンロードした画像の最適化に費やされており、実際にはそれが望んでいることではありません。したがって、この方法はお勧めできません。

以下の方法を使用することをお勧めします。たとえば、まだ 205,000 枚の画像があります。トレーニング セットには、Web ページからの 200,000 枚の画像と、モバイル アプリケーションからの 5,000 枚の画像が含まれています。開発セットには、アプリケーションからの 2,500 枚の画像が含まれており、テスト セットにも、アプリケーションからの 2,500 枚の画像が含まれています。データをトレーニング セット、開発セット、テスト セットに分割する利点は、目指しているターゲットが処理したいターゲットになることです。開発セットに含まれるすべてのデータは携帯電話のアップロードから取得したものであるとチームに伝えます。 . 画像配信で本当に気になるのはこれです。携帯電話からアップロードされた画像の配信処理をうまく処理できるように学習システムを構築してみましょう。欠点は、トレーニング セットの配布が開発セットやテスト セットの配布と異なることです。しかし、このようにデータをトレーニング、開発、テスト セットに分割すると、長期的にはシステム パフォーマンスが向上することがわかりました。

データが一致しない場合のバイアスと分散の分析 (Mismatched Data DistributionのBias and Variance)

学習アルゴリズムのバイアスと分散を推定することは、次に優先すべき方向性を決定するのに非常に役立ちます。ただし、トレーニング セットが開発セットやテスト セットとは異なる分布に由来する場合、バイアスと分散を分析する方法は次のとおりである可能性があります。違う。

開発セットがトレーニング セットと同じ分布に由来しており、トレーニング セットの誤差が 1%、開発セットの誤差が 10% である場合、ここには大きな分散の問題があり、アルゴリズムはあまり優れているとは言えないと言えるかもしれません。トレーニング セットから一般化すると、トレーニング セットは非常にうまく処理されますが、開発セットは突然非常に貧弱になります。

しかし、トレーニング データと開発データが異なるディストリビューションから取得されている場合、この結論を安全に導き出すことはできなくなります。おそらく、トレーニング セットはすべて高解像度の画像で非常に鮮明な画像であったため、トレーニング セットを認識するのは簡単だったため、アルゴリズムはトレーニング セットでうまく機能しましたが、開発セットを認識するのははるかに困難でした。したがって、おそらくソフトウェアには分散の問題があるのではなく、開発セットに正確に分類するのがより難しい画像が含まれていることを単に反映しているだけです。したがって、この分析の問題は、まず第一に、アルゴリズムが開発セットのデータではなく、トレーニング セットのデータのみを認識していることです。次に、開発セットのデータはさまざまなディストリビューションから取得されます。

2 つの要因の影響を区別するために、トレーニング開発セットと呼ばれる新しいデータ セットを定義します。したがって、これは新しいデータ サブセットになります。トレーニング セットの配布からマイニングする必要がありますが、ネットワークのトレーニングには使用されません。

次のようにトレーニング セット、開発セット、テスト セットを設定しました。開発セットとテスト セットは同じディストリビューションに由来しますが、トレーニング セットは異なるディストリビューションに由来します。私たちがしなければならないのは、トレーニング セットをランダムに分割し、トレーニング セットの一部をトレーニング開発セット (training-dev) として分離することです。開発セットとテスト セットが同じ分布から得られるのと同じように、トレーニング セットとトレーニング開発セットも同じディストリビューションから取得されます。

ただし、違いは、ニューラル ネットワークをトレーニング セット上でのみトレーニングし、トレーニング開発セット上でニューラル ネットワークにバックプロパゲーションを実行させないことです。エラー分析を実行するには、トレーニング セットの分類子のエラー、train-dev セットのエラー、および dev セットのエラーを確認する必要があります。

たとえば、特定のサンプルでは、​​トレーニング誤差が 1%、トレーニング開発セットの誤差が 9%、次に開発セットの誤差が 10% になります。このことから、トレーニング データからトレーニング開発セット データに変更すると、エラー率が実際に大幅に上昇すると結論付けることができます。トレーニング データとトレーニング開発データの違いは、ニューラル ネットワークはデータの最初の部分を認識してその上で直接トレーニングできますが、トレーニング開発セットでは直接トレーニングできないことです。これは、アルゴリズムに分散問題。これは、トレーニング開発セットの誤り率がトレーニング セットと同じ分布からのデータで測定されるためです。したがって、ニューラル ネットワークがトレーニング セットで良好に動作したとしても、同じディストリビューションからのトレーニング開発セットにはうまく一般化できず、同じディストリビューションからのトレーニング開発セットにもうまく一般化できません。

別のサンプルを見てみましょう。トレーニング エラーが 1%、train-dev エラーが 1.5% であるとします。しかし、開発セットの処理を開始すると、エラー率は 10% に上昇します。これで、分散の問題は非常に小さくなりました。これは、表示されたトレーニング データから、ニューラル ネットワークがまだ見ていないデータであるトレーニング開発セット データに移行するとき、エラー率がわずかに上昇するだけであるためです。しかし、開発セットに移行すると、エラー率が大幅に上昇するため、データの不一致の問題になります。これは、学習アルゴリズムがトレーニング開発セットまたは開発セットで直接トレーニングされていないためですが、2 つのデータ セットは異なるディストリビューションから取得されているためです。しかし、アルゴリズムが何を学習しているかに関係なく、学習/開発セットではうまく機能しますが、開発セットではうまくいきません。つまり、アルゴリズムは、関心のあるデータとは異なる分布を扱うのが得意です。データの解離、マッチングの問題。

データの不一致への対処

重大なデータの不一致が見つかった場合、通常は最初にエラー分析が実行され、トレーニング セットと開発テスト セットの間の具体的な違いを理解しようとします。技術的には、テスト セットでの過剰適合を回避するために、エラー分析を行ってから、トレーニング用の開発セットと同様のデータをさらに収集する方法があるかどうかを確認します。

アプローチの 1 つは人工データ合成であり、人工データ合成は実際に機能します。ただし、人工的なデータ合成を使用する場合は、可能性空間全体のごく一部のみをシミュレートしている可能性があることに注意して覚えておく必要があります。

おすすめ

転載: blog.csdn.net/Luo_LA/article/details/132595822