剛學自編碼,以下是本人關於題目問題的一點思考。
自編碼器是一種非常簡單的BP神經網絡,是一種無監督學習算法。
使用一個三層(只有一個隱含層)的自編碼網絡,然後設置隱含節點的數量少於輸入層節點,就能夠輕鬆地實現特徵降維。如圖:
Fig1. 自編碼器網絡結構(圖片來自網絡)
refer to: Deep Learning(深度學習)學習筆記整理系列之(四)
如果隱藏節點比可視節點(輸入、輸出)少的話,由於被迫的降維,自編碼器會自動習得訓練樣本的特徵(變化最大,信息量最多的維度)。但是如果隱藏節點數目過多,甚至比可視節點數目還多的時候,自編碼器不僅會喪失這種能力,更可能會習得一種“恆等函數”——直接把輸入複製過去作爲輸出。這時候,我們需要對隱藏節點進行稀疏性限制。
Fig2. 稀疏自編碼器模型(圖片來自網絡)
這裏說當隱含節點數量太大的時候,需要通過引入正則項(比如上圖的L1限制)來使得每次表達的code儘量稀疏。
那麼這樣和用更少的隱含節點相比,有什麼用呢?
其實可以和SVM比較:
1. 原本使用的是比較少的隱含節點數,相當於使用線性核的SVM。這時候模型很簡單,但是它的表現能力是比較有限的。
2. 增加節點的數量,相當於使用了多項式核的SVM。這時候的模型表示能力變強了,但是容易過擬合(如用9項式來擬合10個樣本點)。
3. 添加限制,讓每次得到的表達code儘量係數,相當於給多項式的SVM添加了正則約束項(如還是用9項式來擬合10個樣本點,但是我們限制之後只能有兩項不是0),這是就不會再過擬合了。
總結就是: 使用了更多的隱含節點之後,模型具有了更強大表達能力;但是同時會導致過擬合的問題,所以需要通過添加約束條件來限制,這時候模型依然具有很強的表達能力(和少隱含節點的模型比),卻又避免了過擬合的問題。而且因爲實際上不爲0(或不接近0)的權值很少,所以網絡被迫用少量的節點來學習到網絡的整體信息,這些被學習到的特徵都非常有代表性。