まったりAI勉強記

AI(人工知能)について、特にゆかりがあるわけでもない社会人が、まったりとAIについて勉強していく勉強日記です。

【ひとり読書会】ディープラーニングの数学(第18回)

どうも、カタミチです。

さて、今日も「最短コースでわかる ディープラーニングの数学」のひとり読書会、やっていきたいと思います。

今日は、7章「線形回帰モデル(回帰)」の続きですね。張り切っていってみよ〜。

 

7-4. 勾配降下法の考え方

f:id:feh_asama:20220327194632j:image

さて、まずは「勾配降下法の考え方」という節ですが、ここは、次の節以降の段取りの説明です。どんな段取りかと言うと…

  1. 予測モデルの作成(入力データ\(x\)から予測値\(yp\)を求めるためのモデル作成)
  2. 損失関数の作成(予測値\(yp\)と正解値\(yt\)から損失関数\(L\)を作成)
  3. 損失関数の微分計算(勾配降下法の準備)
  4. 勾配降下法の適用(具体的な計算)

ふむふむ。勾配降下法を行うにも、相応の前準備が必要…ってことですね。

さてここで、例題のおさらいです。本章はそもそも、線形回帰モデルを使って例題を解いていこうって話でしたね。

例題1:「The Boston Housing Dataset」のデータを学習データとして、「平均部屋数」から「物件価格」を推測するモデルを作成せよ。

例題2:「The Boston Housing Dataset」のデータを学習データとして、「平均部屋数」と「低所得者率」から「物件価格」を推測するモデルを作成せよ。

はい、こんな例題です。とりあえず7−9節までは「例題1」のみを扱うようです。

さて、進んでいきましょう。

 

7-5. 予測モデルの作成

f:id:feh_asama:20220327194642j:image

まず最初にやるのは「予測モデルの作成」…だそうです。

「今は数学の勉強をしているんだ」という観点をいったん忘れたとするなら、いきなりこの段階が一番難しいでしょうね。例えるなら、医師が患者を診察して処方する薬を決める段階…って感じでしょうか。機械学習シロウトの私だと、どうやって予測モデルを作ればいいか、アタフタしてしまいます。

本書ではまず、平均部屋数を\(x\)軸に、と物件価格を\(y\)軸にして散布図を書き、そこから「何となく直線近似できそうだから線形単回帰モデルを採用しよう」という思考の流れでこの方法が採用されています。

このあたりは、場数を踏んで慣れていくしかないですかねー。まぁ、今の私は直線近似という薬しか処方できないので、逆に迷うこともないですが(汗)

さて、そんな近似する直線の式は…

\(yp=w_0+w_1x\)

って感じです。この、\(w_0\)と\(w_1\)を固定化させて直線の式を完成することが目的ですね。ちなみに、予測値の線なので\(y\)軸には\(yp\)が採用されています。

ここで、\(\boldsymbol{x}=(x_0,x_1)\)(\(x_0=1\)で固定)、\(\boldsymbol{w}=(w_0,w_1)\)という感じでベクトル表現を採用すると…

\(yp = \boldsymbol{w} \cdot \boldsymbol{x} \)

となります。早速「ベクトルの内積」という武器が炸裂ですね!

ただ、これだけだと今回の例題用には不完全ですね。1つのデータ\(x\)に対しての\(w_0,w_1\)を出しても仕方ないので、すべてのデータを考慮できるように式を書き換えると…

\(yp^{(m)} = \boldsymbol{w} \cdot \boldsymbol{x}^{(m)} \)
(\(m\)は何件目のデータかを表すインデックス)

こうなりますね!

 

7-6. 損失関数の作成

f:id:feh_asama:20220327194658j:image

さて、予測モデルができたら、次は予測値(\(yp\))と正解値(\(yt\))の差を表す関数である「損失関数」を作る段階ですね。

1つのデータ(0番目のデータ)だけに着目すると、その差は…

\(yp^{(0)}-yt^{(0)}\)

ってことになりますが、データは1つではないため、全データについて足し上げる必要がありますね。で、このとき正・負があって相殺しあうと厄介なので、それぞれ二乗してから足し上げるんでしたね。イッツ「残差平方和」。

