稀疏自動編碼器 [Hyper] 參數
我剛剛開始在 R 中使用自動編碼器包。
該函數的輸入
autoencode()
包括 lambda、beta、rho 和 epsilon。這些值的界限是什麼?它們是否因每個激活函數而異?這些參數是否稱為“超參數”?
假設一個稀疏的自動編碼器,rho=.01 對邏輯激活函數有好處,而 rho=-.9 對雙曲正切激活函數有好處嗎?
為什麼手冊將 epsilon 設置為 .001?如果我沒記錯的話,LeCun 的“Efficient Backpropagation”推薦的起始值不太接近於零。
Beta 的“好”值有多重要?
選擇隱藏層中的神經元數量是否有“經驗法則”?例如,如果輸入層有 N 個節點,那麼隱藏層中有 2N 個神經元是否合理?
你能推荐一些關於自動編碼器實際使用的文獻嗎?
該
autoencoder
包只是 Andrew Ng 的課堂筆記中描述的自動編碼器的一個實現,這可能是進一步閱讀的一個很好的起點。現在,來解決你的問題
人們有時會區分學習算法自己計算的參數和控制學習過程並需要提供給學習算法的*超參數。*重要的是要意識到超參數沒有神奇的價值。最佳值會有所不同,具體取決於您要建模的數據:您必須在數據上嘗試它們。 一)拉姆達() 控制在反向傳播期間如何更新權重。成本函數不只是根據模型輸出和基本事實之間的差異來更新權重,而是包含一個懲罰大權重的項(實際上是所有權重的平方值)。Lambda 控制這個懲罰項的相對重要性,它傾向於將權重拖向零並有助於避免過度擬合。
b) 羅 (和測試版) 控制稀疏度。Rho 是隱藏單元的預期激活(在訓練集中取平均值)。隨著它變得更小,表示將變得越來越稀疏。這種稀疏性是通過調整偏置項來施加的,而 beta 控制其更新的大小。(看起來像實際上只是重新調整了整體學習率.)
c) 厄普西隆 (控制從隨機抽取的初始權重值.
您的 rho 值似乎並不合理,因為兩者都接近激活函數範圍的底部(邏輯為 0 到 1,tanh 為 -1 到 1)。但是,這顯然取決於您想要的稀疏度以及您使用的隱藏單元的數量。
LeCunn 對小權重的主要關注是,如果您使用對稱 sigmoid,誤差表面在原點附近會變得非常平坦。在該論文的其他地方,他建議使用從均值為零的正態分佈中隨機抽取的權重進行初始化,並且標準差,其中是每個單元接收的連接數。
選擇隱藏單元的數量有很多“經驗法則”。您最初的猜測(2x 輸入)似乎與大多數猜測一致。也就是說,這些猜測比估計更多的是猜測。假設你有處理能力,我會犯更多隱藏單元的錯誤,然後用低 rho 值強制稀疏。
自編碼器的一個明顯用途是為其他學習算法生成更緊湊的特徵表示。原始圖像可能有數百萬像素,但(稀疏)自動編碼器可以在更小的空間中重新表示。Geoff Hinton(和其他人)已經證明它們為後續分類生成了有用的特徵。一些深度學習工作使用自動編碼器或類似方法來預訓練網絡。文森特等人。直接使用自動編碼器進行分類。 生成簡潔特徵表示的能力也可以在其他上下文中使用。這是一個簡潔的小項目,其中使用自動編碼器生成的狀態來指導強化學習算法通過Atari 遊戲。
最後,人們還可以使用自動編碼器來重建嘈雜或退化的輸入,就像這樣,這本身就是一個有用的目的。