【ディープラーニング連載】畳み込みニューラルネットワーク(CNN)の原理を徹底解説(I) - 基本原理

【ディープラーニング連載】畳み込みニューラルネットワーク(CNN)の原理を徹底解説(I) - 基本原理

前回の記事では、PaddlePaddle を使用して手書きの数字を認識する例を示し、ネットワーク構造を調整して認識精度を向上させました。原理がよくわからないという学生もいました。従来の機械学習アルゴリズムや単純なニューラル ネットワーク (多層パーセプトロンなど) では手書きの数字を認識できるのに、それを区別するには畳み込みニューラル ネットワーク (CNN) を使用する必要があるのはなぜでしょうか。 CNNはそれをどう認識するのでしょうか? CNN を使用する利点は何ですか?以下で簡単に分析してみましょう。 CNN について話す前に、基礎知識が全くない人が以下の説明を理解できないことを防ぐために、まずは従来のニューラル ネットワークの基礎知識を簡単におさらいしておきましょう。


ニューラルネットワークの予備知識

ニューラルネットワークを使用する理由は何ですか?

  • 特徴抽出の効率。

   同じ分類タスクに機械学習アルゴリズムを使用できるのに、なぜニューラル ネットワークを使用する必要があるのか​​疑問に思うかもしれません。復習しましょう。機械学習アルゴリズムを使用して分類タスクを実行する場合、最初に特徴とラベルを識別し、次にトレーニングのためにデータをアルゴリズムに「注ぎ込み」、最後に分類の精度を予測するためにモデルを保存する必要があります。しかし、問題があります。それは、特徴を決定する必要があるということです。各特徴は次元です。特徴の数が少なすぎると、正確に分類できない可能性があり、これをアンダーフィッティングと呼びます。特徴の数が多すぎると、分類プロセス中に特定の特徴に注意を払いすぎて、分類エラーが発生する可能性があります。これをオーバーフィッティングと呼びます。

簡単な例を挙げると、今、たくさんのデータセットがあり、スイカと冬瓜を分類するように求められています。形と色の 2 つの特徴しかない場合、分類できない可能性があります。特徴の次元が形、色、果肉の色、皮の模様などであれば、分類は簡単かもしれません。特徴が形、色、果肉の色、皮の模様、茎、種子の数、種子の色、種子のサイズ、種子の分布、種子 XXX などである場合、過剰適合になる可能性が非常に高くなります。たとえば、冬瓜の種子の数はスイカの種子の数と似ています。モデルをトレーニングした後、このような特徴の重みは比較的高く、誤分類しやすくなります。つまり、モデルトレーニングで良好な結果を得るには、特徴エンジニアリングに多くの時間と労力を費やす必要があるということです。しかし、ニューラル ネットワークの登場により、事前にコンテンツや特徴の数を設計するなど、多くの特徴エンジニアリングを行う必要がなくなりました。データを直接入力し、自己学習させ、自己修正することで、より良い結果を得ることができます。

  • データ形式のシンプルさ

従来の機械学習分類問題では、投入するデータを直接投入することはできません。次元の正規化、形式の変換など、何らかの方法でデータを処理する必要があります。ただし、ニューラル ネットワークでは、データに対して追加の処理を行う必要はありません。具体的な理由は、以下の詳細な導出で確認できます。

  • パラメータ数が少ない

分類問題に直面したとき、SVMを使用する場合、カーネル関数、ペナルティ係数、スラック変数などのパラメータを調整する必要があります。パラメータの組み合わせが異なると、モデルにさまざまな影響が及びます。モデルに最適なパラメータを迅速かつ正確に調整するには、その背後にある理論的知識を深く理解している必要があります(もちろん、すべて試してみたい場合は問題ありませんが、時間がかかる場合があります)。基本的な3層ニューラルネットワーク(入力-暗黙的-出力)の場合、初期化時に各ニューロンに重みwとバイアス項bをランダムに割り当てるだけで済みます。トレーニングプロセス中、これら2つのパラメータは継続的に修正され、モデルエラーを最小限に抑えるために最高の品質に調整されます。したがって、この観点からは、パラメータ調整の背後にある理論的な知識にあまり精通している必要はありません(ただ、それをもっと行うと、ある程度の経験があり、初期値で割り当てられた値がより科学的になり、収束が速くなる可能性があります)

