今やChat GPTについて知らない人はいないんじゃないか?って思えるぐらい有名になりました。ミネソタ大学ロースクールの試験を始め、様々な本来ならば人間が受けるはずの難関試験をパスしたなど、その能力の高さと、対話形式で質問するだけで何でも回答してくれるという使い勝手の良さから、非常に話題になりました。既に日常生活に取り入れている人も多くいることでしょう。
しかし、何でこんな物が突然現れたのか不思議に思う方も多いのではないでしょうか?また、「AI」とか「ニューラルネットワーク」や「ディープラーニング」などと様々な言葉が出てくるので、特に文系の方の中には混乱してしまっている方もいるでしょう。そこで、Chat GPTが登場するまでの様々な技術について、数式は使わずに平易に解説していくシリーズとして「Chat GPT はどうやって生まれてきたのか?」を開始します。
第1回である今回は、「ディープラーニング」について取り上げます。
1. ディープラーニングとは何か
Chat GPTはディープラーニングの研究の中から生まれてきました。まず最初にディープラーニングについて知って頂きたいので、この技術について説明していきます。
1.1 ディープラーニングの位置づけ
まず、図1をご覧ください。この図が、「AI」,「ニューラルネットワーク」,「ディープラーニング」の関係を示しています。つまり、「ニューラルネットワーク」は「AI」の1種であり、さらに、「ディープラーニング」は「ニューラルネットワーク」の1種です。さらに、「ニューラルネットワーク」は「SVM(サポートベクターマシン)」などと並ぶ「機械学習」の1種であることがわかります。
次に、各ワードのもう少し詳しい説明をしていきます。
AI AIの定義は、きっちりとされているわけではないです。その時代や分野によってまちまちだったりします。ここでは、知的な振る舞いをする機械(コンピュータ)と捉えて頂ければよいと思います。
機械学習 機械(コンピュータ)に知的な振る舞いができるようにする技術のことです。図1では手法による分類を示していますが、手法による分類の他に、「教師あり学習」,「教師なし学習」,「強化学習」の3つに分類する場合もあります。
ニューラルネットワーク 人間の脳のしくみからヒントを得て作られたコンピュータ用の数学モデルです。 ※ニューラルネットワークに関してはCaDE内に下記の記事もありますので、是非とも参考にしてください。
ディープラーニング 日本語では深層学習とも呼ばれます。ニューラルネットワークを多層化したもので、特徴量を自動で抽出できるのが特長です。
1.2 ディープラーニングの登場
先程も説明しましたように、ディープラーニングはニューラルネットワークの1種です。当然、ディープラーニングはニューラルネットワークの研究の中から生まれました。そこで、ディープラーニングが登場するまでのニューラルネットワークの研究を追っていきます。
ニューラルネットワークは1950年代から研究が続けられており、当時はパーセプトロンなどと呼ばれていました。
1986年にバックプロパゲーション(誤差逆伝播法)が発表されると、コンピューターでの計算のしやすさから人気となり、第2次AIブームに発展しました。 しかし、下記の2つの問題を改善することができずに、第2次AIブームは去りニューラルネットワーク冬の時代に入ってしまいました。
過学習 学習を続けていくと教師データに適応しすぎて、汎化性能が落ちてしまう現象
勾配消失現象 層を多く重ねると学習が進まなくなる現象
余談になりますが、第2次AIブーム当時、ニューラルネットワークと共にもてはやされたものに、エキスパートシステムがあります。
当時、rogue(ローグ)を自動でプレイするエキスパートシステムとしてRog-O-Matic(ロゴマチック)が作成され、大勢の人がルールを追加していった結果、みごとゲームをクリアできたそうです。なお、rogueは今でもゲームのジャンル名として「ローグライクゲーム」が使われるぐらいに有名な(古典的な?)ゲームです。しかし、エキスパートシステムも人手によるIF-THENルールの作成に非常に手間がかかるため、ブームが去ると同時に忘れられていきました。
本題に戻ります。時は流れ、2012年にAlexNetが画像認識コンテスト「ILSVRC」(the ImageNet Large Scale Visual Recognition Challenge)で2位を大きく引き離し、ぶっちぎりの優勝をしたことで、世の中での「ディープラーニング」の認知度が一気に上昇し、第3次AIブームとなりました。
第2次AIブームが去ってニューラルネットワーク冬の時代に入ってからも、一部の研究者達はニューラルネットワークの研究を続けており、上記の2つの問題を改善し、ニューラルネットワークを多層化した「ディープラーニング」を実現していたのです(図2)。
過学習に対しては、当時dropoutというテクニックで改善していました。ですが、最近はBatch Normalizationを使うのが主流のようです。勾配消失現象に対しては、それまで活性化関数としてシグモイド関数やtanh(Hyperbolic Tangent)が多く使われてきましたが、それに代えてReLU関数を使うことで改善しました。ReLU関数の方は最近でもよく使われます。
1.3 特徴量の自動抽出ってどういうこと?
ディープラーニングは特徴量を自動で抽出できることが大きな特長であると説明しました。ここでは、この意味について具体的に説明します。
ディープラーニング登場以前は、どのような特徴量を使うべきかを、扱う問題(タスク)に合わせて決めていました。分かり易い例をあげると、ノイズが多い画像を認識する場合は、「特定のノイズに対してロバストな特徴量」とか、印影照合なら、「画像の回転に対して不変な特徴量」とか、という具合です。
ロバスト 「ロバストな」,「ロバスト性」は「頑健な」,「頑健性」などと訳されます。環境の変化や衝撃に対して、耐久性や安定性をもっていることを指します。
印影照合 印影とは、印章を紙に押したときに紙に残る文字のことです。印章とは、いわゆるハンコのことで、一般には印鑑と呼ばれたりします。本来の意味では、印鑑は銀行や役所などに登録した陰影を指します。印影照合は、押印された印影と登録された印影(印鑑)を照合し、本人によって押されたものであることを確認する作業です。
どのような特徴量を採用すれば、その問題をうまく解決することができるのかは、設計者の手腕にかかっていました。
図3は、1990年ごろの漢字OCR(Optical Character Recognition=光学文字認識)における特徴抽出の説明です。この例では、入力画像を画像処理によって4種類の方向成分画像に分解し、それぞれを圧縮することによって特徴量を作成しています。漢字は線の構造が複雑なのでこのような特徴量が有効です。
どのような特徴量を使うかが決まれば、入力データから特徴量(複数)を算出し、これらを使って、分類などの処理をしていきます。例えば、分類をする場合は、図1にあげた機械学習の様々な手法を使って分類器を構成することができます。特徴量にすることにより、元の入力データの形式に左右されずに分類器が使えること、分類器の計算量を少なくできるなどのメリットがあります。しかしながら、特徴量の中に分類に必要な情報が取り込めていないと、よい性能が出せずに問題になってしまいます。
では、ディープラーニングの登場でどう変わったのかと言うと、入力データをそのまま入力層に入れます。例えば画像サイズが縦32ピクセル,横32ピクセルのカラー画像を処理する場合は、32×32=1024個のピクセルがあり、それぞれがRGBの3つの値を持っているので、入力層に1024×3=3072個のニューロンを用意して、画像データとの対応を決めて各画素の持つ値を入力します。
従って、ディープラーニングを使って画像の分類をしたい場合は、ラベル付けされた大量の画像データを準備して学習させれば良いことになります。例えば、先程と同じ32×32のカラー画像を飛行機,自動車,鳥,ネコ,シカ,イヌ,カエル,ウマ,船舶,トラックの10種類に分類する場合、図4の様に各カテゴリの様々な画像を準備します。図4では10カテゴリのそれぞれについて10枚ずつ、全部で100枚の画像がありますが、ディープラーニングに学習させる場合は、このような感じで数万枚から数百万枚の画像を使用します。
ここで、ディープラーニングの学習と推論について簡単に説明します。先程、32×32のカラー画像を入力する場合は、画像のデータに合わせて入力層に3072個のニューロンを準備すると説明しました。この画像を10種類に分類する場合は、出力層のニューロン数を10個にします。なお、途中の中間層の数や種類などについては設計によって変わってきますので、ここでは詳しくは触れません。
図5はディープラーニングの学習時の説明図で、左端の画像で学習しようとしています。この画像は図4のautomobileの段の左端の画像ですから、正解は自動車(automobile)です。このように正解のデータがあるので、「教師あり学習」に該当します。
分類問題を扱う場合は、一般的に最後にSoftmax層を入れて、ニューロンの出力値の合計は1になるように構成します。従って、出力層のニューロンの値は、automobileだけが1で他はすべて0となるのが正解になります(図5)。学習がまだ完了していない場合は、出力層のニューロンに出力される値は、正解データとズレている可能性があります。このズレが誤差であり、バックプロパゲーション(誤差逆伝播法)により、後ろの層から前の層へと順番にニューロンのパラメータを修正します。この様なニューロンのパラメータ修正を、集めた大量のラベル付データで何回も行うことにより、学習を行います。
学習が終了して推論をする場合は、ニューロンのパラメータの更新を止めておきます。任意の画像を入力層に入れれば、出力層に値が出力され、出力層の値は合計が1になるので、これをそれぞれのカテゴリに属する確率とします。つまり、最大値を出力したニューロンに該当するラベルが推論結果となります。
話しを特徴量に戻します。これまでの説明で、ディープラーニングでは人間が特徴量を決める必要がないということは、理解して頂いたと思います。ここでは「自動で抽出」の部分について説明していきます。
2012年にAlexNetが登場して第3次AIブームの火付け役になったことは、1.2章で説明しました。その翌年の2013年に、"Visualizing and Understanding Convolutional Networks"という論文が発表されました。この論文では、AlexNetと同等なモデルを構築し、学習終了後や学習過程において、各ニューロンの学習内容、つまり、「どのような入力に対して応答するようになったか」の可視化が行われました。図6は、この論文から抜粋したものです。この図から、学習終了後のLayer 1では強度の変化や方向に、Layer 2ではコーナーやその他のエッジ/色の組み合わせに応答していることがわかります。なお、Layer 1,Layer 2などは、中間層に付けられた名前で入力層に近いほど若い番号が与えられます。ここでは図を省略しますが、Layer 4,Layer 5と出力層に近い層では、よりタスクに固有な特徴を学習しています。
上記のLayer 1における「強度の変化や方向に対して応答するように学習した」というのは、図3のように「方向成分に分けて特徴抽出する」と同様の処理ができるようになったことを示します。このことにより、従来は人間が設定していた特徴量と同等なものを、機械が自動で抽出できるようになったと言われているのです。
但し、どのような特徴を学習するかは、中間層のネットワーク構成によっても変わってくるので、今後はこの辺りが設計の肝になっていくのでしょう。実際に、上記論文では抽出している特徴の問題点に基づいて、ネットワーク構成を変更すると性能が向上することを示しています。
1.4 転移学習とファインチューニング
ディープラーニングの登場により、ラベル付けした画像を大量に準備すれば、画像認識ができるようになりました。しかしながら、数万枚レベルの大量の画像を収集することは、そんなに簡単なことではありません。また、画像サイズを大きくすると、必然的にニューロンの数が増えますので、学習に必要なパラメータ数と学習に必要な計算量が増えてしまいます。「できれば、少ない枚数の画像と少ない計算量で画像認識ができるようになって欲しい」と、誰しもが思うことでしょう。転移学習は、そのような要望に応えることができる技術です。
前の章で、特徴量の自動抽出について説明しました。中間層の入力層に近い層は基本的な特徴量を抽出します。そして、出力層に近づくにつれて学習する特徴量はタスクに固有なものに変化していきます。つまり、画像認識の場合、中間層の前半から後半の少し前までは特徴量抽出器を構成していると考えることができます。そして、特徴量抽出後の部分は分類器を構成していると考えられます。
今、ある画像認識のタスクで「数種類の物体を見分ける必要がある」とします。この時に、大量の画像データを集めて全ての学習を0からするのではなく、「既に学習が終わっている他のモデルの特徴量抽出器の部分だけを再利用しよう」とするのが、転移学習です。特徴量抽出器の部分は学習済みのものを使い、パラメータの更新を止めておき、分類器の部分はタスクに応じた新しいネットワーク構成にして、この部分だけを新たに学習させます。
0から学習する必要がないので少量の画像データで学習できますし、他のモデルが獲得した特徴量抽出機能を使えるので高い性能を発揮できます。
なお、画像認識の転移学習には、大量の画像データでしっかり学習したモデルが必要です。一般に、VGG16などがよく使われます。
VGG16 2014年に"Very Deep Convolutional Networks for Large-Scale Image Recognitionef"という論文で発表されたいくつかのモデルのうち、性能が良かった16層のモデルを指します。VGGは著者らの所属 Visual Geometry Group から。
また、転移学習に似たものにファインチューニングがあります。2つとも大規模な学習済みのモデルを、別のタスクに利用するという点では同じです。しかし、転移学習では、一部のニューロンのパラメータ更新を止めますが、ファインチューニングでは学習済みのパラメータを初期値としてパラメータを更新します。ちなみに、ファインチューニングは微調整という意味です。
2. おわりに
今回は、ディープラーニングについて、説明しました。特に、ディープラーニングの特長である特徴量の自動抽出について説明し、転移学習とファインチューニングについても少し触れました。ディープラーニングに対する理解が少しでも深まったのなら幸いです。元々は、AlexNetについてもう少し詳しい説明を入れるつもりでしたが、これについては、次回にすることにします。