はじめに
これまでの説明で、基本的なディープラーニングについて学んできました。
しかし、このディープラーニングには問題点があります。
そのため、人工ニューロン数が増加すると(特に重みに対する)パラメータの個数が膨大となることです。
このモデルでは、隣り合う層同士で全ての人工ニューロンが情報の受け渡しを行っていました。
つまり、重みパラメータは、隣り合う層同士を掛け合わせた個数が必要になります。
例えば、デジカメの画像(1000万画素)を判定する場合、一般的に隠れ層の人工ニューロンは1000個ほど必要となると言われています。
これでディープラーニングのモデルを作ると、入力層(1000万個)⇔隠れ層(1000個)の間にある重みパラメータはだけで100億個になってしまいます!!
これに出力層は絶対に必要なり、隠れ層も数層ほど追加したら、パラメータの数が爆発的に増加します・・・
今回は、この問題を解消するために考え出さたCNN(畳み込みニューラルネットワーク)というモデルについて紹介します。
CNNの概要
ディープラーニングでは、隣り合う層同士で全てのユニットを結合していました。
その結果、莫大な数のユニット同士が結び付き、同時に重みパラメータも莫大な数となりました。
今回紹介するCNN(畳み込みニューラルネットワーク)では隠れ層のユニットの配置を工夫してパラメータの数を削減させました。
これを実現するために、新たにフィルタ、畳み込み層、プーリング層という考え方を導入します。
CNNの図解
今回は、画像データ(9×9 画素)を判定するモデルを例に説明を進めます。
まず、画像データを領域ごとに分割し、次層(畳み込み層)のユニットへ受け渡すことにします。
畳み込み層(Convolution Layer)
入力層から畳み込み層への受け渡しについて、詳細を見ていきます。
畳み込み層(Convolution Layer)は、入力層の各分割領域に含まれる入力値、重みの集合(フィルタ)、バイアスで計算して作成します。
畳み込み層で作成された出力値の集合は特徴マップ(Feature Map)と呼ばれています。
※1つの特徴マップの各ユニットを計算するには、フィルタとバイアスは同じパラメータを使用しています。
今回の例では、入力層から畳み込み層(特徴マップ)を3つ作成することにします。
この場合のイメージは以下の通りです。
プーリング層(Pooling Layer)
畳み込み層に作成されたデータは、縮約(圧縮)されてプーリング層に受け渡されます。
プーリング層(Pooling Layer)は、畳み込み層の特徴マップを領域ごとに区切り、領域内の要素を指定したルールで縮約(プーリング)して作成します。
この縮約ルールを「プーリング手法」と呼び、代用的なものに次の3つがあります。
- 最大プーリング :対象領域の最大値を採用する
- 平均プーリング :対象領域の平均値を採用する
- L2プーリング :対象領域の二乗平均値を採用する。
今回の例で、畳み込み層からプーリング層を作成するイメージは以下の通りです。
出力層(Output Layer)
プーリング層から出力層へのデータの受け渡しは基本的なディープラーニングと同じで全結合となります。
そのため、出力層は、プーリング層の全要素の重み付き入力を受け取って計算します。
CNNの全体像
CNNの数式化
これまでの説明をイメージした上で、CNNで利用する記号を定義し、数式で表します。
「コスト関数の定義」と「勾配降下法の適用」
最後に
ディープラーニングに比べるとアッサリな感じで説明してしまいましたが、押さえるべきポイントはお伝えできたと思っています。
ディープラーニングの説明の繰り返しになりますが、CNNをプログラムで作成する場合は優秀なパッケージを使用します。
そのため、私たちは「フィルタの大きさ」や「畳み込み層の数」などを指定してしまえば、パッケージがいい感じに処理してくれます。
しかし、もしフィルタや畳み込み層の意味が分かっていないと「どのように指定すれば良いか分からない」と思います。
今回の説明で、CNNの概要を掴み、パッケージを使いこなす下地を作る手伝いができたなら幸いです。
コメント