1.AlexNetの概要
2012年、Alex Krizhevskyは、より複雑なオブジェクトを学習するために使用できるLeNetのより深く幅広いバージョンと見なすことができます。
アレックスのポイント
- 1. ReLUを使用して非線形性を取得し、ReLU非線形関数をアクティブ化関数として使用します
- 2.ドロップアウトのトリックを使用して、トレーニング中に隠れ層ニューロンを選択的に無視し、学習モデルの過剰適合を遅くします。
- 3.平均プールの平均効果を回避するために、プーリング操作に最大オーバーラッププールを使用します
- 4. GPUを使用すると、CPU処理の10倍のトレーニング時間を短縮できるため、より大きなデータセットやイメージに使用できます。
第二に、AlexNetの詳細
2.1ローカル応答正規化(LRN)
推奨読書:https:
//blog.csdn.net/program_developer/article/details/79430119神経生物学には「サイド阻害」の概念があります。これは、活性化されたニューロンが隣接するニューロンを阻害することを意味します。正規化の目的は「禁止」することであり、ローカル応答の正規化は、ローカル抑制を達成するためのサイド抑制のアイデアから学ぶことです。特にReluを使用する場合、この種の抑制は機能します。
2.2データ拡張
ニューラルネットワークはデータによって供給されているという見方があります。トレーニングデータを増やしてトレーニング用の大量のデータを提供できれば、アルゴリズムの精度を効果的に向上させることができます。これにより、オーバーフィットを効果的に回避でき、さらにネットワーク構造を拡大し、深めます。トレーニングデータが限られている場合、いくつかの変換を通じて既存のトレーニングデータセットからいくつかの新しいデータを生成して、トレーニングデータをすばやく拡張できます。
その中で、画像データの変形の最も単純で最も用途の広い方法:画像を水平方向に反転する、元の画像からランダムにトリミングする、変換変換、色変換、および照明変換。
AlexNetがトレーニング中の場合、データ拡張中に次のように処理されます。
- (1)ランダムクロッピング。ランダムに256枚のトリミング224に256の画像224、及び((256から224)^ 2)* 2 = 2048回のサンプルの数を増やすことに相当し、水平反転、。
- (2)試験中、左上、右上、左下、右下、中央を5回カットした後、裏返し、合計10回カットし、平均した。著者は、ランダムなトリミングを実行しない場合、大規模なネットワークは基本的に過剰に適合していると述べました。
- (3)RGB空間でPCA(主成分解析)を実行した後、主成分に対して(0,0.1)のガウス摂動を実行し、色と照明を変換することで、エラー率を1%低減します。
2.3ドロップアウト
推奨読書:https://blog.csdn.net/program_developer/article/details/80737724
2.3.1ドロップアウトの概要
ドロップアウトを導入する主な目的は、オーバーフィットを防ぐことです。ニューラルネットワークでは、ドロップアウトはニューラルネットワーク自体の構造を変更することで実装されます。特定のレイヤーのニューロンの場合、ニューロンは定義された確率(通常は0.5)で0に設定され、このニューロンは順方向および逆方向の伝播に参加しません。 、入力層と出力層のニューロン数を変更せずに、ネットワークで削除したかのように、ニューラルネットワークの学習方法に従ってパラメータを更新します。次の反復では、トレーニングが終了するまで、一部のニューロンが再びランダムに削除されます(ニューロンは0に設定されます)。
ドロップアウトは、AlexNetの大きな革新と見なす必要があります。ドロップアウトは、モデルの組み合わせと見なすこともできます。毎回生成されるネットワーク構造は異なります。複数のモデルを組み合わせることで、オーバーフィットを効果的に減らすことができます。ドロップアウトのみモデルの組み合わせの効果を得るには、トレーニング時間が2倍かかり、非常に効率的です。
2.3.2ドロップアウト固有のワークフロー
次の図に示すように、このようなニューラルネットワークをトレーニングするとします。
上の図に示すように、これは
入力がx、出力がyの通常のニューラルネットワークです。通常のプロセスは次のとおりです。最初にネットワークを介してxを伝播します。次に、エラーが伝播されて、パラメータを更新する方法を決定し、ネットワークに学習させます。ドロップアウトを使用した後のプロセスは次のようになります。
- 1.まず、ネットワーク内の隠れたニューロンの半分をランダムに(一時的に)削除し、入力ニューロンと出力ニューロンは変更されません(下の図の点線は一時的に削除されたニューロンを示しています)
- 2.次に、入力xが変更されたネットワークを介して順方向に伝搬され、次に、取得された損失結果が変更されたネットワークを介して逆方向に伝搬されます。トレーニングサンプルの小さなバッチがこのプロセスを実行した後、対応するパラメータ(w、b)は、削除されていないニューロンの確率的勾配降下法に従って更新されます。
- 次に、プロセスを繰り返します。
- 一時的に削除されたニューロンを復元します(削除されたニューロンは元の状態に復元され、削除されなかったニューロンは更新されています)
- 隠れ層ニューロンからハーフサイズのサブセットをランダムに選択し、一時的に削除します(削除されたニューロンのパラメーターをバックアップします)
- トレーニングサンプルの小さなバッチの場合、損失は事前に伝播されてから逆伝播され、パラメータ(w、b)は確率的勾配降下法に従って更新されます(削除されないニューロンの部分が更新され、削除されたニューロンは削除されたままになります)以前の結果)
- このプロセスを繰り返します。
2.3.2ニューラルネットワークでのドロップアウトの使用
(1)トレーニングモデルフェーズで
は、トレーニングネットワークの各ユニットに確率プロセスを追加する必要があります。
対応する式の変更は次のとおりです。
- ドロップアウトなしのネットワーク計算式:
- ドロップアウトネットワーク計算式の使用:
上記の式Bernoulli関数は、確率rベクトルを生成することです。つまり、0と1のベクトルがランダムに生成されます。
コードレベルの実装では、特定のニューロンが確率Pで動作を停止します。実際には、彼のアクティベーション関数の値を確率Pで0にします。たとえば、ネットワークの特定のレイヤーのネットワークニューロンの数は1000であり、そのアクティベーション関数の出力値はy1、y2、y3、...、y1000の場合、ドロップアウト率を0.5に設定し、このニューロン層がドロップアウトした後、約400個のニューロンが0に設定されます。
(2)モデルをテストする段階で、モデル
を予測するときは、各神経ユニットの重みパラメータに確率pを掛ける必要があります。
テストフェーズ中のドロップアウト式:
2.4重複するプーリング
次の図に示すように、一般的なプーリング(Pooling)はオーバーラップせず、プーリング領域のウィンドウサイズはステップサイズと同じ
です。AlexNetで使用されるプーリングはオーバーラップしています。つまり、プール内です。変更する場合、各移動のステップ長は、プーリングのウィンドウ長よりも短くなります。AlexNetプーリングのサイズは3 * 3平方で、各プーリング移動のステップサイズは2であるため、オーバーラップが発生します。重複するプーリングは過剰適合を回避でき、この戦略は0.3%のトップ5エラー率に貢献します。
3、AlexNetネットワーク構造
3.1ネットワーク構造の全体像
AlexNetモデルは次のように導入されています。
- 1. AlexNetには、5つの畳み込み層と3つの完全に接続された層を含む8つの層があります
- 2.各レイヤーはRelu機能をアクティベーション機能として使用します
- 3. AlexNetには特別なコンピューティングレイヤー(LRNレイヤー)があり、LRN(ローカル対応の正規化)レイヤーの使用を開拓しました
。PyTorchのバージョンパッケージには、AlexNetの公式実装が含まれています。公式バージョンを直接使用してネットワークを確認します。一般的な構造:
import torchvision
model = torchvision.models.alexnet(pretrained = False)
print(model)
3.2計算
ここでは、各レイヤーの構造と、関連する入力と出力の計算について詳しく説明します。
4、参照
- 1. https://blog.csdn.net/program_developer/article/details/80737724
- 2. https://blog.csdn.net/program_developer/article/details/79430119
- 3.ディープ畳み込みニューラルネットワークによるImageNet分類