さて、ここからは、実際のプログラムの内容に合わせて説明します。
CNNとは、Convolutional Neural Network、畳み込みネットワークのことです。
「畳み込み処理」とは、文字通り「布団を畳む」と同じ意味です。要するに、畳んで小さくする、ということです。しかし、小さくても布団は布団です。布団の性質が損なわれる訳ではありません。
前述の私のプログラムでは、画像の3x3(9ビット)の部分を1x1(1ビット)に畳んでいる訳です(9畳の部屋を1畳に圧縮しているイメージ)。ただ、単に畳み込むのではなく、畳み込む前に、フィルターにかけます。
フィルターとは、簡単に言えば、画像の一部をあえて、見えなくしてしまうことです。このフィルターには、タイプの違う複数の種類を準備しておきます。フィルターを通した画像は、当然に不完全な画像になりますが、その特徴が際立つことになります。
その不完全な画像を、頭の中で(妄想で)組み立てることができれば ―― 完全なエロ本の写真……ではなく、原画像として理解できるはずです(後述します)。
次に「プーリング処理」ですが、畳み込み処理で作り出されたデータの塊の中の代表値に置き換えるものです(私のプログラムでは3x3の9ビットのデータの最大値を使っています)。そして、これも基本的には「エロ画像のモザイク」と同じ理解で良いのです(後述します)。
今回、私が驚いたのは、この「畳み込み処理」「フィルター処理」「プーリング処理」が、画像処理の前処理にすぎない、ということでした。形の上では、ニューラルネットワークの層の処理をしているように見えますが、要するに画像の繰り返し処理を、for 〜 nextのように行っているだけなのです ―― つまり、この部分に関しては、私が、大学時代に地獄を見てきたバックプロパゲーション(逆伝搬学習)は、ここには全く登場してこないのです。
私は、「深層学習」という名前を聞いた時から、
―― 奈落の底(深層)にあるニューロの出力層から、地表の入力層に向けて逆走する、ダイナミックなバックプロパゲーションの驀進が見られると思ってワクワクしていた
のです。
ですから、このコードを理解した時 ―― 返して! この私の純粋なエンジニア心の期待を返して!! と叫びそうになりました(通勤電車の中だったので、我慢しましたが)。
とはいえ、バックプロパゲーションのニューラルネットワークが全く登場しないという訳ではありません。最後の3層のみは、バックプロパゲーションが必要となります。
いかに「モザイク」の画像処理でデータ数の削減を図ろうとも、たかだか8x8ビットの画像(文字)のデータ8パターンでも144ビット(9 x 8 x 2)の加工済みデータが出てくるのです。これを最終的に、4ビット(1000, 0100,0010, 0001)にまで圧縮するには、全結合型のニューラルネットワークに登場してもらわざるを得ません。
Copyright © ITmedia, Inc. All Rights Reserved.