画像分類の精度を段階的に向上させるにはどうすればよいでしょうか?

画像分類の精度を段階的に向上させるにはどうすればよいでしょうか?

  [[205151]]

1. 問題の説明

画像認識や画像分類、その他の機械学習タスクを扱う場合、どのような改善がモデルのパフォーマンス(認識率、分類精度)を向上させることができるのか常に混乱します。 。 。言い換えれば、長くて苦痛なパラメータ調整プロセス中に、どのようなパラメータを調整するのでしょうか? 。 。そこで私は、公開データセットCIFAR-10 [1]を調査して、ネットワークトレーニングとパラメータ調整を迅速かつ効率的かつ意図的に実行できる一連の方法をまとめました。

CIFAR-10 データセットには 60,000 枚の画像が含まれており、各画像は 32 x 32 の解像度 (RGB3 チャネルに分割) のカラー画像です。 CIFAR-10 の分類タスクは、各画像をカエル、トラック、飛行機などの 10 個のカテゴリのいずれかに分類することです。この論文では、主に畳み込みニューラル ネットワーク (CNN) 手法を使用してモデルを設計し、分類タスクを完了します。

まず、ネットワークをトレーニングしながらネットワークのパフォーマンスをテストできるように、データセットをトレーニング セット/検証セット/テスト セットに分割しました。トレーニング セットは主にモデルのトレーニングに使用され、検証セットは主にパラメータ調整に使用され、テスト セットは主にモデルのパフォーマンス評価に使用されます。そこで、60,000 サンプルのデータセットを、トレーニング セットとして 45,000 サンプル、検証セットとして 5,000 サンプル、テスト セットとして 10,000 サンプルに分割しました。次に、モデルを設計および改善する方法を段階的に分析します。

2. 最もシンプルなバージョンのCNNを構築する

機械学習の問題では、最初は必ず最も単純なモデルを使用します。一方では、モデルをすばやく実行して、タスクの難しさを理解できます。他方では、比較実験を容易にするために、モデルのベースライン バージョンを用意できます。そこで、私はこれまでの経験とネットユーザーの推奨に基づいて、次のモデルを設計しました。

モデルの入力データは、ネットワークの入力がサイズ (128, 32, 32, 3) の 4 次元テンソルであり、それぞれバッチ内の画像数 128、画像の幅のピクセル数 32、高さのピクセル数 32、チャネル数 3 を表します。まず、複数の畳み込みニューラル ネットワーク層を使用して画像の特徴を抽出します。畳み込みニューラル ネットワーク層の計算プロセスは次のとおりです。

  1. 畳み込み層 1: 畳み込みカーネル サイズ 3*3、畳み込みカーネル移動ステップ 1、畳み込みカーネル数 64、プーリング サイズ 2*2、プーリング ステップ 2、プーリング タイプは最大プーリング、活性化関数 ReLU。
  2. 畳み込み層 2: 畳み込みカーネル サイズ 3*3、畳み込みカーネル移動ステップ 1、畳み込みカーネル数 128、プーリング サイズ 2*2、プーリング ステップ 2、プーリング タイプは最大プーリング、活性化関数 ReLU。
  3. 畳み込み層 3: 畳み込みカーネル サイズ 3*3、畳み込みカーネル移動ステップ 1、畳み込みカーネル数 256、プーリング サイズ 2*2、プーリング ステップ 2、プーリング タイプは最大プーリング、活性化関数 ReLU。
  4. 全結合層: 隠れ層ユニット数は 1024、活性化関数は ReLU です。
  5. 分類層: 隠れ層ユニット数は 10、活性化関数はソフトマックスです。

パラメータの初期化、すべての重み行列は random_normal(0.0, 0.001) を使用し、すべてのバイアス ベクトルは constant(0.0) を使用します。目的関数としてクロスエントロピーを使用し、パラメータ更新には Adam 勾配降下法を使用し、学習率は 0.001 の固定値に設定します。

