ニューラルネットワークの仕組み
機械学習もディープラーニングも目指すところは「モデルの予測値と実際の値との誤差をなくす」ことである。具体的には、各層における重みを、関数で調整して誤差関数を微分した値が0になるようにすればいい。
ニューラルネットワークで解こうとする問題は、そもそも入力値が多次元にわたるので、正解を求める(誤差関数を微分した値を0にする)のが困難な場合がほとんどである。最終的には、解を求めるのではなく最適解を探索する方法がとられる。最適解を探索する方法を「勾配降下法」という。勾配(微分値)に沿って降りながら解(傾きが0になる地点)を探す。
勾配降下法には、勾配が0となる点が複数ある時、最適解が見抜けない問題がある。これを防ぐ方法として、探索する勾配の範囲を広げる(学習値の値を大きく設定する)方法がある。但し、最適解を通り過ぎて、さらに探索を続けてしまう問題は起こり得る。
ディープラーニングの前身「多層パーセプトロン」
ニューラルネットワークの計算の際、入力した値を伝播する際に活性化関数を用いる。この時、0から1までの値を連続値で表現するシグモイド関数を使用する。さらに、入力層と出力層の間に層(隠れ層)を追加することで、ネットワーク全体の表現量を増やす試みがされた。これが「多層パーセプトロン」である。
多層パーセプトロンは、より複雑な表現が可能な一方で、単純パーセプトロンのように誤差を直接計算できなかった。そこで、ネットワークで誤差を坂向きに伝播させる「誤差逆伝播法」によって、ネットワークの重みを学習することが可能になった。多層パーセプトロンには、多層にした時に生まれる2つの問題があった。
①勾配消失:誤差が入力層にまで正しく伝播せず消失してしまう。
②過学習:訓練データに過学習してしまい、訓練データ以外に間違った答えを出力してしまう。
ディープラーニングの実現
「勾配消失」と「過学習」の問題は、ヒントン教授が「オートエンコーダー」を利用して「一気に学習するのではなく、少しずつ学習を進めていく」方法を提唱し解決された。オートエンコーダーとは、入力層と出力層が1つになった「可視層」と隠れた層からなる2層構造のネットワークである。可視層に入力された情報は隠れ層、可視層の順に伝わり、出力される。入力の情報が圧縮されたものが隠れ層に反映されていく仕組みである。
このオートエンコーダーを積み重ねる「積層オートエンコーダー」によって、ニューラルネットワークを深くしても入力層に近い層から順に学習が行われる(事前学習)ようになった。さらに積み重ねたオートエンコーダーの後に「ロジスティック回帰層(出力層)」を加えて正解を実現した。最後にディープニューラルネットワーク全体で学習させて、深層でも適切な誤差が逆伝播させた(ファインチューニング)。
ヒントン教授によるブレークスルーの後、活性化関数や学習率の工夫によって、機械学習やディープラーニングの精度は向上した。さらに最大の課題である「過学習」の解決方法として、学習を繰り返すたびに、ランダムにニューロンを選んで除外し、毎回形の異なるネットワークで学習を行えるようにする「ドロップアウト」などが生み出された。
こうして、ニューラルネットワークを多層化できるようになり、その技術がディープラーニングとして実用化されるようになった。ディープラーニングは、「画像認識」「自然言語処理」「音声処理」「ロボティクス強化学習」の領域で応用されている。