スパース性に基づく機械学習のわからないとこのメモ
タイトル通りL1ノルムとか正則化あたりを理解しようと思ったので「スパース性に基づく機械学習」という本を読んでる
わからないというより日本語が理解できないところがいくつかあったのでメモとして残して、理解できた部分はここでまとめることにする。
わからないとこは箇条書きする
未解決のとこでわかる人いれば助けてほしい・・・・・・・
第1章
スパース性というのは「まばら」を意味する単語
この本だとn次元のベクトルが非ゼロの成分がごく一部しかなくて、それ以外の成分が0なものとかを指す
こんな感じ
スパース性の考えが機械学習にどう役立つか?というのを「ひよこのオスとメスの分類」で考える
ひよこのオスとメスを仕分けするバイトがあるとして、どう仕分けするか。クチバシとか足とか全身をくまなく調べて仕分けする方法を取った時、全身を見るのでかなり時間がかからないだろうか。
実際に仕事としてやっている人たちはどうやら肛門や羽といった一部分のみを調べて仕分けしているそう。
これは全身、「すべての特徴」を見るのではなく「ある一部分の特徴」にのみに注目するだけで仕分けができるということを意味している。スパース性の考えとしては一部分(非ゼロ)ということになる。
また「すべての特徴」がひよこのオスとメスの分類に関係あるとしたら沢山のひよこの「すべての特徴」をくまなく調べないといけないが、「ある一部分の特徴」のみが関係あるとしたら、少数のひよこからその関係を調べるだけで済む。
こんな感じでスパース性は「計算量」の節約の他に「統計に必要なサンプル数」といった統計的な問題を良い方向に持っていってくれることができる。
ここで「ある一部分の特徴」のみが関係しているはずと仮定を立てたとして、「ある一部分の特徴」がどこなのかはわかっていない状況なのでその特徴は自分たちで探さないといけないというのも重要
- ページ2の「スパース性の拡張のもう一つの例として行列の低ランク性が~」の部分 --- 解決
d行T列の行列を推定する問題で行列のランクがであるということは、T個の学習課題に共通する個の要因が存在することを意味する
省略したけど大体ここら辺が理解できなかった
まず特異値というのは、これは行列Aを相似変換して対角行列の形にしたとき、その対角成分が非ゼロな値のものを特異値と呼ぶっぽい
そして相似変換された元の行列Aのランクはこの特異値の数と一致する性質があるとのこと。
$$ A = \begin{pmatrix} a_1 & a_2 & a_3 \\ a_4 & a_5 & a_6 \\ a_7 & a_8 & a_9 \end{pmatrix} $$
行列Aが(3,3)行列だったとして、第3列目が第1列目の3倍、つまりといった関係だったとしたら、3次元のうち一つの次元は残りの次元で表現できるということを意味する。
基底でいえば線型独立ではないって言えるということかな
スパース性でいえば、3次元の「すべての特徴」を見る必要はなくなったといえる
ここミスってる気がするから修正する
第2章
- ページ4の「例示することが容易でも、ルールとして言い表すことが難しい事柄が多数存在する」 --- 疑問
MNISTみたいな手書き数字の分類で言えば、例示で「手書き数字の0と9の区別」を説明するのは簡単だけど、ルールで説明するには「基準としての手書き数字0と9」を定義しなければ説明できないが、基準を定義するにはほぼ無限にあるサンプルが必要であり困難ということであってる?
- ページ5,6の相対エントロピーやロジスティック損失の導出 --- 未解決
イルカの方の深層学習で導出したような気がするのでそっちを復習してまとめるはず
この本では予測や分類を「入力ベクトルが与えられたもとで、どの程度よくラベルを予測(分類)できるか」という観点で評価する。データから学習して、分類などを行いたいデータの背後にある未知の確率分布に関する期待値を求める
でもこの期待値は未知の確率分布に関する期待値だから直接評価はできないため、訓練データからをある程度近似するということ。
統計学の授業で「日本人の20歳の平均身長」を求めたいとき全ての20歳の日本人のデータを集めるのはほぼ無理というか難しいから、例えばいくつかの大学に協力してもらったりして有限の人数、いくつかの20歳の日本人のデータを集めて「日本人の20歳の平均身長」を近似するという話に似ている気がする
そのため訓練データから期待誤差を近似したもの、最小化をすることを経験誤差と経験誤差最小化と呼ぶ
深層学習でよく定義する訓練誤差とかはこっちを指してるんだな
深層学習の本で入力と重みとバイアスを用いた といった曲線の式をよく見る。この曲線に従ってラベルを予測したりヌンヌン...
誤差を最小にするというのは訓練データでいえばという曲線による予測が訓練データがもつ答えと大体一致して欲しいということ
曲線の形をグニャグニャ変えていけばいつかは大体一致する曲線になっていくはず。との値を変えていくと形は変わるので、最小化するとは最適なとを見つけること。
最小化を達成するためのを推定量と呼び、ハットをつけて区別するらしい
- ページ7のこの最適化問題は~... --- 疑問
ある行列
のランクが以上であれば、一意に解が定まる
ここが「?」となった。伝えたいことはランクが以上ということは解決したいことがらは次元で表現できるということ。3次元なら2次元で表現することは難しいから論外(というか自己符号化器の話になる?)として、以上なら次元が多くても、求めたいは定まるということかな。
訓練誤差が小さい値になったからといって近似したい期待誤差が小さいとは限らないことがある。こういう状況は取ってきた一部、訓練データにかなり適合してしまっているとかが考えられる。適合しすぎて期待誤差が大きくなってしまう現象を過剰適合、オーバーフィッティングと呼ぶ。過適合ってやつだ
訓練誤差が小さくなって、期待誤差もそこそこ小さくなることを汎化するという。よく汎化性能って単語見ますね
過適合を防ぎ、汎化性能を上げるにはモデルを制約し、誤差への当てはまりを抑えることが大事になってくる。モデルを制約する方法としては
- 多項式などの独立な基底関数の和として関数を表現し、その基底関数の数を小さく抑える
- 関数の何らかのノルムを抑える
む、難しい単語で書かれてる・・・・。今までの知識を振り絞って考えると1つ目は要するに「次元数を抑えろ」ということだと思う。基底関数でエッッと混乱したけど、曲線を表す多項式は行列で表すとき、極端な話単位ベクトルで構成される基底で分解して表現できるはず。基底関数の数を小さく抑えるというのはこの基底の要素である基底ベクトルの本数を減らすということ。基底ベクトルの本数が減るんだから次元数も当然減る。
近似したい曲線が3次式のする。この曲線を3次式以上で表現しようと考えると、できないことはないが近似したい曲線と形は離れていくかもしれない。それは汎化性能が落ちてしまうことになる。
2つ目は次元数を固定したときの係数(推定量)のとり方の制限かな。実数範囲から係数の値を選べるとしてある次数の係数はめっちゃ大きくとって別の係数は小さくとって・・・とバラ付きすぎるのは問題。実数のある値より大きい値は取らないみたいな制約を決めてを選ぶ方法をとるということ。
- ページ12~14の平均期待二乗誤差 --- 未解決
ここ完全に頭追いつかなかった。
まず推定量の期待二乗誤差の訓練データに関する期待値を
と定義する
また次数pのとき
このとき平均期待二乗誤差は
(二乗が抜けていたので赤で修正)この導出が全然わからん・・・。第一行目でおそらく二乗の中身を
\[
(( \hat{\boldsymbol{w}}^{T} + \bar{\boldsymbol{w}}^{T} - \bar{\boldsymbol{w}}^{T} + {\boldsymbol{w}^{\ast}}^{T} - {\boldsymbol{w}^{\ast}}^{T} )\boldsymbol{\phi}(x) - y )^{2}
\]
こんな感じにして変換しているとは思うけど第二行目の変換で悩んでしまった。
※追記( 12/29 )
は推定量を見つけるために使った訓練データ(標本)からの期待値
は推定量の訓練データに関する期待値らしくと定義している
最適性条件というのは
\[ E [ \boldsymbol{\phi}(x)(\boldsymbol{w}^{\ast} \boldsymbol{\phi}(x) - y) ] = 0 \]
は全てに当てはまる理想のパラメータだから、のところが0にならないといけないということなはず
平均二乗誤差に存在するは計量行列と呼び以下のように定義される
\[ {\sum}_x = E [ \boldsymbol{\phi}(x) \boldsymbol{\phi}^{T}(x)] \]
この計量に基づく距離を
\[ || \boldsymbol{w} - \boldsymbol{w}^{\prime}||_{\sum{x}} = \sqrt{ (\boldsymbol{w} - \boldsymbol{w}^{\prime})^{T} {\sum{x}} (\boldsymbol{w} - \boldsymbol{w}^{\prime})} \]
と定義しているそうだ
ちなみに最後の行の第一項は期待値のまわりでの推定量の揺らぎを定量化する項、ばらけ具合ということで分散になって、第二項は期待二乗誤差を最小化するパラメータと推定量の期待値の距離の2乗でありバイアス(近似誤差)を定量化する項になる
近似して求めたいのは期待二乗誤差を最小化する理想のパラメータでありになれば推定量は不偏推定量(訓練データ(標本)から求めた期待値が母集団の期待値と一致)になるのはわかる。
最適性条件などを使って平均期待二乗誤差を導出しているらしい。まとめておく
- ページ18の制約付き最小化問題と罰則項付き最小化問題の等価性 --- 未解決
ヤバイ
文がわからなかっただけなので後回しかも
※追記(1/1)
ラグランジュの未定乗数法のことという神の声を頂いた
第3章
を満たすようなパラメータ(ベクトル)を決めるとき、ベクトルの非ゼロ要素は少ない方がいい。
例として電車を考える。目的地まで電車で移動したいとき、同じ料金、同じ時間で到着するなら乗り換え(の非ゼロ要素として見る)は少ない方が嬉しくないだろうか。自分は乗り換えが苦手なので少ない方が助かる。
なので推定量を見つけるときの条件として新たに非ゼロ要素は k個 以下という制約を加えてあげればより良いを見つけることができると書いてあった。すごい。
しかし残念ながらこのような制約を加えた最適化問題の計算は現実的に困難であるそうだ。ええ・・・。
理由としてはを満たすようなの組をしらみ潰しというかブルートフォース?とも言えるのだろうか、調べなくてはいけないから。次元数が増えれば増えるほど調べないといけない組の数は多くなってしまう。
困ってしまった。そこでL1ノルム正則化と呼ばれる手法が役に立つ。
ベクトルのL1ノルムはベクトルの要素ごとの絶対値の線形和として
で表される。
ベクトルの非ゼロ要素の数が多いほど、L1ノルムの値も大きくなる。非ゼロの数が1、2、と増えていくのとは別でL1ノルムの値は要素の値によって比例して大きくなることに注意。
このL1ノルムと呼ばれるものを使って非ゼロ要素が少なくて、求めたい要件を満たすようなを見つける。最適化問題としては
あるいは
と表される。また条件として
L1ノルムはみたいな形をしているから任意の d次元ベクトルのL1ノルムは凸関数になる
なので最適化問題
が凸関数なら、凸最適化問題になると書いてあった。凸関数同士を合わせたものが凸関数になるという証明がなかったけど自明なのかな?
1次元ベクトルのL1ノルムは
n = 100 x = np.linspace(-1, 1, n) f = np.abs(x) plt.plot(x,f,"r-") plt.show()
こんな感じの直線で引けるけど、本に書いてあるL1ノルムの図形はひし形みたいなグラフになっている。ナンデダヨヾ(`Д´)ノ
よく読んだらひし形はL1ノルムの等高線を表していると書いてあった。
等高線は小学校のときに地形の等高線しか引いた記憶しかないけど、ここでは d次元ベクトルのL1ノルムの値を高さとしたグラフが等高線となる。書いてみる
等高線を書くには方眼、meshgrid
が必要なので用意する
n = 30 x = np.linspace(-1, 1, n) y = np.linspace(-1, 1, n) xx,yy = np.meshgrid(x, y)
変数xx
とyy
が方眼、グリッド線になってくれる。
次に描写したいL1ノルムの方程式を用意する。2次元のグラフとして表示したいので2次元ベクトルとして
のようなL1ノルムの値を高さとして持つ を作る。
ここでは x軸をw1、y軸をw2として作ることにする。
meshgrid
で作ったxx
とyy
は変数を見る限りこんな感じになってるはず
上の水色と緑の線は5本だけど、プログラムとしてはn = 30
とn本で指定される
はこの [-1,1]区間の全ての点、組の結果を計算して作る
f = np.abs(xx)+np.abs(yy) plt.contour(xx,yy,f) plt.xlim(-1,1) plt.ylim(-1,1) plt.gca() plt.show()
ひし形になってくれた。 n の値を変えるとよりひし形っぽくなるのも確認できた。
等高線っぽさを見たいので別のメソッドで出力してみると
from mpl_toolkits.mplot3d import Axes3D fig = plt.figure(figsize=(10,6)) ax = Axes3D(fig) ax.contourf3D(xx,yy,f)
いい感じに等高線っぽくなった
このことからL2ノルムでよく見る楕円の形はあるベクトルの要素からできるL2ノルムの等高線、楕円を図示していたということかな。