1. 程式人生 > >Deep Learning讀書筆記(一):Reducing the Dimensionality of Data with Neural Networks

Deep Learning讀書筆記(一):Reducing the Dimensionality of Data with Neural Networks

       這是發表在Science上的一篇文章,是Deep Learning的開山之作,同樣也是我讀的第一篇文章,我的第一篇讀書筆記也從這開始吧。

       文章的主要工作是資料的降維,等於說這裡使用深度學習網路主要提取資料中的特徵,但卻並沒有將這個特徵應用到分類等任務中去。文章中模型的功能與自動編碼器的功能十分相似,我認為可以將文章中的模型認為是一個深度自編碼器模型。網路模型如下圖所示:

       在描述這張圖之前首先要提到網路的預訓練,這也是文章中重點說明的一點。如果我們想要得到一個更好的解,那麼就得在整個網路初始化時賦予一個較優的權值。因為網路的層數較多,整個模型的引數空間很大,如果使用一個隨機的初始值,其靠近區域性最優值得可能性就很小,在引數優化是演算法的收斂速度也很慢。但如果為其賦予一個較優的初始值,使其更為接近一某一個區域性最優值點,那麼引數優化時演算法就能夠較快的收斂,也能夠取得更優的解。較為出名的演算法有對比分歧演算法,之後也會提到。

       現在就需要來說明下前面的那張圖了。從圖中可以看出,在預訓練的過程中整個模型是被逐層訓練的,這個思想在深度學習中是十分重要的一點。這裡網路的每一個單元都是限制玻爾茲曼機(RBM),當然也可以將其換成是其他的模型,例如自編碼器。逐層訓練的思想是: 先訓練好一個子網路,將前一個子網路的輸出作為後一個子網路的輸入訓練下一個子網路,最後將所有的子網路組合成一個大網路。逐層訓練的目的就是為了賦予整個網路一個較優的初始值,使其能夠通過之後的引數優化取得更優的值。

       那麼逐層訓練又是怎樣實現的呢?這裡因為使用的單元是限制玻爾茲曼機,所以使用的方法是對比分歧演算法。論文中有對該演算法進行介紹,但是因為該演算法與限制玻爾茲曼機的機制有很大的聯絡,這裡我並不想單獨說明,而是希望寫一篇來單獨介紹限制玻爾茲曼機,因為限制玻爾茲曼機在深度學習中使用的還是比較廣泛的,不久之後可能會說到的深信度網路就是由限制玻爾茲曼機所構成的。

       再回到之前的那張圖中,Unrolling對應的那一部分的圖,網路將輸入的影象編碼成一個只有30維的特徵。我們可以將這一部分網路看做是encoder。之後呢,又可以將該30維的特徵還原回輸入,可以看出還原回去的效果還是不錯的,這一部分可以將其看做是decoder。從圖中可以看出這是encoder的一個逆過程。30維的特徵相對於輸入的維數已經是小了很多,我們可以看出,30維的特徵還是保留了輸入的主要資訊。所以,在資料壓縮方面還是能夠有很廣泛的應用的。同樣,也可以將該30維的特徵輸入到一個分類器中,這比直接將圖片作為輸入在分類網路的規模上還是要小很多,而且提取出的特徵能夠抓住輸入最主要的特徵,這或許比直接將圖片作為輸入所獲取到的效果更好。這也體現出了深度學習最為主要的目的。就是特徵的提取。

        在fine-tuning的部分,就是對之前所得到的引數進行調整。雖然這裡網路的層數較於傳統的神經網路模型有所增加,但是依然可以使用BP演算法來對網路的引數進行調整。因為通過預訓練的過程已經賦予整個網路一個較好的初始值,所以並不會造成原來經常受到困擾的梯度彌散問題(該問題會在網路的層數較多,又使用隨機值初始化時會遇到。因為初始值並不優,而且網路層數又多,造成梯度在反傳時在網路的前幾層已經是很小了,無法對引數進行有效的調整)。當然也有其他的方法來進行調參,BP演算法還是最常見的。

        最後文章通過幾個試驗來證明了模型的有效性,因為這裡並沒有一個標籤的概念,所以這裡使用了交叉熵作為調參時的目標函式(交叉熵的公式:)。這裡我認為可以將輸入的影象作為標籤,將其與通過特徵還原回的影象進行比較,也可以將其看做是監督型學習演算法。交叉熵也就是衡量這兩者差異性的標準。

        到這裡,第一篇部落格就這樣結束了。因為並不是在專業的計算機雜誌上發表的文章,內容確實不是很多,我也是有省略掉一部分在下一篇中會提到。確實是第一次寫東西,難免會有一些不足的地方,請大家見諒。相信以後一定會有提高的。