絡んでくる知識
- 最尤推定
- ロジスティック回帰
- 交差エントロピー誤差
- 勾配法
- 2次元入力2クラス分類
- ロジスティック回帰
- 2次元入力3クラス分類
それぞれ、何をしているか
。分類をするのにこれらの計算をなぜ使うのか
最尤推定(pg212)
まずは、最尤推定から、
ある事象(今回の場合1~3回目がt=0, 4回目がt=1)から、それぞれの事象が起こりうる尤もらしい確率を推定する。
$P(t=1|x)=w$
あるxという入力でt=1となる確率wという式。
T=[0,0,0,1]なので、普通に考えれば1/4でしょ!
となるが、これを最尤推定で求める。
w=0.1の時の尤度を求めてみる
$w=P(t=1|x)=0.1$なので、t=1となる確率(尤度)は$0.90.90.9*0.1=0.0729$(それぞれの値が[0,0,0,1]で出てくる確率(w=1の時))
これら4つを掛け合わせる理由は
T=[0,0,0,1]が出る時の確率を求めたいので、
(1回目t=0となる確率0.9)×(2回目t=0となる確率0.9)×(3回目t=0となる確率0.9)×(4回目t=1となる確率0.1)=(T=[0,0,0,1]となる確率)
と表すことができるから。
そして、最尤推定はこの、0.9, 0.1というwが尤もらしいかどうかを求める計算
よって、w=0.1の時の尤度は0.0729
これが、w=0.2のときは??
$0.80.80.8*0.2=0.1024$で
w=0.2の時の尤度は0.1024
どちらの方が尤度が高いかというと、もちろん後者なので、t=1となる確率wが0.2の時の方が尤もらしい。
これが最終的にはw=0.25($1/4$)の時が一番高くなる。
この、どの確率が最もそれらしい確率かを解析的に求めるために0~1の範囲でどこのwが一番良いかを考える
・それを求めるのに、式を一般化して、それぞれの数をぶち込めるようにする。
それが、
$$
P(T=0,0,0,1|x)=(1-w)^3w
$$
で表せる。
これを0~1の入力値wの範囲で表したときに山形になり(P214)
、頂点部分のが最も尤もらしいwであると言える。
それでは、最大値を求めてみよう!
$P=(1-w)^3(w)$の対数をとって計算を楽にして最大値を求めてみる(対数をとっても最大をとる時のwは変わらない)
対数をとったものが↓
$logP=log{(1-w)^3w}=3log(1-w)+log{w}$
(普通に対数をとる時の計算。累乗が降りてきて足し算になる)
微分して傾き=0の箇所を探す
$\frac{\partial}{\partial w}logP=\frac{\partial}{\partial w}[3log(1-w)+log w]=0$
よってここで言っていることは、$w=\frac{1}{4}$ の時が一番,
T=[0,0,0,1]が最も生成されるであろうモデルパラメータである。ということ
w=1/4が最尤推定。
最尤推定初歩版終了!
ロジスティック回帰モデル(P216)
・ロジスティック回帰モデルを使うことで、入力xを0~1の範囲に圧縮することができるので、分類の確率として使いやすい。
直線モデルにシグモイド関数を通すことで、xがt=1となる確率を次のように表せる
ロジスティック回帰
$$
y=w_0x+w_1\
$$
$$
y=\sigma(w_0x+w_1)=\frac{1}{1+exp(-(w_0x+w_1))}
$$
(平均)交差エントロピー誤差
・ロジスティック回帰を確率とみなす(前回のwの値)
・そこで、入力値xから
・良い感じの重みwを求めたい。次に求めたwを使って、作成したモデルにxの値を入力すると予測値が得られる。
$$
y=\sigma(w_0x+w_1)=P(t=1|x)
$$
この時のyは、確率を表す。
いきなり、シグモイド関数が出てきたが、これは今まで扱っていた確率wをyに置いたもの。(シグモイド関数を利用することで入力値x($y=w_0x+w_1$)から求められるyを)確率として表せますよ。ということを言っている。
⭐️以上のことから、$y=w=\sigma(w_0x+w_1)=P(t=1|x)$となる。
(重要):
P218ではこのモデルのパラメータ$w_0$と$w_1$が虫のデータに合うように最尤推定する。
「このモデルから虫のデータが生成されたとして、最もあり得る(確率的に高い)パラメータを求める。」
前説では、T=[0,0,0,1]について考えたが、今回は全てのケースに応用できるように考える。
P218
データが1つだけだとし、ある体重xに対してt=1だったら、t=1がモデルから生成される確率は、ロジスティック回帰モデルの出力値yそのものです。
前のページの画像です。
これをみるとロジスティック回帰モデルは直線式モデル(この直線式は入力値xから値yを求める直線式)がシグモイド関数によって1~0の範囲で押し潰されているので確率として扱うことができる。
なので、ここでは
y=(t=1である確率)
1-y=(t=0である確率)
として扱う。
このことを一般化したモデルが矢印
$$
P(t|x)=y^t(1-y)^{1-t}
$$
それで今度はデータ数がN個だった場合を考える
前節でT=[0,0,0,1]というのを考えていたところを
X=[$x_0, x_1,・・・,x_n$]
T=[$t_0, t_1,・・・,t_n$]
(T=[0,0,0,1,1,1,0,1,・・・N個])というパターンを考える。
前節でやったようにT=[0,0,0,1]のときは[$0.80.80.8*0.2=0.1024$]みたいに求めてたものを、一般化した式でも同じように最尤推定を求めるべきなので、$x_0~x_n$までの全パターンを全て掛け合わせれば良い
これがP219のところで言っている「1つ1つのデータの生成確率を全てのデータで掛け算すれば良いので、式(6-15)のようになる。これが尤度です。」
の箇所である。
なので式(6-15)は以下のようになる(全て掛け合わせているから
$$
P(T|X)=\prod_{n=0}^{N-1}P(T|X)=\prod_{n=0}^{N-1}y_n^{t_n}(1-y_n)^{1-t_n}
$$
となり、これが尤度を表す。(P214の山形のグラフのこと)
これを、前回同様対数をとって式を簡単にすると、対数尤度が↓
$$
logP(T|X)=\sum_{n=0}^{N-1}[{t_nlogy_n+(1-t_n)log(1-y_n)}]\hspace{70pt}(6-16)
$$
それでもってこれも前回同様、のこの確率値の最大のものを選べば良い(それが最大尤度だから$w_0とw_1$が求められる。)
これに、-1をけかけて上下逆転させ、Nで割ったものを「平均交差エントロピー誤差($E(n)$)」とよあれる$$
E(n)=-\frac{1}{N}logP(T|X)=-\frac{1}{N}\sum_{n=0}^{N-1}[{t_nlogy_n+(1-t_n)log(1-y_n)}]\hspace{70pt}(6-17)
$$
あとは計算して、この最小値の時の$w_0, w_1$が適切なwなので解析かいで$w_0=1, w_1=1$と適当に入れてそこから偏微分で傾きを調べて、傾きが小さい方に進んでいけばOK!
2次元入力2クラス分類(P228)
虫で例えると、重量($x_1$)と体長($x_2$)の入力があり(2次元入力)、オスかメス(2クラス)を見分ける。
1ofK符号法
ロジスティック回帰モデル(2次元入力ver.)
前回までは1次元入力で考えていたので、今回は2次元入力を考える。
P232$y=\sigma(a)$を考える
$$
y=\sigma(a)
$$
前回までは、このaは$w_ox+w_1$と表されていて、1次元入力だったが、これを2次元入力で考える。
そうなるとa=の部分が[$a=w_0x+w_1$]から→[$a=w_0x_0+w_1x_1+w_2$]となる。
前回同様に、これをシグモイド関数に通したものがt=1ort=0の確率(y)となる。
(今回はt=0の時の確率をy、t=1の時の確率を1-yとしている)
よって、
$P(t=0|x)=\sigma(a)=y$
$P(t=1|x)=\sigma(a)=1-y$
というモデルになる。
一般化したモデルが、これも前回同様に$P(t|x)=y^t(1-y)^{1-t}$となるので、これの平均交差エントロピー誤差を求める損失関数は
$$
E(w)=logP(T|X)=\sum_{n=0}^{N-1}[{t_nlogy_n+(1-t_n)log(1-y_n)}]\hspace{70pt}
$$
をそのまま使える。
この交差エントロピー誤差の最小値を勾配法で求めれば適切な値$w_0,w_1,w_2$が求めれる。
最終的に、これを計算した$w_0,w_1,w_2$を使ってそれぞれ$y=\sigma(a)$($a=w_0x_0+w_1x_1+w_2$)のwにその値を入れることで、誤差が少ない分類モデルを作成できる。
その作成した分類モデルのグラフが、P238にあるグラフで、その境界線がそれぞれのクラスを分ける境界線となる。
2次元入力3クラス分類
ここからは、入力が2次元のままだが、分類するクラスが3つある場合を考える。
これは、モデルの出力にシグモイド関数の変わりに、ソフトマックス関数を導入することで3クラス以上の分類に対応させることができる。
例えば、3クラスの分類問題であれば、3つのクラスに対応する入力総和$a_k(k=0,1,2)$を考える
$$
a_k=w_{k0}x_0+w_{k1}x_1+w_{k2}\hspace{20pt}(k=0,1,2)\hspace{40pt}(6-40)
$$
現状では$X=[x_0,x_1]$と2つの入力だが、そこに常に1をとるダミー入力値$x_2$を設定してあげる。そうすると
$$
a_k=w_{k0}x_0+w_{k1}x_1+w_{k2}x_2=\sum_{i=0}^{D}w_{ki}x_{i}\hspace{10pt}(k=0,1,2)
$$
となる。
それで前回同様に、シグモイド関数に入れてた手順を、$a_k$をソフトマックス関数に入れるようにする。
$$
ソフトマックス関数=y_i=\frac{exp(x_i)}{\sum_{j=0}^{K-1}exp(x_j)}
$$
このxのところが総和$a_k$に変わるので、今回使うモデルは
$$
y_i=\frac{exp(a_k)}{\sum_{k=0}^{K-1}exp(a_k)}
$$
となる。
下辺の和の部分をuと置く
$u=exp(a_0)+exp(a_1)+exp(a_2)$
それで得られる式は
$$
y_k=\frac{exp(a_k)}{u}\hspace{20pt}(k=0,1,2)
$$
となる。
あとは、前節でやったことと同じことをやってあげる ・それぞれの確率の式を出してそれを一般化した式を作成$P(t|x)=y_0^{t_0}y_1^{t_1}y_2^{t_2}$(P242) ・そして、Nこのデータが生成された確率を出すのに全て掛け算してあげる ・最後に対数尤度をとって最小値を求め、適切なwを導き出す。 ・そのwを使って分類するためのモデルを作成(分類線を表示させることができる式を得られる)訓練データを使って分類するためのモデルを作る、そのモデルにテストデータを入れればクラス分類が出されるような仕組み