まったりAI勉強記

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

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

どうも、カタミチです。

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

今日も8章「ロジスティック回帰モデル(2値分類)」の続きですね。前回、損失関数の導出までは行ったので、山は越えた感じ?ですかねー。行ってみましょう〜。

 

8-5. 損失関数の微分計算

f:id:feh_asama:20220402074934j:image

損失関数が求まったら、次は微分を出しておくんでしたね。まず前回のところで求めた損失関数は…

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

でしたね。で、\(ce = -(yt \log (yp) + (1-yt) \log (1-yp)) \)と置いてそれを\(yp\)で微分したものが…

\(\frac{d(ce)}{d(yp)} = \frac{yp-yt}{yp(1-yp)} \)

これでした。

さて、今回求めたい微分は重みごとの偏微分なので、とりあえず\(\frac{\partial L}{\partial w_1} \)を求めてみましょう。合成関数の微分を使って3段階に分解すると…

\(\frac{\partial L}{\partial w_1} =\frac{dL}{d(yp)} \cdot \frac{d(yp)}{du} \cdot \frac{\partial u}{\partial w_1} \)

という形に変形できます。

で、それぞれの微分を計算。まず1つ目は\(\sum\)の中身を前節で微分済みなのでカンタンですね。

\( \frac{dL}{d(yp)} = \frac{1}{M} \sum_{m=0}^{M-1} \frac{yp^{(m)}-yt^{(m)}}{yp^{(m)}(1-yp^{(m)})} \)

次に2つ目はこうなります。

\( \frac{d(yp)}{du} = yp^{(m)}(1-yp^{(m)})\)

一瞬、何が起こったか分かりにくいですが、\(yp\)っていうのが\(u\)のシグモイド関数なので、シグモイド関数の微分結果をそのまま適用しただけです。元の関数のみを使って表現できるんでしたね。

ちなみに、右辺の\(yp\)の肩にだけ\((m)\)が乗ってますが、コレ、厳密にはおかしな書き方になってると思います。ただ、この部分も元の損失関数の\(\sum\)計算の影響を受けており、データ系列番号によって変わってることになりますので、こんな書き方をしてみました。

最後に3つ目。これは、予測モデルの式を考えるとすぐに答えが分かりますね。

\( \frac{\partial u}{\partial w_1} = x_1^{(m)} \)

これも2つ目の式と同じく、右辺の右肩にだけ\( (m) \)が付いてるのは厳密にはおかしいと思いますが、まぁ、これで行かせてください。

さて、3つの式を合体すると…

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

ここで、\(yd^{(m)} = yp^{(m)} - pt^{(m)}\)とした上で約分して式を整理すると…

\( \frac{\partial L}{\partial w_1} = \frac{1}{M} \sum_{m=0}^{M-1}  yd^{(m)} \cdot x_1^{(m)}  \)

はい、ココまでで\(w_1\)で偏微分した結果が出ましたが、前章と同じ要領で\(w_0\)、\(w_2\)についても、添字が違うだけの同じ式が出てきますね。ということで…

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

ほい、できましたね!

ちなみにこれ、7章で出てきた線形回帰モデルの損失関数の偏微分と結果が全く同じなんですよねー。不思議で仕方ないんですが、恐らくそうなるように考案者が工夫したんでしょうねー。私はただただ、手のひらの上で踊らされているようですが、先人の知恵をありがたくお借りして、手のひらで楽しく踊ることにしたいと思います(^-^)

 

8-6. 勾配降下法の適用

f:id:feh_asama:20220402074946j:image

さて、最後の仕込みですね。微分計算ができたらあとは、学習率を含む式の導出です。

…が、これはカンタンですね。なぜなら、損失関数の微分が線形回帰のときと同じだから。つまり、勾配降下法の式も線形回帰のときと同じになります。

どん!

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

ほい、完成ですね!

線形回帰のときと異なるのは、\(yd^{(k)(m)}\)の中に含まれる\(yp^{(k)(m)}\)の式ですね。

\(u^{(k)(m)} = \boldsymbol{w}^{(k)} \cdot \boldsymbol{x}^{(m)}\)
\(yp^{(k)(m)} = f(u^{(k)(m)})\)
\(f(x)=\frac{1}{1+exp(-x)}\)

という感じで、活性化関数であるシグモイド関数が間に入り込んでくるんでしたねー。

 

ということで

ようやく、ロジスティック回帰モデルの2値分類の準備が完了しました。最尤推定をうまく使って損失関数を組むって考え方がなかなか腹落ちせず、夢の中でも出てくるくらいに考え尽くした結果、ようやく理解ができました。

確かに、ここまでの内容を理解するには、数学の知識が色々と必要だ…ってことは痛感しますねー。前提知識無しで見ても、全く意味が分からなかったと思います。

さて、次はプログラム実装ですね。ここまで式が組み上がっていれば気は楽です。コードを追いながら実感を深めることにしますかねー。

ではまた。