線形回帰のバッチ勾配降下法の勾配ベクトルの導出
scikit-learnとTensorFlowによる実践機械学習
- 作者: Aurélien Géron,下田倫大,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2018/04/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
線形回帰のバッチ勾配降下法の勾配ベクトルの計算式の導出方法が載ってなかったので、ここに残しとく。
バッチ勾配降下法について
コスト関数を最小化する為に、パラメータの局所的な勾配を計算し、その勾配分だけパラメータを更新していく方法。例えると、とある山(コスト関数、というかコスト関数の計算結果)を下りたいとする。効率よく下るためには、最も傾斜が急な方向に進めば良い。これをやっているのが、バッチ勾配降下法。そして、この局所的な勾配(足元の斜面の傾き)の求め方が今回の話題、だいたいそんな感じ。
では、本題
今回のコスト関数は最小二乗法(MSE)
簡単に説明すると「予測結果と実際の値の差の二乗の平均値」を計算して、これが最小になるパラメータを探す手法。なぜ差の絶対値じゃなくて、二乗なのかとかは、また別の機会に。。(ググれば出てくるよ)
数式にするとこんな感じ。
m:データの数、θ:パラメータ、: 一つのデータセット、:実測値
これを行列式で書き換えるとさらにこうなる。
を変換していく
まずこのの部分。これはベクトルの内積を表しています。
そのため、このように書き換えることができる。
またさらにそれを展開していくとこうなる。
よって、MSEの微分はこのように書くことができる
ここで、
とおくと、
また、
よって、
のようになる。
まとめ
行列の微分って慣れないから難しい。
間違えがあったら、指摘お願いします。
※分数の書き方汚くて、ごめんなさい。それでもなんとか伝わること信じてます。
届け、この想い。