はじめに
前回の記事で、シグモイド関数の微分を行いました。
yaju3d.hatenablog.jp
今回は、偏微分を含んだ微分を理解していきます。
本とかだと分かっている人向けなので展開式を省略されてしまうのですが、私はあえて分かりやすく展開式を書きたいと思っています。
参考
やる夫で学ぶ機械学習 - 単回帰問題 - · けんごのお屋敷
勾配降下法
数値解析の分野では勾配降下法を最急降下法と呼びますが、勾配降下法の中にもいくつかの方法が存在します。
- 最急降下法(Gradient Descent) ※デフォルト
- 確率的勾配降下法(Stochastic Gradient Descent - SDG)
- ミニバッチ確率的勾配降下法(Minibatch SGD - MSGD)
最急降下法とは
最急降下法は学習データのすべての誤差の合計を取ってからパラメーターを更新します。学習データが多いと計算コストがとても大きくなってしまいます。また、学習データが増えるたびに全ての学習データで再学習が必要となってしまいます。
目的関数の微分方法
目的関数 最小2乗法
※誤解されないように最初に説明しておくと、 や
は
乗という意味ではなくて、
番目の学習用データを参照する意味である。
この目的関数は、 を含んでいて、今回
は、
と
の2つのパラメーターを持っているとします。
これは と
の2変数を持つ2変数関数になるので、普通の微分ではなく偏微分になります。
偏微分とは、 変数関数のある一つの変数以外の
個の変数の値を固定し、残りの 1 つの変数について関数を微分することです。
mathtrain.jp
更新式を求める
更新式は下記の2つになります。
…①
…②
実際に①を偏微分してみましょう。これには合成関数の微分を使うといいです。
合成関数の微分
と
という関数があったとき、これらの合成関数
を
で微分する場合は下記式になり、これを使えば簡単になる。
これを目的関数に適用します。
の中に
が出てきて、
の中に
が出てきます。
それを下記のように考えてみます。
まずは を
で微分するところから計算してみます。
で微分するので、
は計算対象外なので除外します。
共通因数の を前に出します。
こうすると と相殺されて、微分した後の式が簡単になります。
それが最初に を掛けていた理由です。
このままでもいいですが、マイナス符号を先頭に付けないようにもう一工夫します。
足し算を入れ替えても結果は変わらないので、 と
を入れ替えます。
次に を
で微分します。
は計算対象外なので除外します。残った
は微分して
になります。
合成関数の微分に従って、それぞれの結果を掛けてあげれば、 で微分した結果が出る。
の定義を元に戻す。
次は、②の について微分します。
を
で微分するところは同じ展開なので省略しても良かったのですが、あえて書いておきます。
で微分するので、
は計算対象外なので除外します。
共通因数の を前に出します。
こうすると と相殺できます。
このままでもいいですが、マイナス符号を先頭に付けないようにもう一工夫します。
足し算を入れ替えても結果は変わらないので、 と
を入れ替えます。
次に を
で微分する部分だけを計算する。
は計算対象外なので除外します。残った
は微分して
になります。
合成関数の微分に従って、それぞれの結果を掛けてあげれば、 で微分した結果が出る。
の定義を元に戻す。
最終的な更新式
パラメータ と
の更新式は、最終的に下記のようになります。
最後に
長くなったので今回はここまで、次回は多項式回帰となります。