アプリケーションは何ですか?

応用範囲は非常に広いですが、今話題のニューラルネットワークはディープラーニングとは言えないことに注意してください。ニューラルネットワークは古くから登場していますが、ネットワーク層の継続的な深化とネットワーク構造の複雑化により、現在ではディープラーニングとなり、画像認識、画像検出、音声認識などで優れた成果を上げています。

基本的なネットワーク構造

ニューラル ネットワークの最も単純な構造には、入力層、隠れ層、出力層が含まれます。ネットワークの各層には複数のニューロンがあります。前の層のニューロンは、活性化関数を通じて次の層のニューロンにマッピングされます。各ニューロンには対応する重みがあり、出力は分類カテゴリになります。

詳細な数学的導出

昨年半ばに、Andrew Ng の UFLDL と mattmazur のブログを参考に、最も単純なニューラル ネットワークを順伝播から逆伝播まで直感的に導出する方法を詳しく説明する記事を書きました。まずは、こちらの記事「ニューラル ネットワークにおける逆伝播法を 1 つの記事で理解する - BackPropagation」をお読みください。

長所と短所

メリットについてはすでにたくさん触れたので、ここでは詳しくは触れませんが、デメリットについて簡単にお話ししたいと思います。ネットワーク層を深くし、各ネットワーク層のニューロンの数を増やすと、パラメータの数は M*N (m はネットワーク層の数、N は各層のニューロンの数) になります。必要なパラメータは非常に大きくなります。パラメータの数が多くなると、モデルは複雑になります。モデルが複雑になるほど、パラメータの調整が難しくなり、過剰適合しやすくなります。また、ニューラルネットワークの逆伝播プロセスの観点から見ると、勾配が逆伝播しているとき、連続反復により勾配はどんどん小さくなり、つまり勾配が消えてしまいます。勾配が0に近づくと、重みを更新できなくなり、ニューロンが動作していないのと同等になり、収束しにくくなります。特に画像の分野では、最も基本的なニューラル ネットワークを使用することは適切ではありません。なぜこれが不適切であるかについては、後で詳しく説明します。


畳み込みニューラル ネットワークを使用する理由は何ですか?

従来のニューラルネットワークの欠点

前述したように、従来のニューラル ネットワークは画像の分野には適していません。画像はピクセルで構成され、各ピクセルにはそれぞれ RGB カラーを表す 3 つのチャネルがあることはご存じのとおりです。したがって、画像のサイズが (28, 28, 1) の場合、その画像は長さと幅が 28 でチャネルが 1 の画像であることを意味します (チャネルは深度とも呼ばれ、1 はグレー画像を表します)。完全に接続されたネットワーク構造、つまりネットワーク内のニューロンが隣接する層のすべてのニューロンに接続されている場合、ネットワークには 28 * 28 = 784 個のニューロンがあり、隠れ層は 15 個のニューロンを使用することを意味します。簡単な計算で、必要なパラメータ数 (w と b) は 784*15*10+15+10=117625 であることがわかります。これはパラメータが多すぎます。バックプロパゲーションの計算量は膨大です。コンピューティング リソースとパラメータ調整の観点から、従来のニューラル ネットワークを使用することはお勧めしません。 (コメント欄には、このパラメータの計算がよくわからない生徒もいます。簡単に説明しましょう。画像はピクセルで構成され、行列で表されます。28*28 行列をニューロンに直接入れることはできません。28*28=784 列ベクトルに「平坦化」する必要があります。この列ベクトルは、隠し層の 15 個のニューロンに接続されており、784*15=11760 個の重み w があります。隠し層は、最終出力層の 10 個のニューロンに接続されており、11760*10=117600 個の重み w があります。隠し層に 15 個のバイアス項目を追加し、出力層に 10 個のバイアス項目を追加すると、117625 個のパラメータになります。)

