![見出し画像](https://assets.st-note.com/production/uploads/images/44732131/rectangle_large_type_2_56d1a5e486e0cc95db543cb386a6aa67.jpg?width=1200)
おしゃべりな 人工知能講座⑨
■画像認識の仕組みとは
天馬「では、ディープラーニングがどのようにして画像認識をしているかの説明をしよう。だがその前に、ディープラーニングが登場する前まで、どのような手法で画像認識をしようとしてきたかを説明した方が、理解が早いはずだ」
天馬「上の図を見てくれ。画像を認識させるとは、入力された画像を分類してラベルを付与することだ。つまり、リンゴの画像をコンピューターに入力して、リンゴに分類できたらコンピューターはリンゴを認識したことになる。ディープラーニングが登場するまでは、人が設計した画像の特徴を、入力画像から抽出して分類するしかなかった。
この画像認識の代表的手法がBag-of-featuresと呼ばれている手法だ。教師ありの機械学習アルゴリズムの一種で、画像特徴量を利用している。
同じ種類の画像なら、似たようなパーツを多く持っているはずだろう。そこで画像を細かく切り出し、似たパーツが多ければ同じ種類と考えたのだ。同じ種類の画像の、個々のパーツを集約して、ベクトル化したものが特徴ベクトルとなる。この特徴ベクトルを用いて機械学習させ、学習済みモデルすなわち画像識別器にしたのだ」
伴くん「天馬先生、画像を細かく切り出した後に、個々のパーツ同士を比較するのですね。そしたら全体像はまったく違っていても、個々のパーツが同じだと、同じ画像だと判定しそうな気がしますよ」
天馬「鋭いな。その通りだ。だから画像認識率は、この手法ではそれほど良くなかった」
猿田くん「しかしBag-of-featuresという名称は面白いですね」
天馬「これはBagつまり袋だな、この一つの袋に個々のパーツをバラバラと入れるからこのような名前になっている。このBag-of-featuresは、自然言語処理で定番の手法Bag-of-Wordsが名前の由来になっている。自然言語処理の分野では、その当時Bag-of-Wordsという語順を無視して言葉をバラバラにしてまとめた手法が、従来手法より精度がよく成功を収めていた。その考え方を画像認識に応用したのが、このBag-of-featuresだ。
では、この機械学習での手法と対比させて、ディープラーニングの画像認識方法を説明する」
天馬「先ほどの図と同じような構造にしているが、すでに説明したように、ディープラーニングの特徴は人手が不要の自己学習だ。機械学習では、画像特徴量の抽出方法を人が考える必要がある。しかしディープラーニングは、これを自動化できるのだ。ラベルの付いた教師データを、大量に入力すれば学習済みモデルが自動的に完成してしまうのだ」
愛さん「それはすごいことですね。でも精度の方は、どうなのでしょうか?」
天馬「世界的な画像認識コンテストだと、ディープラーニングが登場するまでは、エラー率が最高でも25%程度だった。ところがディープラーニングが登場すると、いきなり10%以上改善し、わずか数年で人間の認識率5%を凌駕してしまったのだ」
伴くん「そうですか、人間の眼よりいつのまにか良くなったのですね」
■CNNの画像認識手法とは
天馬「ではディープラーニングが、具体的にどのようにして画像認識をしているかの説明に移ろう。画像認識にはCNN(Convolution Neural Network)という名前の、とても深い階層を持ったニューラルネットワークを用いている」
天馬「この図は、とても簡略化しているので注意してくれたまえ。CNNは入力層と多数の畳み込み層、プーリング層、そして結合層、出力層などから構成されている。この畳み込み層とプーリング層が数十回以上も繰り返して深い層を形成しているので、ディープラーニングという名前になっているのだ。最初、入力画像は細かな矩形に分解されて、ネットワークに入力される」
天馬「この図のように、画像データはピクセルが長方形状に並んでいる。分割された矩形データは、入力層から畳み込み層、プーリング層に入っていく。各ピクセルにはモノクロなら1つ、フルカラーならRGB3つの値(チャンネル)が入っている。したがって画像は、縦横チャンネルの3次元配列で表されることになる。画像には局所性と平行移動不変性という特性がある。この局所性とは、画像の各ピクセルは近傍のピクセルと強い関係性があるということだな。CNNは、これらの画像特性を活かしたニューラルネットワークだ」
伴くん「局所性について、もう少し教えてください」
天馬「例えば、空が背景にある飛行機の画像をイメージしたまえ。高解像度画像だと延々と青いピクセルが続き、飛行機の輪郭になると突然色が変化し、またしばらくその色が続くことは分かるだろう。つまり隣同士のピクセルは同色になりやすい、という意味だ」
猿田くん「そりゃそうですね。もし1ピクセルごとに色が変化したら、全体ではグレーとかノイズにしか見えないか」
天馬「物体を画像で表現するには、少なくとも画像の輪郭は必要になる。そして輪郭とは、隣り合うピクセルと輝度や色が変化する箇所だから、大半のピクセルは同じのはずだろう。だから同じような箇所はまとめ、輪郭だけ抽出すればよいはずだろう」
伴くん「なるほど、わかりました」
天馬「この畳み込み層とプーリング層は、画像の構造を活用した特殊な層なので、出力も画像のような形式を取っている。まず畳み込み層だが、入力画像全体に対して小さな矩形のフィルタで畳み込み処理を施し、特徴マップを得る。次のプーリング層では、畳み込み層から出力された特徴マップを縮小処理する。この畳み込み処理とプーリング処理を複数回繰り返すことで、次第に画像の特徴量が抽出されていくのだ」
愛さん「ちょっと待ってください。畳み込み処理とかプーリング処理とかすると、どうして画像の特徴量が抽出できるのでしょうか?」
天馬「あまり詳しく説明すると長くなるので、ここでは概要だけにする。畳み込み処理では画像の輪郭を抽出している。これは入力された矩形の画像データに対して、図にあるようにさらに小さなサイズのフィルタで、1ピクセルずつ移動させて画像のエッジ部分を検出していく。その結果を特徴マップに書き込むのだ。この図のプーリング処理では、特徴マップの矩形データ4つから最大値1つだけ取り出すことで、特徴マップのデータを1/4に圧縮しているだろう。さらにこの処理をすることで、画像が多少移動しても、同じ結果になる」
愛さん「つまりこの処理で、画像データに含まれる輪郭が圧縮されたデータとして得られるのですね」
猿田くん「でもそれだけだと、単に画像の輪郭が分かっただけですよ。画像処理でよく使う単純なエッジ検出フィルタ処理だ」
天馬「まあこれだけだと、確かにそうだ。しかしこれだけではない」
天馬「この隠れ層での畳み込み処理・プーリング処理を、何十回、何百回と繰り替えし、最後にラベルを付与すると説明しただろう。教師データの学習時には、この結果が間違いの場合には、その誤差データを各層のノードの重みに戻して誤差を減らすように自動調整するのだ。この方法を誤差逆伝播法と呼び、ディープラーニングが大成功した特徴だ」
愛さん「まるで、生徒が答え合わせしているようなものですね」
天馬「まあそんなところだな」
猿田くん「誤差逆伝播法はいいのですが、なんで隠れ層を何百層も繰り返しているんですか?」
天馬「そこが、このCNNにおける最大の特徴だ。先ほどの画像認識の手法で話したように、画像を他の画像と識別するには、画像の特徴量を比較すればよい。例えばリンゴとミカンを区別するために、リンゴやミカンの特徴を事細かに記述してプログラミングすることは大変な労力が必要だし、作ってもリンゴとミカンの区別しかできないだろう。ではどうするかだな。猿田くん、難しい問題を解くときにはどうすればよいかな?」
猿田くん「先生に聞きます」
天馬「話にならんな。複雑すぎて難しい問題がある場合には、多数の簡単な問題に分解できるか試してみることだ。例えばリンゴとミカンを区別する場合で説明しよう。まず大雑把に分けられるようなパターンを見つける。横に平べったい丸型ならミカン、縦に長い丸型ならリンゴ、みたいなパターンだ。この場合、例外は気にしない。次にもう少し細かい特徴、上部にあるくぼみの形状とかだ。そして深い階層になるほど、細かな特徴を抽出しいくのだ。そうすると、浅い階層には大きなパターン、深い階層には細かなパターンが学習でき、すべての階層を合わせると、複雑な画像でも分類、つまり画像認識ができるようになる」
猿田くん「へー、じゃあ階層が深ければ深いほど精密な画像認識ができるのですね」
天馬「それほど単純な話じゃない。階層を単純に深くするだけでは、誤差を戻せなくなったり、そもそも計算量が爆発的に増大してしまうのでうまくいかない。そのため様々な工夫がある」
伴くん「例えば、どのようなものですか?」
天馬「例えば、オートエンコーダーと呼ばれているネットワークがある。この図も極端に簡略化したイメージ図だ。入力画像は細かな矩形に分割されて入力層に入るが、このオートエンコーダーでは前段よりノード数を減らしている。ノードが減るとデータは圧縮されることになるな。さらに次段では元のノード数に戻す。つまり数学的にいうと、一度少ない次元にデータ変換して、さらにその次段で再び元の次元に戻している。このような学習をすることで、元の画像データに復元できたなら、少ない次元で画像が表現できたことになる。つまりこの少ない次元に圧縮されたデータが『特徴量』ということになる」
猿田くん「ふーん、なんだか分かったような、分からないような説明ですよ」
天馬「数式ではなく言葉で説明しているからな。もう一度言うと、画像データを圧縮して再び元のように復元できるなら、圧縮されたデータには元画像の特徴が全部含まれているはずだろう。元の画像データを正解にして、元に戻せるように学習を進めているからだ。ここはイメージできるな。ディープラーニングは、このオートエンコーダーを何層も組み込むことで、大量の画像データに共通する特徴を、高精度で抽出できるようになった。
以前の画像認識手法で説明した、それまでの画像認識手法では、特徴マップの作り方を人が設計していただろう。これを自動で抽出できることが、CNNの画期的な事だったのだ。そして最後に全結合層で2次元の特徴マップを1次元に展開し、出力層でどの画像なのかを判断、つまり分類しラベルを付与している」
猿田くん「先生、ディープラーニングは生物の脳がモデルのはずですが、前に専門書をみたら難解な数式で埋め尽くされていたので、勉強をあきらめましたよ」
天馬先生「以前にも話したが、ニューラルネットワークは、コンピューターの創成期から研究されていた。最初のニューラルネットワークであるパーセプトロンは、生物の脳に似せた電気機械式で制作されていたのだよ。計算しかできないコンピューターと、人工知能として研究されていたニューラルネットワークは、当初まったくの別物だった。それがコンピューターのハードウェアと数学の発達と共に、ニューラルネットワークの数式モデルが考案され、コンピューターでもパーセプトロンをプログラミングすることが出来るようになったのだ」
猿田くん「脳に四則演算する機能はないですよね」
天馬「そうだ。脳には記憶する仕組みがあるが、演算装置はない。だから脳はあの複雑な数式を解いているわけではないのだ。あの数式は、あくまで脳のメカニズムを数式モデルで、何とか近似しようとして、どんどん複雑な数式になっていったものだ」
猿田くん「そうか。コンピューターは計算しかできないから、生物の複雑な生化学的挙動を、無理やり計算式で表現しようとしていただけか」
愛さん「天馬先生、そういえばニューラルネットワークの研究に、日本人が活躍したという話を聞いたことがありますよ」
天馬「1979年に、NHK研究所の福島邦彦がネオコグニトロンを発表している。このネオコグニトロンは、猫の視覚野をモデルにして、視覚のパターン認識に関する階層型神経回路モデルを作ったのだ。実用的なパターン認識システムとして、当時としては高い能力を持っていた。CNNの原型といってもよいほど、優れたものだった」
猿田くん「え?猫の視覚野をモデルにしたということは、猫を解剖して調べたのですか!」
天馬「そうしなければ研究できないからな。当時の研究所では、研究の犠牲になった多数の猫たちを丁重に弔い、慰霊碑もあったと言われている。日本人らしいエピソードだ」
伴くん「その後ネオコグニトロンは、どうなったのですか?」
天馬「結局、いわゆる『人工知能冬の時代』になったため、外国ではあまり注目もされず、埋もれてしまったようだ」
この記事が気に入ったらサポートをしてみませんか?