前回まで、「ディープラーニング特徴と歴史」、またディープラーニングの特徴である「多層パーセプトロン」の解説をしてきました。
今回は、「確率的最急降下法」について学習します。
確率的最急降下法は、訓練データを入力したデータと正解が与えられた際に多層パーセプトロンに入力値と出力値がなるべく近づくように重み調整する手法です。
ディープラーニングのモデルの精度は、学習によって高めていきます。
このブログは、底辺フリーランサーがG検定を取得して人生を変えていこうとする日記です。
目次
確率的勾配降下法(SGD)
ニューラルネットワークでは、勾配降下法(SD)の中の確率的勾配降下法(SGD)がよく利用されます。
そのため、上位の概念である勾配降下法(GD)から解説していくことにしましょう。
ニューラルネットワークのモデルの精度を上げるためには、以下の学習をくり返していきます。
学習の手順を解説したあとに誤差を小さくする勾配降下法の紹介をします。
ニューラルネットワークの学習手順
- 重みとバイアスの初期化
- データをニューラルネットワークに入力して結果を出力
- 誤差関数によって、ニューラルネットワークの出力と正解ラベルの誤差を計算
- 誤差をより小さくするように勾配降下法によって重みとバイアスを更新
- 再度、データをニューラル根とワークに入力して結果を出力する部分からくり返して最適解まで収束させる
勾配降下法(GD)
「勾配降下法(GD)」は、ニューラルネットワークの目的である誤差関数の出力をできるだけ小さくする「重み」や「バイアス」などのパラメータを見つけるための方法です。
勾配降下法による最適解の見つけ方は、重みを更新していくことです。
この勾配降下法は、計算式で表現できます。
勾配降下法の計算式は以下の通りです。
w(t+1)=w(t)-∊∇E
※∈はwの更新の量を決める数であり、「学習率」と呼びます。
重みの更新を繰り返し行うと、最適解に近づきます。
傾きが負の場合は重みを増加させて、傾きが正の場合は重みを減少させます。
勾配降下法は、1回の重みの更新ですべてのデータを利用するためにバッチ学習と呼ばれます。
学習率の大きさ
「学習率」の大きさは、重みの更新方法に影響します。
学習率が大きい:収束が早く学習時間が短くなるが、最終的な誤差は大きくなる傾向にある。
学習率が小さい:収束が遅く学習時間が長くなるが、最終的な誤差が小さくなる傾向にある。
確率的勾配降下法(SGD)
ニューラルネットワークでは、勾配降下法の中の確率的勾配降下法(SGD)がよく利用されます。
確率的勾配降下法(SGD)は、オンライン学習やミニバッチ学習を用いた勾配降下法のことです。
バッチ学習:1回の重みの更新で全てのデータを利用する方法
オンライン学習:ランダムに抽出した1つのサンプルだけを使用してパラメータを更新する方法
ミニバッチ学習:一定数のサンプルをランダムに抽出し、利用してパラメータを更新する方法
過学習を防ぐ方法
ニューラルネットワークには、「過学習」をおこしやすいという弱点が存在します。
この「過学習」を防ぐために色々な方法が提案されています。
ここからは、過学習を防ぐための方法を学習していきます。
主な方法は以下の通りです。
- ドロップアウト
- 正則化
- バッチ正規化
- データ拡張
- 初期停止
ここからは、それぞれの方法を詳しく解説していきましょう。
ドロップアウト
ドロップアウトは、学習する際に層の中のノードのうちのいくつかを無効にして学習することです。
次の更新では別のノードを無効にして学習をおこなうことをくり返します。
正則化
正則化は、誤差関数に正則化項を加えることによって過学習を防ぐ手法。
正則化をすると、重みが減衰しやすいことから「荷重減衰」と呼ばれます。
正則化項として重みのL1ノルムを用いる場合は「L1正則化」、L2ノルムを用いる場合は「L2正則化」と言います。
L1正則化をおこなうと重要ではない重みが0になりやすい傾向があります。
Lasso回帰:L1正則化を回帰に利用した場合
Ridge回帰:L2正則化を回帰に利用した場合
バッチ正規化
バッチ正則化は、ニューラルネットワーク内のユニットの出力値を正規化する方法。
この方法により、入力の分布が学習途中で大きく変わってしまう「内部共変量シフト」を防ぐことが可能になります。
データ拡張
データ拡張は、手持ちのデータに加工をして量を水増しすることです。
サイズや向きを帰ることで少ないデータからでも大量に拡張してデータの母数を増やせます。
初期停止
初期停止とは、パラメータの更新によってテスト誤差が大きくなるような状況になると、その時点で学習を終了することです。
学習の方法
ニューラルネットワークには、機械学習でも使用されている学習方法がいくつも利用されています。
学習の手法を選択することによって、モデルも最適化可能です。
ここからは、ニューラルネットワークで使用される学習の方法を見ていきます。
主な学習の方法は以下の通りです。
- データの正規化
- 学習率の決め方
- ハイパーパラメータの決め方
- 重み付けの初期化
それぞれの方法について詳しく紹介していきます。
データの正規化
データの正規化は、訓練データの偏りを含んでいるときに偏りがなくなるように訓練データを変換する前処理を行うことです。
基本的な方法としては、成分ごとに平均と分散を揃える事です。
学習率の決め方
先ほども解説した通り、学習率の大きさは勾配降下法において大事な要素です。
学習率が小さいと収束が遅くなり、学習に時間がかかったり、局所最適解へと収束してしまったりします。
その解決策として、学習率を決めるために、「AdaGrad」「RMSprop」「AdaDelta」「モメンタム」「Adam」などがあります。
AdaGrad:学習が進むと同時に学習率も小さくする手法
RMSprop:AdaGradの手法を用いた時に、急激に学習率が低下する事を解決するための手法。勾配の2乗の指数移動を取るように変更される。
AdaDelta:AdaGradの発展形であり、過去全ての勾配の2乗を蓄積しておくのではなく、過去の勾配を蓄積する範囲を制限する。
モメンタム:運動量(モメンタム)という物理量を用いて重みの更新量を測り、重みの更新をおこなう。
Adam:過去の勾配の2乗の指数移動平均を用いて、勾配の平均と分散を推定する
ハイパーパラメータの決め方
ニューラルネットワークは、学習率や正則化係数などのハイパーパラメータが、モデルの精度に影響を与えます。
ハイパーパラメータのチューニング方法には、「グリッドサーチ」や「ベイズ最適化」があります。
グリッドサーチ:設定した範囲ですべての組み合わせを試してみる方法
ベイズ最適化:比較的少ない試行回数でより優れたハイパーパラメータを選べる
重み付けの初期化
学習を始める前に、重みを初期化する必要があります。
一般的な方法としては、ガウス分布からランダムに値を抽出します。
また、直前の層のノード数がnの場合、初期値として1/√nを標準偏差とした分布を使うXavierの初期値があります。
今回のテスト結果
今回のテスト結果は以下の記事を参考にしてください。
G検定のテストまであと2週間を切りました。
まだまだ、学習は続きます。
これまでに勉強してきた日記は以下を参考にしてください。