図1 3層ニューラルネットワークが手書き数字を認識する

畳み込みニューラルネットワークとは何ですか?

3つの基本レイヤー

  • 畳み込み層

前述のように、従来の 3 層ニューラル ネットワークでは、各ニューロンが隣接する層のニューロンに接続されるため、多数のパラメータが必要になります。しかし、よく考えてみてください。この接続方法は本当に必要なのでしょうか。完全に接続されたレイヤーのアプローチは、画像自体が「2 次元の空間的特徴」、つまり平易な言葉で言えばローカルな特性を持っているため、画像データにはあまり適していないようです。たとえば、猫の写真を見たとき、猫のメガネや口を見ただけで、それが猫の写真だとわかるかもしれません。すべての部分を見て「ああ、これは猫だ」とわかる必要はありません。したがって、何らかの方法で写真の典型的な特徴を特定できれば、その写真のカテゴリがわかります。このとき、畳み込みの概念が生まれました。たとえば、現在 4 x 4 の画像があります。畳み込みカーネルを適用した後の画像がどのようになるかを確認するために、2 つの畳み込みカーネルを設計します。

図2 4×4画像と2つの2×2カーネル間の畳み込み演算の結果

上の図からわかるように、元の画像はグレースケール画像です。各位置はピクセル値を表し、0 は白、1 は黒、(0, 1) 区間の値はグレーを表します。この 4*4 画像では、2 つの 2*2 畳み込みカーネルを使用して計算します。ステップ サイズを 1 に設定します。つまり、2 x 2 の固定ウィンドウを毎回 1 単位ずつ右にスライドします。最初の畳み込みカーネル フィルター 1 を例にとると、計算プロセスは次のようになります。

