這博客有三個月沒更新了。python
三個月!!!尼瑪我真是夠懶了!!算法
這三個月我複習什麼去了呢?app
託福…………機器學習
也不是說我複習緊張到徹底沒時間更新,函數
事實上我甚至有時間打LOL。學習
只是說,我一次就只能(只想?)作一件事情。編碼
對我來講,在兩種不一樣思惟之間轉換是十分耗費能量的。spa
說白了我!就!是!個!廢!柴!……哼……3d
PCA與白化,blog
就是對輸入數據進行預處理,
前者對數據進行降維,後者對數據進行方差處理。
雖然說原理挺簡單,可是做用可不小。
以前的師兄作實驗的時候,就是忘了對數據預處理,
結果實驗失敗了。
可見好的PCA對實驗結果影響挺重要。
主成成分分析(PCA):
經過拋棄攜帶信息量較少的維度對數據進行降維處理,從而加速機器學習進程。
一、使用的輸入數據集表示爲
二、首先計算出協方差矩陣 ,以下所示:
能夠證實,數據變化的主方向 就是協方差矩陣
的主特徵向量,而 變化的次方向
是次特徵向量,以此類推。
(證實略,事實上若是隻是想實現算法這個定理不用理解。但我已決定重修線代(By Myself),由於越到後面愈加現線性代數的重要性。)
三、咱們能夠經過matlab或其餘線代軟件求解出協方差矩陣的特徵向量,並按列排列以下:
是主特徵向量(對應最大的特徵值),
是次特徵向量。以此類推,另記
爲相應的特徵值(數值遞減)。
四、旋轉數據。向量 構成了一個新基,能夠用來表示數據。令
爲訓練樣本,那麼
就是樣本點 i 在維度 上的投影的長度(幅值)。
至此,以二位空間爲例,咱們能夠把 用
基表達爲:
引用UFDL兩張圖
可見變化最大的維度(攜帶信息最多,在咱們EE人的眼中,交流能量(方差)能夠用來表徵信號的信息)被排到了最前。
旋轉前 | 旋轉後 |
![]() |
![]() |
接上,咱們用方差來表徵一個信號的信息,在旋轉事後的數據中,咱們把最後面方差較小的維度捨去。
保留下來的數據與原數據所攜帶的信息比爲
通常取
(若向他人介紹PCA算法詳情,告訴他們你選擇的 保留了99%的方差)
總的來講,PCA後,數據的近似表示
即,咱們捨去n維向量中的(n-k)維,用k維向量來表示數據,可見數據的維度被縮小了。
如,捨去第二維以後的數據
其實通常都不復原,那麼辛苦排除了無用信息還復原幹蛋。只是說有這麼個東西……
矩陣 有正交性,即知足
,因此若想將旋轉後的向量
還原爲原始數據
,將其左乘矩陣
便可:
, 驗算一下:
,即:
白化(Whitening):
因爲圖像中相鄰像素之間具備很強的相關性,因此用於訓練時輸入是冗餘的。白化的目的就是下降輸入的冗餘性;更正式的說,咱們但願經過白化過程使得學習算法的輸入具備以下性質:(i)特徵之間相關性較低;(ii)全部特徵具備相同的方差。
在上一步PCA中,旋轉事後的維度間已經不具備相關性(果然正交化?)。所以這裏只用將數據的方差化爲一便可。
可知協方差矩陣對角元素的值爲 ,
……爲數據方差,方差歸一:
(對,就這麼就完了,固然這只是最最最簡單的東西)
TIPS:
未防止 過於接近零,這樣在縮放步驟時咱們除以
將致使除以一個接近0的值;這可能使數據上溢 。於是在實踐中,咱們使用少許的正則化實現這個縮放過程,即在取平方根和倒數以前給特徵值加上一個很小的常數
:
當 在區間
上時, 通常取值爲
。
(教程上是這麼說的,可是事實上我認爲若是某一維度的過於接近零,這個維度在PCA過程當中將會被捨棄。可能教程中針對的是未通過PCA的數據即:ZCAWhite?)
完結:?
基本上把幾個月的深度學習本身過了一遍(雖然有至關一部分是複製粘貼的0)。
後面的池化和卷積就不寫了,能用到的很少。
至於稀疏編碼寫不寫,還要看學不學。
由於在UFLDL裏面這方面的內容還未完善,
並且稀疏編碼的激活函數都是可學習的,
不只理解難度大,實現起來難度也大。
師兄學習的時候跑了兩天………………況且個人I3-M一代。
暫且就這樣吧。
接下來想學習python和theano,
提升應用能力,
而後向本身找點資料搞實驗。(事實上已經找到)
不過須要指導老師,和老師打交道什麼的最不懂了。
自學DL後深深感到線性代數知識的匱乏,須要惡補。
同時發現這個是DL由於可並行計算不少,頗有硬件加速的前途(FPGA?不過矩陣運算好像還不成熟?)。
要是作成芯片確定頗有前途啊~
管他呢!