このコースは、機械学習を理論から実践まで総合的に学習でき、英語が苦にならなければ教材としては最高だと思います。
ちなみに、bloggerで数式を使うやり方は、ここを参考にさせてもらいました。
線形回帰(linear regression)のモデル
もっとも単純な線形回帰では、1つの入力変数xと出力yをトレーニングデータとして与え、未知のxに対してなるべく正確にyを算出できるよう学習させる。
学習したモデル(このモデルのことを「仮説関数」(hypothesis function)と呼ぶ)は、式(1)のような1次式になり、グラフで表すと傾きと切片を持った直線になる。
\begin{equation} y=\theta_0+\theta_1x \end{equation}
線形回帰では、この\theta_0(切片)と\theta_1(傾き)の調整を行うことになる。
コスト関数(cost function)
コスト関数は、仮説関数にxを与えたときに得られるyがどれだけ実際のyと乖離しているかを求めるための関数である。コスト関数の計算結果をJとすると、線形回帰の目的は、このJを最小化することである。
コスト関数は式(2)のようになる。h_\theta(x)は仮説関数、mはトレーニングデータの数を表す。\begin{equation} J(\theta_0, \theta_1) = \frac{1}{2m}\sum_{i=1}^m (h_\theta(x_i)-y_i)^2 \end{equation}
要するに、やってることは、全トレーニングデータの誤差の2乗の平均を求め、それを2で割っている。なぜ2で割るのかについては、ここを参考にする限り、後でこの式を微分するときにこの2が消えるので計算がやりやすくなる、ということらしい。
1変数のコスト関数は、\theta_0, \theta_1, Jの3つを軸にとったグラフで表現すると、ボウルのような形になる。
最急降下法(gradient descent)によって、コスト関数の値が小さくなるよう少しずつ\theta_0と\theta_1を調整していく。計算式は次のとおり。これを収束するまで続ける。
\theta_0 := \theta_0 - \alpha\frac{1}{m}\sum_{i=1}^m (h_\theta(x_i)-y_i) \\ \theta_1 := \theta_1 - \alpha\frac{1}{m}\sum_{i=1}^m ((h_\theta(x_i)-y_i)x_i)
\alphaはlearning rateと呼ばれ、この値が調整幅を決める。\alphaが大きくなるほど、スピードは上がるが、収束とは逆の方向に進んでしまう可能性がある。\alphaを小さくすれば、確実に収束する方向に向かえるが、スピードが落ちる。
上の式でやっていることは、コスト関数に対し、現在地点における\theta_0軸と\theta_1軸のそれぞれの傾きを求め、傾きが落ちている方向に\theta_0と\theta_1を移動させている。
コスト関数の偏微分がなぜ上の式になるのかについては、これを読むとわかるかもしれない。
1変数のコスト関数は、\theta_0, \theta_1, Jの3つを軸にとったグラフで表現すると、ボウルのような形になる。
最急降下法(gradient descent)
最急降下法(gradient descent)によって、コスト関数の値が小さくなるよう少しずつ\theta_0と\theta_1を調整していく。計算式は次のとおり。これを収束するまで続ける。
\theta_0 := \theta_0 - \alpha\frac{1}{m}\sum_{i=1}^m (h_\theta(x_i)-y_i) \\ \theta_1 := \theta_1 - \alpha\frac{1}{m}\sum_{i=1}^m ((h_\theta(x_i)-y_i)x_i)
\alphaはlearning rateと呼ばれ、この値が調整幅を決める。\alphaが大きくなるほど、スピードは上がるが、収束とは逆の方向に進んでしまう可能性がある。\alphaを小さくすれば、確実に収束する方向に向かえるが、スピードが落ちる。
上の式でやっていることは、コスト関数に対し、現在地点における\theta_0軸と\theta_1軸のそれぞれの傾きを求め、傾きが落ちている方向に\theta_0と\theta_1を移動させている。
コスト関数の偏微分がなぜ上の式になるのかについては、これを読むとわかるかもしれない。