【機械学習】勾配降下法【Coursera】-その3-

2019年7月6日

Courseraで受講している機械学習について、勉強したことをアウトプットしていこうと思います。
あくまでも自分用となるので、もっと詳しく知りたい人は是非受講してみてください。

今回は勾配降下法を勉強していきます。
勾配降下法は結構一般的に機械学習業界で利用されているアルゴリズムです。

勾配降下法は丘を一番低いところに降りていくことをイメージとして取り入れることが多いです。
これは、徐々にパラメータが更新されていく際のイメージです。
ですが、実際にパラメータが最適になるかわからないのは、それは局所的な最適解を用いるためです。
山の東側からの最適解、はたまた西側からの最適解・・・
これら特性を考慮してパラメータを決定していく必要があります。

https://www.coursera.org/learn/machine-learning/supplement/2GnUg/gradient-descent

勾配降下法の式

θj := θj – α ∂/∂θj J(θ0, θ1)  (for j = 0 and j = 1)

:=
→代入を意味します。
α = Learning rate
→どの程度の歩幅で丘を降りていくかを制御します。
∂/∂θj J(θ0, θ1) = 導関数
→現在は説明無し。
(for j = 0 and j = 1)
→θ0とθ1を更新する?という意味だと思われます。

θ0とθ1は同時に更新する必要があります。

① temp0 := θ0 – α ∂/∂θ0 J(θ0, θ1)
② temp1 := θ1 – α ∂/∂θ1 J(θ0, θ1)
③ θ0 := temp0
④ θ1 := temp1

この式を①、③、②、④というように計算は行わないでください。
θ0の更新がかかってしまい、②の計算結果が変動してしまうためです。
(機械学習では同時更新のアルゴリズムを使わないと正しい値ができないです。ルールみたいなものと考えたほうがいいかもしれません。)

勾配降下法とコスト関数の組み合わせ

これまでにコスト関数と勾配降下法を学んできました。
ここでは、それらの関数を組み合わせて、直線データにフィッティングさせて行きます。

特に線形回帰の場合に適用すると、新しい形の勾配降下方程式を導き出すことができます。実際のコスト関数と実際の仮説関数を代入して、方程式を次のように修正できます。

https://www.coursera.org/learn/machine-learning/supplement/U90DX/gradient-descent-for-linear-regression

今回解説した勾配降下法はバッチ勾配降下法と呼ばれ、すべてのサンプルデータを学習するものです。
一般的に極小値の値の影響をうけやすいため、線形回帰などのシンプルなものにしか利用できませんので注意が必要です。