這節課的題目是Deep learning,個人以為說的跟Deep learning比較淺,跟autoencoder和PCA這塊內容比較緊密。
林介紹了deep learning近年來受到了很大的關注:deep NNet概念很早就有,只是受限於硬件的計算能力和參數學習方法。
近年來深度學習長足進步的原因有兩個:
1)pre-training技術獲得了發展
2)regularization的技術獲得了發展
接下來,林開始介紹autoencoder的motivation。
每過一個隱層,可以看做是做了一次對原始輸入信息的轉換。
什么是一個好的轉換呢?就是因為這種轉換而丟失較多的信息:即encoding之后,甚至可以用decoding的過程復原。
因此,在考慮deep NNet的參數學習的時候,如果在pre-training階段采用類似autoencoding的方式,似乎是一個不錯的選擇。
如下,就是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的效果。