こんにちは、Kosei(@kay_diacc2)です!
ニューラルネットワークにおける処理の流れ

はじめに、ニューラルネットワークの学習の仕組みを概念図を解説します。ニューラルネットワークの学習では、まず出力層から得られた出力結果が正解ラベルと比較され、出力結果と正解ラベルの差である誤差を算出します。続いて、各出力結果から得られた誤差の総和(損失関数)を求めます。ニューラルネットワークではこの損失関数を最小化することが学習と位置付けられています。求められた損失関数の値をもとにパラメーター(重みやバイアス等)を更新していき、損失関数小さくしていきます。最後に損失関数が最小となる際のパラメータ値を探索できた時点で学習完了となります。このような学習方法を「誤差逆伝播法」と言います。
本記事では「損失関数を最小化する仕組みとパラメータ探索アルゴリズムの役割」を詳細に解説します。カバーする範囲は下記です。
- 損失関数と勾配降下法
- 学習率
- 局所最適解と大域最適解
- 損失関数を最小化するためのパラメータ探索アルゴリズム
ここでニューラルネットワーク・ディープラーニング全体的な仕組みがどうなっているのか詳しく知りたい方は下記の記事をご覧下さい。
【深層学習】ニューラルネットワークの仕組みとディープラーニングモデル性能最適化のポイント解説
ディープラーニングの実装を検討している方向けです。深層学習モデルを実装するための仕組みとモデルを最適化する手法など重要なポイントを踏襲しています。本記事読了後、モデル改善に向けた適切なアプローチができるようになるでしょう。
損失関数と勾配降下法
ニューラルネットワークモデルを最適化するとは、出力結果と正解ラベルの誤差の総和である「損失関数」を最小化できるようなパラメータ(重みやバイアス等)を探し出すことです。損失関数の値はモデルの出力がどれだけ正解とずれているかを表す指標であり、下記の数式で示されます。

続いて損失関数とパラメーター(重みやバイアス等)という軸でグラフを描いた場合、パラメータ数に応じて下記のように表せます。

ニューラルネットワーク実装においては上図(左)のようにn次元の話になります。今回は理論学習主体の説明とするために、簡略化した上図(右)の2次元グラフを用いて話を進めて参ります。
それでは本題です。「損失関数の最小値はどうやって見つけ出すのでしょうか?」早速仕組みを見ていきましょう!

上図に損失関数を最小化するパラメータ探索プロセスを示します。ここでポイントはニューラルネットワークモデルを最適化する学習初期(図左)では、グラフの全容が分からないということです。つまり、「誤差出力→パラメータ更新」という地道な作業を繰り返していき、損失関数の値が最小となる点を探索していく必要があるわけです。しかしながら、この探索方法だとあまりにも効率が悪く、計算コストが増大します。そこで損失関数の最小値を求める際は、パラメータ、損失関数の値に加えて「損失関数の傾き(勾配)」を用いるよう工夫するのです。傾きが0に近づく方向へ微小移動しながらモデルのパラメータを更新していくことで、損失関数が最小となるパラメータを効率的に見つけ出すことができます。
このように、損失関数の傾き(勾配)を算出し、傾き0=最小値と捉え、傾きが0となる方向へ移動するアルゴリズムを勾配降下法と言います。損失関数を最小化するためのパラメーター探索アルゴリズムとして一番シンプルかつ一般的なものです。
ここまでのまとめ

ここまで損失関数を最小化するパラメータ探索アルゴリズムの仕組みについて言及しました。後述では勾配降下法のようなパラメータ探索アルゴリズムの数学的理論について解説していきます。
学習率
損失関数が最小となるパラメータ(重み、バイアス等)を探索するアルゴリズムとして勾配降下法を言及しました。ここでは勾配降下法の数式を理解していきましょう。

上記数式を見ると、新しい概念として「学習率(学習係数)」が含まれていますね。学習率とはどれだけの大きさでパラメータxを移動させるかの割合を表しています。イメージとして下記グラフを見てみましょう。