1 フィーチャマップ1(1,1) = 1*1 + 0*(-1) + 1*1 + 1*(-1) = 1 
2 フィーチャマップ1(1,2) = 0*1 + 1*(-1) + 1*1 + 1*(-1) = -1 
3 ``` 
4 フィーチャマップ1(3,3) = 1*1 + 0*(-1) + 1*1 + 0*(-1) = 2

これは最も単純な内積の式であることがわかります。 feature_map1(1,1) は、最初の畳み込みカーネルによる計算後に得られた feature_map の最初の行と最初の列の値を表します。畳み込みカーネルのウィンドウがスライドし続けると、3 * 3 の feature_map1 を計算できます。同様に、2 番目の畳み込みカーネルによる畳み込み操作後に feature_map2 を計算でき、この層の畳み込み操作が完了します。 feature_map サイズの計算式は、[(元の画像サイズ - 畳み込みカーネル サイズ) / ステップ サイズ] + 1 です。このレイヤーでは、PaddlePaddle で次のように定義されている 2 つの 2*2 畳み込みカーネルを設定します。

1 conv_pool_1 = paddle.networks.simple_img_conv_pool(
2 入力=画像、
3 フィルターサイズ=3、
4 フィルター数=2,
5 num_channel=1、
6 プールストライド=1、
7 行為 = paddle.activation.Relu())

ここでは、ネットワーク内の simple_img_conv_pool 関数が呼び出され、活性化関数は Relu (rectified linear unit) です。ソース コードで外部インターフェイスがどのように定義されているかを見てみましょう。

[[223794]]コードを表示

Paddle /python/paddle/v2/framework/nets.py で simple_img_conv_pool 関数の定義を確認できます

 1 定義 simple_img_conv_pool(入力,
 2 num_filters、
 3 フィルターサイズ、
 4 プールサイズ、
 5 プールストライド、
 6幕、
 7 プールタイプ='max'、
 8 main_program=なし、
 9 startup_program=なし):
10 conv_out = レイヤー.conv2d(
11 入力=入力、
12 num_filters=フィルター数、
13 フィルターサイズ=フィルターサイズ、
14 行為=行為、
15 メインプログラム=メインプログラム、
16 スタートアッププログラム=スタートアッププログラム)
17 
18 pool_out = レイヤー.pool2d(
19 入力=conv_out、
20 プールサイズ=プールサイズ、
21 プールタイプ=プールタイプ、
22 プールストライド=プールストライド、
23 メインプログラム=メインプログラム、
24 スタートアッププログラム=スタートアッププログラム)
25 プールアウトを返す

ここでは 2 つの出力があり、conv_out は畳み込み出力値、pool_out はプーリング出力値であり、最終的にはプーリング出力値のみが返されることがわかります。 conv_out と pool_out はそれぞれ、layers.py の conv2d と pool2d を呼び出します。layers.py では、conv2d と pool2d がどのように実装されているかを確認できます。

変換2d:

[[223794]]コードを表示

プール2d:

[[223794]]コードを表示

ご覧のとおり、特定の実装では、layers_helper.py も呼び出されます。

[[223794]]コードを表示

詳細なソースコードの詳細については次のセクションで説明します。ここでは実装方法と呼び出される関数だけを記述します。

これで畳み込み処理は完了です。上の計算から、同じ層のニューロンは畳み込みカーネルを共有できるため、高次データの処理が非常に簡単になることがわかります。また、畳み込みカーネルを使用した後は、画像のサイズが小さくなり、後続の計算に便利です。手動で特徴を選択する必要はありません。畳み込みカーネルのサイズ、数、スライディング ステップを設計し、自動的にトレーニングさせるだけで、時間と労力を節約できます。

畳み込みカーネルはなぜ機能するのでしょうか?

そこで疑問なのは、畳み込みカーネルの計算方法はわかっているのに、畳み込みカーネル計算を使用した後の分類効果が通常のニューラル ネットワークよりも劣るのはなぜかということです。上記の計算結果を詳しく見てみましょう。最初の畳み込みカーネルによって計算された feature_map は 3 次元データです。3 列目の絶対値が最大であることは、元の画像上の対応する場所に垂直な特徴があること、つまりピクセル値が大きく変化していることを示しています。2 番目の畳み込みカーネルによる計算後、3 列目の値は 0 になり、2 行目の絶対値が最大であることは、元の画像上の対応する場所に水平な特徴があることを示しています。

よく考えてみると、この時点で、私たちが設計した 2 つの畳み込みカーネルは、元の画像の特定の特徴を抽出または検出することができます。この時点で、畳み込みカーネルを特徴抽出器として実際に理解することができます。これで、画像データを入力し、畳み込みカーネルのサイズ、数、スライディング ステップを設計するだけで、画像の特定の特徴を自動的に抽出し、分類効果を実現できる理由がわかりました。

: 1. ここでの畳み込み演算は、畳み込みカーネルと同じサイズの 2 つの行列の内積演算であり、行列の乗算ではありません。つまり、同じ位置にある数字を掛け合わせてから足し合わせて合計を求めます。混乱しないでください。

2. 畳み込みカーネルには多くの式がありますが、これは最も単純な式です。畳み込みカーネルと呼ばれるものは、デジタル信号処理ではフィルターとも呼ばれます。フィルターには、平均フィルター、ガウスフィルター、ラプラスフィルターなど、さまざまな種類があります。ただし、どのようなフィルターであっても、計算が少し複雑になることを除けば、単なる数学的な操作です。

3. 各層の畳み込みカーネルのサイズと数は自分で定義できますが、一般的には、実験的経験に基づいて、入力層に近い畳み込み層に少数の畳み込みカーネルを設定し、後の畳み込み層に多くの畳み込みカーネルを設定します。まずは具体的な理由を考えてみましょう。その理由は要約の中で説明されます。

  • プーリング層

前のレイヤーの 2*2 畳み込みカーネル操作の後、元の画像を 4*4 サイズから新しい 3*3 画像に変更します。プーリング層の主な目的は、画質に影響を与えずにダウンサンプリングによって画像を圧縮し、パラメータを削減することです。簡単に言うと、プーリング層が MaxPooling に設定され、サイズが 2*2、ステップ サイズが 1、各ウィンドウの最大値が取得されると仮定すると、画像のサイズは 3*3 から 2*2 に変わります: (3-2)+1=2。上記の例では、次の変換が行われます。

図3 最大プーリングの結果

一般的に言えば、プーリングの方法には 2 つあります。

  • MaxPooling: スライディングウィンドウの最大値を取得します
  • AveragePooling: スライディングウィンドウ内のすべての値の平均を取る

Max Pooling を使用する理由は何ですか?

計算方法の観点から見ると、これは最も単純な方法で、最大値を取るだけですが、これによって、なぜ Max Pooling が必要なのか、その重要性は何なのかという疑問も生じます。最大値のみを取得した場合、他の値は破棄されても効果はありませんか?この情報は失われませんか?この情報が損失を伴うと考える場合、畳み込み演算後にまだ不要な冗長情報が生成されることを意味するのでしょうか?

実際、畳み込みカーネルがなぜ効果的であるかという上記の分析から、各畳み込みカーネルは特徴抽出器と見なすことができます。異なる畳み込みカーネルは、異なる特徴の抽出を担当します。この例で設計された最初の畳み込みカーネルは「垂直」方向の特徴を抽出でき、2番目の畳み込みカーネルは「水平」方向の特徴を抽出できます。次に、それらに対してMax Pooling操作を実行した後、特徴を真に識別できる値を抽出します。残りの破棄された値は、特定の特徴を抽出するのに特に役立ちません。その後の計算では、特徴マップのサイズが縮小され、パラメータが削減され、効果を失うことなく計算量が削減されます。

ただし、Max Pooling はすべてのケースでうまく機能するわけではありません。場合によっては、周囲の情報が特定の特徴の認識に一定の影響を及ぼすことがあります。この場合、この「重要でない」情報を破棄するのは費用対効果が高くありません。したがって、具体的な状況を具体的に分析する必要があります。Max Pooling を追加した後に効果が悪化した場合は、畳み込み後の Max Pooling なしの結果と畳み込み後の Max Pooling ありの結果を比較して、Max Pooling が畳み込みカーネルの特徴抽出に逆効果をもたらすかどうかを確認することをお勧めします。

ゼロパディング

これまで、画像は畳み込み層を経て 4*4 から 3*3 に、そしてプーリング層を経て 2*2 に変化してきました。さらに層を追加すると、画像はどんどん小さくなるのではないでしょうか。今回は、「ゼロ パディング」を紹介します。これは、各畳み込みまたはプーリング出力後に画像のサイズが変更されないようにするのに役立ちます。たとえば、上記の例では、ゼロ パディングを追加して 3*3 畳み込みカーネルを使用すると、次の図に示すように、変換された画像のサイズは元の画像のサイズと同じになります。

図4 ゼロパディングの結果

通常、畳み込み演算後に画像サイズが変更されないことが望まれるため、計算後に画像の元のサイズが保持されるように、サイズ 3*3 でゼロ パディングが 1 の畳み込みカーネル、またはサイズ 5*5 でゼロ パディングが 2 の畳み込みカーネルを選択します。ゼロパディングを追加した後のfeature_mapのサイズは、(幅+2 * パディングサイズ - フィルターサイズ)/ストライド+1となります。

注: ここでの幅は高さに置き換えることもできます。ここでは、デフォルトの正方形畳み込みカーネル、重み = 高さを示します。2 つが等しくない場合は、別々に計算してゼロを埋め込むことができます。

  • 平坦化レイヤーと完全接続レイヤー

  このステップで、実は「畳み込み部分」全体が完成します。レイヤーを積み重ねる場合は、通常、「Conv-MaxPooing」を積み重ねて、畳み込みカーネルのサイズと数を継続的に設計し、より多くの特徴を抽出し、最終的に異なるカテゴリのオブジェクトを識別します。 Max Pooling の後、データを「平坦化」して Flatten レイヤーに投入し、Flatten レイヤーの出力を完全接続レイヤーに入れて、softmax を使用して分類します。

図5 平坦化プロセス

  • まとめ

このセクションでは、最も基本的な畳み込みニューラル ネットワークの基本層の定義、計算方法、機能について紹介します。以下に、考えるべきいくつかの小さな質問を示します。

1. 畳み込みカーネルのサイズは正方形である必要がありますか?長方形にできますか?長方形かどうかはどうやって計算するのでしょうか?

2. 畳み込みカーネルの数をどのように決定しますか?各レイヤーの畳み込みカーネルの数は同じですか?

3. 右と下への移動のステップ サイズは同じである必要がありますか?

上記の説明を本当に理解していれば、これらの質問に答えるのは実際には難しくありません。参考までに私の考えを述べます。

1. 畳み込みカーネルのサイズは正方形である必要はありません。長方形も可能ですが、通常は正方形です。長方形に設定する場合は、まずこのレイヤーの出力形状が小数ではなく整数であることを確認する必要があります。画像が辺の長さが 28 の正方形の場合。すると、畳み込み層の出力は [ (28 - kernel_size) / stride ] + 1 を満たします。この値は整数でなければならず、そうでなければ物理的な意味を持ちません。たとえば、辺の長さが 3.6 の特徴マップを計算しても、物理的な意味はありません。プーリング層についても同様です。 FC レイヤーの出力形状は常に整数を満たします。唯一の要件は、トレーニング プロセス全体を通じて FC レイヤーの入力が固定長である必要があることです。画像が正方形でない場合。次に、データを作成するときに、それを均一なサイズ (非正方形) にスケーリングし、非正方形の kernel_size を使用して、畳み込み層の出力を整数のままにすることができます。つまり、ネットワークの結果が適切に設定されているかどうかに関係なく、各レイヤーの出力を整数にする方法という、本質的には数学の問題です。

2. 経験によって決まります。通常、最初の畳み込み層など、入力に近い畳み込み層では、いくつかの共通特徴が見つかります。たとえば、手書き数字認識では、最初の層の畳み込みカーネルの数を5に設定し、一般的に「水平線」、「垂直線」、「対角線」などの共通特徴を見つけます。これを基本特徴と呼びます。最大プーリングの後、2番目の畳み込み層では、畳み込みカーネルの数を20に設定し、「水平折り畳み」、「左半円」、「右半円」などの比較的複雑な特徴を見つけることができます。畳み込みカーネルを多く設定するほど、ラベルの特徴がより詳細になり、分類しやすくなります。たとえば、数字「0」を分類する場合、特徴[[223795]]が表示されましたが、どの数字を推測できますか?さらに進んで、より多くの特徴が検出され、識別され、特徴[[223796]]を識別できた場合にのみ、その数値が「0」であると確信できます。

3. stride_w と stride_h があり、後者は上限と下限の歩幅を表します。 stride が使用される場合、stride_h=stride_w=stride を意味します。


手書き数字認識のためのCNNネットワーク構造

畳み込みニューラル ネットワークの基本構造について学習したので、実際のデータ、つまり手書き数字の認識でどのように機能するかを詳しく見てみましょう。上記のテキストでは、基本的な CNN ネットワークを定義しました。以下のようにします (コードについては github を参照してください):

 1 定義convolutional_neural_network_org(img):
 2 # 最初の変換層
 3 conv_pool_1 = paddle.networks.simple_img_conv_pool(
 4 入力=画像、
 5 フィルターサイズ=3、
 6 フィルター数=20,
 7 num_channel=1、
 8 プールサイズ=2、
 9 プールストライド=2、
10 行為 = paddle.activation.Relu())
11 # 2番目の変換層
12 conv_pool_2 = paddle.networks.simple_img_conv_pool(
13 入力=conv_pool_1、
14 フィルターサイズ=5、
15 フィルター数=50、
16 チャンネル数=20,
17 プールサイズ=2、
18 プールストライド=2、
19 行為 = paddle.activation.Relu())
20 # 完全結合層
21 予測 = paddle.layer.fc(
22 入力=conv_pool_2、サイズ=10、動作=paddle.activation.Softmax())
23 リターン予測

ネットワーク構造は次のようになります。

conv1---->conv2---->完全結合層

非常にシンプルなネットワーク構造。最初の層では、3*3 の正方形畳み込みカーネルを使用し、その数は 20、深さは 1、ストライドは 2、プーリング サイズは 2*2、活性化関数は RELU です。2 番目の層では、畳み込みカーネルのサイズ、数、深さのみが変更され、それぞれ 5*5、50、20 になります。最後に、完全接続層が接続され、10 個のラベルが出力として設定され、Softmax 関数が分類器として使用され、各ラベルの確率が出力されます。

そこで私が現時点で考えている質問は、上記の畳み込みカーネルについてはすでに理解しているので、畳み込みカーネルのサイズを変更すると結果に影響するかどうかということです。畳み込みカーネルの数を増やすと精度が向上しますか?そこで私は実験をしました:

  • 最初の改善点: 第 1 層と第 2 層の畳み込みカーネルの数のみが変更され、その他は変更されません。結果が0.06%増加したことがわかります。
  • 2 番目の改善: 畳み込みカーネルのサイズを 3*3 のままにして、第 2 層の畳み込みカーネルの数のみを変更し、その他は変更しません。元のパラメータと比較して、結果が 0.08% 改善されていることがわかります。

上記の結果から、畳み込みカーネルのサイズと数を変更すると、結果に一定の影響が出ることがわかります。現在の手書き数字認識プロジェクトでは、畳み込みカーネルのサイズを小さくし、畳み込みカーネルの数を増やすと、精度が向上します。ただし、上記の実験は単なる小さなテストです。興味のある学生は、パラメータの具体的な影響を確認するために、さらに実験を行うことができます。次の記事では、パラメータの影響の分析に焦点を当てます。

この記事は主にニューラルネットワークの予備知識、畳み込みニューラルネットワークの共通レイヤー、基本的な計算プロセスを紹介します。この記事を読んだ後、皆さんが以下の知識ポイントを理解していただければ幸いです。

  • 畳み込みニューラル ネットワークが画像分類に適しているのはなぜですか?従来のニューラル ネットワークと比較した利点は何ですか?
  • 畳み込み層での畳み込み処理はどのように計算されますか?畳み込みカーネルが効果的なのはなぜですか?
  • 畳み込みカーネルの数をどのように決定するのでしょうか?モデルに効果をもたらすには、どのくらいの大きさの畳み込みカーネルを選択する必要がありますか?サイズは正方形でなければなりませんか?長方形の場合はどうでしょうか?
  • ステップ サイズはモデルのパフォーマンスにどのような影響を与えますか?垂直方向と水平方向のステップ サイズは同じに設定する必要がありますか?
  • なぜプーリング層を使用するのですか? Max Pooling の利点は何ですか?
  • ゼロパディングは何をしますか?特徴マップのサイズがわかっている場合、ゼロパディングの量をどのように決定しますか?

上記の質問のいくつかは記事の中で詳しく議論されており、そのうちのいくつかについては記事の内容に基づいてさらに考えることができます。最後に、皆さんに考えてほしい質問をいくつか残しておきます。

  • 畳み込みカーネルのサイズを変更すると、結果の精度が向上するのはなぜですか?畳み込みカーネルのサイズは分類結果にどのように影響しますか?
  • 畳み込みカーネルのパラメータを計算するにはどうすればいいですか?最初にランダムに定義した場合、この畳み込みカーネルが特定の機能を認識できるように、後でどのようにトレーニングすればよいでしょうか?
  • 1*1 畳み込みカーネルは意味がありますか?一部のネットワーク層構造で 1*1 畳み込みカーネルが使用されるのはなぜですか?

次の記事では、以下の点に焦点を当てます。

  • 畳み込みカーネルのパラメータをどのように決定するのでしょうか?値をランダムに初期化した後、特定の特徴を認識できる畳み込みカーネルをどのようにトレーニングすればよいでしょうか?
  • CNN はどのようにしてバックプロパゲーションを実行するのでしょうか?
  • CNN のパラメータを調整するにはどうすればいいですか?
  • 最も適切な CNN ネットワーク構造を設計するにはどうすればよいでしょうか?
  • フレームワークの API を呼び出さずに手動で CNN を作成し、それを PaddlePaddle の実装と比較して改善できる点を確認することは可能ですか?

追伸:この記事はCNNについての私の個人的な理解に基づいて書かれています。私の能力には限界があり、一部の部分は厳密に書かれていない可能性があります。間違いや漏れがある場合は、メッセージを残してください。必ず確認して慎重に修正します。^_^!無神経な批判は受け付けません~また、記事内のチャート構造はすべて私が作成したものであり、勝手にコピーされないことを願っています。非営利目的の複製は許可されています。転載が必要な場合は、メッセージを残すか、メールを送信してください。私の労働の成果が尊重されることを願っています。ありがとうございます!ご質問がございましたら、メッセージを残していただければ、できる限りお答えいたします。

<<:  マクロン仏大統領「人工知能は制限されなければ西側諸国の民主主義を完全に破壊するだろう」

>>:  企業はアルゴリズムやデータを通じて、どのようにより深い堀を築くのでしょうか?

ブログ    

推薦する

アルゴリズムのインテリジェントなアップグレードにより、将来のデジタルライフはより明るくなります

[[120716]]研究者たちは現在、検索結果の改善、自動運転車、スマート携帯電話のアップグレード、...

テスラとモメンタの「自動運転アルゴリズム」の秘密を研究した

現在、自動運転技術は研究室を抜け出し、量産段階に入っており、大手自動車メーカーや部品サプライヤー、ハ...

なぜ機械学習モデルの90%が実稼働に至らないのか

会社は厳しい時期を迎えている。私はパンデミックや株式市場の変動について話しているのではない。時代は不...

人工知能のコミュニケーション:コンテキストは業界マネージャーにとって成功への道

SymphonyAI のマーケティング責任者として、私は企業における人工知能 (AI) のあらゆるア...

畳み込みなしでTransformerのみをベースにした初のビデオ理解アーキテクチャがリリースされました

Facebook AI は、Transformer を完全にベースとし、畳み込みが不要で、トレーニン...

...

情報抽出における画期的な進歩! NLP は大規模に実装されようとしているのでしょうか?

AI におけるブレークスルーには、一般的に 3 つの種類があります。学術ランキングで上位を占め、学...

医者から「ビジネスを奪いたい」ですか?人工知能はこれら3つの大きな困難を克服しなければならない

10年以上が経過し、ディープラーニングは人工知能の発展の機会を提供してきました。並列コンピューティン...

TensorRT が顔認識を高速化する方法

[[329844]]顔認識のリアルタイム パフォーマンスを向上させるために、私たちのチームは従来のニ...

2018 年の人工知能の予測を振り返ってみると、どれが現実になったのでしょうか?

人工知能は非常に複雑であり、急速に発展しています。今後数年間でそれがどうなるかを正確に予測することは...

画像認証コードで人工バカになる

[[416826]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...

2022年の最先端技術トップ10:将来ロボットは多用途化することが予想される

最近、アリババDAMOアカデミーは、2022年に最も注目に値する最先端技術トップ10をまとめました。...

トップレベルの人工知能チームを構築するにはどうすればよいでしょうか?

市場には優れた AI ソフトウェア ツールが数多く存在しますが、プロジェクトを実装する際には強力なチ...

...