このネットワークは 3 つの畳み込み層を持つニューラル ネットワークであり、画像の特徴抽出を迅速に完了できます。完全接続層は画像の特徴を分類特徴に統合するために使用され、分類層は分類に使用されます。クロスエントロピーも、最も一般的に使用される目的関数の 1 つです。分類タスクは、クロスエントロピーを目的関数として使用するのに非常に適しています。 Adam 勾配降下法も、現在非常に普及している勾配降下法の改良法の 1 つです。学習率が大きすぎると、モデルがより良いソリューションを見つけることが難しくなります。小さすぎると、モデルのトレーニング効率が低下します。そのため、適度な値である 0.001 が選択されます。このようにして、CNN モデルの最も基本的なバージョンが構築され、その後、トレーニングとテストを行って結果を観察します。

5000 回のトレーニング後、損失の変化曲線、トレーニング セットの精度の変化曲線、検証セットの精度の変化曲線が次の図に示されます。テストセットの精度は 69.36% です。

結果分析:まず、トレーニング損失(目的関数値)の変化を観察します。最初は損失が200から0に近づくまで減少しますが、100ラウンドあたりで変動し始め、トレーニング振幅が増加するにつれて、モデルが不安定であることを示しています。次に、トレーニング セットと検証セットの精度を観察したところ、トレーニング セットの精度は 1 に近く、検証セットの精度は 70% 前後で安定しており、モデルの一般化能力が強くなく、過剰適合が発生していることがわかりました。最後に、テスト セットを評価したところ、精度は 69.36% で、満足できるものではありませんでした。これは、モデルを大幅に改善する必要があることを示しています。パラメータ調整の長い旅に出発しましょう。

3. データ拡張が大きな役割を果たす

データ拡張技術の使用は、主にトレーニング データに小さな外乱や変更を加えることです。一方では、トレーニング データを増やしてモデルの一般化能力を向上させることができます。他方では、ノイズ データを増やしてモデルの堅牢性を高めることができます。主なデータ拡張方法には、反転、ランダムクロップ、カラージッタリング、シフト、スケール、コントラスト、ノイズ、回転/反射などがあります。Kerasの公式ドキュメント[2]を参照することができます。トレーニング データのバッチを取得し、データ拡張手順を実行してから、トレーニングのためにネットワークに送信します。

私が実行した主なデータ拡張操作は次のとおりです。

  1. 画像切り取り: 画像サイズよりも小さい長方形のボックスを生成し、画像をランダムに切り取り、最終的に長方形のボックス内の画像をトレーニングデータとして使用します。
  2. 画像反転: 画像を左から右に反転します。
  3. 画像のホワイトニング: 画像に対してホワイトニング操作を実行します。つまり、画像自体をガウス (0,1) 分布に正規化します。

比較実験を行い、異なるデータ拡張方法のパフォーマンスを観察するために、実験 1 では画像カットのみ、実験 2 では画像反転のみ、実験 3 では画像ホワイトニングのみ、実験 4 では 3 つのデータ拡張方法すべてを同時に実行しました。同じトレーニングを 5000 ラウンド実行しました。次の図に示すように、損失変化曲線、トレーニング セット精度変化曲線、検証セット精度変化曲線を比較しました。

結果分析:トレーニング曲線と検証曲線を観察したところ、画像のホワイトニングが最も効果的で、次に画像のカット、画像の反転の順であることがわかりました。これらの3つのデータ拡張技術を同時に使用すると、トレーニングプロセスの損失がより安定するだけでなく、検証セットの精度も約82%まで向上します。改善効果は非常に明白です。テストセットでは、精度率も 80.42% に向上しました。これは、画像強化がトレーニングセットのデータ量を増やすことでモデルの一般化能力と堅牢性を向上させる効果を確かに達成し、精度も約10%向上させたことを示しています。したがって、データ強化は大きな役割を果たしています。しかし、認識精度が約80%とまだ満足できるものではないので、引き続きパラメータの調整を行っていきます。

4. モデルから始めて、いくつかの改善方法を使用する

