💡

ニューラルネットワークの学習の全体像

に公開

この記事は、ニューラルネットワークについて学んでいる方に向けて私が執筆した記事群をまとめて紹介する記事になっています。この記事ではニューラルネットワークにおける「学習」がどのようにされているのかをざっと解説しています。

ニューラルネットワークの学習とは?

ニューラルネットワークの記事で扱ったように、重みとバイアスの値は更新可能なものです。「重みとバイアスの値を与えられたデータに対して適合するように値を更新していくこと」を 学習 と呼びます。ここから先の記事ではニューラルネットワークの学習の仕方を、フローチャートの図を基にして詳細に解説をします。この記事では、まだ解説していない専門用語がいろいろ出てくるので、完全に理解するのは難しいと思います。ニューラルネットワークの学習はこう進むんだなと軽く分かればOKです!

ニューラルネットワークのモデル化

この記事では、ニューラルネットワークの全体像は下のフローチャートのようにモデル化します。

フローチャートのそれぞれのパーツの役割について軽く説明します。

それぞれのプロセスの簡単な説明

➀重みパラメータの初期値を決める

これはニューラルネットワークの学習を始めるにあたって仮の重みパラメータを決める段階です。この段階は、一見するとあまり重要そうではありませんが、この段階で値の設定をしくじってしまうと最悪、学習全体が失敗に終わります。学習を実行するのに際して採用する初期値は、ニューラルネットワーク内部で使用されている活性化関数に対応して変わります。

➁データを訓練データ、検証データ、テストデータに分割する

これは入力されたデータに対してまず一番最初にする加工です。それぞれの区分のデータは、別の役割を果たしているものなので、この全体の学習工程を通してこれらのデータが混ざり合うことはありません。

➂訓練データ全体をシャッフルする。

この工程は、データの学習をしているときに、投入した順序まで学習してしまうことを防ぐために行います。

➃訓練データの中から、ランダムに決められた数だけのデータを抽出する。

これは一回の学習で使われるデータの数及び学習のループの回数を決定する大切なパートです。一回のループの中で使われるデータが少なくなると全てのデータを丁寧に学習できる反面、データの外れ値の影響に翻弄されがちになります。また、コンピュータのデータの使用量と学習にかかる時間を左右するのもこの段階にあたります。一回の学習に使用されるデータの数を調整することで、学習の精度が高いまま処理にかかる時間を削減することができます。

➄データを整形する

この段階では、学習をすることに決まったデータを整形することで学習をスムーズに進められるようにするのと同時に、ニューラルネットワークの学習を阻む様々な要因を排除します。

➅損失関数を表したグラフ上の、与えられた一点の重みパラメータの勾配を求める。

このフェーズでは、➃で最適なパラメータを定める事前準備として、「グラフがどちらに向かって最も急に傾いているか」「どの程度傾いているか」を計算します。一般に、微分の値をコンピュータで計算するときには数値微分と解析微分という二つの方法が用いられます。深層学習においては、解析微分の中の誤差逆伝播法と呼ばれる特有の手法が使われることが多いです。

➆重みパラメータを、➅を使って算出された値を参考にして更新する

➆で触れた損失関数は、実際のデータからのずれを表すものなので、これは小さい値を取れば取るほど実際のデータと近いということになります。損失関数がより小さくなるようにする方法の1つとして、関数の値が減少する方向に値を更新する 勾配降下法 があります。深層学習の学習は、勾配降下法を用いて損失関数の最小値の方向に向かって徐々に値を更新していくことでなされるものです。重みパラメータの更新の方向と大きさを決めるモデルには、SGD(確率的勾配降下法), Momentum, Adamなどがあります。

この先の記事の全貌

この後の記事は深層学習の全体をモデル化した図の中の詳細を深掘る形式で進めていきます。下の図はこの後に続く記事の見取り図です。

また、対応するそれぞれの記事には下のトグルを開いて見たい記事をクリックすることで飛ぶことができます。

記事一覧

ニューラルネットワークの学習の全体像
https://zenn.dev/logeeeeee/articles/a3119f68fa261c

A.訓練データとテストデータ、過学習
https://zenn.dev/logeeeeee/articles/78d1a686f4397d

B.ミニバッチ学習
https://zenn.dev/logeeeeee/articles/ca5c607197d183

C.誤差逆伝播法
https://zenn.dev/logeeeeee/articles/a5aa7a7a0b6c5f

D.損失関数と勾配降下法
https://zenn.dev/logeeeeee/articles/b972b5bb03c173

E.勾配消失問題
https://zenn.dev/logeeeeee/articles/6d8784473faaf2

F.パラメータの更新
https://zenn.dev/logeeeeee/articles/e89c1cc09008ed

G.学習アルゴリズムの工夫
https://zenn.dev/logeeeeee/articles/b7a4798fac2a2b

最後に

この記事では深層学習の学習を実行する行程を大雑把にさらいました。この記事の冒頭でも書いたこととはなりますが、この記事の内容を初めて読んで理解するのは難しいと思うので、なんとなくこんなものがあるんだな程度の理解で大丈夫です。本来であればもっと文字を割いて説明すべきところが、全体像の説明をすることを優先してかなり省かれています。

この記事を読んで深層学習に興味を持っていただけたら、是非この記事から他の記事に飛んでみて下さい!

最後までご覧いただきありがとうございました!

Discussion