自動編碼器無法學習有意義的特徵
我有 50,000 張圖像,例如這兩個:
它們描繪了數據圖表。我想從這些圖像中提取特徵,所以我使用了 Theano (deeplearning.net) 提供的自動編碼器代碼。
問題是,這些自動編碼器似乎沒有學習任何特徵。我試過RBM,結果是一樣的。
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 可以幫助捕獲在此類時間序列數據中發現的一些時間依賴性。希望這可以幫助。