ディープラーニングにおける正規化の概要(Python コード付き)

ディープラーニングにおける正規化の概要(Python コード付き)

編集者注: 日々の仕事や研究において、データ サイエンティストが遭遇する最も一般的な問題の 1 つは、過剰適合です。トレーニング セットではパフォーマンスが良好だったのに、テスト セットではパフォーマンスがひどいモデルがあったことはありませんか?モデリングコンテストに参加した時、自分のモデルはスコアではトップにランクされるはずだったのに、コンテスト主催者が発表したスコアボードでは何百位も後ろにランクされていた、という経験をしたことはありませんか?このような経験をしたことがある場合は、この記事が役に立ちます。この記事では、過剰適合を回避し、モデルのパフォーマンスを向上させる方法を説明します。

この記事では、オーバーフィッティングの概念と、オーバーフィッティングの問題を解決するために使用されるいくつかの正規化方法について詳しく説明し、さらにこの知識を強化するために Python のケーススタディを補足します。この記事は、読者がニューラル ネットワークと Keras の実装に関してある程度の経験があることを前提としています。

目次

1. 正規化とは何ですか?

2. 正規化と過剰適合

3. ディープラーニングにおける正則化

  • L2 および L1 正規化

  • ドロップアウト

  • データ拡張

  • 早期終了

正規化とは何か

このトピックに入る前に、次の画像をご覧ください。

過剰適合について話すときはいつでも、この図が「死体を鞭打つ」ために時々引き出されます。上の図に示すように、最初はモデルがすべてのデータ ポイントを適切に適合できず、つまり、データ分布を反映できず、適合不足になっています。トレーニング回数が増えるにつれて、徐々にデータのパターンを見つけ出し、できるだけ多くのデータポイントをフィッティングしながらデータの傾向を反映できるようになります。このとき、より優れたパフォーマンスを発揮するモデルです。これを基にトレーニングを続けると、モデルはトレーニング データの詳細とノイズをさらに調査し、すべてのデータ ポイントに適合させるためにあらゆる手段を講じます。この時点で、モデルは過剰適合します。

つまり、左から右に向かって、モデルの複雑さは徐々に増加し、トレーニング セットでの予測誤差は徐々に減少しますが、テスト セットでの誤差率は凸曲線を示します。

出典: スライドプレーヤー

これまでにニューラル ネットワークを構築したことがある場合は、おそらく次の教訓を学んだことがあるでしょう。ネットワークが複雑になるほど、過剰適合しやすくなります。データを適合させながらモデルをより一般化するために、正規化を使用して学習アルゴリズムに微妙な変更を加え、モデルの全体的なパフォーマンスを向上させることができます。

正規化と過剰適合

オーバーフィッティングはニューラル ネットワークの設計と密接に関連しているので、まずはオーバーフィッティング ニューラル ネットワークを見てみましょう。

以前に弊社の「ゼロから学ぶ: Python と R でのニューラル ネットワークの理解とコーディング (完全版)」を読んだことがある場合、またはニューラル ネットワークの正規化の概念について基本的な知識がある場合は、上の図の矢印の付いた線に実際に重みがあり、ニューロンは入力と出力が格納される場所であることがわかるはずです。公平を期すために、つまり、ネットワークが最適化方向に制限されすぎないようにするために、ニューロンの加重行列にペナルティを課すための正規化ペナルティ項を事前に追加する必要もあります。

正則化係数を大きく設定して、一部の重み行列の値がほぼゼロになるようにすると、より単純な線形ネットワークが得られ、適合不足になる可能性があります。

したがって、係数が大きいほど良いことになります。下の図に示すように、適合度の高いモデルを得るためには、この正則化係数の値を最適化する必要があります。

ディープラーニングにおける正則化

L2 および L1 正規化

L1 と L2 は最も一般的な正則化方法であり、コスト関数の後に正則化項を追加します。

コスト関数 = 損失(バイナリクロスエントロピーなど) + 正則化項

この正則化項の追加により、重みが軽減されます。つまり、ニューラル ネットワークの複雑さが軽減されます。これは、「ネットワークが複雑になればなるほど、過剰適合しやすくなる」という考えと相まって、理論的には、過剰適合を直接防止すること (オッカムの剃刀) に相当します。

