ニューラルネットワークで分類する前に画像データセットでPCAを使用する


7

画像データマトリックスがあります XN x p どこ N=50000 画像の例の数であり、 p=3072 画像のピクセル数です。 p=3072=32×32×3、各画像は3チャンネルであるため 32×32画像。さらに、50000の画像のそれぞれは、10の可能なクラスの1つに属しています。つまり、クラス ' car'の5000個の画像、クラス ' 'の5000個の画像birdなどがあり、合計10個のクラスがあります。これはCIFAR-10データセットの一部です。

ここでの最終的な目標は、このデータセットで分類を実行することです。この目的のために、教授はこれについてPCAを試し、それらの機能を分類子に配置することを述べました。私の分類子として、1つの非表示レイヤーとsoftmax出力を持つ完全に接続されたニューラルネットワークを使用しています。

私の問題は、私がPCAを正しい方法で実行したと信じていることですが、私の方法が誤って適用されている可能性があると思います。

これは私がやったことです:

私のデータのPCAを計算するために、これは私がこれまでに行ったことです:

まず、平均画像を計算します μ1xp。しましょうxn なる nの行 X。そして、

μ=1Nn=1Nxn

共分散行列を計算する Cpxp 私の画像データの:

C=1N1(Xμ)T(Xμ)

の固有ベクトル分解を実行します C、降伏 US、および V、ここで行列 U主方向(固有ベクトル)を列としてエンコードします。(また、固有値がすでに降順で並べ替えられていると仮定します)。したがって:

[U,S,V]=eig(C)

最後に、PCAを実行します。つまり、新しいデータ行列を計算します。 PNxk、 どこ kにしたい主成分の数です。しましょうUkpxk -つまり、最初のものだけの行列 k列。したがって:

P=XUk

質問:

私がこのデータに対してPCAを実行する私の方法は誤って適用されていると思います。私がそれを行った方法で、私は基本的に私のピクセルを相互に無相関化することになるからです。(私が設定したと仮定しますk=p)。つまり、結果の行P多かれ少なかれノイズのように見えます。その場合、私の質問は次のとおりです。

  • ピクセルの相関を本当に解除しましたか?つまり、将来の分類子が使用することを望んでいた可能性のあるピクセル間の結合を実際に削除しましたか?
  • 上記の答えが正しい場合、なぜこの方法でPCAを実行するのでしょうか?
  • 最後に、最後の点に関連して、画像でPCAを介して次元削減をどのように実行しますか。

編集:

