「機械学習」CNNを徹底理解

「機械学習」CNNを徹底理解

[[212238]]

前世紀、科学者は視覚神経のいくつかの特性を発見しました。視神経には局所的な知覚があり、全体像の認識は複数の局所的な認識点で構成されています。異なるニューロンは異なる形状を認識する能力があり、視神経には重ね合わせ機能があるため、高レベルの複雑なパターンは低レベルの単純な線で構成できます。その後、結論付け操作は視覚神経の処理と計算のプロセスをよく反映できることが発見されました。その典型的な例は、1998年にLeCunが発明したLeNet-5で、認識効果を大幅に向上させることができます。

この記事では、主に畳み込み層、プーリング層、および全体的な CNN 構造に焦点を当てます。

1. 畳み込み層

1. 原則とパラメータ

局所受容野の特性をシミュレートできます。前のレイヤーと同様に、完全に接続されているわけではなく、小さな領域が接続されています。この小さな領域が局所受容野です。また、特定の畳み込みニューロンを構築することで、さまざまな形状の刺激に対して異なる反応を示すさまざまなニューロンの特性をシミュレートできます。下の図に示すように、ニューロンは層を処理して特徴マップを形成し、複数の層が重ね合わされ、層の数は徐々に増加します。

受容眼(カーネルまたはフィルタ)のサイズは、fh*fw とみなすことができます。受容眼自体にサイズがあるため、特徴マップは縮小し続けます。処理を容易にし、各層のサイズを変更しないようにするために、各層にゼロパディングを追加して、処理後の特徴マップが前の層と同じサイズになるようにします。複数のレイヤー間の畳み込み演算は、元のピクセルの対応する位置との乗算と同等です。下の左の図に示すように、エッジを追加することで、上層と下層が同じサイズになることを保証できます。右の図は、各層間の畳み込み演算を示しています (ゼロ パディングが追加されていない場合)。

しかし、上の写真は単なる簡単な例です。一般的にスキャンされるのは、マトリックスではなく、立方体である3次元画像(RGB)です。3次元ブロックを使用してスキャンしますが、原理は上の写真と同じです。

スキャンは順番に行われず、飛び飛びに行われ、毎回2〜3ピクセル値(ストライド)移動しますが、情報の損失を避けるために完全に分離されません。このようにして形成された特徴マップは元の画像よりも小さくなり、情報集約の効果を実現します。

下のグレースケール画像(2d)に示すように、左側(垂直フィルタ)では縦線のみが抽出され、右側(水平フィルタ)では横線のみが抽出されています。ビーム部分が明るくなっていることがわかります。多数の異なるフィルタ(角や破線を認識できるフィルタなど)を重ね合わせることで、複数の特徴マップを形成できます。

次の図は 3D RGB 効果です。各カーネル (フィルター) は特徴マップをスキャンできます。複数のフィルターを重ね合わせて厚い特徴マップを形成できます。前のフィルター レイヤーの畳み込みにより、次のレイヤーのピクセル ポイントを形成できます。

下の図に示すように、行 i、列 j、深さ k の出力ピクセル値を表すことができ、k' は k 番目のフィルターを表し、w はフィルター内の値を表し、x は入力を表し、b はバイアス値を表します。

2. TensorFlowの実装

以下はTensorFlowを使用して実装されたコードであり、主にconv2d関数を使用しています。

  1. numpyをnpとしてインポートする
  2.  
  3. sklearn.datasetsからload_sample_images をインポートします
  4.  
  5. #サンプル画像を読み込む
  6.  
  7. データセット = np.array(load_sample_images().images, dtype=np.float32)
  8.  
  9. # 合計4次元、チャンネルはチャンネル数を表し、RGBは3
  10.  
  11. batch_size、高さ、幅、チャンネル = dataset.shape
  12.  
  13. # 2つのフィルターを作成する
  14.  
  15. # 一般的な知覚眼のサイズは 7*7、5*5、3*3 で、カーネルを 2 つ設定し、2 層の特徴マップを出力します。
  16.  
  17. フィルターテスト = np.zeros(形状=(7, 7, チャンネル数, 2), dtype=np.float32)
  18.  
  19. # 最初の(0)フィルター設定、7×7マトリックスでは3が真ん中
  20.  
  21. フィルターテスト[:, 3, :, 0] = 1 # 垂直線
  22.  
  23. # 2番目の(1)フィルター設定
  24.  
  25. フィルターテスト[3, :, :, 1] = 1 # 水平線
  26.  
  27. #入力Xと2つのフィルターを適用する畳み込み層持つグラフ
  28.  
  29. X = tf.placeholder(tf.float32, 形状=(なし、高さ、幅、チャンネル))
  30.  
  31. # 入力は4次元画像ですが、batch_sizeとchannelは固定なのでconv2dが使われます
  32.  
  33. # ストライド設定、最初と4番目が1の場合、batch_sizeとチャネルはスキップできません
  34.  
  35. # 2 つの 2 は、水平方向と垂直方向の両方で 2 の縮小を表します。これは、画像全体を元のサイズの 4 分の 1、つまり 75% の縮小に相当します。
  36.  
  37. 畳み込み = tf.nn.conv2d(X, フィルター, ストライド=[1,2,2,1], パディング= "SAME" )
  38.  
  39. tf.Session()を sessとして使用:
  40.  
  41. 出力= sess.run(畳み込み、feed_dict={X: データセット})

