PCAをターゲットに適用するとなぜ適合不足になるのですか?


7

目標:

機械学習とニューラルネットワークの実験は初めてです。一連の5つの画像を入力として受け取り、次の画像を予測するネットワークを構築したいと考えています。私のデータセットは、実験のために完全に人工的なものです。例として、入力と予想される出力の例をいくつか示します。

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

データポイントとターゲットのイメージは同じソースからのものです。データポイントのターゲットイメージは他のデータポイントに表示され、その逆も同様です。

私がやった事:

今のところ、1つの非表示層を持つパーセプトロンを構築し、出力層が予測のピクセルを提供します。2つの層は密度が高く、シグモイドニューロンで構成されています。平均二乗誤差を目的として使用しました。画像はかなりシンプルで、それほど変化しないので、これはうまく機能します。200〜300の例と50の非表示の単位があるため、テストデータで適切なエラー値(0.06)と適切な予測が得られます。ネットワークは勾配降下法で学習されます(学習率のスケーリングを使用)。ここに私が得る学習曲線の種類とエポックの数によるエラーの進展があります:

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

私がやろうとしていること:

これで十分ですが、データセットの次元を減らして、より大きな画像やより多くの例にスケーリングできるようにしたいと思います。PCAを適用しました。ただし、次の2つの理由により、データポイントのリストではなく画像のリストに適用しました。

  1. 全体としてのデータセットでは、共分散行列は24000x24000になり、ラップトップのメモリに収まりません。
  2. 同じ画像でできているので、画像上で行うことで、ターゲットを圧縮することもできます。

画像はすべて類似しているように見えるので、1e-6の差異のみを失いながら、なんとかサイズを4800(40x40x3)から36に減らしました。

機能しないもの:

削減されたデータセットとその削減されたターゲットをネットワークに供給すると、勾配降下法は非常に速く収束して高いエラー(約50!)になります。上記と同等のプロットを見ることができます:

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

学習曲線が高い値から始まり、その後下がって戻るとは思いもしませんでした...そして、勾配降下がそれほど速く停止する通常の原因は何ですか?パラメータの初期化にリンクできますか(私はlasagneライブラリのデフォルトであるGlorotUniformを使用しています)。

次に、削減されたデータをフィードしても、元の(非圧縮)ターゲットをフィードすると、最初のパフォーマンスに戻ることに気付きました。したがって、ターゲットイメージにPCAを適用することは良い考えではなかったようです。何故ですか?結局、入力とターゲットを同じ行列で乗算しただけなので、トレーニング入力とターゲットは、ニューラルネットワークが理解できるようにリンクされています。何が欠けていますか?

シグモイドニューロンの総数が同じになるように4800ユニットの追加のレイヤーを導入しても、同じ結果が得られます。要約すると、私は試しました:

  1. 24000ピクセル=> 50シグモイド=> 4800シグモイド(= 4800ピクセル)
  2. 180 "ピクセル" => 50シグモイド=> 36シグモイド(= 36 "ピクセル")
  3. 180 "ピクセル" => 50シグモイド=> 4800シグモイド(= 4800ピクセル)
  4. 180 "ピクセル" => 50シグモイド=> 4800シグモイド=> 36シグモイド(= 36 "ピクセル")
  5. 180 "ピクセル" => 50シグモイド=> 4800シグモイド=> 36線形(= 36 "ピクセル")

(1)および(3)正常に動作します。(2)、(4)、(5)ではなく、その理由がわかりません。特に、(3)は機能するので、(5)は(3)と同じパラメータと最後の線形層の固有ベクトルを見つけることができるはずです。ニューラルネットワークではそれは不可能ですか?


1
PCA削減出力の例を見ましたか?「ピクセル」で1.0以上または0.0以下の値はありますか?(ああ、
Neil Slater

これは良い点です。値は[0,1]にはありません。どういうわけか、もう正規化されていない入力(ネットワーク3での動作を妨げない)を考えましたが、これは考えていませんでした...しかし、そうです、5はそれに対処する必要がありました。ネットワーク2で出力を線形にして、同じ結果をダブルチェックしました。
Djizeus

回答:


4

最初に、元の質問を編集していただきありがとうございます。これで、すべてのデータに同じ変換を適用していることがわかりました。

Q:なぜ一部の問題perceptronsよりもパフォーマンスが優れgeneralized linear modelsているのですか?A:それらは本質的に非線形モデルであり、非常に柔軟性があります。欠点は、追加のノブを正しく調整するためにより多くのデータが必要になることです。

大局:

データが少ないと発生する可能性がありhigh-biasます。 High-biasより多くのデータで克服できます。データを4800フィーチャデータセットから38フィーチャデータセットに減らしたので、バイアスが増えることが予想されます。 Neural networks非表示のレイヤーがないモデルよりも多くのデータが必要です。

線形性と非線形性

あなたはartificial neural networkperceptron)、本質的に非線形モデルで、まだあなたは線形モデルを使用してデータセットから機能を削除することを決定しています(PCA)。単一の非表示層が存在すると、データに2次の項が明示的に作成され、各ステップでS字型非線形性を追加する2つの追加の非線形変換(input ==> hiddenおよびhidden ==> prediction)があります。

次元の削減を実現するためにトレーニングデータとターゲットデータの両方に同じ行列が乗算されるという事実perceptronは、元のデータの非線形の側面を再構築したい場合、行列を学習する必要があることを意味します。これには、より多くのデータが必要になるか、次元数を減らす必要があります。

実験:

