目的
この記事では、ニューラルネットワークの学習に関する基本的な概念を処理の流れに沿ってまとめる。
学習アルゴリズムの流れ(まとめ)
ニューラルネットワークの学習とは、訓練データを基に意図した結果となる最適な重みパラメータを判別する処理を指す。
その処理を大きく分類すると、以下の手順(*1)~(*4)の4つに分かれ、これを繰り返すことで限りなく最適な重みパラメータに近づけていく。
その結果、最適な重みパラメータによって、正解率がほぼ100%となる画像認識や膨大なデータに基づく根拠ある推測が実現できるようになる。
-
(*1)訓練データの抽出(ミニバッチの決定)
訓練データの中からランダムに100件程度(ある程度信頼性がある件数)抽出したデータ群をミニバッチといい、以降の(*2)~(*4)では、このミニバッチ単位に損失関数の結果と勾配を求めるアルゴリズムになっている。 -
(*2)損失関数の結果取得
ニューラルネットワークの学習では、損失関数というニューラルネットワークの性能の悪さ表す指標を基準にする。損失関数の有名どころでは2乗和誤差と交差エントロピー誤差があるが、このシリーズでは、交差エントロピー誤差にスポットを当てた実装サンプルを記載している。
※ 参考
-
(*3)勾配の取得
損失関数の結果が最も小さい値となる重みとなるように自己探索(最適な重みパラメータを探す)していくことになる。損失関数の結果は、小さいほど正解に近づいているわけだが、もちろんそこで終わりではなく今の結果より正解に近いパラメータ候補(重み、バイアス)を決めてさらに正解に近づけていく必要がある。
そこで基準になるのが重みパラメータの微分結果(勾配値)。
※ 参考
- Python - AI : 損失関数と数値微分(勾配)の実装サンプル > 損失関数と微分の関係
- Python - AI : 損失関数と数値微分(勾配)の実装サンプル > 微分のおさらい
- Python - AI : 損失関数と数値微分(勾配)の実装サンプル > 数値微分の関数定義(Python実装サンプル)
- Python - AI : 損失関数と数値微分(勾配)の実装サンプル > 数値微分の例(Python実装サンプル)
- Python - AI : 偏微分と勾配の実装サンプル > 偏微分のおさらい
- Python - AI : 偏微分と勾配の実装サンプル > 偏微分のPython実装サンプル
- Python - AI : 偏微分と勾配の実装サンプル > 勾配のPython実装サンプル
-
(*4)重みパラメータの更新
重みパラメータを勾配方向(より損失が少ない重みパラメータへ)へ微小量だけ更新する。※ 参考
勾配法についての補足
上記の勾配に関する記述は、すべて勾配降下法によってパラメータを更新する方法となる。
そしてミニバッチは、ランダム抽出したデータ群であることから確率的勾配降下法といい、ディープラーニングのフレームワークでは、一般的にSGD(stochastic gradient descent)と呼ばれる。
※ 参考
- Python - AI : 勾配降下法の実装サンプル > 勾配法とは
- Python - AI : 勾配降下法の実装サンプル > 勾配降下法のPython実装サンプル
- Python - AI : 勾配降下法の実装サンプル > 勾配降下法の実装サンプル実行例
参考文献
- 斎藤 康毅(2018)『ゼロから作るDeep Learning - Pythonで学ぶディープラーニングの理論と実装』株式会社オライリー・ジャパン