Created
April 12, 2019 12:34
-
-
Save shotahorii/293719062df82d9dbfa96d79cb39585c to your computer and use it in GitHub Desktop.
Logistic Regression from Bayesian
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Logistic Regression from Bayesian\n", | |
"- はじめてのパターン認識(平井有三) 6.4.\n", | |
"- [確率的生成モデル(2)](https://www.iwanttobeacat.com/entry/2018/07/15/212707)\n", | |
"- [ロジスティック回帰](https://www.iwanttobeacat.com/entry/2018/07/22/125942)\n", | |
"- [シグモイド関数の微分](https://www.iwanttobeacat.com/entry/2018/07/18/195219)\n", | |
"- [対数微分法のやり方と例題](https://mathtrain.jp/logbibun)\n", | |
"- [「ベクトルで微分・行列で微分」公式まとめ](https://qiita.com/AnchorBlues/items/8fe2483a3a72676eb96d)\n", | |
"\n", | |
"[ここ](https://gist.github.com/shotahorii/63b10aa9337a4e3893ed3dac28af84e5#file-logisticregression-ipynb)と[ここ](https://gist.github.com/shotahorii/53fe598404567cde056121a0935dff04#file-extendedlogisticregression-ipynb)でロジスティック回帰について書いた。最初の記事ではGLMとしてのロジスティック回帰、次の記事ではもう少し踏み込んで誤差構造の確率分布から尤度関数を示した。 \n", | |
"本記事では、これをベイズの定理から考えてみる。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 27, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"クラス$$C_1,C_2$$の2クラス分類問題を考える。<br>\n", | |
"あるデータ$${\\bf x}$$が観測された時、それがクラス$$C_1$$に属する確率はベイズの定理より以下のように書ける。\n", | |
"<br><br>\n", | |
"$$p(C_1|{\\bf x}) = \\frac{p({\\bf x}|C_1)p(C_1)}{p({\\bf x})}\n", | |
"= \\frac{p({\\bf x}|C_1)p(C_1)}{p({\\bf x}|C_1)p(C_1)+p({\\bf x}|C_2)p(C_2)}$$\n", | |
"<br><br>\n", | |
"ここで、\n", | |
"<br><br>\n", | |
"$$a = log \\frac{p({\\bf x}|C_1)p(C_1)}{p({\\bf x}|C_2)p(C_2)}$$\n", | |
"<br><br>\n", | |
"とおき上の式に代入すると、\n", | |
"<br><br>\n", | |
"$$p({\\bf x}|C_1)p(C_1) = exp(a)p({\\bf x}|C_2)p(C_2)$$\n", | |
"<br><br>\n", | |
"より以下のように変形できる。\n", | |
"<br><br>\n", | |
"$$p(C_1|{\\bf x}) = \\frac{p({\\bf x}|C_1)p(C_1)}{p({\\bf x}|C_1)p(C_1)+p({\\bf x}|C_2)p(C_2)}\n", | |
"= \\frac{p({\\bf x}|C_1)p(C_1)}{exp(a)p({\\bf x}|C_2)p(C_2)+p({\\bf x}|C_2)p(C_2)}$$<br>\n", | |
"$$= \\frac{p({\\bf x}|C_1)p(C_1)}{(1+exp(a))p({\\bf x}|C_2)p(C_2)}\n", | |
"= \\frac{exp(a)}{1+exp(a)} = \\frac{1}{1+exp(-a)}$$\n", | |
"<br><br>\n", | |
"途中式を省略すると以下である。すなわち、データ$${\\bf x}$$が観測された時のクラス$$C_1$$の事後確率がロジスティック関数の形で表されている。\n", | |
"<br><br>\n", | |
"$$p(C_1|{\\bf x}) = \\frac{1}{1+exp(-a)}$$<br>\n", | |
"$$a = log \\frac{p({\\bf x}|C_1)p(C_1)}{p({\\bf x}|C_2)p(C_2)}$$" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"クラス$$C_1,C_2$$の2クラス分類問題を考える。<br>\n", | |
"あるデータ$${\\bf x}$$が観測された時、それがクラス$$C_1$$に属する確率はベイズの定理より以下のように書ける。\n", | |
"<br><br>\n", | |
"$$p(C_1|{\\bf x}) = \\frac{p({\\bf x}|C_1)p(C_1)}{p({\\bf x})}\n", | |
"= \\frac{p({\\bf x}|C_1)p(C_1)}{p({\\bf x}|C_1)p(C_1)+p({\\bf x}|C_2)p(C_2)}$$\n", | |
"<br><br>\n", | |
"ここで、\n", | |
"<br><br>\n", | |
"$$a = log \\frac{p({\\bf x}|C_1)p(C_1)}{p({\\bf x}|C_2)p(C_2)}$$\n", | |
"<br><br>\n", | |
"とおき上の式に代入すると、\n", | |
"<br><br>\n", | |
"$$p({\\bf x}|C_1)p(C_1) = exp(a)p({\\bf x}|C_2)p(C_2)$$\n", | |
"<br><br>\n", | |
"より以下のように変形できる。\n", | |
"<br><br>\n", | |
"$$p(C_1|{\\bf x}) = \\frac{p({\\bf x}|C_1)p(C_1)}{p({\\bf x}|C_1)p(C_1)+p({\\bf x}|C_2)p(C_2)}\n", | |
"= \\frac{p({\\bf x}|C_1)p(C_1)}{exp(a)p({\\bf x}|C_2)p(C_2)+p({\\bf x}|C_2)p(C_2)}$$<br>\n", | |
"$$= \\frac{p({\\bf x}|C_1)p(C_1)}{(1+exp(a))p({\\bf x}|C_2)p(C_2)}\n", | |
"= \\frac{exp(a)}{1+exp(a)} = \\frac{1}{1+exp(-a)}$$\n", | |
"<br><br>\n", | |
"途中式を省略すると以下である。すなわち、データ$${\\bf x}$$が観測された時のクラス$$C_1$$の事後確率がロジスティック関数の形で表されている。\n", | |
"<br><br>\n", | |
"$$p(C_1|{\\bf x}) = \\frac{1}{1+exp(-a)}$$<br>\n", | |
"$$a = log \\frac{p({\\bf x}|C_1)p(C_1)}{p({\\bf x}|C_2)p(C_2)}$$" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 42, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"ちなみに、ロジスティック関数\n", | |
"<br>\n", | |
"$$y = \\frac{1}{1+exp(-x)} = \\sigma(x)$$\n", | |
"<br>\n", | |
"は、無限区間$$(-\\infty, \\infty)$$の値をとる$$x$$の区間$$(0,1)$$への写像である。" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"ちなみに、ロジスティック関数\n", | |
"<br>\n", | |
"$$y = \\frac{1}{1+exp(-x)} = \\sigma(x)$$\n", | |
"<br>\n", | |
"は、無限区間$$(-\\infty, \\infty)$$の値をとる$$x$$の区間$$(0,1)$$への写像である。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 37, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"この記事の最初に挙げた前の記事では、正解データ$$C_1, C_2$$が成功確率(ここでは$$C_1$$に分類される確率とする)\n", | |
"$$q$$をパラメータとする二項分布に従うと仮定し、この「$$C_1$$に分類される確率$$q$$」を観測データ$${\\bf x}$$\n", | |
"によって以下のように表した。\n", | |
"<br><br>\n", | |
"$$q = \\frac{1}{1+exp(-{\\bf w}^T{\\bf x})}$$\n", | |
"<br><br>\n", | |
"つまりこの式の線形予測子$${\\bf w}^T{\\bf x}$$はベイズの定理から始めた式の$$a$$に相当し、ここでの「$$C_1$$\n", | |
"に分類される確率$$q$$」は上の事後確率$$p(C_1|{\\bf x})$$である。" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"この記事の最初に挙げた前の記事では、正解データ$$C_1, C_2$$が成功確率(ここでは$$C_1$$に分類される確率とする)\n", | |
"$$q$$をパラメータとする二項分布に従うと仮定し、この「$$C_1$$に分類される確率$$q$$」を観測データ$${\\bf x}$$\n", | |
"によって以下のように表した。\n", | |
"<br><br>\n", | |
"$$q = \\frac{1}{1+exp(-{\\bf w}^T{\\bf x})}$$\n", | |
"<br><br>\n", | |
"つまりこの式の線形予測子$${\\bf w}^T{\\bf x}$$はベイズの定理から始めた式の$$a$$に相当し、ここでの「$$C_1$$\n", | |
"に分類される確率$$q$$」は上の事後確率$$p(C_1|{\\bf x})$$である。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 48, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"ベイズの式に戻る。ここで、上のロジスティック関数\n", | |
"<br><br>\n", | |
"$$p(C_1|{\\bf x}) = \\frac{1}{1+exp(-a)} = \\sigma(a)$$\n", | |
"<br><br>\n", | |
"の逆関数をロジット関数と呼び以下となる。\n", | |
"<br><br>\n", | |
"$$a = log \\frac{\\sigma(a)}{1-\\sigma(a)} = log \\frac{p(C_1|{\\bf x})}{1 - p(C_1|{\\bf x})}\n", | |
"= log \\frac{p(C_1|{\\bf x})}{p(C_2|{\\bf x})}$$\n", | |
"<br><br>\n", | |
"この、事後確率の比をオッズと呼び、ログを取ったものを対数オッズと呼ぶ。\n", | |
"<br>\n", | |
"ちなみに、$$a$$が対数オッズであるので、オッズは$$exp(a)$$である。" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"ベイズの式に戻る。ここで、上のロジスティック関数\n", | |
"<br><br>\n", | |
"$$p(C_1|{\\bf x}) = \\frac{1}{1+exp(-a)} = \\sigma(a)$$\n", | |
"<br><br>\n", | |
"の逆関数をロジット関数と呼び以下となる。\n", | |
"<br><br>\n", | |
"$$a = log \\frac{\\sigma(a)}{1-\\sigma(a)} = log \\frac{p(C_1|{\\bf x})}{1 - p(C_1|{\\bf x})}\n", | |
"= log \\frac{p(C_1|{\\bf x})}{p(C_2|{\\bf x})}$$\n", | |
"<br><br>\n", | |
"この、事後確率の比をオッズと呼び、ログを取ったものを対数オッズと呼ぶ。\n", | |
"<br>\n", | |
"ちなみに、$$a$$が対数オッズであるので、オッズは$$exp(a)$$である。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"ロジスティック回帰では、この$$a$$、つまり\n", | |
"<br><br>\n", | |
"$$a = log \\frac{p(C_1|{\\bf x})}{p(C_2|{\\bf x})}$$\n", | |
"<br><br>\n", | |
"を線形予測子$${\\bf w}^T{\\bf x}$$で表す。" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"ロジスティック回帰では、この$$a$$、つまり\n", | |
"<br><br>\n", | |
"$$a = log \\frac{p(C_1|{\\bf x})}{p(C_2|{\\bf x})}$$\n", | |
"<br><br>\n", | |
"を線形予測子$${\\bf w}^T{\\bf x}$$で表す。" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"ちなみに、本当にこのaをxの線形関数で表すことができるのか、という点については[このサイト(確率的生成モデル(2))](https://www.iwanttobeacat.com/entry/2018/07/15/212707)で考察されているので参照のこと。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"さて、ここまでで2クラスロジスティック回帰モデルにおける、各クラスに分類される事後確率がロジスティック関数の形以下のように表せること\n", | |
"<br><br>\n", | |
"$$p(C_1|{\\bf x}) = \\frac{1}{1+exp(-a)} = \\sigma(a)$$\n", | |
"<br><br>\n", | |
"そして、$$a$$を以下のように$${\\bf x}$$の線形結合で表すこと\n", | |
"<br><br>\n", | |
"$$a = log \\frac{\\sigma(a)}{1-\\sigma(a)} = log \\frac{p(C_1|{\\bf x})}{p(C_2|{\\bf x})}\n", | |
"={\\bf w}^T{\\bf x}$$\n", | |
"<br><br>\n", | |
"を書いた。\n", | |
"<br><br>\n", | |
"\n", | |
"ここから、2クラスロジスティック回帰モデルのパラメータの最尤推定を考える。つまり$${\\bf w}$$を最尤推定する。<br>\n", | |
"モデルの出力を確率変数$$t$$で表す。ただし、$$C_1$$に分類される時$$t=1$$で、$$C_2$$に分類される時$$t=0$$とする。<br>\n", | |
"ここで、$$t=1$$となる確率は$$p(t=1)=\\sigma({\\bf w}^T{\\bf x})$$であり、$$t=0$$となる確率は\n", | |
"$$p(t=0)=1-\\sigma({\\bf w}^T{\\bf x})$$である。<br>\n", | |
"$$\\alpha = \\sigma({\\bf w}^T{\\bf x})$$とおくと、確率変数$$t$$はパラメータ$$\\alpha$$をもつベルヌーイ試行\n", | |
"<br><br>\n", | |
"$$f(t|\\alpha) = \\alpha^t(1-\\alpha)^{1-t}$$<br>\n", | |
"where, $$t=0,1$$\n", | |
"<br><br>\n", | |
"に従うので、$$N$$回の試行に基づく尤度関数は以下である。\n", | |
"<br><br>\n", | |
"$$L(\\alpha_1,...,\\alpha_N)=\\prod_{i=1}^N f(t_i|\\alpha_i)=\\prod_{i=1}^N \\alpha_i^{t_i}(1-\\alpha_i)^{1-t_i}$$\n", | |
"<br><br>\n", | |
"目的は最尤推定であるので、これを最大化するようなパラメータ$${\\bf w}$$を求めたい。" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"さて、ここまでで2クラスロジスティック回帰モデルにおける、各クラスに分類される事後確率がロジスティック関数の形以下のように表せること\n", | |
"<br><br>\n", | |
"$$p(C_1|{\\bf x}) = \\frac{1}{1+exp(-a)} = \\sigma(a)$$\n", | |
"<br><br>\n", | |
"そして、$$a$$を以下のように$${\\bf x}$$の線形結合で表すこと\n", | |
"<br><br>\n", | |
"$$a = log \\frac{\\sigma(a)}{1-\\sigma(a)} = log \\frac{p(C_1|{\\bf x})}{p(C_2|{\\bf x})}\n", | |
"={\\bf w}^T{\\bf x}$$\n", | |
"<br><br>\n", | |
"を書いた。\n", | |
"<br><br>\n", | |
"\n", | |
"ここから、2クラスロジスティック回帰モデルのパラメータの最尤推定を考える。つまり$${\\bf w}$$を最尤推定する。<br>\n", | |
"モデルの出力を確率変数$$t$$で表す。ただし、$$C_1$$に分類される時$$t=1$$で、$$C_2$$に分類される時$$t=0$$とする。<br>\n", | |
"ここで、$$t=1$$となる確率は$$p(t=1)=\\sigma({\\bf w}^T{\\bf x})$$であり、$$t=0$$となる確率は\n", | |
"$$p(t=0)=1-\\sigma({\\bf w}^T{\\bf x})$$である。<br>\n", | |
"$$\\alpha = \\sigma({\\bf w}^T{\\bf x})$$とおくと、確率変数$$t$$はパラメータ$$\\alpha$$をもつベルヌーイ試行\n", | |
"<br><br>\n", | |
"$$f(t|\\alpha) = \\alpha^t(1-\\alpha)^{1-t}$$<br>\n", | |
"where, $$t=0,1$$\n", | |
"<br><br>\n", | |
"に従うので、$$N$$回の試行に基づく尤度関数は以下である。\n", | |
"<br><br>\n", | |
"$$L(\\alpha_1,...,\\alpha_N)=\\prod_{i=1}^N f(t_i|\\alpha_i)=\\prod_{i=1}^N \\alpha_i^{t_i}(1-\\alpha_i)^{1-t_i}$$\n", | |
"<br><br>\n", | |
"目的は最尤推定であるので、これを最大化するようなパラメータ$${\\bf w}$$を求めたい。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 30, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"ここで、計算しやすさのために対数をとり、また最小化問題にするために負の符号を付ける。\n", | |
"<br><br>\n", | |
"$$\\mathcal{L}(\\alpha_1,...,\\alpha_N) = -logL(\\alpha_1,...,\\alpha_N)\n", | |
"=-\\sum_{i=1}^N (t_i log \\alpha_i + (1-t_i)log(1-\\alpha_i))$$\n", | |
"<br><br>\n", | |
"この誤差関数は<b>交差エントロピー誤差関数</b>と呼ばれる。\n", | |
"<br><br>\n", | |
"$$\\alpha_i = \\sigma({\\bf w}^T{\\bf x}_i) = \n", | |
"\\frac{exp({\\bf w}^T{\\bf x}_i)}{1+exp({\\bf w}^T{\\bf x}_i)}$$\n", | |
"<br><br>\n", | |
"を上の式に代入すると以下が得られる。\n", | |
"<br><br>\n", | |
"$$\\mathcal{L}(\\alpha_1,...,\\alpha_N) = \\mathcal{L}({\\bf w}) \n", | |
"= -\\sum_{i=1}^N \\{ t_i {\\bf w}^T{\\bf x}_i - log(1+exp({\\bf w}^T{\\bf x}_i))\\}$$\n", | |
"<br><br>\n", | |
"(ここの式変形は難しくないので省略した。必要な知識は通常の対数計算のみ。)" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"ここで、計算しやすさのために対数をとり、また最小化問題にするために負の符号を付ける。\n", | |
"<br><br>\n", | |
"$$\\mathcal{L}(\\alpha_1,...,\\alpha_N) = -logL(\\alpha_1,...,\\alpha_N)\n", | |
"=-\\sum_{i=1}^N (t_i log \\alpha_i + (1-t_i)log(1-\\alpha_i))$$\n", | |
"<br><br>\n", | |
"この誤差関数は<b>交差エントロピー誤差関数</b>と呼ばれる。\n", | |
"<br><br>\n", | |
"$$\\alpha_i = \\sigma({\\bf w}^T{\\bf x}_i) = \n", | |
"\\frac{exp({\\bf w}^T{\\bf x}_i)}{1+exp({\\bf w}^T{\\bf x}_i)}$$\n", | |
"<br><br>\n", | |
"を上の式に代入すると以下が得られる。\n", | |
"<br><br>\n", | |
"$$\\mathcal{L}(\\alpha_1,...,\\alpha_N) = \\mathcal{L}({\\bf w}) \n", | |
"= -\\sum_{i=1}^N \\{ t_i {\\bf w}^T{\\bf x}_i - log(1+exp({\\bf w}^T{\\bf x}_i))\\}$$\n", | |
"<br><br>\n", | |
"(ここの式変形は難しくないので省略した。必要な知識は通常の対数計算のみ。)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 66, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"ここで、この交差エントロピー誤差関数を最小化する$${\\bf w}$$を求める為にこの対数尤度関数を$${\\bf w}$$で微分する。\n", | |
"<br>\n", | |
"総和記号内の第一項はスカラーをベクトルで微分する際の以下の公式を使って計算できる。\n", | |
"<br><br>\n", | |
"$$\\frac{\\partial}{\\partial x}{\\bf x}^T{\\bf a} = {\\bf a}$$\n", | |
"<br><br>\n", | |
"また、総和記号内第二項は、$$f(u) = log(u), g({\\bf w}) = 1+exp({\\bf w}^T{\\bf x}_i)$$\n", | |
"とおくと、以下の合成関数の微分公式とネイピア数の微分(公)式を使って計算できる。\n", | |
"<br><br>\n", | |
"$$f(g(x))′=f′(g(x))g′(x)$$<br>\n", | |
"$$(e^{ax})' = ae^{ax}$$\n", | |
"<br><br>\n", | |
"第二項の微分計算は具体的には以下である。\n", | |
"<br><br>\n", | |
"$$log(1+exp({\\bf w}^T{\\bf x}_i))' = log'(1+exp({\\bf w}^T{\\bf x}_i))(1+exp({\\bf w}^T{\\bf x}_i))'$$<br>\n", | |
"$$=\\frac{1}{1+exp({\\bf w}^T{\\bf x}_i)}{\\bf x}_i exp({\\bf w}^T{\\bf x}_i)$$\n", | |
"<br><br>\n", | |
"まとめると、この対数尤度関数の微分は以下のようになる。\n", | |
"<br><br>\n", | |
"$$\\frac{\\partial\\mathcal{L}({\\bf w})}{\\partial{\\bf w}} = -\\sum_{i=1}^N \\{t_i{\\bf x}_i \n", | |
"- \\frac{{\\bf x}_i exp({\\bf w}^T{\\bf x}_i)}{1+exp({\\bf w}^T{\\bf x}_i)} \\}$$<br>\n", | |
"$$=-\\sum_{i=1}^N (t_i{\\bf x}_i - {\\bf x}_i\\sigma({\\bf w}^T{\\bf x}_i))$$<br>\n", | |
"$$=\\sum_{i=1}^N {\\bf x}_i(\\sigma({\\bf w}^T{\\bf x}_i)-t_i)$$" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"ここで、この交差エントロピー誤差関数を最小化する$${\\bf w}$$を求める為にこの対数尤度関数を$${\\bf w}$$で微分する。\n", | |
"<br>\n", | |
"総和記号内の第一項はスカラーをベクトルで微分する際の以下の公式を使って計算できる。\n", | |
"<br><br>\n", | |
"$$\\frac{\\partial}{\\partial x}{\\bf x}^T{\\bf a} = {\\bf a}$$\n", | |
"<br><br>\n", | |
"また、総和記号内第二項は、$$f(u) = log(u), g({\\bf w}) = 1+exp({\\bf w}^T{\\bf x}_i)$$\n", | |
"とおくと、以下の合成関数の微分公式とネイピア数の微分(公)式を使って計算できる。\n", | |
"<br><br>\n", | |
"$$f(g(x))′=f′(g(x))g′(x)$$<br>\n", | |
"$$(e^{ax})' = ae^{ax}$$\n", | |
"<br><br>\n", | |
"第二項の微分計算は具体的には以下である。\n", | |
"<br><br>\n", | |
"$$log(1+exp({\\bf w}^T{\\bf x}_i))' = log'(1+exp({\\bf w}^T{\\bf x}_i))(1+exp({\\bf w}^T{\\bf x}_i))'$$<br>\n", | |
"$$=\\frac{1}{1+exp({\\bf w}^T{\\bf x}_i)}{\\bf x}_i exp({\\bf w}^T{\\bf x}_i)$$\n", | |
"<br><br>\n", | |
"まとめると、この対数尤度関数の微分は以下のようになる。\n", | |
"<br><br>\n", | |
"$$\\frac{\\partial\\mathcal{L}({\\bf w})}{\\partial{\\bf w}} = -\\sum_{i=1}^N \\{t_i{\\bf x}_i \n", | |
"- \\frac{{\\bf x}_i exp({\\bf w}^T{\\bf x}_i)}{1+exp({\\bf w}^T{\\bf x}_i)} \\}$$<br>\n", | |
"$$=-\\sum_{i=1}^N (t_i{\\bf x}_i - {\\bf x}_i\\sigma({\\bf w}^T{\\bf x}_i))$$<br>\n", | |
"$$=\\sum_{i=1}^N {\\bf x}_i(\\sigma({\\bf w}^T{\\bf x}_i)-t_i)$$" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"これが0となるような解を勾配降下法などの手法で求める。" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.5.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment