[ディープラーニング] 2クラス分類問題

About

2クラス分類問題 (classification problem) とは、与えられたデータが2つのクラスのどちらに属するかを判別する問題です。

キーワード

  • 訓練データ (training data)
  • テストデータ (test data)
  • 誤差関数 (error function) /損失関数 (loss function)

訓練データ

訓練データとして、入力 \({\mathbf{x}} \in {\mathbb{R}^n}\) とその入力が属するクラス \(t \in \{0,1\}\) のペアが与えられます。

\[\{ ({{\mathbf{x}}_1},{t_1}),({{\mathbf{x}}_2},{t_2}), \cdots ,({{\mathbf{x}}_N},{t_N})\} \]

目標関数

ニューラルネットワークは出力層のニューロン数を1個とし、活性化関数は 0~1 の値を出力するシグモイド関数を採用します。
この出力値をクラスが \(1\) である条件付き確率関数 \(p(t=1|\mathbf{x})\) と解釈します。
2クラス分類問題では、与えられた入力は2クラスの必ずどちらかに属するという仮定のもとで行うので、クラスが \(0\) である条件付き確率関数 \(p(t = 0|{\mathbf{x}}) = 1 – p(t = 1|{\mathbf{x}})\) も同時に得られます。



そして、ニューラルネットワークが表現する関数を \(f(\mathbf{x};\mathbf{w})\) としたとき、以下の関数 \({f^*}\) に近似できるよう重み \(\mathbf{w}\) をうまく調整することを目指します。

\[{f^*}({\mathbf{x}}) = \left\{ {\begin{array}{*{20}{l}}
1&{(t = 1)} \\
0&{(t = 0)}
\end{array}} \right.\]

サンプル \(1\) 個の場合

ニューラルネットワークの出力 \({y_k}\) は \(p(c = 1|{{\mathbf{x}}_k})\) を意味したので、入力 \({{{\mathbf{x}}_k}}\) に対して、正解クラス \({{t_k}}\) である確率は以下のようになります。

\[\left\{ {\begin{array}{*{20}{l}}
{y_k^{{t_k}}}&{({t_k} = 1)} \\
{1 – y_k^{{t_k}}}&{({t_k} = 0)}
\end{array}} \right. = y_k^{{t_k}}(1 – y_k^{1 – {t_k}})\]

サンプル \(N\) 個の場合

訓練データ \({{\mathbf{x}}_1},{{\mathbf{x}}_2}, \cdots ,{{\mathbf{x}}_N}\) は独立であることを仮定しているので、訓練データ全体の正解率は次のようになります。

\[\prod\limits_{k = 1}^N {y_k^{{t_k}}(1 – y_k^{1 – {t_k}})} \]

これを\({\mathbf{w}}\) の関数として見たものを 尤度関数 (likelihood function) といいます。
尤度関数の最大化、つまり正解率の最大化が目標です。
対数関数は単調増加関数なので、尤度関数を最大化するという目標は、対数をとった尤度関数の最大化と同値です。
これを対数尤度関数といいます。

\[\log \prod\limits_{k = 1}^N {y_k^{{t_k}}(1 – y_k^{1 – {t_k}})} = \sum\limits_{k = 1}^N {\left( {{t_k}\log y_k^{{t_k}} + (1 – {t_k})\log (1 – y_k^{{t_k}})} \right)} \]

対数尤度関数を最大化するという目標は、符号を反転した対数尤度関数の最小化と同値です。
これを損失関数とします。

\[{E_N}({\mathbf{w}}) = – \sum\limits_{k = 1}^N {{t_k}\log f({{\mathbf{x}}_k};{\mathbf{w}}) + (1 – {t_k})\log (1 – f({{\mathbf{x}}_k};{\mathbf{w}}))} \]

出力層のデルタ

逆伝播法の記事で紹介しますが、逆伝播を実行する際に損失関数に対して、ニューラルネットワークの出力に関する偏微分係数

\[\delta _1^{(L)} = \frac{{\partial {E_N}}}{{\partial {u_1}}},\delta _2^{(L)} = \frac{{\partial {E_N}}}{{\partial {u_2}}}, \cdots ,\delta _m^{(L)} = \frac{{\partial {E_N}}}{{\partial {u_m}}}\]

を計算する必要があるため、ここで求めておきます。

\[\begin{aligned}
\delta _j^{(L)} = & \frac{{\partial {E_N}}}{{\partial {u_j}}} \\
= & – \frac{\partial }{{\partial {u_j}}}\sum\limits_{k = 1}^N {\left( {{t_k}{y_k} + (1 – {t_k})\log (1 – {y_k})} \right)} \\
= & \sum\limits_{k = 1}^N {\left( {\frac{{1 – {t_k}}}{{1 – {y_k}}}\frac{{\partial {y_k}}}{{\partial {u_j}}} – \frac{{{t_k}}}{{{y_k}}}\frac{{\partial {y_k}}}{{\partial {u_j}}}} \right)} \\
\end{aligned} \]

出力層はシグモイド関数であるから、\(\frac{{\partial {y_k}}}{{\partial {u_j}}} = {y_k}(1 – {y_k})\) となる。よって、

\[\begin{aligned}
\delta _j^{(L)} =& \sum\limits_{k = 1}^N {\left( {\frac{{1 – {t_k}}}{{1 – {y_k}}}\frac{{\partial {y_k}}}{{\partial {u_j}}} – \frac{{{t_k}}}{{{y_k}}}\frac{{\partial {y_k}}}{{\partial {u_j}}}} \right)} \\
= & \sum\limits_{k = 1}^N {\left( {\left( {1 – {t_k}} \right){y_k} – {t_k}(1 – {y_k})} \right)} \\
= & \sum\limits_{k = 1}^N {\left( {{y_k} – {t_k}} \right)} \\
\end{aligned} \]

1コメント

  1. 尤度関数の勉強のために参考にさせてた抱いております.
    気が付いた点がありましたのでコメントさせていただきます

    サンプル 1 個の場合の節で
    1-y_k^(t_k)
    と表記されているところですが,
    (1-y_k)^(t_k)
    の誤りです.以降も閉じかっこの位置が違うミスが続いています.修正されるとよいかと思います.

コメントを残す

メールアドレスが公開されることはありません。