1. 深層網絡的貪婪逐層預訓練方法由Bengio等人在2007年提出,是一種重要的深度神經網絡參數初始化和預訓練方法。
2. 同時它也是一種堆疊自編碼器,對於很多數據來說,僅使用兩層神經網絡的自編碼器還不足以獲取一種好的數據表示。為了獲取更好的數據表示,我們可以使用更深層的神經網絡。
深層神經網絡作為自編碼器提取的數據表示一般會更加抽象,能夠更好地捕捉到數據的語義信息。 在實踐中經常使用逐層堆疊的方式來訓練一個深層的自編碼器,
稱為堆疊自編碼器(Stacked Auto-Encoder, SAE)。堆疊自編碼一般可以采用逐層訓練(layer-wise training)來學習網絡參數 [Bengio et al., 2007]。
Bengio, Y., Lamblin, P., Popovici, D., & Larochelle, H. (2007). Greedy layer-wise training of deep networks. In Advances in neural information processing systems (pp. 153-160).
對於深層模型的訓練,通常采用BP算法來更新網絡參數。但是需要對網絡參數進行很小心的初始化,以免網絡陷入局部最小點。
當然,現在已經有了很多網絡參數初始化的辦法,或者其他的深度網絡處理技巧,可以很好的避免網絡陷入局部最小點,
但鑒於無監督逐層貪婪預訓練在深度網絡優化中不可磨滅的影響,我們還是有必要了解這一方法。
考慮一個神經網絡,如下圖所示。它的輸入是6維向量,輸出是3維向量,代表輸入樣本屬於三個類別的概率。
最開始我們通過高斯分布隨機初始化網絡參數,然后逐層地優化網絡參數。首先第一層。如下圖,我們只保留輸入層Input和第一個隱藏層Features I,其余層去掉。
之后,加入一個輸出層,該輸出層的輸出向量維度和輸入層一樣,從而構成一個自編碼器。我們訓練這個自編碼器,便可以得到第一層的網絡參數,即綠線部分。
然后是第二層的網絡參數。如下圖,我們只保留原始神經網絡中的第一個隱藏層和第二個隱藏層,其余層去掉。
之后添加一個輸出層,其輸出向量維度和第一個隱藏層維度一樣,從而構成一個自編碼器,自編碼器的輸入是第一個隱藏層。
優化這個自編碼器,我們就可以得到第二層網絡參數,即紅線部分。
優化這兩個自編碼器的過程就是逐層貪婪預訓練。由於每個自編碼器都只是優化了一層隱藏層,所以每個隱藏層的參數都只是局部最優的。
優化完這兩個自編碼器之后,我們把優化后的網絡參數作為神經網絡的初始值,之后微調(fine tune)整個網絡,直到網絡收斂。
參考資料
[1] UFLDL棧式自編碼器
[2] Autoencoder
作者:JiaxYau
鏈接:https://www.jianshu.com/p/7cd769bbb3e6
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。