マサムネの部屋

ニューラルネットワークの概要

理論的な話は置いておいて、どんな事が出来るのかを淡々と綴っていくシリーズです。
ニューラルネットワークについては、理論的な記事は少ないですが、実装してみた系の記事があります。

ベイズニューラルネットワーク
Pythonによるニューラルネットワークの実装①
Pythonによるニューラルネットワークの実装➁
Pythonによるニューラルネットワークの実装➂
また、ニューラルネットワークは機械学習の基本的な手法なので、一度は手動で実装してみると良いかもしれません。参考書籍は以下のものがおすすめです。

https://amzn.to/349O8Tb
スポンサーリンク

ニューラルネットワークとは

ニューラルネットワークとは、機械学習の手法の一つです。色々な種類があり、回帰も分類もこなす事が出来ます。以下に示すような絵でモデルが示される事が多いです。

ニューラルネットワーの模式図

まずは、図について説明します。
丸印一つ一つのことをセルと呼び、データの特徴量や数字が対応します。丸印の縦の並びの事を層(layer)1 と言います。一番左側の層は入力層と呼ばれ、一番右側の層は出力層と呼ばれます。それ以外の層は隠れ層2 と呼ばれます。また、計算は図の左から右のセルに向かって行われ、左から右に向かうのと、行列をかけて、定数ベクトルを足す演算が対応します。上の例では、一つのデータの持つ特徴量は3で、入力層から隠れ層に向かう事と4×3 行列をかけ、4次元ベクトルを足す事が対応します。
隠れ層から出ていくデータには、活性化関数と呼ばれる関数を作用させます。主に使われるのはrelu と呼ばれる関数です。数式で層から層への移り変わりを書いておきます。
層i にあるデータ(ベクトル)をxとし、層i+1に移る際の行列をAとし、層i+1 にあるセルの個数次元のベクトルをbとします。また、層iにおける活性化関数をfと置きます。こうした時、層iから層i+1へのデータの遷移は以下のように書けます。
\begin{eqnarray}
A(f(x))+b
\end{eqnarray}
ニューラルネットワークは、この操作が入力層から出力層まで繰り返されるモデルが最も基本的なものです。学習するべきパラメーターは、厳密には層の数、それぞれのセルの数、活性化関数の種類、層の間を移動する際の行列の成分とベクトルの成分ですが、層の数やセルの数は無限に組み合わせがあるので、学習の様子を見て、大体で決める事が多いかもしれません。
行列の成分とベクトルの成分は、数学の力を使って良い感じにパラメーターを求める事が出来ます。

ニューラルネットワークの精度の指標

ニューラルネットワークの精度の指標は、回帰分析やロジスティック回帰の指標と同じです。平均二乗誤差や、クロスエントロピーが使われます。これらの指標を最小化するように、行列の成分とベクトルの成分が求められます。

ニューラルネットワークの注意点

ニューラルネットワークを使うと大体のデータはほぼ完ぺきに再現出来るようになりますが、それは学習に使ったデータを再現できると言うだけで、未知のデータの予測が上手くいくことを意味しません。
学習に使ったデータだけを再現出来るようになる事を、過学習と言います。
学習に使ったデータの損失関数の値>>バリデーションデータの損失関数の値
となっている時は、過学習を疑います。
過学習を防ぐために、色々な方策があります。34

  1. sheafではないです
  2. 隠れ層はいくつもあるのが普通で、それぞれの層の数が違う事もあります。
  3. drop out とかbatch normalization と検索してみてください。
  4. ベイズ風のニューラルネットワークを使うと、そもそも過学習しないとかあるので、興味が有ったら調べてみてください。