以下は、パディング値 SAME と VALID (フィルター幅は 6、ストライドは 5) の違いです。SA​​ME では、すべての画像情報が畳み込まれ、ゼロパディングが追加されますが、VALID では含まれているピクセルのみが追加されます。

3. メモリ消費量の計算

従来の完全接続層と比較すると、畳み込み層は部分的にしか接続されていないため、メモリを大幅に節約できます。

たとえば、5*5 フィルターを持つ畳み込み層は、ストライドが 1 (ジャンプなし)、パディングが SAME の 150*100 の特徴マップを 200 個出力します。入力は 150*100 RGB 画像 (チャネル = 3) で、パラメータの合計数は 200*(5*5*3+1) = 15200 です (+1 はバイアス)。出力が 32 ビット浮動小数点数 (np.float32) で表される場合、各画像は 200*150*100*32 = 9600000 ビット (11.4 MB) を占めます。トレーニング バッチに 100 枚の画像 (ミニバッチ = 100) が含まれている場合、この畳み込み層は 1 GB の RAM を占めます。

畳み込みニューラル ネットワークのトレーニングには非常に多くのメモリが必要であることがわかりますが、それらを使用するときは、最後のレイヤーの出力のみが使用されます。

2. プーリング層

1. 原則とパラメータ

画像サイズが大きい場合、メモリ消費量が膨大になるため、効果を集中させてメモリ圧迫を軽減するのがプーリング層の役割です。

つまり、ある大きさの領域を選択し、それを代表する要素で表します。プーリングには、平均値 (mean) を取得するタイプと最大値 (max) を取得するタイプの 2 種類があります。下の図に示すように、これは最大値を取るプーリング層です。カーネルサイズは2*2で、ストライドサイズはカーネルサイズに依存します。ここでは2ですが、これはすべてのカーネルが重複しない値であるため、効率的な情報圧縮が実現され、元の画像を水平方向と垂直方向に半分に圧縮します。右の図に示すように、特徴は基本的に完全に保持されます。

プーリング操作はチャネル数に影響を与えず、通常は特徴マップに対して操作を実行しません (つまり、z 軸は通常変更されません)。水平サイズと垂直サイズのみが変更されます。

2. TensorFlowの実装

  1. #入力Xと最大プーリング層含むグラフを作成する
  2.  
  3. X = tf.placeholder(tf.float32, 形状=(なし、高さ、幅、チャンネル))
  4.  
  5. # 最大値を取得するにはmax_poolメソッドを使用します
  6.  
  7. # 平均値を取りたい場合は、mean_poolを使用します
  8.  
  9. # ksize はカーネルサイズ、特徴マップとチャネルは両方とも 1、水平と垂直は 2 です
  10.  
  11. max_pool = tf.nn.max_pool(X、ksize=[1,2,2,1]、strides=[1,2,2,1]、padding= "VALID" )
  12.  
  13. tf.Session()を sessとして使用:
  14.  
  15. 出力= sess.run(max_pool, feed_dict={X: データセット})

3. CNNの全体的なフレームワーク

典型的なCNNアーキテクチャ

有名な CNN アーキテクチャ:

LeNet (MISIT)-1998: 入力 32*32 (28*28 イメージにゼロ パディングを追加)。第 1 層カーネルは 6 つのニューロンを使用し、カーネル サイズは 5*5、ストライドは 1、出力は 28*28 です。第 2 層は平均プーリング、2*2 カーネル、ストライド 2 を実行するため、出力は元の半分になりますが、特徴マップの数は変わりません。第 3 層には 16 個のニューロンがあり、その他も同様です。第 5 層は 120 個のニューロンを使用し、5*5 カーネルは 5*5 入力に対して畳み込みを実行し、それ以上スライドできないため、出力は 1*1 になります。F6 は 120 個の 1*1 出力を使用して 84 個のニューロンを完全に接続し、Out は 10 個のニューロンを完全に接続します。これは、手書き認識による 10 桁の出力に対応します。

前のパートで使用した活性化関数は、従来の CNN でよく使用される tanh です。出力層では、ターゲット出力とターゲット出力間の距離を決定するために距離を計算する特別な方法である RBF を使用します。 。

