今やChat GPTについて知らない人はいないんじゃないか?って思えるぐらい有名になりました。しかし、何でこんな物が突然現れたのか不思議に思う方も多いのではないでしょうか?そこで、Chat GPTが登場するまでの様々な技術について、数式は使わずに平易に解説していくシリーズとして「Chat GPT はどうやって生まれてきたのか?」を連載しています。第2回である今回は、ディープラーニングの火付け役として有名な「AlexNet」について取り上げます。
1.AlexNetの概要
前回の記事(下記)で、2012年にAlexNetが画像認識コンテスト「ILSVRC」(the ImageNet Large Scale Visual Recognition Challenge)で2位を大きく引き離し、ぶっちぎりの優勝をしたことで、世の中での「ディープラーニング」の認知度が一気に上昇し、第3次AIブームとなったことは書きました。
本記事では、このAlexNetについてもう少し詳しく説明します。なお、AlexNetについては以下の論文に記載されています。
タイトル:ImageNet Classification with Deep Convolutional Neural Networks
著者:Alex Krizhevsky , Ilya Sutskever , Geoffrey E. Hinton
1.1 AlexNetが優勝した画像認識コンテストについて
まず、AlexNetが優勝した画像認識コンテストである「ILSVRC」(the ImageNet Large Scale Visual Recognition Challenge)についてです。この名前の中に出てくるImageNetというのは、物体認識ソフトウェアの研究で用いるために準備された大規模な画像データベースのことです。ImageNetには、1400万を超える画像があり、それぞれの画像にどのような物体が写っているかを20,000を超えるカテゴリに分類してデータベース化してあります。コンテストは、2010年から2017年まで毎年開催されました。このコンテストでは、ソフトウェアが物体をどれだけ正しく分類できるかを競います。
AlexNetが優勝した時の、このコンテストの課題は、256×256のカラー画像を1000個のカテゴリに分類するというものでした。カテゴリ数が1000個と非常に多いため、人間が分類する場合でも専門的知識を要求される非常に難しいチャレンジでした。また、訓練用の画像として120万枚が準備されるなど、あらゆる面でスケールの大きいコンテストでした。
AlexNetは、トップ5エラーが15.3%で優勝、2位は26.2%でした。2位との差が10%以上あり、「ぶっちぎり」の程度が分かります。
トップ5エラー モデルが予測した分類カテゴリのうち、予測度の高い上位5クラスのどれかが正解と一致していれば分類に成功したとみなし、それ以外を失敗としたときの認識失敗率
図1にコンテストで用いられたの画像の例を示します。画像の下に正しいカテゴリが表示されています。その下の5つの棒グラフは予測結果の上位5件分を示し、その中に正解がある場合は、赤で表示されています。このように、各画像の正解は必ず1つのカテゴリに分類されています。下段の右から2番目の画像は、「ダルメシアン」とその前に「チェリー」が映っていますが、正解は「チェリー」になっています。人間が見ても「ダルメシアン」と答えるであろう画像ですし、AlexNetの予測結果も非常に高い確率で「ダルメシアン」としています。こんな問題で15.3%しか間違えないなんて、AlexNetはかなり凄いですね。
1.2 畳み込みニューラルネットワーク
1.2.1 畳み込み層と全結合層
AlexNetは、論文のタイトルにもあるとおり、CNN(Convolutional Neural Networks)と呼ばれています。日本語では、畳み込みニューラルネットワークと訳されます。畳み込みニューラルネットワークでは、畳み込み層と呼ばれる特殊な層を利用します。
畳み込み層の説明をしたいところですが、ここでは、畳み込み層での演算方法の説明は省略します。その代わりに、「畳み込み層の役割は画像処理的なもの」とざっくり理解して頂くことにします。
一方、一般のニューラルネットワークの層の場合は、ある層の各ニューロンが前の層のすべてのニューロンとつながっていますので、全結合層と呼びます。
1.2.2 画像処理とカーネル
1.2.1章で、「畳み込み層の役割は画像処理的なもの」と説明しました。この章では、一旦ニューラルネットワークを離れて、画像処理の話をしていきます。
画像処理で特徴画像を作成する方法に「畳み込みフィルタリング」というものがあり、処理時にカーネルというもの使います。このカーネルは、簡単に言えば「周囲のピクセルを参照するときの重み」で、このカーネルの設定によってどのような特徴が抽出されるかが決まります。
では、具体例を使って説明していきます。図2は、Scharrフィルタと呼ばれる古典的なフィルタのカーネルと処理結果を入力画像と共に示しています。処理結果の画像を見ると、左側の画像は縦方向のエッジを、右側の画像は横方向のエッジを抽出できているのが分かります。
なお、エッジ抽出のフィルタとしては、Sobelフィルタが有名ですが、Scharrフィルタの-3と3を-1と1に、-10と10を-2と2に入れ替えればSobelフィルタになります。今回は、よりエッジを強調したいのでScharrフィルタを使っています。
図2の場合、カーネルのサイズは3×3になり、この場合だと周囲8カ所の値を参照できることを意味します。カーネルのサイズを大きくすれば、もっと大局的な特徴を抽出できるようになります。図3は11×11のサイズの8種類のGaborフィルタのカーネルと処理結果を示しています。角度の違う複数の斜め方向のエッジを抽出できている他に、エッジの周期の違いなどが考慮されています。
なお、図3ではカーネルを画像で表示していますが、図2のように数値で表示したのでは分かりづらいためであって、本質的な違いはありません。また、Scharrフィルタは縦用と横用の2種類だけでしたが、Gaborフィルタは複数のパラメータがあり、それらの設定によって様々なカーネルを作成できます。
ここまで、「畳み込みフィルタリング」について説明してきました。カーネルの設定によって抽出できる特徴が変わることを理解して頂けたと思います。
1.2.3 畳み込み層での学習
1.2.2章でカーネルを使った「畳み込みフィルタリング」ついて説明しました。この章では、再びニューラルネットワークに戻って、畳み込み層での学習について説明します。
1.2.1章で「畳み込み層の役割は画像処理的なもの」と説明しました。この「画像処理的なもの」の部分が1.2.2章で説明した「畳み込みフィルタリング」に該当します。但し、そのままでは画像処理であって学習する内容などありません。前回の記事で、「ディープラーニングは特徴量を自動で抽出できるのが特長」と説明したことを思い出してください。特徴量を調整ということは、カーネルを調整することです。つまり、畳み込み層は、どのようなカーネルにすれば良いのかを学習していると言えます。
カーネルについてまとめると以下になります。
画像処理では、「カーネルは抽出したい特徴に合わせて設計するもの」
畳み込みニューラルネットワークでは、「カーネルは畳み込み層が学習するもの」
1.3 AlexNetの構成
図4はAlexNetの構成を示しています。AlexNetは、5層の畳み込み層(C1~C5)と3層の全結合層(D1~D3)で構成されています。上下2段に分かれているのは、GPUのメモリが不足していたため、処理を2台のGPUに分けたためです。2つのGPUは基本的に独立して動作します。但し、全結合層(D1~D3)では全体として全結合となるようにお互いのデータを参照し、畳み込み層のC2とC3の間で1回だけデータを交換します。
図4下部の表のC1~C5は各畳み込み層の設定内容を示します。以下で各項目について説明します。
カーネルサイズ 例えば、C1のカーネルサイズは、11×11×3となっています。これはどういうことかと言うと、1.2.2章でカーネルについて説明した際は、グレースケール画像だったので、11×11などとなっていましたが、対象がカラー画像なのでR,G,Bの3が「深さ」として掛けてあります。
ストライド ここでは、出力される画像のサイズに影響するとだけ考えて下さい。ストライドが4の場合は縦横が約4分の1のサイズになります。ストライドが1の場合はサイズは変化しません。
カーネル数 2つのGPUでそれぞれが扱うカーネル数を示しています。例えば、C1のカーネル数は48+48となっています。これは、カーネルを96個準備して、これを2つのGPUで48個ずつ分担することを表しています。これにより、それぞれのGPUで48枚の特徴画像が作成されます。C2ではこの48枚をまとめて処理するため、C2でのカーネルの深さが48になります。このように、各層のカーネルの深さは前段のカーネル数によって決まります。
図4のP1~P3はプーリングを示します。一般にプーリング層と呼ぶ場合もありますが、学習しないので、ここでは層としては数えません。プーリングでは画像サイズを縮小します。従ってプーリングでのストライドも上記と同じ意味です。つまり、ストライドが2の場合は縦横が約2分の1のサイズになります。プーリングには主に最大値プーリングと平均プーリングがありますが、AlexNetでは最大値プーリングが用いられています。
最大値プーリング: サイズ内の最大値を出力に利用します。
平均プーリング: サイズ内の平均値を出力に利用します。
全結合層(D1~D3)では、それぞれのGPUで2048個のニューロンがあり 、各層のニューロン数の合計は4096個になります。
1.3.1 Local Response Normalization
図4に示したように、多くのカーネルを準備して、それぞれに学習をさせます。しかし、複数のカーネルが同じような内容を学習していてはもったいないです。そこで、Local Response Normalization という処理が導入されています。
但し、近年は Batch Normalization を使うのが主流であるため、あまり使われません。
1.4 データ拡張
コンテストで使われる画像のサイズは256×256であるのに対してAlexNetの入力が224×224になっているのにお気づきでしょうか。これは、256×256の画像のからランダムに224×224の範囲を切り取ることによって学習用のデータを増やしているからです。また、左右反転させたりRGBのバランスを微調整してバリエーションを増やしています。このような手法をデータ拡張と言います。データ拡張は過学習を抑える効果があります。
1.5 学習
学習にかかる時間について、論文にはGTX 580 3GB GPUで5~6日かかったと書かれています。なお、論文が発表された2012年当時の話なので、今ならもっと早いでしょう。
図5は、一番左端の列にテスト画像を、残りの6つの列に学習画像の中でテスト画像に近かったものを表示しています。なお、全結合層の最後では入力画像は4096次元のベクトルに変換されているため、ベクトルどうしの距離を使ってテスト画像に近い画像を抽出できます。図5を見ると、ゾウやイヌのポーズが様々で、決して見た目の一致具合だけで判断していないということが分かります。
2. おわりに
今回は、ディープラーニングの火付け役のAlexNetについて概要を説明しました。元々はAlexNetの作者達についても触れるすもりでしたが、長くなってきましたので次回にすることにします。従いまして、次回はAlexNet(特別編)をお届けする予定です。