ConvNet Evolutions, Architectures, Implementation Details and Advantages.
🎙️ Yann LeCun初期のCNNと、現代のCNNへの進化
畳み込みニューラルネットを用いた小さなデータセットの初期の畳み込み
視覚皮質のモデリングに関する福島の研究に触発されて、単純型細胞/複雑型細胞からなる階層構造、教師あり学習、そして誤差逆伝播を組み合わせたものを用いて、88-89年にトロント大学のYann LeCun教授が最初のCNNを開発しました。実験には320桁の「ムーサーが書いた」数字の小さなデータセットが使われました。以下のアーキテクチャの性能が比較されました。
- 単一のFC(全結合)層
- 2つのFC層
- 重み共有なしで局所的に接続された層
- 重みを共有し、局所接続を行う制約付きネットワーク
- 重みを共有し、局所接続を行う制約付きネットワーク (より多くの特徴マップ)
最も成功したネットワーク(重みを共有した制約付きネットワーク)は最も良い汎化性能を持っており、これは現代のCNNの基礎を形成しています。一方、単一のFC層は過学習する傾向があります。
ベル研究所での最初の「本物の」畳み込みニューラルネット
ベル研究所に移った後、LeCunnの研究は、より大きなCNNを訓練するために、米国郵政公社の手書きの郵便番号を使用することにシフトしました。
- サイズ256 (16$\times$16)の入力層。
- サイズ12 5$\times$5のカーネル。ただし、ストライドが2 (2ピクセルで止まる)、すなわち次のレイヤーは解像度が低減。
- セパレートプーリングなし。
プーリングを用いた畳み込みネットワークアーキテクチャ
翌年、いくつかの変更が行われました:セパレートプーリングが導入されました。セパレートプーリングとは、入力値を平均化してバイアスを加え、非線形関数(tanh)に渡すことで行うものです。2$\times$2のプーリングは、ストライドを2にして実行され、解像度が半分になりました。

