[UFLDL] Basic Concept

博客內容取材於:http://www.cnblogs.com/tornadomeet/archive/2012/06/24/2560261.htmlphp

參考資料:html

UFLDL wiki算法

UFLDL Stanford編程

補充材料:網絡

 

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.

同一個問題能夠選用不一樣的特徵和不一樣的模型,

      • 不一樣特徵方面,好比單個面積特徵實際上是能夠寫成長和寬2個特徵的。
      • 不一樣模型方面,好比在使用多項式擬合模型時,能夠指定x的指數項最大值。

 

當用訓練樣原本進行數據的測試時,通常都會將全部的訓練數據整理成一個矩陣,矩陣的每一行就是一個訓練樣本,這樣的矩陣有時候也會叫作是「design matrix」。

當用矩陣的形式來解多項式模型的參數時,參數 w=inv(X’*X)*X’*y,這個方程也稱爲 normal equations.

雖然X’*X是方陣,可是它的逆不必定存在(當一個方陣的逆矩陣不存在時,該方陣也稱爲sigular)。

        • 好比說當X是單個元素0時,它的倒數不存在,這就是個Sigular矩陣,固然了這個例子太特殊了。
        • 另外一個比較常見的例子就是參數的個數比訓練樣本的個數還要多時也是非可逆矩陣。這時候要求解的話就須要引入regularization項,或者去掉一些特徵項(典型的就是降維,去掉那些相關性強的特徵)。
        • 另外,對線性迴歸中的normal equations方程求解前,不須要對輸入樣本的特徵進行feature scale(這個是有理論依據的)。

 

Optimization objective:

指的是須要優化的目標函數,好比 logistic中loss function表達式的公式推導,或者 多元線性迴歸中帶有規則性的目標函數。

Gradient Descent、Newton’s Method:

求目標函數最小值的方法。

Convex函數其實指的是隻有一個極值點的函數,而non-convex可能有多個極值點。通常狀況下咱們都但願損失函數的形式是convex的。在分類問題狀況下,先考慮訓練樣本中值爲1的那些樣本集,這時候個人損失函數要求咱們

      • 當預測值爲1時,損失函數值最小(爲0),
      • 當預測值爲0時,此時損失函數的值最大,爲無窮大,

因此這種狀況下通常採用的是-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矩陣和一元導函數向量。

 

下面來比較梯度法和牛頓法:

  • 梯度法中須要選擇學習速率,而牛頓法不須要選擇任何參數
  • 梯度法須要大量的迭代次數才能找到最小值,而牛頓法只須要少許的次數即可完成。
  • 可是梯度法中的每一次迭代的代價要小,其複雜度爲O(n) --> 而牛頓法的每一次迭代的代價要大,爲O(n^3)。
  • 所以當特徵的數量n比較小時適合選擇牛頓法 --> 當特徵數n比較大時,最好選梯度法。這裏的大小以n等於1000爲界來計算。

 

Common variations:

規則項表達形式的多樣性。

若是當系統的輸入特徵有多個,而系統的訓練樣本比較少時,這樣就很容易形成over-fitting的問題。這種狀況下

      • 降維方法,來減少特徵的個數(也能夠經過模型選擇的方法),
      • regularization的方法,(一般狀況下經過regularization方法在特徵數不少的狀況下是最有效,可是要求這些特徵都只對最終的結果預測起少部分做用)

 

由於規則項能夠做用在參數上,讓最終的參數很小當全部參數都很小的狀況下,這些假設就是簡單假設,從而可以很好的解決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迴歸,
      • 若是是poisson分佈,就是poisson迴歸,
      • 若是是負二項分佈,就是負二項迴歸,等等。

只要注意區分它們的因變量就能夠了。logistic迴歸的因變量能夠是二分類的,也能夠是多分類的,可是二分類的更爲經常使用,也更加容易解釋。

因此實際中最爲經常使用的就是二分類的logistic迴歸。

 


 

附錄:相關知識點

