Coursera week1
Linear Regression with One Variable(単回帰分析)
例えば、日本人の年齢(x軸)と年収(y軸)をグラフにプロットすると、なんとなく1次関数で表現出来そうなことが分かります。
https://gyazo.com/0f3d0abb3786b2a417909f673a92bd24
赤線はあくまでも目視で確認して適当に引いただけであって、数学的に妥当なものとは言えないので、この赤線の式を求めるために、あれこれしていく必要があります。
Hypothesis function(仮説関数)
仮説関数の式
$ h_\theta(x) = \theta_0 + \theta_1x_1
この関数の自由パラメーター$ \theta_0, \theta_1 をいじり、データに最も誤差なくフィットする式を作ります。
Cost Function(目的関数)
仮説関数の精度は、コスト関数を用いて測定することができます。xからの入力と実際の出力yからの仮説のすべての結果の平均差(実際には平均よりも美しいバージョン)をとります。また、この関数は、「二乗誤差関数」または「二乗平均誤差」とも呼ばれます。
目的関数は、仮説関数を導くための関数で、簡単に言うと、グラフにプロットされた訓練セットの一つ一つの点に対する誤差(下図の点線部分)の総和を求める関数です。全ての点の誤差が最小であるパラメータθをみつけることで、仮説関数の実際のパラメータが導出出来るというわけです。
差の二乗を計算し、足し合わせて、平均を取っているだけです。2で割られているのは、後々この関数$ J(\theta_0, \theta_1) を微分するときにちょっと計算しやすくするためです。
コスト関数の式
https://gyazo.com/2d8329ac5010a7f8554b38ac37243ce6
次の図は、コスト関数の機能をまとめたものです。
https://gyazo.com/b4daaf954c69f384d03e7b81ebdcb030
より直感的な理解
コスト関数の値$ J(\theta_0, \theta_1) が0になるのが理想的です。例をみてみましょう。
下図の場合、$ \theta_1 = 1 のとき、$ J(\theta_0, \theta_1) = 0となり、すべての点を通る傾き1の直線を得ることができます。
https://gyazo.com/a964c59c6c58ac9f8b40674525422145
反対に、$ \theta_1 = 0.5 とすると、$ J(\theta_0, \theta_1) = 0.58となり、点からの距離がそれぞれ遠くなってることがわかります。
https://gyazo.com/e4303f0d81383f75acb064d5402d021b
したがって、コスト関数$ J(\theta_0, \theta_1) を最小にすることが目標となります。
https://gyazo.com/4fbea1cb1a0088f1238fa45fff0b22a0
Gradient Descent(最急降下法)
コスト(目的)関数$ J(\theta_0, \theta_1) を最小にする$ \theta_0, \theta_1 を見つける方法の1つが、最急降下法 (Gradient Descent)です。アルゴリズムは以下のようになります。このとき、αは学習率 (learning rate)と呼ばれます。
最急降下法の式
https://gyazo.com/8a5b44c3e624f219b81563ff7765939b
コスト関数の導関数の最小値を求めるには、微分して接線の傾きを求めます。それは最小値に向かって移動する方向を与えるでしょう。
https://gyazo.com/419092f3d2df9e188474255e30be5a4f
今回は変数が$ \theta_0, \theta_1 と2つあるので、片方は定数として微分する、偏微分を使います。そうして求められた傾きに、αをかけ、それをもともとの$ \theta_j から引くことで、新しい$ \theta_j を求めます。これを、傾きが十分小さくなるまで繰り返します。
もし0になれば、この関数は極小値 (local minima)をとることになります。傾きが0に近づくと、αがどんな値であれ、$ \theta_j の変動幅は小さくなり、0に近づいていきます。そうして変動幅が十分小さくなった状態を収束 (Convergence)といい、収束まで上記のアルゴリズムを繰り返します。
以下は、最急降下法によって、目的関数$ J(\theta_0, \theta_1) の値が収束に近づいていく様子を表しています。
https://gyazo.com/2c2c8b1d6797c70c8acbc5de31c6f2c0
注意点
αが大きすぎると、$ \theta_j の変動幅が大きすぎ、収束しないこともあります。逆にαが小さいとゆっくりですが、確実に収束していきます。
下図のように、$ \theta_0, \theta_1 のアップデートは同時に行わないと、原則ダメです。
https://gyazo.com/9d99945dc4086f00efe810e82f1056b3