「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>機械学習(machine learning)]] *目次 [#d85a8ac0] #contents *概要 [#ccd8f33a] 機械学習の理論 *詳細 [#ee071adc] **情報理論 [#z83dd630] -情報理論は数学を用いて「情報」の本質を明らかにする学問。 -応用先には効率の良い情報通信や通信時の情報誤りの訂正等がある。 -ココでは機械学習の習得に必要な範囲の情報理論の習得する。 -機械学習において、情報理論を元にした手法 --[[ランダムフォレスト>統計解析#lcaf7a28]]~ ランダムに選択された説明変数のエントロピーを最小化~ するような閾値を決定し特徴量の重要度を自動で算出 --マルコフ確率場~ 画像内のノイズ除去等に用いるグラフィカルモデルとして利用される。 ***自己情報量 [#q4dd5044] -直感的に表現するとすれば「情報の珍しさ」の値 -「ある事象が起きた時にどのくらい珍しい事象か」という尺度 -確率の逆数(レア度)のlogで、~ 情報が珍しいほど大きく珍しくないほど小さい I(x) = log (1/P(x)) = -log P(x) ※ 0≦P(x)≦1 --確率を用いて表す。 --珍しい=確率が低い事ほど情報量が多い。 --実際、[[logのグラフ>E資格:試験対策#dadb2e77]]で見ると明らか。 --複数の事象が起こる確率は積で計算されるが情報量は和で計算 ***エントロピー [#g9e50597] -「平均情報量」や「シャノン・エントロピー」とも呼ばれる。 -「[[自己情報量>#q4dd5044]]」の拡張で「事象の予想のし難さ」 -グラフは予想の難しい事象時に最大で非一様分布の方がエントロピーが低い。 -ある事象 X が起こったと分かった時に得られる[[情報量>#q4dd5044]]の[[期待値>統計解析#uc4eb504]]を指 す。 -[事象の起こる確率]と[ [[自己情報量>#q4dd5044]] ]を掛け合わせたモノの総和 H(x) = Σ-P(xi)logP(xi) = -ΣP(xi)logP(xi) --複数の事象が起こる確率は積で計算されるが情報量は和で計算 --それぞれの事象の起こり易さを足し合わせた情報 --それぞれの事象の起こり難さの重み付けを行った上で計算 -結合エントロピー H(x, y) = Σ -P(xi,yi)logP(xi,yi) = -Σ P(xi,yi)logP(xi,yi) x,y x,y -条件付きエントロピー H(x|y) = H(x, y) - H(y) -相互情報量 I(x;y) = H(x) + H(y) - H(x, y) I(x;y) = H(x) - H(x|y) I(x;y) = H(y) - H(y|x) #ref(conditional_entropy.png,left,nowrap,30%) ***ダイバージェンス [#s8ca9e50] -「相対エントロピー」や「KLダイバージェンス」「KL情報量」とも呼ばれる。 -異なる確率分布P(x), Q(x)にどれだけの差があるのか?を考える情報量の1種。 -二つの確率分布が一致するなら値は 0 になる(確率分布の差なので確率分布が同じなら0)。 -データの分布とガウス分布の類似度をダイバージェンスの考え方で測る。 D(P||Q)=∫q(x) log(q(x) / p(x)) dx = ∫q(x) log q(x) - q(x) log p(x) -この式は機械学習を行うときの損失関数として用いられる。 -その際、この式の第1項が常に一定だから第2項のみを用いる。 ※ KL:カルバック・ライブラー ***例題1 [#k9db7af5] 細工されたサイコロの出る目の確率分布表 |>|BGCOLOR(#d0d8e0):確率変数 X |1 |2 |3 |4 |5 |6 |h |>|BGCOLOR(#d0d8e0):確率 P |0.3 |0.2 |0.2 |0.2 |0.1 |0.0 | |BGCOLOR(#d0d8e0): 確率変数 Y |BGCOLOR(#d0d8e0):1(X1=X2) |0.09 |0.04 |0.04 |0.04 |0.01 |0.00| |~|BGCOLOR(#d0d8e0): 0(X1≠X2) |0.3-0.09 = 0.21|0.2-0.04 = 0.16|0.2-0.04 = 0.16|0.2-0.04 = 0.16|0.1-0.01 = 0.09|0.00| ※ ビットでの回答になる場合は、logの底は2となる。 -X=3の[[自己情報量>#q4dd5044]] log(1 / 0.2) = -log0.2 -[[エントロピー=シャノン・エントロピー=平均情報量>#g9e50597]] --エントロピー(H(X1)) = - (0.3 * log0.3) - (0.2 * log0.2)*3 - (0.1 * log0.1) = - ( (0.3 * log0.3) + (0.2 * log0.2)*3 + (0.1 * log0.1) ) --エントロピー(H(Y)) ... -結合エントロピー(H(X1, Y)) = - {(0.21 * log 0.21) + (0.16 * log 0.16)*3 + (0.04 * log 0.04)*3 + (0.09 * log 0.09)*2 + (0.01 * log 0.01)} -条件付きエントロピー、相互情報量(I(X1;Y))~ ...は以下で計算可能(H(Y)は与えられる、計算方法は?)。 I(X1;Y) = H(X1) + H(Y) - H(X1, Y) ***例題2 [#a8eec8d7] **統計的機械学習 [#ibaa375a] -[[統計解析]]、[[ベイズ統計]]などをベースにした計算統計学 -機械学習のうちデータの確率的な生成規則を学習するもの -統計的機械学習のモデルは統計モデル・生成モデルとも呼ばれる。 ***統計モデル [#e2f3af75] -複数の変数同士の関係を定量的に表す。 -統計モデルでよく使われるのは回帰モデル ***確率的モデル [#faded404] ある確率密度分布があって、その分布に従い、データが生まれてくるような、モデル。 ***生成モデル [#k88acab8] データがある、ということは、そのデータを生成する原因がある、と考える。 -最尤法、ベイズ法で最適化されたモデルも生成モデルの可能性があるが、最小二乗法で最適化されたモデルはそうではない。 --最尤法では、パラメタの点推定を行い、固定された確率密度/質量関数を得る。 --ベイズ法 では、パラメタ自体が確率分布となり、確率密度/質量関数は事後分布を考慮した形で得られる。 -言語モデルが生成AIなのは、次単語予測などの学習は、最尤推定に基づく確率的最適化の問題とみなせるため。 ***分類モデル(識別関数、識別モデル、生成モデル) [#p3f4e303] 機械学習で分類問題を解く場合、 -識別関数~ 確率は関係なく、入力空間に識別面を直接引く方法 --[[サポートベクターマシン(SVM)、k近傍法>機械学習(machine learning)#mcb6a10f]]、[[パーセプトロン(PPN)>データマイニング(DM)- Python#gc1a3d04]]などの識別的アプローチ。 --識別関数に入力データを与えると、それが属すると予測されるクラスを直接出力する手法 C = f(w, x) pred --確率値が出力値でないので、クラスの評価がどの程度正しいか、間違っているのか知ることができない。 --SVMでは入力データの超次元空間に識別境界を描きクラスの分布を把握できる。 -識別モデル~ 事後確率P(Ci|x)を直接モデル化する[[確率的モデル>#faded404]]、識別の部分のみに確率の考え方が導入されたモデル。 --[[条件付き確率>ベイズ統計#v372de91]](Xが観測されたときクラスYが実現する確率)を学習する。 --入力データを与えると、各クラス毎にそれが属する条件付き確率(事後確率)を割り当てる。 C = argmax p(C|x) pred c --ロジスティック回帰、 DNNやCNNの2値分類、多値分類など。 ---ロジスティック回帰分析ではSigmoid関数を使用している。 ---DNN、CNNなどSigmoid関数、Softmax関数を使用している。 --確率に基づいた識別境界を設定することが可能。 --確率に基づいた閾値を設定し、閾値を下回った場合は回答しないモデルとすることもできる。 -[[確率的生成モデル>#qbf63bf2]] ***確率的生成モデル [#qbf63bf2] -何らかの分布に基づいてデータが生成されると考える。 -データの生成過程を確率的にモデル化する。 --事前確率P(Ci)と確率密度関数P(x|Ci)をモデル化し、 --それからベイズの定理を使って事後確率P(Ci|x)を計算し、 --最も事後確率が高いクラスを識別したクラスとする方法 --つまり、与えられたデータセットの確率分布を推定し、その分布から新しいデータをサンプリングする。 -入力データの分布(生成モデル)を学習する。 --データは背後にある確率分布から生成されたものと仮定。 --データの背後にある同時確率分布は生成モデルと呼ばれる。 --与えられているデータから未知の生成モデルを予測(モデル化)できる。 --学習と生成の間の2つの確率分布間の差異を[[数理最適化>#r91e67ac]]で最小化するなど。 --教師なし学習(外れ値検知、画像生成)などにも応用できる。 -生成タスクとは --訓練データの分布を推論し、同じ分布のデータを生成する。 --潜在的空間を学習することによって、様々な表現を取ることができる。 -生成モデルでできること。 --生成モデルにより(クラスに属する)擬似的データを生成できる。 --その他にも、ノイズ除去、異常検知などを行うことができる。 --画像生成系:[[VAE(Variational auto-encoder)>ニューラルネットワーク#l7546f0f]]、DRAW、[[GAN(Generative Adversarial Network>ニューラルネットワーク#b6b45e6b]] ***決定論的生成モデル [#b3636951] -データの生成過程を確率的ではなく、通常は決定論的にモデル化する。 -つまり、生成されたデータは確率的ではなく、一意の出力が与えられた入力に対して生成される。典型的なモデルに、RNNやAEなどがある。 -テキスト生成系:[[BERT(Bidirectional Encoder Representations from Transformers)>言語処理(AI)#l0841a18]]、[[GPT(Generative Pre-trained Transformer)>言語処理(AI)#a1d46512]] **数理最適化 [#r91e67ac] -機械学習の最適化とは「経験損失最小化」で純粋な最適化とは異なる。 --本来は訓練データではなくデータ集合全体 --真のデータ分布を訓練データ集合の分布に置き換え損失関数の最小化にすり替える。 --実用的な損失関数は簡単に最適化できないものもある。 --このため最適化が容易な代理損失関数を最適化する。 --早期終了があるという点でも一般的な最適化と異なる。 -以下のような方法で関数(的なモノ)の[[パラメタ>#bdce9b16]]の更新(学習)をおこなう。 ***最小二乗法 [#k0b12fbe] サンプル・データとの誤差が最小になる平均値を探す。 -説明変数から推定される目的変数と教師データの誤差を最小化するよう、~ 損失関数を最小化する近似関数のパラメタのポイントを探る。 ***最尤法 [#a78d0b4a] 最小二乗法の次なのに一気に難しくなる。ここが理解できたのは黒本やってから。 -サンプル・データが得られる確率(尤度)が最大になる平均値を探す。 -ダイバージェンスの最小化が、最尤推定と一致する場合がある。 -損失関数のかわりに尤度関数を使用する。尤度関数は損失最小化ではなく、もっともらしさを最大化する。 -尤度関数は、初期値として仮定した確率分布に対応する確率密度/質量関数と得られる値の積で定義される。 --尤度関数は、積の形にすることで、すべての観測データの条件付き確率を評価しその最大化を行うことができる。 --尤度関数は、条件付き確率(説明変数に対する目的変数が特定の関数の下で観測される確率)自体ではないがその大きさを表す。 -この尤度関数を最大化するように、確率密度/質量関数の近似関数のパラメタのポイントを探る。 -分布→尤度→対数尤度(ΠをΣに変換、微分が楽になる)→ 対数尤度関数の(正負反転の)最小化問題を微分で解く。 -最尤法でロジスティク関数やソフトマックス関数を使用する分類問題を最適化する場合、尤度関数はロジスティク関数やソフトマックス関数の合成関数になる。 ***ベイズ法 [#d1adc104] 簡単なベイズ更新のような仕組みでしか説明されていない。 -新しいデータが得られるたびに、事前分布から事後分布を求め、事前分布を更新していく。 **独立同時分布仮定 [#o0d1539c] (IID仮定) -学習データに対して置かれた仮定。 --各データのサンプルが互いに独立 --訓練データとテストデータが同一の分布に従う -訓練データと検証データを同じモデルで扱うことができる。 -ただし、コレによって[[過学習>#l377f5cd]]が発生し得る。 *参考 [#a9dbdd0e] https://www.osscons.jp/joho108j0-537/#_537