Machine-Learning

自動編碼器無法學習有意義的特徵

  • December 31, 2014

我有 50,000 張圖像,例如這兩個:

數據示例 數據示例2

它們描繪了數據圖表。我想從這些圖像中提取特徵,所以我使用了 Theano (deeplearning.net) 提供的自動編碼器代碼。

問題是,這些自動編碼器似乎沒有學習任何特徵。我試過RBM,結果是一樣的。

MNIST 數據集提供了很好的功能,但我的數據似乎沒有產生任何效果。我附上以下示例:

在 MNIST 上創建的過濾器:

mnist 過濾器

通過對我的數據進行訓練創建的過濾器:

從我的數據中過濾

我使用了許多不同的隱藏層大小和訓練時期的排列,但結果總是相同的。

為什麼它不起作用?為什麼自動編碼器不能從這些圖像中提取特徵?

編輯:

對於任何有類似問題的人。解決方案非常簡單,原因非常愚蠢。我只是忘記將像素值從 RGB 編碼重新調整為在 0 - 1 範圍內浮動。

重新調整值解決了這個問題。

調試神經網絡通常涉及調整超參數、可視化學習的過濾器和繪製重要指標。你能分享一下你一直在使用的超參數嗎?

  • 你的批量是多少?
  • 你的學習率是多少?
  • 您使用的是什麼類型的自動編碼器?
  • 您是否嘗試過使用降噪自動編碼器?(您嘗試過哪些腐敗值?)
  • 有多少隱藏層,大小是多少?
  • 輸入圖像的尺寸是多少?

分析訓練日誌也很有用。將重建損失(Y 軸)繪製為時期(X 軸)的函數。您的重建損失是收斂還是發散?

這是一個用於人類性別分類的自動編碼器的示例,該自動編碼器正在發散,在 1500 個 epoch 後停止,調整了超參數(在本例中是學習率的降低),並以發散並最終收斂的相同權重重新啟動。

這是一個正在收斂的:(我們想要這個)

Vanilla“不受約束”可能會遇到一個問題,他們只需學習恆等映射。這就是社區創建去噪、稀疏和收縮風格的原因之一。

你能在這裡發布一小部分數據嗎?我非常願意向您展示我的一個自動編碼器的結果。

**附帶說明:**您可能想問自己為什麼要首先使用圖形圖像,而這些圖形可以很容易地表示為數據向量。IE,

[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 個 epoch 後停止了預訓練,因為過濾器足夠好,可以在這裡發布。如果我是你,我會先訓練一個具有 1000x1000x1000 架構的完整 3 層堆疊去噪自動編碼器。

以下是微調步驟的結果:

validation error 24.15 percent
test error 24.15 percent

因此,乍一看,這似乎比偶然性要好,但是,當我們查看兩個標籤之間的數據細分時,我們發現它具有完全相同的百分比(75.85% 盈利和 24.15% 不盈利)。這意味著網絡已經學會了簡單地響應“有利可圖”,而不管信號如何。我可能會用更大的網絡訓練這個更長的時間,看看會發生什麼。此外,看起來這些數據是從某種基礎金融數據集生成的。我建議您在將問題重新轉換為上述向量後研究遞歸神經網絡。RNN 可以幫助捕獲在此類時間序列數據中發現的一些時間依賴性。希望這可以幫助。

引用自:https://stats.stackexchange.com/questions/130809

comments powered by Disqus