* SJE2015 ex13 [#j771445d] 前回課題のロジスティック回帰を,次の2段階で改良しよう - 入力が2次元より大きい場合も扱えるようにする - 出力を複数にして,クラス数が2より多い場合も扱えるようにする **課題A [#n1dd2777] ***特徴次元数を一般化しよう [#r6a6c5d8] 前回は特徴ベクトルの次元数 &mathjax{ D }; が 2 の場合のみを考えた.今回は &mathjax{ D \geq 1 }; の任意の次元数の特徴ベクトルを扱えるようにしよう. まず,特徴ベクトルを列ベクトル(&mathjax{D\times 1}; 行列)として #mathjax( \bm{x} = ( x_1, x_2, \dots , x_D )^{\top} ) と表す.このとき,シグモイド関数を用いて,入力 &mathjax{ \bm{x} }; に対する出力 &mathjax{ z }; を #mathjax( z = s( w_0 + w_1x_1 + w_2x_2 + \dots + w_Dx_D ) = s( w_0 + \bm{w}^{\top} \bm{x} ) ) とする.パラメータは,スカラ &mathjax{ w_0 }; と &mathjax{ D }; 次元ベクトル &mathjax{ \bm{w} }; なので計 &mathjax{ (D+1) };個ある. このとき,&mathjax{ h }; を前回同様に定義すると,&mathjax{ \frac{\partial h}{\partial w_d} }; ( &mathjax{ d = 0, 1, \dots , D }; ) は前回と全く同じように計算できる.式を簡潔に書くために #mathjax( \frac{\partial h}{\partial \bm{w}} = \left( \frac{\partial h}{\partial w_1}, \frac{\partial h}{\partial w_2}, \dots , \frac{\partial h}{\partial w_1} \right)^{\top} ) という &mathjax{ D }; 次元ベクトルを定義すると, #mathjax( \frac{\partial h}{\partial \bm{w}} = \mbox{hoge} ) と書ける.hoge がどうなるか考えよう. ***実験 [#nb07ac38] 上記の結果を活かして,前回の課題Bのプログラムの改良版を作ろう. **課題B [#vd0d36dc] ***クラス数を一般化しよう [#je8873de] 特徴ベクトルが与えられたときに,これを &mathjax{ K }; 通りのクラスのいずれかに識別したい.入力 &mathjax{ \bm{x} }; に対して &mathjax{ K }; 個の値 &mathjax{ z_1,z_2,\dots , z_K }; を出力するしくみを用意して,&mathjax{ z_k }; が,&mathjax{ \bm{x} }; が &mathjax{ k }; 番目のクラスに所属する確率の推定値となるように学習する識別器を考える.このとき,各 &mathjax{ z_k }; を2クラスの場合の式そのままで計算することにすると,&mathjax{ \sum_{k=1}^{K} z_k }; が 1 になる保証がないので,確率とみなして議論ができなくて都合が悪い.そこで,&mathjax{ z_k }; が 0 から 1 の値をとり,かつ &mathjax{ \sum_{k=1}^{K} z_k = 1}; となるように,次のようにする. #mathjax( \begin{align} z_k &= \frac{\exp(y_k)}{\sum_{j=1}^{K}\exp(y_j)} \\ y_k &= w_{k,0} + \sum_{d=1}^{D} w_{k,d} x_d = w_{k,0} + \bm{w}_{k}^{\top} \bm{x}\end{align} ) この一つ目の式の形を,softmax という(最大値に対して1を,ぞれ以外に0を割りふる関数を考えると,それを0から1の実数をとるように「柔らかく」したものと考えられるから).実は,&mathjax{K = 2}; の場合,&mathjax{z_1 + z_2 = 1}; という制約をふまえて式を整理すると,シグモイドが出てきますが,省略. 次に,多クラス問題に対応した交差エントロピーを考える.まずは,正解クラスを表す教師信号を &mathjax{ \bm{t} = (t_1, t_2, \dots , t_K )^{\top} }; という &mathjax{ K }; 次元ベクトルとする.ただし,その要素は,いずれか一つだけが 1 で,他は全て 0 とする.例えば &mathjax{ K = 3 }; で &mathjax{ t_1 = t_3 = 0, t_2 = 1 }; なら,このデータは2番目のクラス所属,等.そして,&mathjax{h}; を次のように定義する. #mathjax( h = - \sum_{k=1}^{K} t_k \log z_k ) これまた &mathjax{ K = 2 }; としたら前回の式と同じになってることが確認できます.というわけで,複数の学習データが与えられた場合,それぞれに対する &mathjax{h}; の和が交差エントロピー &mathjax{H}; になります. がんばって微分して学習則を導出しよう.実は「おんなじ形になるやん」ってオチですが. ヒント: #mathjax( \log z_k = y_k - \log \left( \sum_{j=1}^{K} \exp y_j \right) ) なので, #mathjax( \begin{align} \frac{\partial h}{\partial w_{\ell,d}} &= - \frac{\partial}{\partial w_{\ell,d}} \sum_{k=1}^{K} t_k y_k + \frac{\partial}{\partial w_{\ell,d}} \left( \sum_{k=1}^{K} t_k \log \left( \sum_{j=1}^{K} \exp y_j \right) \right) \\ &= - \frac{\partial}{\partial w_{\ell,d}} \sum_{k=1}^{K} t_k y_k + \frac{\partial}{\partial w_{\ell,d}} \left(\log \left( \sum_{j=1}^{K} \exp y_j \right) \sum_{k=1}^{K} t_k \right) \end{align} ) ですね.ここで &mathjax{ \sum_{k=1}^{K} t_k }; は...だから右辺第2項はもう少し簡単になって....それから, #mathjax( \frac{\partial y_k}{\partial w_{\ell,d}} = \left\{ \begin{array}{ll} x_d & \mbox{if}\quad k = \ell \\ 0 & \mbox{otherwise} \end{array} \right. ) ですね. ***実験 [#nb07ac38] 上記の結果を活かして,課題Aのプログラムの改良版を作ろう. 上記の結果を活かして,課題Aのプログラムの改良版を作ろう.これまではデータの一部を取り出して2クラス問題にしていたが,全部使って3クラス問題を解こう.