さらに調査し、多くのフィードバックを行った後、質問を次のように絞り込みました。画像分類の前処理ステップとしてPCAを使用する場合、それはより良い方法です。

  • 画像のk主成分で分類を実行しますか?(マトリックスXnew=XUk 上記では、各画像は長さになります k オリジナルの代わりに p
  • または、k固有ベクトルから再構成された画像に対して分類を実行する方が良い(これは、Xnew=XUkUkTなので、各画像はまだオリジナルのままです p 長さから、それは実際にから再構築されました k 固有ベクトル)。

経験的に、PCAを使用しない場合の検証精度> PCA再構成を使用した検証精度> PCA PCを使用した検証精度。

以下の画像は、同じ順序でそれを示しています。0.5> 0.41> 0.31検証精度。

長さの生のピクセル画像のトレーニング p

ここに画像の説明を入力してください

長さの画像のトレーニング pしかし、k = 20の固有ベクトルで再構築されます。

ここに画像の説明を入力してください

そして最後に、$ k = 20主成分自体のトレーニング*:

ここに画像の説明を入力してください

このすべてが非常に光っています。私が見つけたように、PCAは主要なコンポーネントが異なるクラス間の境界を容易にすることを保証しません。これは、計算された主軸が、画像クラスにとらわれず、すべての画像にわたって投影のエネルギーを最大化しようとするだけの軸であるためです。対照的に、実際の画像は、忠実に再構築されているかどうかにかかわらず、分類を可能にするための、または実行する必要がある空間的な差異のいくつかの側面を維持しています。


1
@amoebaはい、分類子として完全に接続されたNNを使用しました。入力は、元のNxPデータセットまたはNxKデータセットのいずれかでした。すべてが同じで、前者はうまくいき、後者はまったく何も学びませんでした。
スペイシー、

1
@amoeba申し訳ありませんが、元の実験では、すべての画像を元の空間でトレーニングします。つまり、X = NxP行列、Nは画像の数、Pは画像あたりのピクセル数です。2番目の実験では、N_K行列であるX_newでトレーニングします。各行には、各画像のK 主成分、つまりk 基底係数があります。(X_new = X * U [0:k])。で、この場合、何の学習は行われません。
スペイシー

1
@amoebaなので、私の実験では、K = 10、50、さらには100を使用しました。参考までに、CIFAR-10データセットでは、エネルギーのほとんどが上位の50の固有ベクトルに含まれていました。(私はk = 3072 = Pまでずっと行っても、まだ学習は行われていませんでした)。(これは係数自体に基づいて行われたことを覚えておいてください。一方、K = 50の固有ベクトルから画像を再構築した場合、つまりX_new = X * U [0:k = 50] * U [0 :k = 50] .T、それから私は非常に合理的な結果を得ます)。
スペイシー2016

1
@amoebaはい、学習したNNで最後に実行される手付かずのテストセットがあります。画像の前処理は、各特徴の単純な意味を逆にします。(ピクセル)。PCの前後で同じ前処理を行い、同じ統計を取得するようにしました。ええと、これをやってみましょう。コードに戻り、再実行して、調査結果を再投稿します。私がこれをするとき、あなたにpingします。
スペイシー2016

2
私はこれが私が提供したリンクによって確認されないと主張します。リンクによると、50台のPCは必ずしもクラスだけでなく3072次元も分離しているわけではありません。それは正しいです。しかし、50台のPCと、50台のPCから再構築された3072の次元は、クラスをまったく同じ程度に分離します。それは単純な数学的事実です。再構築のトレーニングを受けたNNをPCで動作するNNに手動で変換すれば、同じように機能します。再構築によってネットワークのパフォーマンスが向上する理由を説明できません。
amoeba 2016

回答:


1

@amoebaのすべてのコメントに同意します。しかし、いくつかのことを追加します。

PCAが画像で使用される理由は、PCAが「機能選択」として機能するためです。オブジェクトは複数のピクセルにまたがるので、複数のピクセルにわたる相関変化はオブジェクトを示します。関連付けられていないPixelの変更を破棄することで、「一般化」につながる可能性のある「ノイズ」が取り除かれます。

一般にnns(勾配降下法を使用)は、球形の入力(つまり、相関のない正規化された入力)でよりよく機能します。これは、エラーサーフェスがより対称的になるため、単一の学習率がよりよく機能するためです(高度な曲線では小さな学習率が必要方向と浅い方向の大きな学習率)。

入力(正常)も正規化しましたか、それとも無相関化しましたか?

l2正則化を使用しましたか?これは、PCAの正規化と同様の効果があります。相関する入力の場合は、類似した小さな重みを強調します(つまり、ノイズを平均化し、大きな重みにペナルティを課すため、単一のピクセルが分類に不釣り合いな影響を与えないようにします)(たとえば、統計学習ブックの要素を参照)。おそらく、L2正則化はすでに効果的でした。または、nnが小さすぎてオーバーフィットできなかった可能性があります。

最後にパラメータを再最適化しましたか?最初のk主成分に変更した後、異なる学習率と他のパラメータが必要になると思います。


0

定義ごとに、PCAは変数間の相関関係を削除します。すべての分類子が高次元データを処理できるわけではない(ただしニューラルネットは処理できる)わけではなく、相関変数を適切に処理できるわけではないため(ニューラルネットはできるため)、分類の前に使用されます。特に画像の場合、通常は相関関係を削除する必要はなく、隣接するピクセルを画像機能に集約できるように複数のレイヤーも必要です。実験結果は、この特定のタスクに対するこの手法の不適切な選択を反映しています。


0

画像(各画像がM列の単一行になり、Mが全ピクセル数x 32 x 32 x 3になるようにベクトル化した画像)に相関がほとんどないか、まったくない場合、必要な主成分の数はデータの増加におけるほとんどの差異(> 95%など)を説明します。PCAの「実現可能性」を判断するには、説明された分散をチェックすることをお勧めします。あなたのケースでは、データマトリックスのサイズがNxM(M> N)であるため、コンポーネントの最大数はNです。必要なPCの数が50000に近い場合、PCAを使用しても意味がありません。説明された分散は、次の方法で計算できます。

explained variance = 
sum of the eigenvalues that correspond to the PCs you use / 
sum of ALL eigenvalues

少なくとも90%以上の分散を説明する主成分の数を選択します。PCの正しい数を選択するもう1つの方法は、PCの数と説明された累積分散プロットを描画することです。プロットでは、説明された分散がもはや大幅に増加しない数を選択できます。

したがって、問題はかなりの数のPCを選択していることだと思います。

別の問題は、テストサンプルの投影に関連している可能性があります。NNの構築とNNのテストのためにサンプルを分割した場合、トレーニングデータセットから取得した固有ベクトルを使用してテストデータセットを投影する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.