まったりAI勉強記

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

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

どうも、カタミチです。

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

今日は、9章「ロジスティック回帰モデル(多値分類)」の損失関数を導くところからでしたね。行ってみよう〜

 

9-5. 損失関数

f:id:feh_asama:20220403151407j:image

ベースとなるのは、OneHotベクトル化した正解値ベクトル\(\boldsymbol{yt}\)と…

\(\boldsymbol{yt}=(yt_0,yt_1,yt_2)\)

予測値ベクトル\(\boldsymbol{yp}\)になります。

\(\boldsymbol{yp}=(yp_0,yp_1,yp_2)\)

2値問題では、対数尤度関数をデータの数だけ足し合わせたものを損失関数にしてましたが、多値問題でも考え方は全く同じです。

2値問題のときの対数尤度関数はどんなやつだったかと言うと…

\(\log{(P^{(m)})}=yt^{(m)} \log{(yp^{(m)})}+(1-yt^{(m)}) \log{(1-yp^{(m)})}\)

こんなやつでしたね。では多値問題ではこれがどうなるか?見てみましょう…

どん!

\(\log{(P^{(m)})}=\sum_{i=0}^2 (yt_i^{(m)} \log(yp_i^{(m)}))\)

…あら?

むしろ2値問題よりシンプルになってる!

ひとつの分類器に押し込める必要が無くなったので、かえって分かりやすくなりましたね。ひとつだけ気になるとすれば、この式だと正解値ベクトルの成分が\(0\)のところは、どんな値が来ても無視するってところですかねー。正解値に\(1\)が立っている成分のみを損失関数の計算に算入するようです。まぁ、2値分類の場合は正解値が\(1\)じゃなければ\(=0\)だったから余すことなく使ってただけで、やってることは変わらない気がしますけどね。

さて、ここまできたら2値分類のときと同じように、入力データの個数分足し上げたうえで、符号反転してデータ個数で割ると…

\(L(\boldsymbol{W})=-\frac{1}{M} \sum_{m=0}^{M-1}  \sum_{i=0}^2 (yt_i^{(m)} \log(yp_i^{(m)})) \)

損失関数の出来上がりですね!

 

9-6. 損失関数の微分計算

f:id:feh_asama:20220403151419j:image

さて、あとひと息です。毎度お馴染み、損失関数の微分計算ですね。

全微分式からの合成関数の微分や、対数の微分、softmax関数の微分…などなど、ひとつひとつ丁寧に計算して行くと、最終的に導かれるのは…

 

\( \frac{\partial L}{\partial w_{ij}} = \frac{1}{M} \sum_{m=0}^{M-1}  yd_{i}^{(m)} \cdot x_j^{(m)}  \)

 

2値問題のときと同じ式!

途中式がめちゃくちゃ面倒くさいのですが、何とか理解しながら苦労して得た結果が、実は前に見たやつだったという結末…。

これはそう、例えるなら、次々と起こる連続殺人事件の調査を進める刑事とその部下。刑事は数々の手がかりを手に入れて推理を組み立てて行く。その結果辿り着いた犯人は…刑事の部下だった!みたいな展開ですね(分かりにくい例え)

ちなみにもはや、入力値を示す添字の\(j\)の値に制限を設けるようなヤボな事はしてませんね。入力データが3種以上になると、散布図がイメージできる世界を越えてしまいますが、いずれ人類も5次元空間に住む日が来るでしょうからその日を楽しみに待ちましょう(適当)

 

9-7. 勾配降下法の適用

f:id:feh_asama:20220403151429j:image

さて、最後に勾配降下の式ですね。損失関数の微分が2値分類と同じだったので、勾配降下の式も…

\(w_{ij}^{(k+1)}= w_{ij}^{k} -\frac{\alpha}{M} \sum_{m=0}^{M-1} yd_i^{(k)(m)} \cdot x_j^{(m)}\)

こうなりますね。

関連する式もまとめて書くと…

\( \boldsymbol{u}^{(k)(m)} =\boldsymbol{W}^{(k)} \cdot \boldsymbol{x}^{(m)} \)(入力データと重みの式)
\( \boldsymbol{yp}^{(k)(m)}= \boldsymbol{h}( \boldsymbol{u}^{(k)(m)}) \)(予測値ベクトルの式)
\( h_i= \frac {exp(u_i)} { \sum_{j=0}^{N-1} exp(u_j) } \)(活性化関数:softmax関数)
\( \boldsymbol{yd}^{(k)(m)}= \boldsymbol{yp}^{(k)(m)}- \boldsymbol{yt}^{(m)} \)(誤差ベクトルの式)

さぁ、準備完了です。章の最後は、これまでと同じ様にプログラムで確認ですね!

 

ということで

多値分類もついに数式が出揃いました。線形回帰、2値分類とやってきて、モデルを作るのは今回で3回目になりますが、モデルごとに変わる部分と変わらない部分を体感できるのがとても勉強になってます。今回の多値分類も、最後のプログラムの節で理解を深めていきたいところですねー。

ではまた。