2016年3月ニューラルネットワークの訓練の問題点:過学習と局所的極小点ニューラルネットワークモデルの訓練(training)では、過学習(over-fitting)が起きたり、局所的な極小点に陥り、性能が高くならないという問題が発生することがあります。過学習は訓練データの数に対してパラメータの数が多い場合や、訓練データに偏りがある場合に起き易い現象です。)ですが、このようにデータ数が少ない場合、各データにほぼ一致する曲線を見出す(パラメータを決定する)ことは難しくありません。図1の数少ないデータが、対象とするデータ全体の分布を代表していいるのであれば、図1の曲線は小さい誤差関数E(前の記事の式(5))を持つ、大域的な最小点に近い、正しい曲線を表していることになります。図1のデータが、対象とするデータ全体の分布を代表しておらず、データ数を増やすと図2のような分布を示すのであれば、図1の曲線は過学習を表していることになり、正しい曲線は図2のようになります(図1のデータは全て図2に含まれています)。パラメータの数が少ない場合には、仮にデータ数が少なくとも、図1に示すような複雑な曲線を出すことは出来ず、単純な曲線になるために、過学習が起きにくいという特徴があります。アナロジーで言えば、図1のデータに対して、パラメータが3つの放物線であれば図2のような曲線が得られますが、パラメータが7個の6次方程式であれば図1のような曲線が得られます。このように過学習が起きやすいかどうかは、訓練データの数や偏り、パラメータの数に依存します。過学習と同様に、ニューラルネットワークの性能が上がらない原因として、局所的な極小点に陥いることが上げられます。到達できないことがよくあります。このような過学習や局所的極小点トラップを防ぐ方法として、次の手段がよく使われます。正則化(regularization)バッチ処理DropoutやDropconnect<正則化>正則化は誤差関数E(前の記事の式(5))に罰則項(penalty)を加えたもので、2次のL2ノルムの場合は下記のように表されます。}\)であり、\(\lambda\)は係数で、\(n\)はデータ数、\(m\)はパラメータ数です。j=1,2,・・・,m\)は2乗で効いてくるので、大きな値を取るとその2乗でエネルギーが増大するため、大きな値とはなりにくくなります。逆に0に近づく力を持ちます。式(1)右辺第1項の二乗誤差にも\(w_j^2\)の項があり、\(w_j\)はある値(仮にpとする)に近づこうとします。0に近づこうとする罰則項とpに近づこうとする2乗誤差との綱引きの割合が係数\(\lambda\)で決められています。そのために、pだけに近づこうとする過学習を防ぐ効果が出るのです。decay)とも呼ばれます。これに対し1次のL1ノルムでは、罰則項として\(w_j\)の絶対値を加えます。(2)\]L2ノルムとの違いは、\(w_j\)が1乗か2乗かだけです。(3)\]これは\(w_j\)パラメータ空間の直線式を表しています。\(a\)は\(w_j\)軸との交点となります。w_2=y\)として、図4の\(a=|x|+|y|\)という直線を考えてみましょう(図4の緑色直線)。a\)がx軸、y軸の交点となります。緑の正方形の辺の上では、全て同じエネルギー値\(a\)を持つことになります。式(2)右辺の第1項の二乗誤差はpという中心点(青点)を持つ円(赤)の半径rの2乗と考えることができます(厳密には楕円だが、簡単のために円とします)。従って、二乗誤差とL1ノルムを加えた合計エネルギーは\(r^2+a\)と解釈することができます。赤い円と緑の正方形は同じ\(x,y\)が満足しなければならないので、円と正方形との交点が求める解となります。合計エネルギー\(r^2+a\)を最小にするのは、図4に示したように、正方形に円が接している場合となります。その場合に円の半径rと正方形の切片\(a\)がともに小さくなるからです。a\)の正方形と中心pの円が接する条件には、2種類あります。(1)中心pが図4の白い背景の上にあり正方形の角に接している場合(2)中心pが図4の薄青色の背景の上にあり正方形の辺に接している場合(p’)ここで、薄青色の背景は正方形の辺の延長線が囲む領域です。y=0\)などを意味しており、パラメータの一方が0になることを示しています。L1ノルムの正則化を行うとパラメータの一部が確率的に0になり易い傾向がでてきます。それ故に、L1ノルムの導入はスパースモデリングと呼ばれます。y=a/2\)などの値を取り得ます。0へのドライビングフォースもありません。このように、L1ノルムによる正則化はパラメータの一部が0になる確率が高くなる、というように解釈すべきだと思います。<バッチ処理、Dropout>過学習や局所的極小点トラップを防ぐため、言い換えると、ニューラルネットワークの性能を向上させるために、バッチ処理やDropoutも利用されます。バッチ処理は、逆伝播法による結合荷重の更新を個々のデータに対して行うのではなく、複数のデータに対して一回行う手法です。これは複数のデータに対する平均的な結合荷重で更新するとも言えます。私のこれまでの実験結果から、バッチ処理はニューラルネットワークの性能向上に効くことが多いと言えます。個々のデータに対して逐一、逆伝播法で結合荷重を更新すると、その変動が大きくなるため、局所的な最小点に捕まり易くなり、大域的な最小点(最適解)に辿り着きにくくなるように思います。これに対し、バッチ処理では、複数個のデータに対する平均的な結合荷重で更新するために、結合荷重の変動が比較的小さく、滑らかに収束する傾向があり、局所的な極小点に捕まりにくいために、性能低下が抑制されると考えられます。データの種類によっては(例えば、ノイズの小さいデータなど)、バッチ処理ではなく、各データで結合荷重を更新した方が更新速度が速く、短時間で収束することもあるので、バッチ処理が常によいとは言えません。そのあたりは、少し注意が必要です。Dropoutはニューラルネットワークのユニットをランダムに排除しながら、結合荷重を更新することで、局所的な極小点のトラップを抑制したり、層数が多くても逆伝播法による結合荷重の更新が入力層付近であっても適切に行われることを狙ったものです。私もDropoutの性能を調べるために、DeepLearningによるMNISTデータの手書き数字認識に適用してみました。Dropoutなしの認識正解率が98.9%でしたが、Dropoutを導入しても、ほとんど性能は向上せず、むしろ0.1~0.3%ほど性能が下がりました。性能が高かったが故に効果がなかったのかもしれません。あれば、Dropoutなどは性能が低いニューラルネットワークに対し、効果があるのかもしれない。このあたりはケースバイケースで、ニューラルネットワークの構成を考えていく必要があるようです。過学習ニューラルネットワークの訓練の問題点:過学習と局所的極小点にコメントニューラルネットワークの誤差逆伝播式(バックプロパゲーション)前の投稿「ニューラルネットワークの基本」に引き続き、バックプロパゲーション(逆伝播)を用いて、重みパラメータとバイアスパラメータを導出する方法について解説します。基本的なニューラルネットワークとして、図1の入力層、隠れ層、出力層で構成された3層構造を考えます(入力層は非線形関数を持たず、ただ入力するだけなので、層としてカウントせず、これを2層構造と言う人もいる)。\(l+1\)個、\(n\)個となります。隠れ層のユニット数は任意に設定することができますが、ここでは\(m+1\)個とします。入力層と隠れ層のユニット数に+1があるのは、バイアスパラメータを意味しています。出力データ\(y_k\)に対応する正解データ\(T_k\)を準備する必要があります。正解データは教師データと呼ばれ、機械学習の結果、出力データを到達させる目標点となります。それでは、ニューラルネットワークのパラメータ(結合荷重)を計算する方法を説明します。入力層に入力されたデータ\(x_i\)と隠れ層への入力値\(a_j\)、出力値\(z_j\)と出力層への入力値\(b_k\)、出力値\(y_k\)の間には、前の投稿の式(3)から、次式が得られます。(4)\end{eqnarray*}\]ここで、\(f()\)、\(g()\)、\(w_{ji}\)、\(w_{kj}\)は隠れ層と出力層の非線形活性化関数と結合荷重(重みパラメータとバイアスパラメータ)を表しています。して、シグモイド関数やハイパボリックタンジェント関数、Softmax関数が用いられるので、文末にそれらの関数と微分形を整理しておきます。入力データと正解データからパラメータを算出する目的は、出力値\(y_k\)を教師データ\(T_k\)に近づけることです。従って、出力値\(y_k\)と教師データ\(T_k\)との乖離を示す二乗誤差Eを最少にする結合荷重\(w_{ji}\)、\(w_{kj}\)を求めます。(5)\]先ず最初に、出力層と隠れ層をつなぐ結合荷重\(w_{kj}\)を、学習率ηを用いて求めます。w_{kj}\)を次式のように設定します。(6)\]式(6)は一見どのように導出されたのか不思議に思われるかもしれないが、これはただ単に荷重結合\(w_{kj}\)が誤差Eに与える影響∂E/∂\(w_{kj}\)に対し、学習率ηで、Eが小さくなる方向に(-符号をつけて)\(w_{kj}\)を更新する、ということを意味しているに過ぎません。rule)により次式のように書くことができます。(7)\]式(7)の各項を見ていきましょう。(10)\]よって、式(8)、(9)、(10)を用いることで、荷重結合の更新量は次式で表されます。(y_k-T_k)g'(b_k)\)と置き換えています。(13)\]となります。出力\(y_k\)が教師データ\(T_k\)に近づくと、式(11)の荷重結合の更新量も小さくなり、収束に向かうことが分かります。w_{ji}\)を式(6)と同様に設定します。Rule)では、連結されている全てのユニットを考慮して、式(14)は次式のように展開します。(16)\end{eqnarray*}\]式(16)の各項を見ていきます。