まったりAI勉強記

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

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

どうも、カタミチです。

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

今日は「線形回帰モデル(回帰)」の最後の節、重回帰モデルですね。さぁ、行ってみましょう!

 

7-10. 重回帰モデルへの拡張

f:id:feh_asama:20220329081415j:image

さて、重回帰モデルへの適用ということで、今回は…

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

入力変数が2つに増えました。これに合わせて重みパラメータも1つ増えるので、損失関数は…

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

こんな感じになりますね。

で、偏微分の計算結果や繰り返し計算のアルゴリズムの式も重回帰用に修正が必要…と思いきや、前節の時点で既に考慮されていたんですね。ほぼそのまま使えますね。

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

\( \boldsymbol{w}^{(k+1)} = \boldsymbol{w}^{(k)} -\frac{\alpha}{M} \sum_{m=0}^{M-1} yd^{(k)(m)} \cdot \boldsymbol{x}^{(m)} \)

でもって、コーディングです。

単回帰の時のコードで使った入力変数の配列に、新たに低所得者率の列を追加するだけで、ほぼ同じロジックが使えるようですね。

ロジックを少し組み直して…

 

実行!

 

横軸に「繰り返し回数」、縦軸に「損失関数値」をとった学習曲線を見てみると…

な…

損失関数が、ぶっ飛んでる!


ここで、学習率の重要性が判明します。\(\alpha = 0.01\)だと、損失関数が収束せず、それどころか発散する感じになってしまうんですね。で、新たに\(\alpha=0.001\)にすると無事に収束する…ということが分かりました。

まさに、勾配降下法の学習率のチューニングって感じですね〜。G検定のときは意味だけ覚えていたんですが、ここでようやく、実感を伴って理解できました。

ちなみにどうやら、学習率は\(0.01\)や\(0.001\)あたりから探り始めて、10倍単位で精度を確認してから、その後、刻んでいって最適な数値を探る…ってのが良いようです。このへんはタクミのワザって感じしますよねー。早く多くのデータに触れて体感値として会得したいものです。

ちなみに、前回の例題では収束するのに20,000回くらい掛かりましたが、今回は500回程度で収束しました。もしかすると前回の例題も、学習率をもう少し調整すれば回数が少なくて済むのかもしれないですねー。

 

ということで

結果的に、単回帰モデルのときに十分な準備をしてきていたようで、重回帰になったからといって大きく変わるところはありませんでしたね。ロジック的には、入力変数の値をモリモリ増やしても対応できそうです。

さて、線形回帰モデルの章についてはこれで終わりですね。次の章は「ロジスティック回帰モデル」です。線形回帰で使った考え方に、さらに追加の武器を用いることで突破できる雰囲気なので、引き続き頑張っていきますかねー。

ではまた。