MLP 之手写数字识别
0. 前言
前面我們利用 LR 模型實現(xiàn)了手寫數(shù)字識別,但是效果并不好(不到 93% 的正確率)。 LR 模型從本質(zhì)上來說還只是一個線性的分類器,只不過在線性變化之后加入了非線性單調(diào)遞增 sigmoid 函數(shù)進行一一映射。實際上,這里的非線性變換對于我們分類來說是幾乎沒有什么作用的(在分類上,它等價于線性變換之后挑選出輸出值最大的節(jié)點作為我們的預(yù)測結(jié)果),于是我們考慮用更復(fù)雜一點的帶有一個隱層的 MLP (Multi-Layer Perceptron) 模型。
1. 模型
MLP 模型可以看作是在輸入空間經(jīng)過非線性變換(第一層與第二層)之后的 LR(第二層與第三層), MLP 的優(yōu)勢在于,一個經(jīng)過訓(xùn)練的 MLP 的可以由第一層的輸入經(jīng)過非線性變換映射到另外一個線性可分的由隱層節(jié)點組成的空間里去。由于activation function 可以取很多種類型 (excluding polynomials), a two-layer net work with linear outputs can uniformly approximate any continuous function on a compact input domain to?arbitrary accuracy?provided the network has a sufficiently large number of hidden units, ?隱層這種優(yōu)良的表現(xiàn)能力,也是 deeplearning 的基礎(chǔ)。
下面我們來看看具有 3 個隱層, 1000 個隱層節(jié)點的神經(jīng)網(wǎng)絡(luò)對 cos 函數(shù)的回歸效果:
理解了前面兩篇博客,對 bp 算法有了直觀理解,明白了反向求導(dǎo)過程,再來看這個程序就變得非常簡單了。在這個程序里面,我們的 MLP 模型可以表示如下:
用公式可以表示成:
這個模型包含的參數(shù)包括:
如果利用 SGD 來學(xué)習(xí)這個模型,我們需要知道 Loss Function (程序中加入了 L1 和 L2 范式)對于每個參數(shù)的偏導(dǎo)值。?這里,我們可以采用前面已經(jīng)介紹過的 BP 算法?(BP 算法其實就是計算 ANN 中各個參數(shù)導(dǎo)數(shù)的一種快速算法,就像 FDCT 對于 DCT 的快速計算。在 Theano 庫里面,由于函數(shù)是自動求導(dǎo)的,所以在下面的代碼中我們幾乎看不到 BP 的具體實現(xiàn)過程,我猜想 BP 過程應(yīng)該是 Theano 自動完成的)。
2. 構(gòu)建
只帶有一個隱層的 MLP 的 hidden layer 到 output layer 在結(jié)構(gòu)上與 LR 沒有多大的差別。我們可以在之前的 LR 基礎(chǔ)上添加從 input layer 到 hidden layer 的結(jié)構(gòu), 就構(gòu)成了這一小節(jié)中的 MLP。于是乎,我們構(gòu)建了一個隱層節(jié)點,隱層的非線性函數(shù)設(shè)定為 tanh 函數(shù)(由 sigmoid 函數(shù)往下平移 0.5 再將值域擴大 2 倍)。對于隱層節(jié)點為 tanh 函數(shù)的神經(jīng)網(wǎng)絡(luò)來說, MLP 的權(quán)重空間具有很強的對稱性,假設(shè)某一個解是 MLP 的最優(yōu)解,那么:
這樣,只有一個隱層的 MLP ,如果隱層節(jié)點采用 tanh 函數(shù),那么權(quán)重空間就有 M!2^M 個等價的解。
全零向量正好處在解的對稱中心,梯度為 0, 不能作為權(quán)重的初始值,所以需要對權(quán)重進行隨機初始化,隨機范圍與 activation function 相關(guān),有論文推導(dǎo)這一范圍,暫時來不及細(xì)看。
接著我們把剛剛建立的隱層結(jié)構(gòu)的輸出作為 LR 的輸入 (在 theano 里面實現(xiàn)十分簡潔, graph structures 的方式真是太方便啦),這樣,一個 MLP 的神經(jīng)網(wǎng)絡(luò)就搭好了。
3. 值得深入的地方
這是源代碼下載地址,具體細(xì)節(jié)就不介紹了。用這種方法進行手寫數(shù)字識別,在 5w 張圖片上進行 828 次迭代訓(xùn)練,正確率可以達(dá)到 98.35%, 相比 LR 模型,的確是一個很大的提升!
?
?
?
參考資料:
[1]:?deeplearning tutorial?
[2]: PRML, Bishop, chapter 05
?
from:http://www.cnblogs.com/daniel-D/總結(jié)
以上是生活随笔為你收集整理的MLP 之手写数字识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支持向量机SVM 简要推导过程
- 下一篇: 稀疏表示介绍(中)、(下)