大きなブームとなっているディープラーニング(深層学習)。基本的な仕組みや歴史について解説した前回に引き続き、今回はより「ディープ」に学習の方法に迫ってみたい。AI(人工知能)はどうやって学習するのか、学習した結果からデータを解析できるのはなぜか。AIに詳しい博士がレクチャーする。

ディープラーニングの学習には、誤差逆伝播法(ごさぎゃくでんぱほう、バック・プロパゲーション)や勾配法と呼ばれる手法を使う
ディープラーニングの学習には、誤差逆伝播法(ごさぎゃくでんぱほう、バック・プロパゲーション)や勾配法と呼ばれる手法を使う
柔裸瑠(にゅうらる)博士
クロトレ大学教授。コンピューターの黎明(れいめい)期からAI一筋で研究をしてきた。最近ついに還暦を迎える。昔は鬼博士と呼ばれていたが、最近は丸くなってきた。
助手のアミ
ある中堅ベンチャー企業で社長秘書をやっていたが、まったく新しい道を進もうと、クロトレ大学の助手として転職してきた。学生の頃から数学や理科系は苦手。

前回はディープラーニングについて概要を説明したのじゃが、覚えているかね?


えー、ブドウみたいな丸いのが重なったのを使うってことだよね。


うん、ニューラルネットワークっていうんだけどね。今回は、ディープラーニングがどうやって学習しているのか、もう少し詳しくみていこう。


なんか難しそう。やさしく教えてほしいなー。


後ろの層から前の層へと学習

 前回説明したように、ディープラーニングは、層が多い(深い)ニューラルネットワークを使って、推論を行う機械学習の一種だ。今回はディープラーニングではどうやって学習をしているかを説明しよう。

 本稿の第3回では、馬と牛の写真データを大量に用意してAIに学習させると、新しい画像を読み込ませても、馬である可能性が70%、牛である可能性は30%などと、ある程度の判別ができるようになると説明した。まずは、その判別の仕組みをちょっとだけ詳しく説明しよう。

 例えば、馬の白黒写真を識別させることにする。ここでは単純に考えるために、馬の写真は10×10ドットだったとしよう。つまりドットの数は100だ。それぞれのドットの色から、真っ白なら0、中間ぐらいのグレーなら0.5、真っ黒なら1というデータを作り出す。真っ白と中間のグレーの間の0.35といったデータもあるかもしれない。そうした100個の数値を集めて、入力用のデータにする。

 ここでは仮に、入力層が100個、中間層が4個×2層、出力層が2個のニューラルネットワークを用意する。それぞれの丸いノード(人工ニューロン)は、前後の層のすべてのノードとつながっており、それぞれの線には、重みの値が設定されている。

 先ほど作った100個のデータを入力層に入れると、その右の列にあるノードが計算を始める。前回も説明した通り、各ノードは、その前の層からつながっている線ごとに、入力信号と重みの値を掛け合わせて、その数値をすべて足し合わせる。その合計がしきい値を超えたときには、出力は1、超えない場合は0になる(厳密にはその中間の値もある)。その出力はまた次の列のノード群に渡されていく。

牛と馬の分類ができるように学習したAI(ニューラルネットワーク)の例。画像をバラバラにして入力層に入れる。各ノードにつながった線の重みの値を掛け算しつつ、出力層まで計算していく。結果の数値を見て、画像の内容を判断する
牛と馬の分類ができるように学習したAI(ニューラルネットワーク)の例。画像をバラバラにして入力層に入れる。各ノードにつながった線の重みの値を掛け算しつつ、出力層まで計算していく。結果の数値を見て、画像の内容を判断する

 ノード1つ1つが計算をしていくと、最終的な出力値が得られる。上図のニューラルネットワークは既に学習済みで、馬の写真なら上の出力は1で下の出力は0に、牛の写真なら上が0で下が1になることを想定していたとしよう。今、新しい馬の画像を読み込ませたとき、上の出力は0.7、下は0.3だった。となれば、これは70%の確率で馬と認識できたと言えそうだ。一方で、精度がまだ足りないので、さらなる学習が必要とも考えられる。

