博客內容取材於:http://www.cnblogs.com/tornadomeet/archive/2012/06/24/2560261.htmlphp
參考資料:html
補充材料:網絡
tornadomeet博客整理得很好,欣賞這樣的學習態度。app
該博客基本取材於UFLDL,在二者取捨間仍是選擇按照tornadomeet博客的劇本走一遍。dom
由於大部分概念都已熟知,在此過一遍的意義在於查缺補漏,鞏固基礎。ide
該博客年初發現,現在我也有了這樣的「博客導航」,這即是正能量的傳播效應。函數
Deep Learning學習筆記: Deep learning:五十一(CNN的反向求導及練習) Deep learning:五十(Deconvolution Network簡單理解) Deep learning:四十九(RNN-RBM簡單理解) Deep learning:四十八(Contractive AutoEncoder簡單理解) Deep learning:四十七(Stochastic Pooling簡單理解) Deep learning:四十六(DropConnect簡單理解) Deep learning:四十五(maxout簡單理解) Deep learning:四十四(Pylearn2中的Quick-start例子) Deep learning:四十三(用Hessian Free方法訓練Deep Network) Deep learning:四十二(Denoise Autoencoder簡單理解) Deep learning:四十一(Dropout簡單理解) Deep learning:四十(龍星計劃2013深度學習課程小總結) Deep learning:三十九(ICA模型練習) Deep learning:三十八(Stacked CNN簡單介紹) Deep learning:三十七(Deep learning中的優化方法) Deep learning:三十六(關於構建深度卷積SAE網絡的一點困惑) Deep learning:三十五(用NN實現數據降維練習) Deep learning:三十四(用NN實現數據的降維) Deep learning:三十三(ICA模型) Deep learning:三十二(基礎知識_3) Deep learning:三十一(數據預處理練習) Deep learning:三十(關於數據預處理的相關技巧) Deep learning:二十九(Sparse coding練習) Deep learning:二十八(使用BP算法思想求解Sparse coding中矩陣範數導數) Deep learning:二十七(Sparse coding中關於矩陣的範數求導) Deep learning:二十六(Sparse coding簡單理解) Deep learning:二十五(Kmeans單層網絡識別性能) Deep learning:二十四(stacked autoencoder練習) Deep learning:二十三(Convolution和Pooling練習) Deep learning:二十二(linear decoder練習) Deep learning:二十一(隨機初始化在無監督特徵學習中的做用) Deep learning:二十(無監督特徵學習中關於單層網絡的分析) Deep learning:十九(RBM簡單理解) Deep learning:十八(關於隨機採樣) Deep learning:十七(Linear Decoders,Convolution和Pooling) Deep learning:十六(deep networks) Deep learning:十五(Self-Taught Learning練習) Deep learning:十四(Softmax Regression練習) Deep learning:十三(Softmax Regression) Deep learning:十二(PCA和whitening在二天然圖像中的練習) Deep learning:十一(PCA和whitening在二維數據中的練習) Deep learning:十(PCA和whitening) Deep learning:九(Sparse Autoencoder練習) Deep learning:八(Sparse Autoencoder) Deep learning:七(基礎知識_2) Deep learning:六(regularized logistic迴歸練習) Deep learning:五(regularized線性迴歸練習) Deep learning:四(logistic regression練習) Deep learning:三(Multivariance Linear Regression練習) Deep learning:二(linear regression練習) Deep learning:一(基礎知識_1)
From: Deep learning:一(基礎知識_1)tornado
教程中的一些術語:
【剪裁版】
Model representation:
學習所得函數表達形式,可用矩陣表示。
Vectorized implementation:
指定函數表達式的矢量實現。
Feature scaling:
將特徵的每一維都進行一個尺度變化,例如,讓其均值爲0等。
必要性:因爲梯度降低法是按照梯度方向來收斂到極值的,若是輸入樣本各個維數的尺寸不一樣(即範圍不一樣),則這些參數的構成的等高線不一樣的方向胖瘦不一樣,這樣會致使參數的極值收斂速度極慢。
所以,在進行梯度降低法求參數前,須要先進行feature scaling這一項,通常都是把樣本中的各維變成0均值,即先減掉該維的均值,而後除以該變量的range。
Normal equations:
多元線性迴歸中參數解的矩陣形式,這個解方程稱爲normal equations.
同一個問題能夠選用不一樣的特徵和不一樣的模型,
當用訓練樣原本進行數據的測試時,通常都會將全部的訓練數據整理成一個矩陣,矩陣的每一行就是一個訓練樣本,這樣的矩陣有時候也會叫作是「design matrix」。
當用矩陣的形式來解多項式模型的參數時,參數 w=inv(X’*X)*X’*y,這個方程也稱爲 normal equations.
雖然X’*X是方陣,可是它的逆不必定存在(當一個方陣的逆矩陣不存在時,該方陣也稱爲sigular)。
Optimization objective:
指的是須要優化的目標函數,好比 logistic中loss function表達式的公式推導,或者 多元線性迴歸中帶有規則性的目標函數。
Gradient Descent、Newton’s Method:
求目標函數最小值的方法。
Convex函數其實指的是隻有一個極值點的函數,而non-convex可能有多個極值點。通常狀況下咱們都但願損失函數的形式是convex的。在分類問題狀況下,先考慮訓練樣本中值爲1的那些樣本集,這時候個人損失函數要求咱們
因此這種狀況下通常採用的是-log(h(x)),恰好知足要求。
同理,當訓練樣本值爲0時,通常採用的損失函數是 -log(1-h(x))。
所以將這兩種整合在一塊兒時就爲-y*log(h(x))-(1-y)*log(1-h(x)),結果是和上面的同樣,不過表達式更緊湊了,選這樣形式的loss函數是經過最大釋然估計(MLE)求得的。
這種狀況下依舊可使用梯度降低法來求解參數的最優值。在求參數的迭代公式時,一樣須要求損失函數的偏導,很奇怪的是,這時候的偏導函數和多元線性迴歸時的偏導函數結構相似,只是其中的預測函數一個是普通的線性函數,一個是線性函數和sigmoid的複合的函數。
梯度降低法是用來求函數值最小處的參數值,而牛頓法是用來求函數值爲0處的參數值,這二者的目的初看是感受有所不一樣,可是再仔細觀察下牛頓法是求函數值爲0時的狀況,若是此時的函數是某個函數A的導數,則牛頓法也算是求函數A的最小值(固然也有多是最大值)了,所以這二者方法目的仍是具備相同性的。牛頓法的參數求解也能夠用矢量的形式表示,表達式中有hession矩陣和一元導函數向量。
下面來比較梯度法和牛頓法:
Common variations:
規則項表達形式的多樣性。
若是當系統的輸入特徵有多個,而系統的訓練樣本比較少時,這樣就很容易形成over-fitting的問題。這種狀況下
由於規則項能夠做用在參數上,讓最終的參數很小,當全部參數都很小的狀況下,這些假設就是簡單假設,從而可以很好的解決over-fitting的問題。
通常對參數進行regularization時,前面都有一個懲罰係數,這個係數稱爲regularization parameter,
若是這個規則項係數太大的話,有可能致使系統全部的參數最終都很接近0,因此會出現欠擬合的現象。
在多元線性迴歸中,規則項通常懲罰的是參數1到n(固然有的也能夠將參數0加入懲罰項,但不常見)。隨着訓練樣本的增長,這些規則項的做用在慢慢減少,所以學習到的系統的參數傾向而慢慢增長。
規則項還有不少種形式,有的規則項不會包含特徵的個數,如L2-norm regularization(或者叫作2-norm regularization).固然了,還有L1-norm regularization。
因爲規則項的形式有不少種,因此這種情形也稱爲規則項的common variations.【常見變種】
在有規則項的線性迴歸問題求解中,若是採用梯度降低法,則參數的更新公式相似(其中參數0的公式是同樣的,由於規則項中沒有懲罰參數0),
不一樣之處在於其它參數的更新公式中的更新不是用自己的參數去減掉後面一串,而是用自己參數乘以(1-alpha*lamda/m)再減掉其它的,固然了這個數在不少狀況下和1是相等的,也就很前面的無規則項的梯度降低法相似了。
它的normal equation也很前面的相似,大體爲 inv(X’*X+lamda*A)*X’*y,多了一項,其中A是一個對角矩陣,除了第一個元素爲0外,其它元素都爲1(在通用規則項下的情形)。這種狀況下前面的矩陣通常就是可逆的了,即在樣本數量小於特徵數量的狀況下是可解的。
當爲logistic迴歸的狀況中(此時的loss函數中含有對數項),若是使用梯度降低法,則參數的更新方程中也和線性迴歸中的相似,也是要乘以(1-alpha*lamda/m),nomal equation中也是多了一個矩陣,這樣同理就解決了不可逆問題。
在牛頓法的求解過程當中,加了規則項後的一元導向量都隨着改變,hession矩陣也要在最後加入lamda/m*A矩陣,其中A和前面的同樣。
logistic迴歸與多重線性迴歸實際上有不少相同之處,最大的區別就在於他們的 因變量不一樣,其餘的基本都差很少,正是由於如此,這兩種迴歸能夠歸於同一個家族,即廣義線性模型(generalized linear model)。
這一家族中的模型形式基本上都差很少,不一樣的就是因變量不一樣,
只要注意區分它們的因變量就能夠了。logistic迴歸的因變量能夠是二分類的,也能夠是多分類的,可是二分類的更爲經常使用,也更加容易解釋。
因此實際中最爲經常使用的就是二分類的logistic迴歸。
dropout是指在深度學習網絡的訓練過程當中,對於神經網絡單元,按照必定的機率將其暫時從網絡中丟棄。注意是暫時,對於隨機梯度降低來講,因爲是隨機丟棄,故而每個mini-batch都在訓練不一樣的網絡。
CNN中防止過擬合提升效果的一個大殺器,但對於其爲什麼有效,卻衆說紛紜。在下讀到兩篇表明性的論文,表明兩種不一樣的觀點。
<組合論>
大規模的神經網絡有兩個缺點,死鎖:
Sol:Dropout的出現很好的能夠解決這個問題,每次作完dropout,至關於從原始的網絡中找到一個更瘦
的網絡,以下圖所示:
於是,對於一個有n個節點的神經網絡,有了dropout後,就能夠看作是2n個模型的集合了,但此時要訓練的參數數目倒是不變的,這就解脫了費時的問題。
<動機論>
dropout也能達到一樣的效果(有性繁殖比無性繁殖更具備適應性),它強迫一個神經單元,和隨機挑選出來的其餘神經單元共同工做,達到好的效果。消除減弱了神經元節點間的聯合適應性,加強了泛化能力。
論文中的其餘技術點
防止過擬合的方法:
dropout率的選擇
訓練過程
部分實驗結論
該論文的實驗部分很豐富,有大量的評測數據。
maxout 神經網絡中的另外一種方法,Cifar-10上超越dropout
文本分類上,dropout效果提高有限,分析緣由多是Reuters-RCV1數據量足夠大,過擬合併非模型的主要問題
模型均值預測
Multiplicative Gaussian Noise
使用高斯分佈的dropout而不是伯努利模型dropout
進一步須要瞭解的知識點
- dropout RBM
- Marginalizing Dropout
具體來講就是將隨機化的dropout變爲肯定性的,好比對於Logistic迴歸,其dropout至關於加了一個正則化項。- Bayesian neural network對稀疏數據特別有用,好比medical diagnosis, genetics, drug discovery and other computational biology applications
觀點十分明確,就是對於每個dropout後的網絡,進行訓練時,至關於作了Data Augmentation。
由於,總能夠找到一個樣本,使得在原始的網絡上也能達到dropout單元后的效果。
好比,對於某一層,dropout一些單元后,造成的結果是(1.5,0,2.5,0,1,2,0),其中0是被drop的單元,那麼總能找到一個樣本,使得結果也是如此。
這樣,每一次dropout其實都至關於增長了樣本。
其餘,暫略。
[1]. Srivastava N, Hinton G, Krizhevsky A, et al. Dropout: A simple way to prevent neural networks from overfitting[J]. The Journal of Machine Learning Research, 2014, 15(1): 1929-1958. [2]. Dropout as data augmentation. http://arxiv.org/abs/1506.08700
有必要細讀的文章。
<L2, weight decay>
隨着訓練過程,網絡在training data上的error漸漸減少,可是在驗證集上的error卻反而漸漸增大——由於訓練出來的網絡過擬合了訓練集,對訓練集外的數據卻不work。
讓w「變小」的效果。爲何w「變小」能夠防止overfitting?一個所謂「顯而易見」的解釋就是:
「更小的權值w,從某種意義上說,表示網絡的複雜度更低,對數據的擬合剛恰好(這個法則也叫作奧卡姆剃刀),而在實際應用中,也驗證了這一點,L2正則化的效果每每好於未經正則化的效果。」
固然,對於不少人(包括我)來講,這個解釋彷佛不那麼顯而易見,因此這裏添加一個稍微數學一點的解釋(引自知乎):
過擬合的時候,擬合函數的係數每每很是大,爲何?以下圖所示,過擬合,就是擬合函數須要顧忌每個點,最終造成的擬合函數波動很大。在某些很小的區間裏,函數值的變化很劇烈。這就意味着函數在某些小區間裏的導數值(絕對值)很是大,因爲自變量值可大可小,因此只有係數足夠大,才能保證導數值很大。
而正則化是經過約束參數的範數使其不要太大,因此能夠在必定程度上減小過擬合狀況。
<L1>
在原始的代價函數後面加上一個L1正則化項,即全部權重w的絕對值的和,乘以λ/n。
讓w往0靠,使網絡中的權重儘量爲0,也就至關於減少了網絡複雜度,防止過擬合。
另外,上面沒有提到一個問題,當w爲0時怎麼辦?當w等於0時,|W|是不可導的,因此咱們只能按照原始的未經正則化的方法去更新w,這就至關於去掉η*λ*sgn(w)/n這一項,因此咱們能夠規定sgn(0)=0,這樣就把w=0的狀況也統一進來了。(在編程的時候,令sgn(0)=0,sgn(w>0)=1,sgn(w<0)=-1)