Osomaki67のブログ

個人的な備忘録兼日記にしたいと思います。

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]となる。

特徴は下記。

  1. K個のカテゴリー分類を並列に扱うことが、単一行列乗算で可能。
  2. \(x_i\)を与えた時、\(f\)が\(y_i\)に近づくようにWとbを学習する。
  3. 学習が完了したらWとbが固定され、新しいテスト画像を分類するには、行列の乗算と加算を1回行うだけでよい。これは、テスト画像とすべてのトレーニング画像を比較するよりもはるかに高速です。
  4. 特定のカテゴリー 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を使用するので、あまり細かいことは知らなくても良いかも。