次のステップは、モデルの観点からいくつかの改善を行うことです。この領域の改善は、論文の誕生にとって重要な領域です。特定の問題に対する特定のモデルの改善は大きく異なるため、すべてを試すことは不可能です。そのため、通常はバッチ正規化や重み減衰などの一般的な方法が試されます。 4つの改善方法を実験してみましたので、以下に一つずつ紹介します。

  1. 重み減衰:重みパラメータの数を制限するために目的関数に正則化項を追加することは、過剰適合を防ぐ方法です。この方法は、実際には機械学習におけるL2正則化法ですが、ニューラルネットワークでは重み減衰と改名されています[3]。
  2. ドロップアウト:各トレーニング中に、いくつかの特徴検出器の動作が停止されます。つまり、ニューロンは一定の確率で活性化されません。これにより、過剰適合を防ぎ、一般化能力を向上させることができます[4]。
  3. バッチ正規化:バッチ正規化は、ニューラルネットワークの各層の入力データに対して正規化を実行します。これにより、データ分布がより均一になります。すべてのデータがニューロンの活性化につながる、またはすべてのデータがニューロンの活性化につながらないということは起こりません。これは、モデルの適合能力を向上させることができるデータ標準化方法です[5]。
  4. LRN: LRN レイヤーは、生物神経系の側方抑制メカニズムを模倣し、ローカルニューロンの活動に対する競合メカニズムを作成し、比較的大きな応答を持つ値を相対的に大きくすることで、モデルの一般化能力を向上させます。

比較実験を行うために、実験 1 では重み減衰のみ、実験 2 では重み減衰 + ドロップアウト、実験 3 では重み減衰 + ドロップアウト + バッチ正則化、実験 4 では重み減衰 + ドロップアウト + バッチ正則化 + LRN を使用します。これらはすべて 5000 ラウンドのトレーニングが行われています。損失変化曲線、トレーニング セット精度変化曲線、検証セット精度変化曲線を比較すると、次の図のようになります。

結果分析:トレーニング曲線と検証曲線を観察しました。各モデル改善方法では、トレーニングセットのエラーと検証セットの精度が向上します。その中でも、バッチ正規化技術とドロップアウト技術によってもたらされる改善は非常に顕著です。これらのモデル改善技術を同時に使用すると、検証セットの精度は約 82% から約 88% に向上し、改善効果は非常に明白です。テストセットでは、精度率も 85.72% に向上しました。もう一度左の図を見てみましょう。バッチ正規化を使用した後、損失曲線は以前のように最初に減少してから増加するのではなく、減少し続けています。これは、バッチ正規化テクノロジによってモデルトレーニングの安定性が向上し、モデルの一般化能力が大幅に向上することを示しています。そのため、モデル改良技術を考案し、それを原理的に説明しながら、さまざまなモデルに適用できるようになれば、非常に良いイノベーションとなり、私が挑戦したい方向性でもあります。これでテストセットの精度が約 85% まで向上しました。次は他の角度からパラメータを調整します。

5. 学習率を変更してモデルのパフォーマンスをさらに向上させる

ニューラル ネットワークに関する多くの論文では、学習率を変更する手法がモデルのパフォーマンスを向上させるために使用されています。一般的な考え方は次のとおりです。

  1. まず、トレーニングに大きな学習率を使用し、目的関数の値と検証セットの精度の収束曲線を観察します。
  2. 目的関数の値が減少する速度と検証セットの精度が増加する速度が遅くなる場合は、学習率を下げます。
  3. 学習率を下げても目的関数の減少や検証セットの精度の向上に影響がなくなるまで、手順 2 を繰り返します。

比較実験では、実験 1 ではトレーニングに学習率 0.01 のみを使用し、実験 2 では最初の 10,000 バッチに学習率 0.01 を使用し、10,000 バッチ以降は学習率を 0.001 に下げ、実験 3 では最初の 10,000 バッチに学習率 0.01、10,000 ~ 20,000 バッチに学習率 0.001 を使用し、20,000 バッチ以降は学習率を 0.0005 に下げます。すべてのトレーニングは 5000 ラウンド実行され、損失の変化曲線、トレーニング セットの精度の変化曲線、検証セットの精度の変化曲線が次の図のように比較されます。

結果分析:バッチサイズが10,000の場合、学習率が0.01から0.001に低下したときに目的関数値が大幅に減少し、検証セットの精度が大幅に向上したことが観察されました。バッチサイズが20,000の場合、学習率が0.001から0.0005に低下したときに目的関数値が大幅に減少することはありませんでしたが、検証セットの精度はある程度向上しました。テストセットの場合、精度も86.24%に向上しました。これは、学習率の変更によってモデルの適合能力が向上し、精度が向上することを示しています。また、学習率をいつ低下させるか、またどの程度低下させるかを決定するには、複数回の試行が必要です。一般的に、モデルが基本的に形成された後、学習率を変更するこの方法は、一定の改善を得て改善を継続するために使用されます。