図1 畳み込みニューラルネットのアーキテクチャ
単一の畳み込み層の例としては、以下のようなものが考えられます。
- サイズ32$\times$32の入力を取ります。
- 畳み込み層で、5$\times$5のカーネルをストライド1で画像上を通過させます。その結果、サイズ28$\times$28の特徴マップが得られます。
- 特徴マップを非線形関数に渡します。
- ストライドが2で2$\times$2のウィンドウで平均をとるプーリング層に渡します:サイズは14$times$14となります。
- 1-4を4カーネル分繰り返します。
第1層の単純な畳み込み/プーリングの組み合わせは、通常、方向エッジの検出のような単純な特徴を検出します。最初の畳み込み/プーリング層の後の層の目的は、前の層からの特徴の組み合わせを検出することです。このために、前層の特徴マップ上で複数のカーネルを用いてステップ2〜4を繰り返します。これが足し合わされることで、新しい特徴マップを得ることができます。
- 新しい5$\times$5のカーネルを前の層の特徴マップの上でスライドさせ、得られた結果を合計します。(注: 1989年のLeCun教授の実験では、計算の都合上全結合を用いていません。最近の設定では、通常は全結合を用いています。
- 畳み込みの出力を非線形関数に渡します。
- 1と2を16個分繰り返します。
- 結果を、ストライド2で2$\times$2のウィンドウを用いて平均操作をするプーリング層に渡します:各特徴マップについてサイズが5$\times$5です。
出力を生成するために、最後の層の畳み込みが行われます。これは全結合のように見えますが、実際には畳み込みです。
- 最後の畳み込み層では、5$\times$5のカーネルを全ての特徴マップ上でスライドさせ、結果を合計したものです。これは、 サイズが1$\times$1となります。
- 非線形関数を通過させます。
- 1つのカテゴリに対応する、単一の出力を生成します。
- 10個のカテゴリのそれぞれについて、これまでのすべてのステップを繰り返します(並行して)
畳み込みが次のレイヤーの特徴マップの形状をどのように変化させるかについては、Andrej Karpathy のウェブサイトの このアニメーション を参照してください。論文の全文は ここ にあります。
平行移動不変性

図2 平行移動不変性
スライドのアニメーションで示されているように(ここでは別の例です)、入力画像を変換しても特徴マップは同じように変換されます。ただし、特徴マップの変化は、畳み込み・プーリング処理によってスケーリングされます。例えば、ストライド2で2$\times$2のプーリングを行うと、入力レイヤーの1ピクセルの平行移動が、次の特徴マップでは0.5ピクセルの平行移動になります。このようにして、空間分解能は特徴量の増加に交換され、表現はより抽象的になり、平行移動や歪みの影響を受けにくくなります。
アーキテクチャの全体的な内訳
一般的なCNNアーキテクチャは、いくつかの基本的な層のタイプに分解することができます。
- 正規化
- ホワイトニングの調整(オプション)
- 減算法(例:平均の除去、ハイパスフィルタリング)
- 局所的なコントラストの正規化、分散の正規化
- フィルターバンク
- 次元を増やす
- オーバーコンプリートな基底への射影
- エッジ検出
- 非線形性
- スパース化
- 一般に Rectified Linear Unit (ReLU): $\text{ReLU}(x) = \max(x, 0)$.
- プーリング
- 特徴マップ上での集計
-
Max Pooling: $\text{MAX}= \text{Max}_i(X_i)$
-
LP-Norm Pooling: \(\text{L}p= \left(\sum_{i=1}^n \|X_i\|^p \right)^{\frac{1}{p}}\)
- Log-Prob Pooling: $\text{Prob}= \frac{1}{b} \left(\sum_{i=1}^n e^{b X_i} \right)$
LeNet5と数字の識別
PyTorch での LeNet5 の実装
LeNet5は以下の層から構成されています(1は最上層)。
- Log-softmax
- 次元が500$\times$10の全結合層
- ReLu
- 次元が(4$\times$4$\times$50)$\times$500の全結合層
- 次元が2$\times$2でストライドが2のMax Pooling層
- ReLU
- 出力チャンネル数が20で、カーネルサイズが5$\times$5で、 ストライドが1の畳み込み層
- 次元が2$\times$2でストライドが2のMax Pooling層
- ReLU
- 出力チャンネル数が20で、カーネルサイズが5$\times$5で、 ストライドが1の畳み込み層
入力は32$\times$32のグレースケール画像(1入力チャンネル)です。
LeNet5は以下のコードでPyTorchで実装できます。
class LeNet5(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(1, 20, 5, 1)
self.conv2 = nn.Conv2d(20, 20, 5, 1)
self.fc1 = nn.Linear(4*4*50, 500)
self.fc2 = nn.Linear(500, 10)
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.max_pool2d(x, 2, 2)
x = F.relu(self.conv2(x))
x = F.max_pool2d(x, 2, 2)
x = x.view(-1, 4*4*50)
x = F.relu(self.fc1)
x = self.fc2(x)
return F.logsoftmax(x, dim=1)
fc1
と fc2
は全結合層ですが、 カーネルが入力全体をカバーする畳み込み層と考えることができます。全結合層は効率化のために使われます。
同じコードを nn.Sequential
を用いて表現することもできますが、それは時代遅れです。
CNNの利点
完全畳み込みネットワークでは、入力のサイズを指定する必要はありません。しかし、入力のサイズを変更すると、出力のサイズが変化します。
草書体の手書き識別するシステムを考えてみましょう。入力画像をセグメントに分割する必要はありません。カーネルは画像全体のすべての位置をカバーし、パターンがどこにあっても同じ出力を記録します。画像全体にCNNを適用することは、複数の場所に個別に適用するよりもはるかに安価です。事前のセグメンテーションが不要なので、画像をセグメンテーションする作業は画像を認識する作業と似ているので安心です。
例:MNIST
LeNet5は、サイズ32$\times$32のMNIST画像上で学習し、画像の中央にある個々の数字を分類します。データの拡張は、数字をずらしたり、数字の大きさを変えたり、横に数字を挿入したりして行いました。また、上述したような画像中央に数字がある10種類の画像のいずれにも該当しない、11番目のカテゴリでも学習しました。このカテゴリでラベル付けされた画像は、空白の画像とするか、中央ではなく横に数字を配置することで生成しました。

図3 スライディングウィンドウ畳み込みニューラルネット
上の画像は、32$\times$32で学習したLeNet5ネットワークを32$\times$64の入力画像に適用することで、様々な位置の数字を識別できることを示しています。
特徴結合問題
特徴結合問題とは?
視覚神経科学者やコンピュータビジョンの研究者たちは、オブジェクトをオブジェクトとして定義する問題を抱えています。オブジェクトは特徴の集合体です。このオブジェクトを形成するために、すべての特徴を結合するにはどうすればよいのでしょうか?
どうやって解決するのか?
CNNを訓練するのに十分な非線形性とデータがあれば、そのための特別なメカニズムを持たずに、プーリングを持つ2層の畳み込みと、さらに2層の全結合層だけで、この特徴結合の問題を解決することができます。 <!–

Fig. 4 ConvNet Addressing Feature Binding
–>

図4 特徴結合問題に対処する畳み込みニューラルネット
上のアニメーションでは、CNNが一つのストロークを移動させることで異なる数字を識別する能力を示しています。これは、CNNが特徴結合問題に対処する能力、つまり階層的で構成的な方法で特徴を識別する能力を持つことを示しています。
例: 可変な入力サイズ
全体のストライドが4になるように、ストライド1の畳み込み層を2つもちストライドが2のプーリング層を2つ持つCNNを構築することができます。したがって、新しい出力を得たい場合は、入力ウィンドウを4だけずらす必要があります。言いたいことをより明確にするために、下の図(緑のユニット)を見てください(図中の緑のユニット)。まず、サイズ10の入力があり、これに対してサイズ3の畳み込みを行い、8個のユニットを得ます。その後、サイズ2のプーリングを行い、4個のユニットを得ます。同様に、再び畳み込みとプーリングを繰り返し、最終的には1個の出力が得られます。

図5 様々な入力サイズのバインディングについてのConvNetアーキテクチャ
–> ここで、入力層に4個のユニット(上のピンク色のユニット)を追加すると、第1の畳み込み層の後にさらに4個、第1のプーリング層の後にさらに2個、第2の畳み込み層の後にさらに2個、の隠れ層の出力が、そして1個の最終的な出力が得られることになります。したがって、新たな出力を生成するためのウィンドウサイズは4 (2 ストライド $\times$2)となります。さらに、これは、入力のサイズを大きくすれば、すべての層のサイズも大きくなることを示しています。すなわち、CNNが可変長の入力を扱う能力を持っていることを証明しています。
CNNは何に適しているのか?
CNNは多次元配列の形をした自然にある信号の処理に適しており、3つの大きな特性を持っています。
- 局所性: 1つ目は、値の間に強い局所的な相関があることです。自然画像の中の互いに近い2つのピクセルを取ると、それらのピクセルは同じ色を持っている可能性が非常に高いです。2つのピクセルが遠くなるにつれて、それらの間の類似性は減少します。局所的な相関は、局所的な特徴を検出するのに役立ちます。これがまさにCNNがやっていることです。CNNに並べ替えたピクセルを与えると、入力画像の認識がうまくいかなくなりますが、全結合層は影響を受けません。局所的な相関は局所的なつながりを用いることを正当化します。
- 定常性: 第二の特徴は、特徴が本質的であり、画像上のどこにでも現れる可能性があることであり、これは重み共有やプーリングを用いることを正当化します。さらに、信号は一様に分布しているため、入力画像上のすべての場所で特徴検出を繰り返す必要があります。
- 構成性: 3つ目の特徴は、自然画像が構成的であるということで、これは特徴が階層的に画像を構成していることを意味します。この特徴は、ニューロンを何層にも分けて使うことを正当化するものであり、ヒューベルとウィーゼルの単純型細胞と複雑型細胞の研究とも密接に対応しています。
さらに、ビデオ、画像、テキスト、音声認識などでCNNはうまく活用されています。
📝 Chris Ick, Soham Tamba, Ziyu Lei, Hengyu Tang
Shiro Takagi
10 Feb 2020