昨日は活性化関数について説明した。
今日は、ニューラルネットワークの学習に関して。
多層ネットワークの関数としての表現
以下では、ニューラルネットワークについて学んでみた。(その1) - いものやま。 で書いた、多層ネットワークについて考えていく。
多層ネットワークの出力 は、引数が入力 で、パラメータ をもった関数とみることが出来るので、次のように書くことが出来る。
すべてのパラメータをベクトル で表すことにすると、次のように書くことも出来る。
多層ネットワークでは、このパラメータ を学習していくことになる。
訓練データと誤差関数
入力 に対する望ましい出力を としたとき、このペア を訓練サンプルと呼ぶ。
また、その集合 を訓練データと呼ぶ。
多層ネットワークでは、入力 に対する出力 と、望ましい出力 との誤差が出来るだけ小さくなるように、パラメータ を更新していく。
誤差を考えるうえで必要となってくるのが、誤差関数。
よく使われるのが、次の二乗和誤差 。
なお、他の誤差関数を使う場合もある。
最急降下法
誤差関数の値を小さくさせる方法として、最急降下法がある。
誤差関数 の勾配 を使って、十分に小さい学習係数 でパラメータ を
と更新する。
学習係数 が十分に小さければ、誤差関数 の値は確実に減少していく。
なお、誤差関数は凸関数になっていないので、必ずしも最適解に収束するとは限らず、局所解に収束する場合もある。
確率的勾配降下法
最急降下法では、勾配 を使ってパラメータ を更新するが、このような方法をバッチ学習と呼ぶ。
(訓練データすべての誤差 に対して、その値が小さくなるように一括で更新を行うから)
一方、個々の訓練サンプルに対する誤差 に対して、それぞれ学習を行っていく方法も考えられる。
この場合、個々のサンプルに対する誤差の勾配 を使って、次のようにパラメータを更新する:
この方法を、確率的勾配降下法と呼ぶ。
確率的勾配降下法では、パラメータを更新するたびに別の訓練サンプルを使っていくことになる。
確率的勾配降下法は、バッチ学習に比べて、以下のようなメリットがある:
- 訓練データに冗長性があっても影響を受けない。
(バッチ学習だと、訓練データが増えれば増えるほど、1回の学習が大変になる) - 局所解にはまってしまう確率が下がる。
(個別の訓練サンプルに対して誤差を改善するので、全体の誤差は一時的に悪くなることもあるけど、その分、探索の範囲は広くなるため) - パラメータの更新が小刻みに行われるので、途中経過を細かく監視できる。
- 学習しながら訓練サンプルの追加などが出来る。
ただし、上にもちょっと書いたとおり、個別の訓練サンプルに対する誤差を改善した結果、全体の誤差が悪くなることもあるので、学習係数を十分に小さくしないと、学習が安定しなくなる危険性もある。
(かといって、小さくしすぎると収束まで時間がかかるのも、難しいところ)
ミニバッチを使った方法
バッチ学習と確率的勾配降下法の中間の方法として、ミニバッチを使った方法がある。
これは、訓練データをミニバッチと呼ばれるある程度のサイズの集合に分けて、ミニバッチごとにパラメータの更新を行う方法。
更新を行うたびに、別のミニバッチを使っていくことになる。
複数の訓練サンプルに対して誤差を小さくしようとするので、確率的勾配降下法よりも学習が安定しやすく、学習係数を確率的勾配降下法よりも大きくしやすい。
一方で、バッチ学習よりも訓練データのサイズは小さくなるので、1回の学習のコストはバッチ学習よりも低くなる。
勾配計算については、また明日。
今日はここまで!
- 作者: 岡谷貴之
- 出版社/メーカー: 講談社
- 発売日: 2015/04/08
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (13件) を見る