polynomial feature extraction完全なデータセットで2次を実行PCAし、その拡張データセットで実行する実験を試すことをお勧めします。強化されたデータセットの分散の99%を保持しながら、最終的にいくつの特徴が表示されるかを確認します。それが初期データセットの次元よりも大きい場合は、拡張されていないデータセットをそのまま使用します。元のデータの次元と38のperceptron間にある場合は、そのデータでをトレーニングしてみてください。

より良いアイデア:

(線形)分散を使用してPCA投影の機能削減を決定するのではなく、さまざまな量のPCA次元削減を使用してモデルをトレーニングおよび交差検証してみてください。特定の一連の画像に最適な場所があることに気付くでしょう。たとえば、MNISTディジットデータのSVMは、784ピクセルフィーチャがPCAを使用して線形に独立した50のフィーチャに削減されたときに最適に機能します。これは、主成分の分散分析からは明らかではありません。

その他のオプション:

isomapなどの非線形次元削減手法があります。適用した線形PCAで情報が明らかに失われているため、非線形機能削減の使用を調査できます。

また、次元を減らす前に、いくつかの非線形性を追加するための画像固有のfeature extraction手法を検討することもできます。

お役に立てれば!


d分散のほとんど(私の場合は99.99%を超える)を維持しながら機能まで進むことができる場合、それはデータがおおよそd次元の超平面にあることを意味していると思いました。そして、非線形の側面が何であれ、それらはd機能に保持されます。番号?もしそうなら、なぜそれらがまだ存在しているので、ニューラルネットは非線形の側面を再構築する必要があるのでしょうか?
Djizeus、2015年

いいえ、おそらく非線形の寄与を捨てます。
AN6U5 2015年

2

データセット内のほとんどの差異は、入力画像間(または入力画像と出力画像間)に存在する可能性があります。その場合、最も有益な主成分は、入力の例を分離したり、入力を出力から分離したりするのに役立ちます。

情報量の少ないPCだけが分散白黒出力を記述している場合、元の特徴空間での出力よりも出力を区別することが難しくなります。

とはいえ、画像のPCAが役立つことはめったにありません。この例ではそれが魅力的であることがわかりますが、別の低次元のフィーチャ表現を学ぶことはおそらくはるかに意味があり、メモリフレンドリーです。単純なオートエンコーダ、SIFT / SURF機能、またはハールのような機能を試すことができます。


いいえ、画像のセット全体に対してPCAを実行しました。次に、入力で各画像をそのPCA変換に置き換えました。入力だけで置換を行っても学習できますが、ターゲットも置換すると機能しなくなります。とにかく、提案をありがとう、私はそれらを試してみます。私のアプローチが間違っている理由を理解したいのですが(間違っている場合)...
Djizeus

大丈夫私はあなたが何をやったか知っている今、私の答えを更新しています
jamesmf

ターゲットイメージに対して個別にPCAを実行してみましたか?
jamesmf 2015年

あなたの出力は入力例にも含まれていますか?あなたが投稿したサンプルデータに大まかにあるようです。その場合、私の答えは関係ありません。
jamesmf 2015年

はい、それはそうです、それは私が例の画像のすぐ下の文で意味したことです(私は何をしようとしているのか理解するのが難しいことを知っています:))
Djizeus

0

あなたの投稿を数回読みました。しかし、私はあなたの実験を完全に理解したかどうかは完全にはわかりません。しかし、私は何が起こっているのか推測しています。

この驚異の0.06%を達成したところに誤差が隠されていると思います。新しいデータに一般化するだけでなく、ある方法で将来を予測します。これは機能しないはずですが、あなたのネットがひどくオーバーフィットしているので機能すると思います。つまり、ネットワークはまだ非常に馬鹿げています。写真a、bを表示すれば学習しますc、答えます。私があなたを正しく理解していれば、2番目の実験にはひねりが含まれています。あなたはまだ完全な画像をネットワークに提示していると思いますが、それらは固有画像の係数から構築されています。今度は、固有画像から答えを作成するために係数を吐き出さなければなりません。しかし、これには、ネットワークが理解していないプロセスについてのある程度の理解が必要になります。

したがって、実験を改善するためのいくつかの提案があると思います。

完全な入力画像の学習は、非常に高次元の問題であり、膨大な量のトレーニングデータを必要とします。画像から特徴を計算することを検討してください。

あなたの学習の問題が健全なものかどうかはわかりません。トレーニングデータを予測データから分離し、手書きの数字などのより一般的なデータを取ることを検討してください。


理解していただきありがとうございます。質問がより明確になることを願って編集しました。0.06はパーセンテージではないことに注意してください。ネットワークが画像を生成するので、分類器ではなく回帰を構築しています。また、学習曲線をプロットすると検証エラーがトレーニングエラーに近づくため、初期構成に過剰適合があるとは思いません。
Djizeus

@Djizeusの回答を受け入れて質問を編集するだけでなく、詳細なcross validation、あるいはより良い「バイアス分散分解」を行う必要があります。次に、最初のケースが本当にオーバーフィットであるかどうかがわかります。常に相互検証する必要があります!結果が示す内容をお知らせください。私は、ソリューションがよりニュアンスがあり、データのコーパス全体に対してPCAを実行するのではなく、すべての画像に異なるPCA変換をフィッティングすることに密接に関連していると思います。
AN6U5

1
はい、分解を実行しましたが、問題はなく、質問をさらに大きくしたくありませんでした。しかし、私はそれを今追加しました。動作していないケースに関しては、それは本当に奇妙に見えます...
Djizeus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.