Loading [MathJax]/jax/output/HTML-CSS/jax.js

2017年3月22日水曜日

CS231n 2

Notebook

Linear classification: Support Vector Machine, Softmax 線形分離による分類アルゴリズムの解説.

Parameterized mapping from images to label scores

学習や評価に使うデータがD次元のベクトル空間で,ラベルは1からKまでの整数とする.
f:RDRK のような関数をscore function という.

Linear classifier

f(xi,W,b)=Wxi+b

xi はD次元縦ベクトルで,WはK行D列ベクトル,bはk次元縦ベクトルである.Wをweights, bをbiasesといい,W, bが最適になるようにするのが学習.学習が終わればtrain dataは予測には必要ないし,予測の計算は行列算だけなのでkNNより非常に高速.
Wの第i行Wi:は第iクラスのclassifierである.つまりexample x があるとき, Wi:xはxがどれほど第iクラスに属するらしいかを与える.

Interpretation of linear classifiers as template matching

Wi: を第iクラスのtemplate(or prototype)と考えることもできる.各クラスのtemplateたちとexampleがどれほど似ているかを比較して,最良のものを選び出す.

Bias trick

f(xi,W,b)=Wxi+b について,CIFAR-10ではWは10行3072列の行列で,x は3072次元のベクトル, bは10次元のベクトルだが,Wの第3073列にbを挿入して,xの11次元目を1とすれば,f(xi,W)=Wxi と簡潔に書ける.これをbias trick という.

Image data ppreprocessing

CIFAR-10のデータは0から255の値を取る整数の3072次元のベクトルだが,ベクトルごとに標準化を行って,平均0, 標準偏差1に揃える.

Loss function(cost function, objective)

score function によって計算した予測と正しい答えの食い違いを計量する関数で,これができるだけ小さな値になるようにscore functionの係数を変えていく.

Multiclass Support Vector Machine loss

loss functionの一つ.exapmle xiに対してs=f(xi,W)とするとき,xiにおけるloss LiLi=jyimax(0,sjsyi+Δ)(Δ;) で定義する.0に閾値をもつmax(0,)の形の関数をhinge loss という.

Regularization

重みの行列の各要素は絶対値が小さくなるように最適化する.そのためにloss functionにregularization項 R(W)=klW2k,l==||W||2F を挿入する.理由は

  1. Wのある要素Wijがほかと比べて大きいというのは,画像データの第j要素が画像のクラス分類に大きな影響があるということで,実際にそういうことは無さそうなので無くしたい(過学習の抑制)
  2. Wをできるだけ一意に決めたい( Wxiの分類に成功するとき,λW (λ>1)も分類に成功する.) (2.の理由はNielsenには無かった気がする) regularization項を加えて,loss functionは L=1niLi+λR(W) となる.(λはregularization定数)

Practical Considerations

setting data

Δλは一見別々に設定するハイパーパラメーターだが,Δは判別成否によるlossを計量するをどれほど重視するかというハイパーパラメーターで,λはどれほどregularzationを重視するかというハイパーパラメーターだから,どちらか一方を1.0と定めてもう一方を調整する.ふつうΔ=1.0とする.

Softmax classifier

SVM分類器のほか,よく使われる分類器にSoftmax がある. f(xi;W)=Wxiにって各クラスのスコアを計算したあと,Softmax関数によって確率にする. f(xi;W)=Wxi=fとすると, softmax(f)=[ef1kefk,...,efKkefk]T またこれによるloss Li=log(efyikefk)=fyi+logkefk をcross-entropy loss という.


Nielsenの定義と食い違う.今度調べる.
Ci=
k[yklnaLj+(1yk)ln(1aLj)] 式(63)のデータセットによる和を無視した変形
=lnaikyiln(1ak)
=lnefyikefkkyiln(1efykkefk) (softmaxを使った場合)
Li


Information theory view (わからん)

真の確率分布pと推定された確率分布qがあるとき,p, qの間のcross-entropyH(p,q)H(p,q)=xp(x)logq(x)=H(p)+DKL(p||q) で定義される. 推定された確率分布qとはq=efyikefk のことで,pは正しい分類すなわちp=[o,...,1,...,0](y_i番目が1).
またH(p)=0から,H(p,q)==DKL(p||q)

Probablistic interpretation

P(yi|xi;W)=efyikefkWという重み行列があり,example xiが与えられた時,そのラベルがyi(正解)である事後確率と考えることができる.それを最大にするようなWを計算することは最尤推定(Maximum Likelihood Estimation, MLE)であって,またregularization項R(W)はガウス事前分布を仮定した時のWのMaximum a posteriori(MAP)と考えることができる.

Practical issues: Numeric stability

efyikefk の分母分子は非常に大きな数になりがちで,数値計算上の問題が生じうるので,何かしら定数をexponentialの中に足して計算できるようにする.一般的にはC=log(maxjfj)を足す.

In [2]:
import numpy as np
f = np.array([123, 456, 789])
p = np.exp(f)/np.sum(np.exp(f))
print(p)
[  0.   0.  nan]

-c:3: RuntimeWarning: overflow encountered in exp
-c:3: RuntimeWarning: invalid value encountered in true_divide

In [3]:
f -= np.max(f)
p = np.exp(f)/np.sum(np.exp(f))
print(p)
[  5.75274406e-290   2.39848787e-145   1.00000000e+000]

SVM vs. Softmax

Softmax classifier provides “probabilities” for each class.

fの出力が[1,2,0]Tのとき,softmaxの結果は[0.7,0.04,0.26]T
Wの全ての要素が半分になると,fの出力は [0.5,1,0]Tで,softmaxの出力は[0.55,0.12,0.33] よって確率はdiffuse(拡散)する.究極的には,Wの要素の値たちが小さくなるに連れて,softmaxの結果は一様分布に近づいていく.よって,softmaxの結果はどのクラスに分類されるかの確率の形をしているが,実際には順序だけを考えるべき.

In practice, SVM and Softmax are usually comparable.

正解ラベルが1のexampleで,Wxi=[10,2,3]Tであり,Δ=1.0であるとき,lossは0.[10,100,100]T,[10,9,9]Tでも同様.一方softmaxは[10,9,9]Tで大きなlossを出す.このようにSVMのlossは近視眼出来なところがある.これは利点にもなりうる.例えば自動車分類器の行が,自動車とトラックの分離に殆どの要素を割いている時,すでに良好に分離が可能になったカエルのexampleに影響されるべきではない.例えば[,,]T=[1,2,12]Tのスコアがでているとき,softmaxでは多少のlossが発生してWが書き換えられてしまうが,SVMでは書き換えられない.(この解釈でいいのか?)

0 件のコメント:

コメントを投稿