では、いよいよ、Qをa1で偏微分してみましょう。ここも確認しながら進めたいので穴埋めにしておきます。オレンジ色の部分をクリックするかタップすると答えが表示されます。また動画での解説も用意してあります。ぜひ視聴してみてください。
∂Q
―― = (848a12 − 2 (4C1 + 16C2 + 24C3) a1 + ΣCi2 )a1
∂a1 定数 定数項 として扱う
= 2 ・ 848a1 − 2(4C1 + 16C2 + 24C3) …… [F]
[F] ⋯ a1で偏微分した。定数項は消える
[F]式は二次式で、a1の二乗の係数は正なので、下に凸な関数ですね。従って、偏微分した[F]式を0と置けば残差二乗和の式Qを最小にするa1の値が求められるはずです。
両辺を2で割ってから、Ciを元に戻すと以下のようになります。かっこを外すときに、かっこの前にマイナスがあることに注意してください。−(−a+b)=a−bのように、かっこの中のマイナスはプラスに、プラスはマイナスになります。
[G] ⋯
両辺を2で割った。さらに両辺を4で割ることもできるが、後で仕組みを見たいので、この段階ではこのままにしておく
[H] ⋯
Ciを元に戻した
[I] ⋯
a0とa2で整理し、その順に項を並べ替えた
[J] ⋯
定数項を右辺に移項した
あとは[J]式の数字を計算するだけです。結局、以下のような式が得られます。∴という記号は「ゆえに」「従って」という意味です。
[K] ⋯ a0から順に並べて、係数と定数項を計算した。両辺を4で割った。
はい、だいぶ簡単になりましたね。残差二乗和を最小にするようなa1の値は[K]式を解けば求められるということです。ところが、[K]式にはa0やa2という未知数が含まれていますね。なので、これだけでは答えは求められません。そこで、a0やa2についても同じように偏微分して0と置く必要があります。……というのはまた大変ですよね。そこで、ちょっとズルをします。[K]式の前の段階の[J]式で係数と定数項の特徴について、順を追って見てみましょう。
図3(a1で微分する例)を見ると、以下のようになっていることが分かります。
ステップ1: 偏微分する変数の係数は、(1)元の式の係数の二乗和とする(図3)。例えば、a1で偏微分するなら、元の式のa1の係数である4、16、24の二乗和が、偏微分した後のa1の係数になる。
ステップ2: それ以外の係数は、(2)偏微分する変数の係数と元の式の係数を掛けたものの合計とする(図4)。例えば、a2の係数は、元の式のa1の係数である4、16、24と、元の式のa2の係数である37、18、43をそれぞれ掛けたものの合計になる。
ステップ3: 定数項もステップ2と同じ考え方で求める。(3)偏微分する変数の係数とy(観測値)の値を掛けたものの合計とする。ただし、定数項は右辺に書く(図5)。例えば、元の式のa1の係数である4、16、24と、元の式のyの値(家賃)である11、6、12をそれぞれ掛けたものの合計になる。
これらのルールをa0やa1に対して適用すれば、それぞれの式が立てられそうですね(実際に偏微分して0と置くという計算をすると、これらの式が得られます)。a0について偏微分して0と置いたときの式は以下の通りです。
[L] ⋯ a0で偏微分して0と置いた場合。a0の係数は全て1なので二乗和は3
a2について偏微分して0と置いた場合は以下のような式になります。
[M] ⋯ a2で偏微分して0と置いた場合。a1の係数は37、18、43だったので、それらを各項の係数に掛ける。37、18、43の二乗和は3542
以上で、3つの式が出そろいました。これらの式は連立方程式になっていますね。この3つの式が同時に成り立つのであれば、残差二乗和(Q)の式が最小になるといえます。そのときのa0、a1、a2の値を求めるために、この連立方程式を解くことにしましょう。なお、機械学習では、偏微分して0と置いて連立方程式を立て、それを解くという方法を採らずに、偏微分係数を使って少しずつ値を変えていく方法を使います。
そういうわけで、連立方程式の解き方にあまり興味がないという人は、概略だけですが、機械学習での係数の求め方も示しておいたので、そこまで読み飛ばしてもらっても結構です*3。
*3 連立方程式は、Wolfram Alphaなどのサイトを使って解くこともできます。
偏微分して0と置いた式をもう一度まとめて掲載しておきます。あまりに長い道のりで、使えるアルファベットがなくなってきたので、式の番号を[A]から振り直しますね。
[A]式は[L]式を再掲したもの、[B]式は[K]式を再掲したもの、[C]式は[M]式を再掲したものです。これらの連立方程式を解けば、a0、a1、a2が求められますね。
まず、[A]式を使って[B]式と[C]式からa0を消去しましょう。[B]式を3倍したものから[A]式を11倍したものを引けば[B]式からa0が消せます。
同様に、[C]式を3倍したものから[A]式を98倍したものを引けば[C]式からa0が消せます。
次は、[D]式を使って[E]式からa1を消します。[E]式を152倍したものから[D]式を92倍したものを引けば、a1が消せます
a2の値が求められました。0.2478です。
次に、[D]式にa2の値を代入して、a1の値を求めます。a2の値は、
を使うのがいいでしょう(0.2478は小数点以下を四捨五入した近似値なので)。
a1の値も求められました。-0.0243ですね。最後に、a1とa2を[A]式に代入してa0を求めます。
ようやく答えにたどり着きました。[F][G][H]より、
となり、回帰式は、
となりました。これは最初に見た結果とちゃんと一致していますね。この式を使えば、さまざまな「築年数(x1)」と「面積(x2)」から「家賃(y)」が予測できるというわけです。
最小二乗法による重回帰分析の手順は、
というものでした。しかし、連立方程式は変数が多くなると、コンピュータを使って解くための計算量が増えるので、かなり時間がかかります。
そこで、機械学習では、ここで見たように連立方程式を解いて答えを導き出すのではなく、偏微分した式に適当な値を入れて、微分係数の符号を見るという方法を使うのが一般的です。微分係数の符号が正であれば、最小値はもっと左にあるはずです。つまり、もう少し小さなxiを与えてあげれば最小値に近づきます。逆に、微分係数の符号が負であれば、最小値はもっと右にあるはずです。この場合は、もう少し大きなxiを与えてあげれば最小値に近づきます。つまり、微分係数の符号と反対の方向に動かせばいい、というわけです(図6)。
図の右側を見てください。最小値から遠く離れていると、微分係数は正の大きな値になるので、それを引いてあげればぐっと最小値に近づきますね。最小値に近いと、微分係数も小さい値なので、それを引いてあげると少しずつ最小値に近づきます。図の左側は、微分係数が負の場合です。その場合は微分係数を引く(負の値を引くので、足すことに絶対値を足すことになります)と最小値に近づきます。
ただし、微分係数をそのまま足したり引いたりするのではなく、微分係数に小さな値を掛けて使います。例えば、勾配降下法などでは、直前のxiから「適当に選んだ小さな値×微分係数」を引くという計算を繰り返します。そして、値がほとんど変化しなくなったとき(=収束したとき)のaiを求めるというわけです。この「適当に選んだ小さな値」のことを「学習率」などと呼び、η(イータと読みます)などの文字を使って表します。学習率の値を大きく設定すると、正と負の間を行ったり来たりして収束しなくなることがあるので注意が必要です。また、学習率の値が小さすぎると収束に時間がかかります。
最後にまとめと補足です。
ここまでは、具体的な数値を使って偏微分を利用した回帰分析の例を見てきました。これを一般化するとどうなるかということですが、実は、前回の練習問題の3番がその計算の一部になっています。そういうわけで、3番を後回しにした人もいったん戻ってぜひチャレンジしてみてください。答えは、以下の通りでした。
回帰式が、
のとき、いくつかのデータを基に求めた残差二乗和の式は以下のようになります。yiやx1iなどがそれぞれのデータを表します*4。
これをa1で偏微分すると以下のようになります。
a0やa2で偏微分する場合でも同じですし、回帰式の変数がもっと増えても同じです。なお、a0をa0x0と表し、x0が常に1であると考えれば、以下のように書けます(形式をそろえただけです)。
つまり、すでに見てきた通り、
というわけです。
さらに、回帰式の変数がx0からxmまであるものとし、それぞれのデータの個数がn個(1〜nまで)であるとき、残差二乗和の式をakについて偏微分する場合の一般的な式を書くと以下のようになります。ただ、以下の式は、全てを一般化し、しかもできるだけ簡潔に書いたものなので、ぱっと見て「理解できた」というわけにはいかないかもしれません。あくまで参考用のものなので、今はあまり気にしなくても大丈夫です。具体的なイメージとして、不動産データの回帰分析の方法が理解できていれば十分です。
回帰式が、
のとき、残差二乗和は以下のようになります。
[A] ⋯ 残差二乗和の式の中の、a0x0i〜amxmiの和をΣで書いた
これをakで偏微分すると以下のようになります(式の変形は前回の練習問題の3番と同じなので、結果だけを示しています)。
ちょっとやりすぎな感じもしますが、これが一般的な形式になるというわけです。*5。
*5 ごく単純な計算であれば、具体的な数値を使った方がイメージをつかみやすいのですが、変数が増えてくると、むしろ文字や記号を使った方が式の意味や計算の手順がよく分かりますし、計算を間違うことも少なくなりますね。
というわけで、今回は最小二乗法による重回帰分析に偏微分を利用するお話を見てきました。偏微分は回帰分析だけでなくニューラルネットワークなどでも使われるので、機械学習やディープラーニングには必須の数学です。
といっても、偏微分の計算そのものは簡単でしたね。難しく思えるのは係数や変数、重みなどにさまざまな文字を使ったり、Σなどを使って一般的に式を記述したりすることがあるからです。そういうときには、できるだけ簡単な例で具体的な数値を使って試しに計算してみると少しずつ意味が分かってくると思います。
次回は、微分の積の公式や合成関数の微分(連鎖律)などについて見ていきたいと思います。
Copyright© Digital Advantage Corp. All Rights Reserved.