dropout是指在深度學習網絡的訓練過程當中,對於神經網絡單元,按照必定的機率將其暫時從網絡中丟棄。注意是暫時,對於隨機梯度降低來講,因爲是隨機丟棄,故而每個mini-batch都在訓練不一樣的網絡。

CNN中防止過擬合提升效果的一個大殺器,但對於其爲什麼有效,卻衆說紛紜。在下讀到兩篇表明性的論文,表明兩種不一樣的觀點。

 

<組合論>

大規模的神經網絡有兩個缺點,死鎖

    • 費時
    • 容易過擬合

Sol:Dropout的出現很好的能夠解決這個問題,每次作完dropout,至關於從原始的網絡中找到一個更的網絡,以下圖所示:

 

於是,對於一個有n個節點的神經網絡,有了dropout後,就能夠看作是2n個模型的集合了,但此時要訓練的參數數目倒是不變的,這就解脫了費時的問題。

 

<動機論>

dropout也能達到一樣的效果(有性繁殖比無性繁殖更具備適應性),它強迫一個神經單元,和隨機挑選出來的其餘神經單元共同工做,達到好的效果。消除減弱了神經元節點間的聯合適應性,加強了泛化能力。

 

  • 訓練時,訓練網絡的每一個單元要添加一道機率流程。(就是一下子valid,一下子invalid)。
  • 預測時,每個單元的參數要預乘以p。 

 

論文中的其餘技術點

    • 防止過擬合的方法:

      • 提早終止(當驗證集上的效果變差的時候)
      • L1和L2正則化加權
      • soft weight sharing
      • dropout
    • dropout率的選擇

      • 通過交叉驗證,hidden節點dropout率等於0.5的時候效果最好,緣由是0.5的時候dropout隨機生成的網絡結構最多。
      • dropout也能夠被用做一種添加噪聲的方法,直接對input進行操做。輸入層設爲更接近1的數。使得輸入變化不會太大(0.8)
    • 訓練過程

      • 對參數w的訓練進行球形限制(max-normalization),對dropout的訓練很是有用。
      • 球形半徑c是一個須要調整的參數。可使用驗證集進行參數調優
      • dropout本身雖然也很牛,可是dropout、max-normalization、large decaying learning rates and high momentum組合起來效果更好,好比max-norm regularization就能夠防止大的learning rate致使的參數blow up。
      • 使用pretraining方法也能夠幫助dropout訓練參數,在使用dropout時,要將全部參數都乘以1/p。
    • 部分實驗結論

      該論文的實驗部分很豐富,有大量的評測數據。

      • maxout 神經網絡中的另外一種方法,Cifar-10上超越dropout

      • 文本分類上,dropout效果提高有限,分析緣由多是Reuters-RCV1數據量足夠大,過擬合併非模型的主要問題

      • dropout與其餘standerd regularizers的對比 
      • L2 weight decay
      • lasso
      • KL-sparsity
      • max-norm regularization
      • dropout
      • 特徵學習 
      • 標準神經網絡,節點之間的相關性使得他們能夠合做去fix其餘節點中得噪聲,但這些合做並不能在unseen data上泛化,因而,過擬合,dropout破壞了這種相關性。在autoencoder上,有dropout的算法更能學習有意義的特徵(不過只能從直觀上,不能量化)。
      • 產生的向量具備稀疏性。
      • 保持隱含節點數目不變,dropout率變化;保持激活的隱節點數目不變,隱節點數目變化。
      • 數據量小的時候,dropout效果很差,數據量大了,dropout效果好
      • 模型均值預測

      • 使用weight-scaling來作預測的均值化
      • 使用mente-carlo方法來作預測。即對每一個樣本根據dropout率先sample出來k個net,而後作預測,k越大,效果越好。
      • Multiplicative Gaussian Noise 
        使用高斯分佈的dropout而不是伯努利模型dropout

      • dropout的缺點就在於訓練時間是沒有dropout網絡的2-3倍。

進一步須要瞭解的知識點

    • 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)

相關文章
相關標籤/搜索