誤差の増減の傾きを調べる「勾配法」

 いよいよここからは、学習の方法を説明しよう。ディープラーニングでは、誤差逆伝播法(ごさぎゃくでんぱほう、バック・プロパゲーション)と呼ばれる手法を使う。誤差逆伝播法では、後ろから前、つまり出力層から入力層に向けて、推論で出た答えと正解との差(誤差)を減らすように、人工ニューロンの重みを調整していく。先ほどの馬の例では、上の出力は本来は1であるべきなのに、0.7だったのだから、誤差は0.3となる。下の出力は0であるはずなのに、0.3だったのだから、誤差は0.3、誤差の合計は0.6だ。これを少なくするために、学習をしていく。

 ここでいう学習とは、単純にいえば、それぞれのノードにつながった線の重みの値を、誤差が最小になるように調整するということだ。ただ、これだけ複雑な仕組みになると、どこの重みをどれだけ変化させればいいのか、単純には分からない。そこで勾配法と呼ばれる手法を使う。

誤差逆伝播法(バック・プロパゲーション)の概念図。出力層から入力層に向けて、重みの値を更新していく
誤差逆伝播法(バック・プロパゲーション)の概念図。出力層から入力層に向けて、重みの値を更新していく

 勾配法では、誤差関数を微分するという方法をとる。ここで少し難しい言葉が2つ出てきた。まずは誤差関数。これは、ニューラルネットワークの中にある重みの値を変えることで、誤差の大きさがどう変わるかを示す式のこと。微分とは、関数の傾きを調べるための数学的手法だ。高校生の時に習ったことを覚えている人も多いだろう。

 誤差関数は、各ノードの重みの値を変数として持つ。とても複雑なものだ。この関数を導き出して、最適な重みを決めることは簡単ではない。そこで、AIの技術者が注目したのが、微分である。

 誤差関数を微分できるということは、現在の状態における、誤差関数の傾きが分かるということ。つまり、誤差を小さくするためには、現在の重みの値から、その値を増やせばいいのか、減らせばいいのかが分かるというわけだ。例えば、右上に傾いているのであれば、重みの値を減らせば誤差を減らす方向に近づくということだ。

誤差関数を微分することで最小化するには、重みの値を増やせばいいのか、減らせばいいのかが分かる。ここでは誤差関数が単純な2次曲線だったと仮定した例を示している
誤差関数を微分することで最小化するには、重みの値を増やせばいいのか、減らせばいいのかが分かる。ここでは誤差関数が単純な2次曲線だったと仮定した例を示している

 高校生の時、2次関数の傾きを微分して調べ、傾きが0になるところで最小値(または最大値)になるという問題を解いたことを思い出す人もいるだろう。

 ただ、ニューラルネットワークの誤差関数の場合は、もっと変数が多く複雑な式なので、2次関数のようにどこで傾きが0になるかは、すぐに算出できない。そこで、ちょっとずつ重みの値を増減させる作業を繰り返すことで、傾きを0に近づけていくという方法をとるのだ。

 改めて、学習のプロセスをおさらいしていこう。出力層に近い方から、ノードにつながったすべての線について、重みの値で微分し、傾きを調べたうえで、重みの値を少しだけ増減させる。入力側に向けて、各ノードで同じ操作を繰り返す。すべて終えたら、また新しい画像を読み直して、誤差を調べ、また出力層側から同じ操作をしていく。何百回も、何千回も繰り返していくことで、徐々に誤差は最小に近づいていくのだ。

 うまく学習を終えると、誤差が少なくなり、新しい馬の絵を読み込んだときでも、上が1で下が0、牛の絵なら上が0で下が1という数値に近い結果を出せるようになる。

このコンテンツ・機能は有料会員限定です。

3
この記事をいいね!する