AI 事始め15:Neural Networks の基礎知識ー1
the Stanford CS class CS231n: Convolutional Neural Networks for Visual Recognition. を読もうとしたが、Googleの翻訳も、内容も小生には難解で理解が進まない。元々基礎知識が無いので、無謀な企ては止めにして、先人の知恵におすがりし、その足跡を追いながら、少しでも習得できたら良いな。
サポートベクターマシン(support vector machine:SVM)の基礎
上記の記事を勉強させて頂きながら、自分なりに要点をまとめてMEMOしてみた。(間違った引用があるかも知れないし、Memoの内容が正しいとは限らないけど、しかたない。数式の書き方も勉強できたし、成果はゼロではないと思う。)
1.線形識別モデルの例
K個の異なるカテゴリ(j=1,K)を示す画像(サイズはD=23×32×3=3072ピクセル)を分類する場合。スコアベクトル\(f\)を下記のように定義する。
$$f(x_i,W,b)=Wx_i+b$$
\(x_i\)は\(i\)番目の入力ベクトルで、サイズはD[3072 x 1]。
N個の入力ベクトル(学習用・テスト用サンプル画像)があると仮定する。\((i=1,N)\)
\(x_i\)が学習用の時は、正解ラベル\(y_i\)(サイズは[K x 1])を用意する。
\(W\)は重み行列でサイズは [K x D]。
\(b\)はバイアスベクトルでサイズは [K x 1]
結果的にスコアベクトル\(f\)のサイズは [K x 1]となる。
特徴は下記。
- K個のカテゴリー分類を並列に扱うことが、単一行列乗算で可能。
- \(x_i\)を与えた時、\(f\)が\(y_i\)に近づくようにWとbを学習する。
- 学習が完了したらWとbが固定され、新しいテスト画像を分類するには、行列の乗算と加算を1回行うだけでよい。これは、テスト画像とすべてのトレーニング画像を比較するよりもはるかに高速です。
- 特定のカテゴリー jのスコアを\(f_j\)で表すと、\(f_j>=0\)で、カテゴリjと判定し、\(f_j<0\)でj以外のカテゴリーと判定するように、Wとbを決めた場合は、上式は識別をする上での境界を作り、このとき境界上の点xは\(f(x)=0\)となる。式を変形していくと下記のこともわかる。
- 重みベクトルWは、境界に対していつでも直交(内積が0である)している。
- 数式によれば何次元になろうとも、Wが決定面の向きを決め(Wに直行した決定面になる)、bが原点との位置を定めているということが分かる。(この時の原点のイメージの理解が難しい。)
- 次は空間上の任意の点\(x\)を考え、この任意の点\(x\)を決定面上に直交射影したときの点を\(x'\)と表現しておけば、空間上の任意の点\(x\)は、W方向の単位ベクトルを用いて、下式で示される。$$x=x'+r\frac{W}{\|W\|}$$
- さらに式を変形していくと、任意の点\(x\)との直交距離\(r\)が下記の式で表される。この直交距離\(r\)を最大化するように、wを決定すれば、識別が有利になる。$$r=\frac{f(x_i,W,b)}{\|W\|}$$
-
データ点が直線では分離できないような場合には、データ点を変換してしまい、変換後の空間で直線を引く。元の空間に戻ってきたら曲線になっているので、結果だけ見れば、もとのデータ点にたいして曲線により回帰・分類を行ったことになる。
2.Neural Networks Part 1: Setting up the Architecture
線形分類器としての単一ニューロン
フィードフォワードニューラルネットワークの数学的形式は、あなたに馴染みのあるように見えるかもしれません。線形分類器で見たように、単一ニューロンは、その入力空間にある特定の線形領域を「好き」(1に近い活性化)、または「嫌い」(0に近い活性化)する能力を有する。したがって、ニューロンの出力における適切な損失関数を用いることにより、単一ニューロンを線形分類器とみなすことができます。
疲れた、ここら辺で一度中断して、不足分は、その都度追加して行こう。高度なAPIを使用するので、あまり細かいことは知らなくても良いかも。