這節課的題目是Deep learning,我的覺得說的跟Deep learning比較淺,跟autoencoder和PCA這塊內容比較緊密。php
林介紹了deep learning近年來受到了很大的關注:deep NNet概念很早就有,只是受限於硬件的計算能力和參數學習方法。html
近年來深度學習長足進步的緣由有兩個:網絡
1)pre-training技術得到了發展機器學習
2)regularization的技術得到了發展函數
接下來,林開始介紹autoencoder的motivation。學習
每過一個隱層,能夠看作是作了一次對原始輸入信息的轉換。優化
什麼是一個好的轉換呢?就是由於這種轉換而丟失較多的信息:即encoding以後,甚至能夠用decoding的過程復原。spa
所以,在考慮deep NNet的參數學習的時候,若是在pre-training階段採用相似autoencoding的方式,彷佛是一個不錯的選擇。3d
以下,就是autoencoder的一個示例。簡單來講,就是通過以下的單層神經網絡結構後,輸出跟輸出十分接近。日誌
這種autoencoder對於機器學習來講有什麼做用呢?
1)對於supervised learning來講:這種information-preserving NN的隱層結構+權重是一種對原始輸入合理的轉換,至關於在結構中學習了data的表達方式
2)對於unsupervised learning來講:能夠做爲density estimation或outlier detection。這個地方沒太理解清,可能仍是缺乏例子。
autoencoder能夠當作是單層的NN,能夠用backprop求解;這裏須要多加入一個正則化條件,wij(1)=wji(2)
採用上述的basic autoencoder,能夠做爲Deep NNet的pre-training方式。
接下來,林開始關注Deep NNet的regularization的問題。
以前提到過的幾種regularization方式均可以用(structural constraints、weight decay/elimination regularizers、early stopping),下面介紹一種新的regularization technique。
這種方式是:adding noise to data
簡單來講,在訓練autoencoder的時候加入高斯噪聲,喂進去的輸出端仍是沒有加入噪聲的data;這樣學出來的autoencoder就具有了抵抗noise的能力。
接下來,開始引入PCA相關的內容。
以前陳述的autoencoder能夠歸類到nonliner autoencoder(由於隱層輸出須要通過tanh的操做,因此是nonlinear的)。
那麼若是是linear autoencoder呢?(這裏把隱層的bias單元去掉)
最後獲得的linear autoencoder的表達式就是 :h(x)=WW'x
由此,能夠寫出來error function
這是一個關於W的4階的多項式,analytic solution不太好整。
因而林給出了下面的一種求解思路:
上述的核心在於:WW'是實對稱陣。
實對稱陣有以下的性質:(http://wenku.baidu.com/view/1470f0e8856a561252d36f5d.html)
咱們注意一下W這個矩陣:W是d×d'維度的矩陣;WW'是d×d維度的矩陣。
這裏回顧一下矩陣的秩的性質:
所以,WW'的秩最大就是d'了(d表明數據的原始維度,d'表明隱層神經元的個數,通常d'<d)
WW'的秩最大是d'能獲得這樣的結論:WW'至多有d'個非零特徵值→對角陣gamma對角線上最多有d'個非零元素。
這裏須要複習線性代數一個概念:
若是矩陣能夠對角化,那麼非零特徵值的個數就等於矩陣的秩;若是矩陣不能夠對角化,那麼這個結論就不必定成立了。
這裏咱們說的WW'是實對稱陣,又由於實對稱陣必定能夠對角化,所以WW'的非零特徵值特殊就等於矩陣的秩。
經過上述的內容,WW'x又能夠當作是VgammaV'x:
1)V'x 能夠當作是對原始輸入rotate
2)gamma 能夠當作是將0特徵值的component的部分設成0,而且scale其他的部分
3)再轉回來
所以,優化目標函數就出來了
這裏能夠不用管前面的V(這是正交變換的一個性質,正交變換不改變兩個向量的內積,詳情見https://zh.wikipedia.org/wiki/正交)
這樣一來,問題就簡化了:令I-gamma生出不少0,利用gamma對角線元素的自由度,往gamma裏面塞1,最多塞d'個1。剩下的事情交給V來搞定。
1)先把最小化轉化爲等價的最大化問題
2)用只有一個非零特徵值的狀況來考慮,Σv'xx'v s.t. v'v=1
3)在上述最優化問題中,最好的v要知足error function和constraints在最優解的時候,他們的微分要平行。
4)再仔細觀察下形式 Σxx'v = lambdav 這裏的v不就是XX'的特徵向量麼
所以,最優化的v就是特徵值最大的XX'的特徵向量。須要降到多少維的,就取前多少個特徵向量。
林最後提了一句PCA,其實就是在進行上述步驟以前先對各個維度的向量均值化:
下面說一下PCA。
http://blog.codinglabs.org/articles/pca-tutorial.html
上面這篇日誌很是好,基本徹底解釋了PCA的前因後果。
1)PCA的目的是對數據降維以後,還能儘可能保持數據原有的信息(分得開。。。方差大。。。)
2)若是對原始數據各個維度作均值化的操做以後,方差&協方差,只用一個矩陣就表示出來了。
上述這段話看明白了,PCA的核心就有了:巧妙地把原始輸入數據各個維度均值化以後,方差和協方差都放到一個矩陣裏了。
優化的目標是:方差要大,協方差要小;這樣的優化目標就等價於把協方差矩陣對角化。
實對稱陣對角化是線性代數的基礎知識:http://wenku.baidu.com/view/1470f0e8856a561252d36f5d.html
OK,PCA就大致上搞定了。
中途還看了stanford的http://ufldl.stanford.edu/wiki/index.php/PCA
腦子裏冒出來一個想法:若是協方差矩陣是滿秩的,而且不對數據降維,原來是多少維,仍是多少維,那麼變換前和變換後有啥區別呢?
從式子上看,這種變化至關於把變換後的協方差矩陣搞成對角陣了。若是從幾何上來看,比較下面兩個圖:
變換前:
變換後:
直觀上看就是總體給「放平」了。
變化前:x1越大 x2也越大,反之亦然
變換後:因爲給放平了,x1的大小與x2的大小不要緊了
所以,變換後這種放平就消除了x1和x2的相關性了,也就是協方差矩陣的非對角元素給搞成0的效果。