否決された Lecture 2 の Nearest Neighbor の後、次に試すのは Linear Classification です。
はじめに#
私たちはパラメータ化された方法で分類を行います。
上の図のように、103072 のパラメータ行列 W を x(x は画像を 3232 のピクセルブロックに分割し、各ピクセルブロックの 3 つのチャネル値を持ち、最終的にこの 32323 の値を 1 次元ベクトルに展開したもの)に掛けると、101 の結果が得られます。その中には 10 種類のラベルそれぞれのスコアが含まれており、スコアが最も高いものがモデルが予測したラベルです。
あなたはおそらく疑問に思うでしょう:この W 行列を可視化したら、どのような形になるのでしょうか?かなり抽象的なのでしょうか?
私たちは 103072 の W の各行の 32323 の値を正方形の画像に戻します。以下の通りです。
小さなデータセットでは、わずかに人間の目で認識できる特徴が見られます。
マルチクラス SVM 損失#
この W は決定の「脳」のように見えますが、これだけの数字の中から私たちはどのように選択すればよいのでしょうか?
私たちは「損失関数」を導入して、予測結果に対する不満の程度を定量化します。
より単純な 3 つのカテゴリの例を使います:frog cat car
シーンを想像してみてください:先生が生徒に選択肢の答えを尋ねます(正解は A です)。生徒は「大体 A を選ぶと思いますが、B も選ぶ可能性があります」と言います。明らかに彼は A 選択肢を自信を持って答える人たちよりも知識を把握していません。同様に、cat に対する最高スコアは car や frog に対するスコアよりも明らかに高くなるべきです。これにより、モデルが正しい答えを選択したことを示します。
マルチクラス SVM 損失はこのようなものです。 。上の最初の画像のカテゴリを予測する際、私たちは最初の列の 3 つのスコアを得ました。この時、は 3.2(実際のラベル cat に対応するスコアで、たとえ 5.1 より小さくても)です。なぜなら、この画像の実際のラベルが cat であることを知っているからです。次に、私たちは教師としてこの classifier(つまり重み W)の答えのパフォーマンスを評価します。私たちが設定した基準は、実際のラベルに対応するスコアが他のスコアよりも少なくとも 1 ポイント高くなければ、本当に理解しているとは言えません。3.2 - 1 <5.1、完璧に間違っています、厳しく罰せられます。3.2 - 1> -1.7、良い、frog と混同していません。最終的な、注意してください!!が大きいほど理解が悪いことを示し、値が低いほどモデルの理解能力が高いことを示します。
図 2 は良い予測を示し、4.9 は他の 2 つのスコアよりも少なくとも 1 ポイント高いです;図 3 は最も悪い予測を示し、損失は直接 12.9 に達しました。
正則化#
上記の損失関数はモデルの能力を測ることができるように見えますが、トレーニングセットで訓練された W がトレーニングセットでの損失値を低下させるだけで十分なのでしょうか?
十分ではありません、
下の図の青い線のように、損失関数がこれだけであれば、トレーニングセットで学習し続けることは、モデルがトレーニングセットを「考えすぎる」ことにつながり、火の中に入ってしまい、トレーニングセット以外の問題を与えられると困惑してしまう可能性があります。「大道至簡」と言われていますが、良い一般化性能を持つモデルも同様です。私たちはモデルを「シンプル」にし、テストデータでも良いパフォーマンスを発揮させる必要があります。図の緑の線のように。
そこで、正則項を追加しました。ここではハイパーパラメータで、データ損失と正則化損失のバランスを取るために使用されます。
このは損失関数に似ており、選択肢がたくさんあります:
- L1 正則化:W 行列のスパース性を高める
- *L2 正則化:過学習を防ぎ、重み分布を滑らかにする。
- *Elastic net 正則化:L1 と L2 の利点を兼ね備える
- Dropout ……
ソフトマックス#
この図は、ソフトマックス分類器が未正規化スコアを確率に変換し、交差エントロピー損失を通じてモデルの性能を評価する方法を示しています。ここでは正しいカテゴリの未正規化スコアで、はすべてのカテゴリの未正規化スコアの合計です。
ソフトマックス対 SVM(2 つの損失関数の比較)#
このフローチャートを見てみましょう。非常にシンプルで明確です:左下のはトレーニングセット内の各画像の入力と実際のラベルで、残りの接続は前述のすべてのプロセスを網羅しています。
最適化#
前述の内容を長々と話しましたが、皆さんの心の中にはまだ疑問があるかもしれません:この「脳」はどのように訓練されるのでしょうか?つまり、最良の W を見つける方法は?
いくつかの可能性があります:
- ランダムサーチ:あまり良くない
- 勾配に従う:下山の例を使って理解します。数学的には勾配です。
繰り返し、W の各数字に小さな値 h を加え、損失値がどのように変化するかを見て dW を得ます。以下のように W の各数字に対してこの操作を繰り返します。
その中から選びます。
この方法(本質的には数値勾配)は、W の規模が大きくなると実行が難しくなり、計算量が膨大になります。よく考えてみると、私たちは損失関数の W に対する導関数を求める必要があります。損失関数はもともと W に関する関数なのですから、直接導出の方法を使えば良いのです!
勾配降下法#
コードは以下の通りです:
while True:
weights_grad = evaluate_gradient(loss_fun, data, weights)
weights += - step_size * weights_grad
確率的勾配降下法#
while True:
data_batch = sample_training_data(data, 256)
weights_grad = evaluate_gradient(loss_fun, data, weights)
weights += - step_size * weights_grad
http://vision.stanford.edu/teaching/cs231n-demos/linear-classify/ このインタラクティブな可視化インターフェースで、全体の訓練プロセスを見ることができます。
画像特徴#
座標変換を使用しました:直交座標から極座標への例で、元々線形分類器で分けられなかった点の群れを成功裏に線形分類器で分けました。
特徴表現の例:
- カラーヒストグラム
- 勾配の方向のヒストグラム(HoG)
- 単語の袋: コードブックを構築 → 画像をエンコード
小結#
Lecture3 の内容はここで終了です。私は多くのことを広げていませんが、基本的にコースの内容を解釈しました。個人的にはこの最適化部分はあまり良く説明されていないと思いますが、概略を理解することができました。
Lecture4 の内容はニューラルネットワークとバックプロパゲーションです。次のノートに移ります~