6. ネットワーク層の数を増やすと何が起こりますか?

ディープラーニングは今とても人気があります。そのため、十分な計算リソースがある場合、モデルのパフォーマンスを向上させるための最も一般的なアイデアは、ネットワークの深さを増やしてディープニューラルネットワークに問題を解決させることです。しかし、単純なネットワークスタッキングでは必ずしも良い結果が得られない場合があります。ディープラーニングの考え方を念頭に置いて、プレーンCNNモデル[6]に従って次の実験を行いました。

  1. 畳み込み層 1: 畳み込みカーネル サイズ 3*3、畳み込みカーネル移動ステップ サイズ 1、畳み込みカーネル数 16、活性化関数 ReLU、batch_normal および weight_decay を使用。次の n 層では、畳み込みカーネル サイズ 3*3、畳み込みカーネル移動ステップ サイズ 1、畳み込みカーネル数 16、活性化関数 ReLU、batch_normal および weight_decay を使用。
  2. 畳み込み層 2: 畳み込みカーネル サイズ 3*3、畳み込みカーネル移動ステップ サイズ 2、畳み込みカーネル数 32、活性化関数 ReLU、batch_normal および weight_decay を使用、次の n 層、畳み込みカーネル サイズ 3*3、畳み込みカーネル移動ステップ サイズ 1、畳み込みカーネル数 32、活性化関数 ReLU、batch_normal および weight_decay を使用。
  3. 畳み込み層 3: 畳み込みカーネル サイズ 3*3、畳み込みカーネル移動ステップ サイズ 2、畳み込みカーネル数 64、活性化関数 ReLU、batch_normal および weight_decay を使用。次の n 層では、畳み込みカーネル サイズ 3*3、畳み込みカーネル移動ステップ サイズ 1、畳み込みカーネル数 64、活性化関数 ReLU、batch_normal および weight_decay を使用。
  4. プーリング層: グローバル プーリングを使用して、64 個の隠しユニットのそれぞれに対してグローバル プーリングを実行します。
  5. 完全接続層: 隠し層ユニットの数は 10、活性化関数は softmax、batch_normal と weight_decay が使用されます。

比較実験を行うために、4 つの実験グループが実施され、各グループのネットワーク層の数はそれぞれ 8、14、20、32 に設定されました。すべてのトレーニングは 5000 ラウンド実行され、損失の変化曲線、トレーニング セットの精度の変化曲線、検証セットの精度の変化曲線が次の図のように比較されます。

結果分析:ネットワーク層の数を深くした後、パフォーマンスが実際に低下し、元の検証セットの精度に到達できないことに驚きました。ネットワーク層の数を8層から14層に増やすと精度が向上しましたが、14層から20層、さらに32層に増やすと精度が低下しました。これは、ネットワーク層の数が多すぎると、勾配減衰によりネットワークのパフォーマンスが低下することを示しています。したがって、ディープニューラルネットワークが正常に動作できるように、他の方法を使用して勾配減衰問題を解決する必要があります。

7. 最終兵器、残留ネットワーク

2015年、マイクロソフトは残差ネットワーク[7]を使用してImageNetを征服しました。この残差ネットワークは勾配減衰の問題を解決し、ディープニューラルネットワークが適切に機能することを可能にしました。ネットワーク層の数が増えると、誤差逆伝播プロセス中に勾配は減少し続けます。しかし、層間の直接接続により、誤差逆伝播プロセスで誤差が低減され、深層ネットワークを正常にトレーニングできるようになります。具体的なプロセスについては、論文[7]を参照してください。

比較実験を設定することで、残差ネットワークのパフォーマンスを観察しました。4 つのグループの実験を実施し、各グループのネットワーク層の数はそれぞれ 20、32、44、56 に設定されました。損失変化曲線と検証セット精度変化曲線の比較を次の図に示します。


結果分析: ネットワーク層が 20 から 56 に増加するにつれて、トレーニング損失が着実に減少し、検証セットの精度が着実に向上することが確認されました。ネットワーク層の数が 56 の場合、検証セットの精度は 91.55% に達する可能性があります。これは、残差ネットワーク技術の使用により勾配減衰問題を解決し、ディープネットワークの特徴抽出能力を十分に発揮し、モデルが強力なフィッティングと一般化機能を獲得できることを示しています。ディープネットワークをトレーニングする場合、残差ネットワークが究極の武器として重要な役割を果たす可能性があります。

