オートエンコーダーは意味のある機能を学習できません


24

次の2つのような50,000個の画像があります。

データ例 データ例2

データのグラフを表します。これらの画像から特徴を抽出したかったので、Theano(deeplearning.net)が提供するオートエンコーダコードを使用しました。

問題は、これらのオートエンコーダーが機能を学習していないようです。私はRBMを試しましたが、それは同じです。

MNISTデータセットは素晴らしい機能を提供しますが、私のデータは何ももたらさないようです。以下に例を示します。

MNISTで作成されたフィルター:

mnistフィルター

データをトレーニングして作成したフィルター:

データからフィルター

隠れ層サイズとトレーニングエポックのさまざまな組み合わせを使用しましたが、結果は常に同じです。

なぜ機能しないのですか?自動エンコーダーがこれらの画像から特徴を抽出できないのはなぜですか?

編集:

同様の問題を抱えている人のために。解決策は本当にシンプルで、原因は本当に馬鹿げていました。RGBエンコーディングのピクセル値を0〜1の範囲の浮動小数点数に再スケーリングするのを忘れました。

値を再スケーリングすることで問題が解決しました。

回答:


15

ニューラルネットワークのデバッグには、通常、ハイパーパラメーターの調整、学習したフィルターの視覚化、および重要なメトリックのプロットが含まれます。使用しているハイパーパラメーターを教えてください。

  • あなたのバッチサイズは?
  • あなたの学習率は?
  • どのタイプのオートエンコーダーを使用していますか?
  • ノイズ除去オートエンコーダーを使用してみましたか?(どの破損値を試しましたか?)
  • 隠しレイヤーの数とサイズは?
  • 入力画像の寸法は?

トレーニングログの分析も役立ちます。再構築損失(Y軸)のグラフをエポック(X軸)の関数としてプロットします。再構築の損失は収束または発散していますか?

以下は、分岐していた人間の性別分類のオートエンコーダーの例です。1500エポック後に停止され、ハイパーパラメーターが調整され(この場合は学習率の低下)、分岐し、最終的に収束したのと同じ重みで再開されました。

これが収束しているものです:(これが必要です)

「制約のない」バニラは、アイデンティティマッピングを単純に学習するという問題に遭遇する可能性があります。これが、コミュニティがノイズ除去、スパース、および収縮フレーバーを作成した理由の1つです。

ここにデータの小さなサブセットを投稿できますか?私のオートエンコーダーの結果を喜んでお見せします。

補足説明:グラフをデータのベクトルとして簡単に表すことができるのに、そもそもなぜグラフの画像を使用しているのかを自問したくなるかもしれません。すなわち、

[0, 13, 15, 11, 2, 9, 6, 5]

上記のように問題を再定式化できれば、本質的に自動エンコーダーの寿命がより簡単になります。生成される分布を学習する前に、最初に画像の表示方法を学習する必要はありません。

回答のフォローアップ(データが与えられた場合)

以下は、1000の隠れユニット、単一層のノイズ除去オートエンコーダーからのフィルターです。一部のフィルターは一見ランダムであることに注意してください。これは、トレーニングを非常に早く停止し、ネットワークにこれらのフィルターを学習する時間がなかったためです。

以下は、私がそれを訓練したハイパーパラメーターです。

batch_size = 4
epochs = 100
pretrain_learning_rate = 0.01
finetune_learning_rate = 0.01
corruption_level = 0.2

フィルターはここに投稿するのに十分であったため、58エポック後に事前トレーニングを停止しました。私があなただったら、1000x1000x1000のアーキテクチャを備えた完全な3層のスタック型ノイズ除去オートエンコーダーをトレーニングします。

微調整ステップの結果は次のとおりです。

validation error 24.15 percent
test error 24.15 percent

そのため、一見、偶然よりも良いように見えますが、2つのラベル間のデータの内訳を見ると、まったく同じ割合(75.85%の利益と24.15%の不利益)を持っていることがわかります。つまり、ネットワークは、信号に関係なく、単に「収益性の高い」応答を行うことを学習したことを意味します。私はおそらく、何が起こるかを見るために、より大きなネットでより長い時間これを訓練するでしょう。また、このデータは何らかの基になる財務データセットから生成されているようです。上記のように問題をベクトルに再定式化した後、リカレントニューラルネットワークを調べることをお勧めします。RNNは、このような時系列データに見られる一時的な依存関係のいくつかをキャプチャするのに役立ちます。お役に立てれば。


バッチサイズは20です。学習率は0.1に設定されています。オートエンコーダーの収縮性とノイズ除去性を無効にしてみました。1つの非表示レイヤーを使用します。50〜1000個のニューロンをすべて試しました。画像を25x25に再スケーリングします-mnistよりもさらに小さくなります。価値があるため、このアーカイブにすべてのデータを同封します。オートエンコーダーの結果とこのデータを見せてもらえますか?
b93dh44 14

アーカイブ:mega.co.nz/...
b93dh44

OK、そのデータを使用してネットワークをトレーニングしました。回答の編集をご覧ください。
サバラバ

それは本当に面白そうです。コードを投稿できますか?本当に感謝しています。ネットワークのトレーニングを妨げるバグがコードにある可能性があると思います。微調整の段階があることに気付きましたか?私のオートエンコーダは、微調整なしでプリトレーニングのみを行うと思います。よろしければ、解決策を教えてもらえますか?
b93dh44

それは私の会社のだから、私のコードを投稿することはできませんが、私は、ノイズ除去オートエンコーダを作成するサンプルコードを持って、このチュートリアルにあなたを指すことができます:deeplearning.net/tutorial/dA.html。そのコードに対して、すべてのハイパーパラメーターアドバイスが保持されます。
サバラバ

3

コメントするのに十分な担当者がいないので、これを回答に入れます。ただし、正確な理由はわかりません。

  1. 左下の領域のパターンは2番目の例に似ており、右下隅のパターンは最初の例と非常によく似ています。問題は、ソースデータの多様性です。50 000枚の画像すべてが同じパターンのバリエーションである場合、これらの3つの意味のある特徴マップは、オートエンコーダーがすべてのデータを説明および再構築するのに十分です。

  2. 第二に、再構成エラーと実際の再構成画像を確認したい場合があります。結果はどれほど良いですか?再構成エラーが低い場合は、おそらく以下で説明する解像度が原因でオーバーフィットしている可能性があります(または、これらの3つのパターンの組み合わせは、関心のあるすべてのデータを記述するのに十分です)。それ以外の場合、オートエンコーダはデータの再構築方法を学習できず、より大きなオートエンコーダまたはより良いトレーニングアルゴリズムが必要です。


1.このデータには多くの多様性があると思います。これらの50,000グラフのそれぞれは、わずかに異なります。オートエンコーダーが3つのフィルターだけですべてを再構築することは不可能だと思います。2.再構成誤差を推定するためのヒントはありますか?私が使用しているコードはエラーを提供しますが、それは私に多くを教えてくれない本当に大きな数字です。再構成エラーを入力のサイズまたは隠れ層の数と比較する必要がありますか?
b93dh44 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.