ディープラーニングの概要と学習の仕組みについて。
目次
AI・ディープラーニングの全体像
- 人工知能
- 機械学習
- ディープラーニングの基本・応用
- ディープラーニングの研究
- AIプロジェクト
- AI社会実装に伴う法律・倫理
ニューラルネットワークの技術的課題と対策②
ニューラルネットワークの技術的課題
- 単純パーセプトロンでは線形分離可能な問題しか学習できず、非線形問題を解くためには多層化する必要がある
- 多層化した場合、モデルの最適化問題が複雑になり、技術的課題が生じる
- ニューラルネットワークをディープにするためには課題を乗り越える必要がある
勾配消失問題 | ネットワークが深くなるにつれ、重みの更新に必要な情報がうまく伝播できなくなる問題 (誤差逆伝播の仕組みに起因) |
---|---|
局所最適化問題 | 勾配降下法を用いた最適化において、局所最適解に陥ってしまう問題 |
局所最適化問題
概要
- 「局所最適化問題」→「大域最適解(真の最小点)」ではなく、「局所最適解(特定の範囲での極小点)」に騙されてしまい学習が収束できない状態
- 「プラトー」→勾配がゼロに近い平坦領域で学習が停滞してしまう状態
以下2つの工夫により、解消していく。
- 「学習データの渡し方」を工夫する
- 「学習率の設定」を工夫
「学習データの渡し方」の工夫
- 「確率的勾配降下法(SGD;Stochastic Gradient Descent)」がよく使われる
- 勾配降下法の一種
- 「ミニバッチ学習」→一気にすべてのデータを学習に使うのではなく、データを「ミニバッチ」と呼ばれるグループに分けて、そのミニバッチごとに損失関数を計算し、少しずつパラメータを更新していく
※1つのミニバッチ内のデータ件数・モデルに一度に入力するデータ量を「バッチサイズ」と呼び、ハイパーパラメータのひとつ
勾配降下法のそれぞれの学習方法
オンライン学習 | ・毎回データサンプルを1つずつ入力してパラメータを更新する ・利点:局所解に陥りにくい ・欠点:1つ1つなので、外れ値に敏感に反応しやすく、学習が不安定になりやすい |
---|---|
ミニバッチ学習 | ・毎回一部サンプルからなるミニバッチを取り出しパラメータを更新する ・一度に使うデータ数が少なく、傾きが0に近い場合も、学習が停滞しづらい ・一定数を同時処理するため、計算時間の面からも有利 ・バランスが取れている |
バッチ学習(最急降下法) | ・すべての学習データをいっぺんに用いる ・利点:全データを一気に使うため、学習の結果が安定しやすい ・欠点:新しく学習データを追加するたびに全データで再計算するため、計算コストが高い ※データ総数が少なければ比較的使いやすい |
「学習率の設定」の工夫
- 「学習率(Learning Rate)」→重みを更新する歩幅
- 損失関数の勾配に沿って、一度でどれだけ降りるかを表す
- モデルの学習の進行を制御する重要なハイパーパラメータ
- 学習率の設定値が大きすぎた場合、学習は早く進む一方、大域最適解を通り越してしまって損失関数が最小値となる点に収束しにくくなってしまう(精度が低い)
- 学習率の設定値が小さすぎた場合、いつまでも収束しない
- 学習率の調整→最初は学習率を高く設定、重みの更新を大胆に行いつつ局所最適解を通り抜けて、後半に学習率を下げて重みを微調整する
確率的勾配降下法 (SGD;Stochastic Gradient Descent) | ・一定の学習率で勾配の方向に進む |
---|---|
AdaGrad | ・学習が進行するに従って、パラメータごとに自動的に学習率を調整する |
RMSprop | ・AdaGradの改良版 ・最近のパラメータの更新の影響を大きくし、学習率を急激に下げないよう勾配の二乗の指数移動平均を計算に用いる |
Adam | ・RMSpropとMomentumのよいところの組み合わせで、過去の勾配の二乗の指数移動平均を用いて勾配の平均と分散を推定 ・学習の収束が早く、性能のよさからよく利用される |
AdaDelta | ・AdaGradの改良版 ・使用する過去の勾配情報の範囲を制限する |
Momentum | ・勾配降下法に慣性という物理学の概念を加え、重みの更新料を決める |
エポック数と早期終了
- パラメータの最適解に落ち着くまで、同じデータを何回も学習に使用する必要がある
- 「エポック」→1件のデータが、繰り返し学習に使われる回数
- エポックの数を、「多すぎず、少なすぎない数」に指定することが重要になる
- 過学習することなく、高い汎化性能を実現するパラメータ群を見つける必要がある
- 予測精度が、訓練精度に漸近して落ち着くようなエポックまで学習を進めることが理想
- エポックが少なすぎると学習不足、多すぎるとやりすぎて過学習になる
- 「早期終了(Early Stopping)」→これ以上に精度の向上が見込めない場合、早期に学習を打ち切る
- 「訓練データ」を、「訓練そのものに使うデータ」と「検証データ」に分割する
- 学習の途中で検証データの誤差が訓練データの誤差に比べて明らかに増加した場合、過学習の可能性を示している
- 検証データに対する誤差が最小となったエポックでのパラメータ設定値を保存し、モデルに反映する
- 何エポック目まで学習を続けるのか(学習を打ち切るタイミングの判断)をアルゴリズムに任せる
- 早期終了の機能は、ディープラーニングを実装するためのライブラリに含まれている