学習率の違いよるパラメータの移動イメージは上図になります。この学習率の設定はニューラルネットワーク最適化問題を解く上で非常に重要です。学習率の大小の違いが、パラメータ探索に与える影響を下記に示します(下記表の文言として、損失関数の最小値は最適解と言い換えています)。
学習率 | 利点 | 欠点 |
---|---|---|
大きい | 移動量が大きいため、少ない計算量で早く最適解に到達する可能性が高い | パラメータxが最適解付近で発散して最適解に辿り着けない可能性がある |
小さい | 移動量が小さいため、精度の高い最適解を得る可能性が高い | ・計算量が大きくなる ・局所問題に陥る可能性あり(詳細は後述) |
ニューラルネットワークを実装する際は、分析者自身が学習率を設定します。ハイパーパラメータによる自動探索を用いて最適な学習率を推定し、その値を設定することが多いです。
局所解問題(局所最適解と大域最適解)

勾配降下法を利用することで全体的な関数の形が分からなくても、最小値が求められそうなことが分かりました。しかし、全ての状況で必ず損失関数の最小値に辿り着けるかというと、そう簡単ではありません。例として上図に示すような複数の山や谷がある関数を考えてみます。
損失関数が上図の形状をしていた場合、勾配降下法で計算を開始するスタート地点によっては最小値(大域最適解)にたどり着けないリスクがあります。例えば、○から計算を開始した場合、大域最適解に辿り着ける可能性が高くなります。一方で○から計算を開始した場合、局所最適解を最小値を見なしてしまう可能性が高くなります。これは勾配降下法が損失関数の傾き0=最小値と捉え、傾きが0となる方向にパラメータを更新するアルゴリズムだったため、このような現象が起こりうるのです。

局所最適解に収束しないようにする方法の1つに、前述した「学習率の大きさ」があります。学習率が大きいと、局所最適解の谷を超えて大域最適解に辿り着く可能性が高くなります。一方で学習率が高すぎると大域最適解付近に移動しても、大域最適解に収束できない可能性も高くなります。ニューラルネットワーク最適化の観点では、大域最適解に必ず収束するのは非現実的です。そのため、損失関数が小さければその点のパラメータ値で妥協し、モデル作成するのが現実的になっています。
損失関数を最小化するパラメータ探索アルゴリズムの種類と特徴
局所解問題を解決する手段の1つは「学習率を変化させること」と前述しました。その他の解決手段として「パラメータ探索アルゴリズム(Optimizer)自体を変更すること」があります。勾配降下法を改良したアルゴリズムがいくつか提唱されており、以下それぞれの特徴をご紹介します。
確率的勾配降下法(SGD)
- 勾配計算で確率分布を加味した手法。
- 学習データの順番を入れ替えつつランダムに勾配降下法を適用することで、局所最適解に収束しづらくなる。
- 局所最適解を複数有する複雑な関数には適用が難しい。
Momentum SGD
- 確率的勾配降下法(SGD)に慣性の概念付与したアルゴリズム。
- 勾配を降りる方向に対して移動量が大きくなる。そのため早く収束する可能性が高い。
RMSprop
- 過去に計算した勾配の総和に基づき学習率を自動で調整できるアルゴリズム。
- 厳密には勾配の総和を指数移動平均で計算しており、直近の勾配情報を加味して学習率が調整される。
- Adagradという最適化アルゴリズムの改良版と言われている。
Adam
- RMSpropとMomentum SGDを改良したようなアルゴリズム。
- 近年のパラメータ探索アルゴリズムの中で最も評価が高い。
AI・機械学習まとめ
最後までご覧いただきありがとうございました。当サイトでは機械学習・深層学習における理論やPythonを用いた実装方法の解説記事を多数取り扱っております。
【AI・機械学習・ディープラーニング】記事一覧
AI・機械学習・深層学習における理論からPythonを用いた実装に至るまで幅広く解説しています。
【初学者向け】データサイエンス・人工知能(AI)開発のおすすめ学習方法も解説してます。
【初心者向け】Pythonで人工知能(AI)開発を独学!|機械学習プログラミングスキルを身に着けるおすすめ学習方法
近年人気プログラミング言語ランキングで常に上位をキープする「Python」について、その理由の1つに「人工知能開発ができること」が挙げられます。本記事では「Pythonプログラミングを通じてAI開発を行うためのおすすめ独学方法」を徹底解説します。
ディープラーニングを学ぶ上でおすすめの教材はこちらで紹介しています。
【Python・深層学習入門】おすすめの本・動画教材7選
「人工知能(AI)開発に興味があり、Pythonを用いてできるようになりたい」「ディープラーニング(深層学習)プログラミングスキル習得に向けた、おすすめ学習教材を知りたい」このような要望にお応えします。
最後に

お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら