工学系大学院生のブログ

2人の大学院生による雑記ブログ

第1-2回 数学から見るニューラルネットワーク [python]




 前回は,ニューラルネットワークにおける入出力を整理しました.


 今回は,誤差関数について紹介します.


 ニューラルネットワーク全体の内容としては,出力が「 0 か 1 」という分類について掘り下げていきます.



1 誤差関数


 機械学習を行う上では,学習データが必要となります.具体的には、入力 \(\textbf{x}\) に対して正しい出力 \(\textbf{d}\) というデータが必要です.

 このデータを用いて、重み \(\textbf{w}\) を調整し、すべての学習データ \(\textbf{x}_n\) に対して、ニューラルネットワークの出力 \(\textbf{z}\) が正しい答え \(\textbf{d}\) に近づくようにします. このとき、出力と正しい答えのずれ具合を損失といいます.


 この損失を最小化することを考えます.



 今回は複数の入力に対し、「 0 か 1 」を返す関数を作ります. 今後,複数の答えを返すように拡張することを踏まえて,活性化関数としてソフトマックス関数を使用します.



 出力層 \(l=L\) における \(k\) 番目のユニットは次のように定義されます.


\begin{align}
z_k = \frac{u_{k}^{L}}{\sum_{j=1}^{n} u_{j}^{L}}
\end{align}

 このソフトマックス関数は値域 \((0,1)\) であり、各ユニットの出力の総和は1となります.つまり、「ユニット1は0になる確率、ユニット2は1になる確率を返す」という出力を作ることができます.


 これらを用いて、尤度を考えます.


 尤度とは、実際の答えとどれだけ近いか測る指標となります.

 
 今回は分類を行いますが,回帰などでは点との距離を使用します.有名な最小二乗法と同じです.

\begin{align}
p(d) = \sum_{k=1}^{K} ||d_k – z_{k}||
\end{align}

 

 今回行う分類では、次のようになります.

\begin{align}
p(d) = \Pi_{k=1}^{K} z_{k}^{d_k}
\end{align}

 
 改めて確認ですが,\(z_k\)は予測によってもとめられた出力であり、\(d_{k}\)はその予測の正解結果になります.その事象\(k\)が起こる場合\(d_{k}=1\)、起こらない場合\(d_{k}=0\)となります.



 ややこしいので,具体例を示します.


 \(z_{0}\) は 0 がでる確率で、\(z_{1}\) は 1 がでる確率でとします.

\begin{align}
p(d) = z_{0}^{d_0} z_{1}^{d_1}
\end{align}

 ある入力に対し、0がでた場合は \((d_0, d_1) = (1, 0)\) となります.

 そして、理想的には出力も同様の値になってほしいので \((z_0, z_1) = (1, 0)\) のようになってほしいです.



 このとき、尤度は \(1^1 \times 0^0 = 1\) になります.

\begin{align}
(d_0, d_1) = \left\{
\begin{array}{l}
(1, 0) \ ; \ 0がでるのとき \\
(0, 1) \ ; \ 1がでるのとき
\end{array} \right.
\end{align}



 一方、理想と逆の結果になった場合を考えます.ある入力に対し、0がでた場合は \((d_0, d_1) = (1, 0)\) となり、出力は真逆 \((z_0, z_1) = (0, 1)\) となったとします.


 このとき、尤度は \(0^1 \times 1^0 = 0\) となります.


 つまり、「尤度が最大のとき」が理想的な予測ができているといえます.


 上述したものは、一つの学習データに対する尤度であり、\(N\) 個の学習データ \((x_n, d_n)\) に対する重み \(\textbf{w}\) の尤度は、各尤度の積で書けます.

\begin{align}
L(\textbf{w}) = \Pi_{n=1}^{N} \Pi_{k=1}^{K} z_{k}^{d_{n k}}
\end{align}


 この尤度の最大化を考える代わりに、マイナスをつけて最小化を考えます.加えて,計算を簡単に行えるように対数を取ります.

\begin{align}
E(\textbf{w}) = – \sum_{n=1}^{N} \sum_{k=1}^{K} d_{n k} log z_{k}
\end{align}

これを誤差関数 \(E(\textbf{w})\) と呼びます.

 

 確認ですが、ここで \(d_{n k}\) は過去のデータの正答のため与えられており、\(z_{k}\) はニューラルネットワークで計算してでた出力になります.




 次回はこの誤差関数を最小化していきます.


hide

このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

トラックバックURL: https://teru-hide.com/neural-network-error-function/trackback/
にほんブログ村 英語ブログへ
にほんブログ村