8. 結論

CIFAR-10 画像分類問題では、最も単純な畳み込みニューラル ネットワークから始めましたが、分類精度は約 70% しか達成できませんでした。モデルのパフォーマンスを向上させる方法を継続的に追加することで、最終的に分類精度は約 90% に向上しました。この 20% の精度向上は、データ、モデル、トレーニング プロセスの改善によるものです。各項目の具体的な改善点は、次の表に示されています。

  • 精度を向上させるための改良方法
  • 基本的なニューラルネットワーク 69.36% –
  • +データ強化 80.42% 11.06%
  • +モデル改善 85.72% 16.36%
  • +学習率の変更 86.24% 16.88%
  • +ディープ残差ネットワーク 91.55% 22.19%

その中で、データ拡張技術は、画像の反転、画像の切り取り、画像の白色化などの方法を使用して、データ量を増やし、モデルの適合能力を高めます。モデル改善技術には、過剰適合を防ぎ、モデルの一般化能力を高めるためのバッチ正規化、重み減衰、ドロップアウトなどが含まれます。学習率を変更すると、トレーニング中に学習率を下げることでモデルの収束性が向上し、適合能力が向上します。ネットワーク層の数を深め、残差ネットワーク技術により、モデル層の数を増やし、勾配減衰問題を解決することで、モデルのフィッティング能力が向上します。これらの改善方法を段階的に積み重ねて進歩させることで、ネットワークのフィッティングと一般化の能力がますます強化され、最終的により高い分類精度が達成されます。

この記事のすべてのコードは私のgithub、persistforever/cifar10-tensorflowにあります。

この記事で紹介したパラメータ調整のプロセスが皆様のお役に立てれば幸いです。「大学院時代に人工知能を勉強するときは、他のことは何も学ぶ必要はなく、パラメータ調整だけをよく学べばよい」という格言を聞いたことがあります。「パラメータ調整」という言葉には、数え切れないほどの知識が含まれています。皆様がニューラルネットワークに関する乾物をさらに共有できることを願っています。

<<:  ディープラーニングにおける多体問題の解決方法

>>:  インターネットの未来のために: AI が生み出すものと破壊するもの

推薦する

...

機械学習プロジェクトが失敗する9つの理由

この記事では、データ サイエンス プロジェクトが失敗する最も一般的な理由をまとめ、落とし穴を回避する...

AI支援プログラミングの現状:AIツールは速度を向上させるが、エラーコードも大幅に増加

ソフトウェア開発の世界では、AI ツールの人気が高まっています。昨年、GitHub は、AI 支援ツ...

ブロックチェーンと人工知能、統合開発の「win-winゲーム」

[[259445]]ブロックチェーンと人工知能はどちらも今話題になっています。クールな「ブラックテ...

スマートホーム技術における感情AIの役割

スマートホーム テクノロジーの登場により、私たちが生活空間と関わる方法は大きく変わりました。音声制御...

中国初の風力タービン出力曲線AIモデルが発表され、業界のギャップを埋める

8月28日、国家エネルギー音声の公式WeChatアカウントによると、龍源電力工程技術有限公司は最近、...

タオバオライブストリーミングトラフィックと供給間のエンドツーエンドの連携の調査

1. タオバオライブの体系的な制御機能の進化現在、Taobao Live の推奨アルゴリズムの焦点は...

中国は人工知能研究で米国を追い越している

米スタンフォード大学の報告によると、2020年の学術誌におけるAI関連論文の引用率は中国が20.7%...

ブラウザで TensorFlow を使用するにはどうすればいいですか?

[[341102]] [51CTO.com クイック翻訳] TensorFlow を使用すると、少...

...

2019年、人工知能業界は再び冬を迎えたのでしょうか?ここで3つの話をしたいと思います。

ストーリー1:「予測モデル」から「データ可視化」、回帰?私たちのチームは、データサイエンスコンサルテ...

TensorFlowに関する簡単な例

[[220444]]この記事では、TensorFlowの例をいくつか見て、テンソルテンソルまた、テン...

AIが不動産業界をどう変えるのか

デジタル化が進むにつれ、人工知能は不動産経済の成長を促進する上で重要な役割を果たします。有名なソフト...

...