『ゼロから作るDeep Learning』
ディープラーニングが人気を博しているこの現代、ディープラーニングを一通り語れるようになっておきたいものである。今回は、斎藤康毅『ゼロから作るDeep Learning』(オライリー・ジャパン、2016年)を参考にディープラーニングについてまとめる。
ディープラーニングとは
ディープラーニングはニューラルネットと呼ばれるネットワークの層を深くした(deepにした)ものである。
問題データと正解データをニューラルネットに与え「学習」をさせると、問題データから正解を導く方法をニューラルネット自身が自力で見つける。そして、学習済みのニューラルネットに新規の問題を与えると、答えを「推論」してくれる。
たとえば、手書き数字の画像の問題データとそれが何の数字であるかの正解データを用意して学習させることで、手書き数字が何の数字かを推論するニューラルネットが作れる。
要するにニューラルネットやディープラーニングというのは、試験前の学生に過去問と答えを与えて徹夜で学習させると、翌朝には問題を解ける学生が生まれているのと同じである。
ニューロン
ニューラルネットはニューロンと呼ばれる単位を何層か積み重ねたものである。ニューロンはいくつかの入力値を受け取り、内部で計算を行い、一つの出力値を生成する。ニューロンの出力値は、次の層のニューロンに対する入力値として利用される。このように入力を受け取り出力を行うニューロンが何層も積み重なることでニューラルネットワークは構成される。
1つのニューロンは、図のように機能する。中間層と書かれた円が1つのニューロンである。たとえば、ニューロンは入力層から2つの入力値を得る。各入力値に3.4と2.5という重みをそれぞれ掛け合わせ、これらと9.0というバイアスをすべて足し合わせる。そしてこの和を活性化関数と呼ばれる関数に与え、その出力値をニューロン全体の出力値とする。
1つのニューロンは重みとバイアスを持つがこれらはいずれもパラメータである。ニューラルネット中の各ニューロンは重みとバイアスというパラメータを持つ。「学習」とは、パラメータ一つ一つの微調整を繰り返し、ニューラルネットの最終的な出力結果と正解データの一致度を高める過程である。
学習を終えたパラメータを用いて、新規問題データに対して「推論」を行うことができる。
詳しく
ディープラーニングを実際に行う場合は、PythonのPyTorchを始めとする機械学習ライブラリを用いることが多い。
ニューラルネットは入力層と何層かの中間層(隠れ層)と出力層からなる。各層は何十個かのニューロンを一列に並べた構成である。各ニューロンが受け取った入力と重み、バイアス、活性化関数を用いて、出力を求める。活性化関数として用いられているのは、シグモイド関数、ReLU関数を始めとする非線形関数である。出力層で出力を決定する際に使われるのは、分類問題の場合、主にソフトマックス関数であり、回帰問題の場合は主に恒等関数である。
学習を始める前に、パラメータの初期値をランダムに決定する。そして、そのパラメータを用いて推論を行い、出力結果と正解データを比較する。比較の際に、出力結果がどれくらい正解データとずれているかを評価する関数が損失関数である。損失関数には、交差エントロピー誤差や二乗和誤差がある。損失関数の値が小さくなることを目標に学習を行えばよい。
パラメータをどのように変更すれば損失関数の値が小さくなるかを知るために、損失関数の勾配を求める。
パラメータ全体は、パラメータの数だけ次元をもつ多次元空間を構成していると捉えられる。ある特定のパラメータのセットは多次元空間上の一点とみなせる。そして、多次元空間上の一点一点に対して損失関数を計算することができる。損失関数の値が小さくなる方向を示すのが、損失関数の勾配である。
勾配の方向を参考に、パラメータの更新を次々に行っていく。この過程が「学習」と呼ばれる。
勾配を計算するための優れたアルゴリズムが誤差逆伝播法である。このやり方は、微分の連鎖律(チェーン・ルール)を用いた原理で勾配を計算する。
学習の際のテクニックとして、パラメータの更新に一手間を加えるやり方がある。それがSGD、Momentum、AdaGrad、Adamである。
画像を扱うときは畳み込みニューラルネット(CNN)を用いるのがよい。CNNは畳み込みと呼ばれる操作を行うニューラルネットである。
まとめ
ニューラルネットは、入力層、何層かの中間層、出力層からなる。各層の構成単位はニューロンと呼ばれる。各ニューロンは重みとバイアスというパラメータをもつ。これを最適化する過程が「学習」である。学習済みのニューラルネットを用いて新規の問題に対して答えを出すことを「推論」という。
学習の際の目標は損失関数を小さくすることである。損失関数を小さくするパラメータ更新方法を見つけるために、誤差逆伝播法を行い勾配を求める。