らんだむな記憶

blogというものを体験してみようか!的なー

機械学習とか二値分類とか

なんやらよく分からんが、学習係数$\theta = (\theta_0, \theta_1, \cdots, \theta_N)^T$と入力データ$x = (1, x_1, \cdots, x_N)^T$に関するhypothesis関数を
\begin{equation}
h_\theta(x^i) = \theta\cdot x = \sum_{k=0}^N \theta_k x_k^i
\end{equation}
として、出力データ$y = (y^1, \cdots, y^m)^T$に対するコスト関数(とか誤差関数とか損失関数とか*1 )
\begin{equation}
J(\theta) := \frac{1}{m}\sum_{i=1}^m \frac{1}{2}(h_\theta(x^i) - y^i)^2
\end{equation}
を最小化しましょう的な最小二乗法な話を読んでいる。線型フィッティングとかいう表現をすれば良いだろうか。
こういうのが、supervised learning (教師あり学習) というやつかな。実はあまり分かっていない!
ちょっと後の都合で、$\mathrm{Cost}(a,\ b) = \frac{1}{2}(a - b)^2$という関数を導入しておく。これを用いると、
\begin{equation}
J(\theta) = \frac{1}{m}\sum_{i=1}^m \mathrm{Cost}(h_\theta(x^i),\ y^i)
\end{equation}
となる。

この枠組みをclassification problemの一種である二値分類に適用したい場合、出力は$y^i \in \{0,\ 1\}$なのに、hypothesis関数は$\mathbb{R}$全域にわたるのがキモぃですね、というのがあるみたい。
なので、一段かまして、
\begin{equation}
\widetilde{h_\theta}(x) = \varsigma(\,h_\theta(x)\,)
\end{equation}
が、値域$[0,\ 1]$におさまるようにできると綺麗ですねぇと。
ここで関数$\varsigma$としては、logistic sigmoid関数
\begin{equation}
\varsigma(u) = \frac{1}{1 + \exp(-u)}
\end{equation}
を使いましょうか、という感じらしい。なんでシグモイドって言うんだ?とシグモイド関数 - Wikipediaを見ると、シグマっぽい形だからだそうだ。...そうなかぁ?

しかし、これはこれで良いのだが、もとのCost関数が2乗関数$\frac{1}{2}(a - b)^2$のままだと、$\widetilde{h_\theta}$を使ったコスト関数はlocal optimum (極値)が現れて global optimum (大域的極値) ― ここでは特に最小値 ― だけでなくなるからCost関数ももっと適したものにしましょうね、とか。
local optimumが複数出てくると、gradient descent (勾配降下法) で最適化がしきれない可能性が出てくる嬉しくないということのようだ。(どうでもいいけど、gradient descentの描くパスが座標系に依存しないものであって欲しいが、きっとコスト関数が$C^1$級ならいけるだろう。gradient をとる時点で$C^1$級という仮定だろうし、OKじゃないかな。真面目にやるなら座標系に直交行列を掛けこんで確認せんとならんな... 幾何学嫌い...)

...と言われても、そろそろ式がややこしくてグラフがイメージできないので描画することにした
特徴量の個数を$N=1$として、訓練データを長さ$m=3$として、$x = (2, 3, -3)^T,\ y = (0, 1, 1)^T$としてみる。
この場合の線型フィッティングのhypothesis関数にsigmoid関数をかましたものと単純な2乗関数のままのCost関数のコンビネーションからなるコスト関数は

\begin{equation}
J(\theta) = \frac{1}{6}\left( \left(\frac{1}{1 + e^{-(\theta_0 + 2 \theta_1)}} - 0 \right)^2 + \left(\frac{1}{1 + e^{-(\theta_0 + 3 \theta_1)}} - 1 \right)^2 + \left(\frac{1}{1 + e^{-(\theta_0 - 3 \theta_1)}} - 1 \right)^2 \right)
\end{equation}
となる。これをgnuplotで係数の$\frac{1}{6}$を無視してプロットしてみる。($\theta_0 \rightsquigarrow x,\ \theta_1 \rightsquigarrow y$に置き換えてgnuplotに渡している)

まぁ、なんとなく少なくとも2ヶ所くらいはlocal optimumが現れそうな雰囲気にできたかな?

f:id:derwind:20150823202022p:plain

ともかく、Cost関数が単純な2乗関数のままだとあまり具合がよくなさそうなことが分かったことにする。
まだ整理できてないが、Cost関数は$-\log(u)$のようなものを使っていくようだ。

なお、何度か画像をとりなおしたが、画像の削除が分からなくて困った。はてなブログの画像を削除する方法→はてなフォトライフから削除する - おとなのらいふはっくに説明されているように、

はてなフォトライフ - 無料・大容量、写真を共有できるウェブアルバム

の管理画面から実行するみたい。微妙に不便...。