もちろん、この正規化項は L1 と L2 では異なります。

L2の場合、コスト関数は次のように表すことができます。

ここで、λ は正則化係数であり、より良い結果を得るために最適化できるハイパーパラメータです。上記の式を導出すると、重みwの前の係数は1−ηλ/mとなります。η、λ、mはすべて正の数なので、1−ηλ/mは1未満となり、wは減少傾向にあるため、L2正則化は重み減衰とも呼ばれます。

L1の場合、コスト関数は次のように表すことができます。

L2とは異なり、ここでは重みwの絶対値にペナルティを課します。上記の式を微分すると、-sgn(w) という項を含む式が得られます。これは、w が正の数の場合、w は 0 に向かって減少し、w が負の数の場合、w は 0 に向かって増加することを意味します。したがって、L1 の考え方は、重みを 0 に向かって移動し、それによってネットワークの複雑さを軽減することです。

したがって、モデルを圧縮したい場合は L1 が適していますが、単に過剰適合を防ぎたい場合は、通常 L2 が使用されます。 Keras では、正規化を直接呼び出して、任意のレイヤーで正規化を実行できます。

例: 完全接続層で L2 正則化を使用するコード:

  1. kerasから、 regularizersmodel.add (Dense(64、input_dim=64、kernel_regularizer=regularizers.l2(0.01 )をインポートします。

注: ここでの 0.01 は正規化係数 λ の値であり、グリッド検索によってさらに最適化できます。

ドロップアウト

ドロップアウトは最も興味深い正則化手法の 1 つであり、非常にうまく機能するため、ディープラーニングの分野でよく使用される手法の 1 つです。わかりやすく説明するために、ニューラル ネットワークが次のようになっていると仮定しましょう。

では、Dropout は具体的に何をドロップするのでしょうか?下の図を見てみましょう。各反復で、いくつかのニューロンがランダムに選択され、それらすべてが「強制終了」されます。つまり、ニューロンが対応する入力と出力とともに「削除」されます。

L1 および L2 によるコスト関数の修正と比較すると、ドロップアウトはネットワークをトレーニングするためのテクニックに似ています。トレーニングが進むにつれて、ニューラル ネットワークは各反復で非表示層/入力層のニューロンの一部 (ハイパーパラメータ、通常は半分) を無視します。これにより、異なる出力が生成され、その一部は正しく、一部は間違っています。

このアプローチは、より多くのランダム性を捉えることができるアンサンブル学習に似ています。アンサンブル学習分類器は通常、単一の分類器よりもうまく機能します。同様に、ネットワークはデータ分布に適合する必要があるため、Dropout 後のモデルの出力のほとんどは間違いなく正しく、ノイズ データの影響はごく一部を占めるだけであり、最終結果に大きな影響を与えません。

これらの要因により、ニューラル ネットワークがより大きく、よりランダムな場合に、ドロップアウトを使用するのが一般的です。

Keras では、keras コア レイヤーを使用してドロップアウトを実装できます。以下は Python コードです。

  1. から  keras.layers.core をインポート Dropoutmodel = Sequential([Dense(output_dim=hidden1_num_units, input_dim=input_num_units, activation= 'relu' ),Dropout(0.25),Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation= 'softmax' ),])

注: ここでは、Dropout のハイパーパラメータとして 0.25 を設定しました (毎回 1/4 を削除)。グリッド検索を通じてさらに最適化できます。

データ拡張

オーバーフィッティングとは、モデルによってデータセット内のノイズや詳細が過剰に捕捉されることであるため、オーバーフィッティングを防ぐ最も簡単な方法は、トレーニング データの量を増やすことです。しかし、機械学習のタスクでは、データの収集とラベル付けのコストが高すぎるため、データ量を増やすことはそれほど簡単ではありません。

手書きの数字画像を扱っているとします。トレーニング セットを拡張するには、回転、反転、縮小/拡大、変位、切り捨て、ランダム ノイズの追加、歪みの追加などの方法を使用できます。処理済みの画像をいくつか紹介します。

これらの方法はデータ拡張です。ある意味では、機械学習モデルのパフォーマンスはデータの量に依存するため、データの強化によりモデル予測の精度が大幅に向上します。場合によっては、これはモデルを改善するために必要なテクニックです。

Keras では、トレーニング データを前処理するために使用できる多数のパラメーターのリストを提供する ImageDataGenerator を使用して、これらすべての変換を実行できます。これを実装するためのサンプルコードを次に示します。

  1. keras.preprocessing.imageからImageDataGenerator をインポートします。datagen = ImageDataGenerator(horizo​​ntal flip= True )datagen.fit(train)

早期終了

これはクロス検証戦略です。トレーニングの前に、トレーニング セットの一部を検証セットとして抽出します。トレーニングが進むにつれて、検証セットでのモデルのパフォーマンスがどんどん悪くなる場合は、トレーニングを手動ですぐに停止します。この早期停止の方法は、早期停止と呼ばれます。

上の図では、点線の部分でトレーニングを停止する必要があります。それ以降はモデルが過剰適合し始めるためです。

Keras では、コールバック関数を呼び出してトレーニングを早期に停止することができます。サンプル コードは次のとおりです。

  1. keras.callbacksからEarlyStoppingEarlyStopping(monitor= 'val_err' , patients=5)をインポートします。

ここで、monitor は監視するエポックの数を指し、val_err は検証エラーを表します。

忍耐とは、5 つのエポックが連続して経過しても、モデルの予測結果がそれ以上改善されないことを意味します。上の図と組み合わせると、点線以降、モデルはトレーニングされたエポックごとに検証エラーが高くなり (検証精度が低くなり)、5 つの連続エポックの後にトレーニングが早期に停止することがわかります。

注意:5エポックのトレーニング後にモデルの検証精度が向上する場合があるので、ハイパーパラメータの選択には注意が必要です。

<<:  心が開かれました!将来、人工知能がもたらす素晴らしい生活は、あなたが想像する以上のものになるかもしれません...

>>:  人工知能によるモザイク除去ディープ CNN デノイザーと多層隣接コンポーネント埋め込みによるモザイク除去

ブログ    

推薦する

AI 計画ガイド: デジタル変革に不可欠なステップ

[[266832]]人工知能は今日のデジタル変革に欠かせない要素となり、デジタル変革の定義を完全に置...

知識とスキルの限界を押し広げる 24 の機械学習プロジェクト

導入データサイエンス (機械学習) プログラムは、この分野でのキャリアをスタートさせる有望な方法を提...

チューリングは71年前にニューラルネットワークを提案しました。 「インテリジェントマシン」が再び白熱した議論を巻き起こす

[[269208]]チューリングは 1948 年に「インテリジェント マシン」と題する論文を執筆し、...

Stable Diffusion で 1 秒で写真を作成しましょう。清華大学マスターアクセラレーターはホットなトレンドで、いくつかの企業が参加している

AI画像生成は秒単位のスピードに達しました。描画を完了するには4ステップの推論しかかからず、最速では...

仕事に同行することから出勤やフィットネスの管理まで、AI はますます多くのことを処理します。

過去2年間、人工知能によって人事部門が消滅するという議論をよく耳にしてきました。しかし、実際には誰も...

...

...

超便利!追加のコードを書かずに依存性注入の5つの原則をマスターする

この概念に初めて遭遇した場合、一瞬理解できないかもしれません。インターネット上のさまざまな説明により...

AI音声アシスタントの台頭:利便性とセキュリティのバランス

ChatGPT は私たちが知る限り最新の音声アシスタントです。 SiriやAlexaなどの企業は長年...

機械学習の最大の欠点を解決する?マックス・プランク研究所とグーグルが因果学習を再び研究

野球選手がボールを打つ様子を見ると、さまざまな要素間の因果関係を推測することができます。たとえば、野...

2021 年を迎えるにあたり、人気の GNN はどのアプリケーション分野で存在感を発揮するのでしょうか?

近年、グラフ構造の強力な表現力により、機械学習の手法を用いたグラフ解析の研究が注目を集めています。グ...

...

...

...