自學習 與 無監督特徵學習

基本內容

在以前課程的基礎上,本章的內容很好理解。
git

好比要對手寫數字進行識別,咱們擁有大量未標註的和少許已標註的手寫數字圖片。圖片是灰度圖,尺寸是 28×28(=784),能夠將 784 維向量直接做爲輸入,但此時模型複雜度較高,也沒有減少噪音和次要特徵的影響。因此若是能提取原數據的主要特徵做爲輸入,能夠提升預測的準確度。github

稀疏自動編碼器就是一個很好的特徵選擇算法。算法

通過訓練,隱藏層的輸出(Features)能夠替代原數據做爲分類算法的輸入。網絡

基本概念就這麼多,本章的難點在於理論與實踐的結合。wordpress


課後做業

先吐槽一下 oschina 博客的代碼插件,沒有 Matlab 選項卻有 Google Go,oschina 認爲 Go 比 Matlab 應用更普遍嗎?函數

這也是我在這個系列文章裏不貼代碼只給連接的緣由。
測試

主要代碼及運算結果

代碼地址編碼

stlExercise.m - 程序的入口和主線spa

稀疏自編碼器可視化:插件

使用提取出的特徵訓練 Softmax 分類器,測試結果:

使用原數據訓練 Softmax 分類器,測試結果:

加入數據白化

若是在交給稀疏自編碼器提取特徵以前,對原數據作一些預處理結果會怎樣?

咱們知道對圖像數據作白化處理能夠平滑去噪、減少特徵之間的相關性。下面就看看加入數據白化後的結果。

圖1是原始圖像、圖2是白化後的圖像、圖3是稀疏自編碼器學到的特徵。

預測準確度爲:

白化的準確度反而略低,緣由多是:

1. 天然圖片場景複雜、噪音多且局部特徵高度相關,這些因素對模型訓練起到負面影響,干擾了模型對目標物體的識別,因此零均值化和白化等預處理經常使用於天然圖片。

2. MNIST 所提供的手寫數字圖片構圖很簡單:只有深色背景和淺色數字,且噪音不多。即便背景與數字內部的像素灰度各自高度相關,但這種相關剛好把主要信息與無關信息區分開來,因此不作預處理是可行的。相反,白化使圖像更平滑,反而模糊了數字邊界。

3. 稀疏自編碼器的激活函數使用了 sigmoid 函數,它的值域是(0, 1),即自編碼器每一個維度的輸出都在這個範圍內;當輸入不在這個範圍內時,要在訓練編碼器以前對輸入作預處理(縮放),把它的值域調整到(0, 1);幸運的是 MNIST 圖片自己數據就在(0, 1)內,因此省去了縮放處理;白化會使 MNIST 圖片的值域變化,這也是這裏不採用白化的重要緣由。

關於天然圖像的白化,推薦 一篇文章

稀疏自動編碼器與分類器使用同一組數據

以前做業中使用標記爲 {5,6,7,8,9} 的數據訓練稀疏自編碼器,然而模型的目標是對 {0,1,2,3,4} 進行識別。直觀上,使用數據集 A 訓練的稀疏自編碼器所提取的特徵與 A 較相關,此時,用它來對數據集 B 作特徵提取更可能致使數據失真。

爲了驗證這個想法,稀疏自編碼器和分類器都使用標記爲 {0,1,2,3,4} 的數據來訓練:

以前的 unlabeled data 有 29404 之多,而如今使用 training data 只有 15298,且 autoencoder 與 softmax 共用,只不過 autoencoder 不使用相應的 training labels。

計算結果:

能夠看到在訓練數據減半的狀況下預測準確度依然小有提高。


總結

對於手寫數字識別,白化並沒有必要;訓練稀疏自編碼器的無標記數據對特徵自動提取有必定影響,但不大。若是考慮到手寫數字的傾斜,也可對圖片作糾偏(deskewing),使數字的縱向主軸保持垂直。

下面是將一些不一樣的神經網絡模型應用在 MNIST 數據上的計算結果:

我所截取的幾條都是較接近本文所採用模型的方法,其中表現最好的模型的預測準確度在 98%-99% 之間(表格第2列給出預處理方法;表格第3列給出錯誤率)。

補充說明:MNIST 包括一個 training set 和 一個 test set,截圖中的模型均使用 training set 訓練,使用 test set 測試。而本文將 training set 等分紅兩個子集 S1 和 S2,其中 S1 包含全部 {5,6,7,8,9},用來訓練 autoencoder,S2包含全部 {0,1,2,3,4};S2 再作2等分,一個訓練分類器,一個作測試,並未用到 MNIST 中的 test set。

相關文章
相關標籤/搜索