AlexNet-2012: 競技で初めて使用され、精度が約10%向上しました。

入力は 224*224 カラー画像で、C1 はストライド = 4 の大きな 11*11 フィルターです。 。最後に、3 層の畳み込みを行います。 。最終的に1000クラスの分類結果が出力されます。

活性化関数は最近非常に人気のあるReLUを使用し、出力層はソフトマックスを使用する。

AlexNetは、ローカルレスポンス正規化(LRNローカルレスポンス正規化)と呼ばれるトリックを使用します。

この操作により、一部の近傍の出力の影響を考慮して、従来の出力にバイアスを追加できます。つまり、ある出力の次に非常に強力な出力がある場合、その出力は弱くなり、抑制されます。βを含む項全体が分母にあることがわかります。しかし、後にこの技術では分類器がそれほど大幅に改善されず、一部は役に立たないことが分かりました。

GoogleLeNet-2014:

Inception モジュールは広く使用されています。入力が入ると、4 つのステップで直接処理されます。この 4 つのステップが完了すると、深度が直接重ね合わされます。さまざまなスケールの画像を操作します。 1*1 畳み込みを多用すると、出力次元を柔軟に制御し、パラメータの数を減らすことができます。

右図に示すように、入力は192で、9層のインセプションモジュールを使用しています。3*3、5*5のパラメータを直接使用すると、インセプションパラメータの数が非常に多いことが計算できます。深さを調整でき、任意の数の特徴マップを指定できます。深さを増やすことで次元を減らすことができます。インセプション モジュールの 6 つのパラメータは、これらの 6 つの畳み込みに対応し、上記の 4 つのパラメータは、上記の 4 つの畳み込みに対応します。最大プールを追加しても、特徴マップの数は変わりません (480 = 128 + 192 + 96 + 64 など)。

Image Net には多くの種類の犬がおり、人間がそれらをすべて区別することはできないため、精度率は 95 ~ 96% に向上し、人間の解像度を超えています。

ReSNet 残差ネットワーク - 2015:

目的関数を直接学習するのではなく、入力は中間層をスキップして出力に直接接続されます。学習する必要があるのは残差f(x)であり、入力は中間層をスキップして出力に直接追加されます。

利点は、ディープ モデルのパス依存性の制限、つまり、勾配が前方に伝達されるときにすべてのレイヤーを通過する必要があることです。中間のレイヤーが機能しなくなると、前のレイヤーをトレーニングできません。残余ネットワークはジャンプし続け、中間のいくつかの層が死んでいても、情報は引き続き効率的に流れ、トレーニング信号を効果的に送り返すことができます。

<<:  IBMはGPUを使用して機械学習の効率を10倍向上させる

>>:  ディープラーニングでは音声認識の問題を解決できない

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

最もわかりやすいAIチップレポート!才能とテクノロジーのトレンドがすべてここにあります

2010年以降、ビッグデータ産業の発展により、データ量は爆発的な増加傾向を示し、従来のコンピューティ...

GenAIは主流になるが、CIOの行動は遅い

過去2週間、OpenAIの創設者サム・アルトマン氏は取締役会により解雇され、関連メンバーはマイクロソ...

ChatGPTでマルウェアを分析する方法

翻訳者 |陳俊レビュー | Chonglouデジタル時代に入って以来、マルウェアはコンピュータ アプ...

...

サービスロボット防疫シリーズ:食品の配達、消毒、誘導などにより、感染症の予防と抑制に貢献

新たな流行が猛烈に迫っており、特に河北省の流行は絶えず捜索されており、人々をパニックに陥れています。...

データサイエンスがソーシャルメディアマーケティング戦略をどう変えるか

人工知能の広範な応用は今日よく知られていますが、人工知能は具体的にどのように企業のソーシャル メディ...

スループットが5倍に向上、バックエンドシステムとフロントエンド言語を共同設計するLLMインターフェースが登場

大規模言語モデル (LLM) は、複数の連鎖生成呼び出し、高度なプロンプト技術、制御フロー、および外...

ついに!この強力な「オープンソース画像認識システム」がオンラインになりました!

[[407147]]画像認識といえば、皆さんすでによくご存知だと思います。この技術は、顔認証、決済...

...

...

人工知能は建物の管理方法を変えている

人工知能(今ではよく知られている頭字語 AI で説明されます)がさまざまな業界をどのように変革してい...

...

李嘉誠は率直に言った。「人工知能の時代には、これらのいくつかの業界だけが大きな成功を達成するのに役立ちます。」

李嘉誠氏はこう語った。「人工知能の時代には、世界がどう変化しても、経済サイクルがどう変動しても、常に...

清華大学のJiTuアップデート:微分可能レンダリングをサポートし、マルチタスク速度はPyTorchを上回る

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...