\(L=(yp^{(0)}-yt^{(0)})^2 + (yp^{(1)}-yt^{(1)})^2 + \cdots + (yp^{(M-1)}-yt^{(M-1)})^2\)

シグマでまとめると…

\(L=\sum_{m=0}^{M-1} (yp^{(m)}-yt^{(m)})^2\)

ですね。ちなみに、\(M\)はデータ数のことなんですが、今回のシグマのスタートが\(m=0\)なので、ゴールは\(M\)ではなく\(M-1\)になってますね。

…で、このままでも良いと思うんですが、微分した結果がキレイな方が都合がいいというオトナの事情から、定数である\(\frac{1}{2M}\)をかけて…

\(L(w_0,w_1)=\frac{1}{2M} \sum_{m=0}^{M-1} (yp^{(m)}-yt^{(m)})^2\)

コイツを損失関数とするのがよかろうなのだ〜!(ふむふむ)

 

7-7. 損失関数の微分計算

f:id:feh_asama:20220327194707j:image

さて、だいぶ準備も進んできましたが、最後の準備ですね。損失関数の微分式です。

まず、\(L(w_0,w_1)\)を\(w_1\)について偏微分することを考えます。\(L\)には\(\sum\)が含まれていますが、微分には線形性があるため、とりあえず中身のひとつについての微分を考えれば良さそうですね。

ということで、代表して最初の項を\(w_1\)で偏微分してみたいと思います。

\( \frac{\partial  (yp^{(0)}-yt^{(0)})^2}{\partial w_1}\)

合成関数の微分を使うと…

\( \frac{\partial  (yp^{(0)}-yt^{(0)})^2}{\partial w_1} =  \frac{\partial  (yp^{(0)}-yt^{(0)})^2}{\partial yp^{(0)}} \cdot \frac{\partial yp^{(0)}}{\partial w_1}\)

ってことになります。前半部分を解くとこうなりますね。

\( \frac{\partial  (yp^{(0)}-yt^{(0)})^2}{\partial yp^{(0)}} =2(yp^{(0)}-yt^{(0)}) \cdot 1 = 2(yp^{(0)}-yt^{(0)}) \)

で、後半部分は、/(yp^{(0)}=w_0x_0^{(0)}+w_1x_1^{(0)}\)なので、解くとこうなる。

\( \frac{\partial yp^{(0)}}{\partial w_1} = x_1^{(0)} \)

なので、合わせると…

\( \frac{\partial  (yp^{(0)}-yt^{(0)})^2}{\partial w_1}= 2(yp^{(0)}-yt^{(0)}) \cdot x_1^{(0)}\)

って事になりますね。これを、\(\sum\)の式に戻すと…

\(\frac{\partial L(w_0,w_1)}{\partial w_1}=\frac{1}{M} \sum_{m=0}^{M-1} ((yp^{(m)}-yt^{(m)})\cdot x_1^{(m)})\)

になりますね。で、次に\(w_0\)の偏微分も同じ様にやってみよう…ってことなんですが、よく考えたら、\(w_0\)の場合は\(x_1\)が\(x_0\)になるだけですね。

ってことで、こんな感じでまとまります。

\(\frac{\partial L(w_0,w_1)}{\partial w_i}=\frac{1}{M} \sum_{m=0}^{M-1} ((yp^{(m)}-yt^{(m)})\cdot x_i^{(m)})\)
\((i=0,1)\)

ちなみに、残差を改めて別の文字\(yd\)と置いておくと、なにかと便利なようなので、以降はこの\(yd\)ってやつも割と登場してくるようですね。

\(yd^{(m)}=yp^{(m)}-yt^{(m)}\)

さて、これでひととおり「勾配降下法」を行う準備が整いました!

 

ということで

次の節がいよいよ「勾配降下法の適用」って節なんですが、ちょっと長くなってきたので、中途半端ですがここで切ります。次回、これまでの準備を存分に生かして、ガッツリ勾配降下法を使っていきますかねー。

ではまた。