




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 現代機器學習理論大作業 (基于深度學習的圖像特征提取) 基于深度學習的圖像特征提取摘要:大數據時代的來臨,為深度學習理論的發展創造了良好的條件。本文介紹了深度學習的發展背景,主要討論了深度學習中的自編碼的方法,對自編碼方法實現仿真應用,期望在以后能應用到SAR圖像上進行自動特征提取,最后闡述該理論的目前遇到的困難。關鍵詞:深度學習 autoencoder convolution pooling一 引言 機器學習是人工智能的一個分支,而在很多時候,幾乎成為人工智能的代名詞。簡單來說,機器學習就是通過算法,使得機器能從大量歷史數據中學習規律,從而對新的樣本做智能識別或對未來做預測。從1980年代
2、末期以來,機器學習的發展大致經歷了兩次浪潮:淺層學習(Shallow Learning)和深度學習(Deep Learning)。第一次浪潮:淺層學習1980年代末期,用于人工神經網絡的反向傳播算法(也叫Back Propagation算法或者BP算法)的發明,給機器學習帶來了希望,掀起了基于統計模型的機器學習熱潮。這個熱潮一直持續到今天。人們發現,利用BP算法可以讓一個人工神經網絡模型從大量訓練樣本中學習出統計規律,從而對未知事件做預測。這種基于統計的機器學習方法比起過去基于人工規則的系統,在很多方面顯示出優越性。這個時候的人工神經網絡,雖然也被稱作多層感知機(Multi-layer Per
3、ceptron),但實際上是一種只含有一層隱層節點的淺層模型。90年代,各種各樣的淺層機器學習模型相繼被提出,比如支撐向量機(SVM,Support Vector Machines)、Boosting、最大熵方法(例如LR, Logistic Regression)等。這些模型的結構基本上可以看成帶有一層隱層節點(如SVM、Boosting),或沒有隱層節點(如LR)。這些模型在無論是理論分析還是應用都獲得了巨大的成功。相比較之下,由于理論分析的難度,加上訓練方法需要很多經驗和技巧,所以這個時期淺層人工神經網絡反而相對較為沉寂。2000年以來互聯網的高速發展,對大數據的智能化分析和預測提出了巨
4、大需求,淺層學習模型在互聯網應用上獲得了巨大成功。最成功的應用包括搜索廣告系統(比如Google的AdWords、百度的鳳巢系統)的廣告點擊率CTR預估、網頁搜索排序(例如Yahoo!和微軟的搜索引擎)、垃圾郵件過濾系統、基于內容的推薦系統等。2006年,加拿大多倫多大學教授、機器學習領域泰斗Geoffrey Hinton和他的學生Ruslan Salakhutdinov在頂尖學術刊物科學上發表了一篇文章,開啟了深度學習在學術界和工業界的浪潮。這篇文章有兩個主要的信息:1. 很多隱層的人工神經網絡具有優異的特征學習能力,學習得到的特征對數據有更本質的刻畫,從而有利于可視化或分類;2. 深度神經
5、網絡在訓練上的難度,可以通過“逐層初始化(Layer-wise Pre-training)來有效克服,在這篇文章中,逐層初始化是通過無監督學習實現的。第二次浪潮:深度學習自2006年以來,深度學習在學術界持續升溫。斯坦福大學、紐約大學、加拿大蒙特利爾大學等成為研究深度學習的重鎮。2010年,美國國防部DARPA計劃首次資助深度學習項目,參與方有斯坦福大學、紐約大學和NEC美國研究院。支持深度學習的一個重要依據,就是腦神經系統的確具有豐富的層次結構。一個最著名的例子就是Hubel-Wiesel模型,由于揭示了視覺神經的機理而曾獲得諾貝爾醫學與生理學獎。除了仿生學的角度,目前深度學習的理論研究還基
6、本處于起步階段,但在應用領域已顯現出巨大能量。2011年以來,微軟研究院和Google的語音識別研究人員先后采用DNN技術降低語音識別錯誤率2030,是語音識別領域十多年來最大的突破性進展。2012年,DNN技術在圖像識別領域取得驚人的效果,在ImageNet評測上將錯誤率從26降低到15。在這一年,DNN還被應用于制藥公司的Druge Activity預測問題,并獲得世界最好成績,這一重要成果被紐約時報報道。今天Google、微軟、百度等知名的擁有大數據的高科技公司爭相投入資源,占領深度學習的技術制高點,正是因為它們都看到了在大數據時代,更加復雜且更加強大的深度模型能深刻揭示海量數據里所承載
7、的復雜而豐富的信息,并對未來或未知事件做更精準的預測。在工業界一直有個很流行的觀點:在大數據條件下,簡單的機器學習模型會比復雜模型更加有效。例如,在很多的大數據應用中,最簡單的線性模型得到大量使用。而最近深度學習的驚人進展,促使我們也許到了要重新思考這個觀點的時候。簡而言之,在大數據情況下,也許只有比較復雜的模型,或者說表達能力強的模型,才能充分發掘海量數據中蘊藏的豐富信息。運用更強大的深度模型,也許我們能從大數據中發掘出更多有價值的信息和知識。為了理解為什么大數據需要深度模型,先舉一個例子。語音識別已經是一個大數據的機器學習問題,在其聲學建模部分,通常面臨的是十億到千億級別的訓練樣本。在Go
8、ogle的一個語音識別實驗中,發現訓練后的DNN對訓練樣本和測試樣本的預測誤差基本相當。這是非常違反常識的,因為通常模型在訓練樣本上的預測誤差會顯著小于測試樣本。因此,只有一個解釋,就是由于大數據里含有豐富的信息維度,即便是DNN這樣的高容量復雜模型也是處于欠擬合的狀態,更不必說傳統的GMM聲學模型了。所以從這個例子中我們看出,大數據需要深度學習。淺層模型有一個重要特點,就是假設靠人工經驗來抽取樣本的特征,而強調模型主要是負責分類或預測。在模型的運用不出差錯的前提下(如假設互聯網公司聘請的是機器學習的專家),特征的好壞就成為整個系統性能的瓶頸。因此,通常一個開發團隊中更多的人力是投入到發掘更好
9、的特征上去的。要發現一個好的特征,就要求開發人員對待解決的問題要有很深入的理解。而達到這個程度,往往需要反復地摸索,甚至是數年磨一劍。因此,人工設計樣本特征,不是一個可擴展的途徑。深度學習的實質,是通過構建具有很多隱層的機器學習模型和海量的訓練數據,來學習更有用的特征,從而最終提升分類或預測的準確性。所以“深度模型”是手段,“特征學習”是目的。區別于傳統的淺層學習,深度學習的不同在于:1. 強調了模型結構的深度,通常有5層、6層,甚至10多層的隱層節點;2. 明確突出了特征學習的重要性,也就是說,同過逐層特征變換,將樣本在原空間的特征表示變換到一個新特征空間,使分類或預測更加容易。與人工規則構
10、造特征的方法相比,利用大數據來學習特征,更能刻畫數據豐富的內在信息。所以,在未來的幾年里,我們將看到越來越多的例子:深度模型應用于大數據,而不是淺層的線性模型。圖像是深度學習最早嘗試的應用領域。早在1989年,Yann LeCun (現紐約大學教授) 和他的同事們就發表了卷積神經網絡(Convolution Neural Networks, 簡稱CNN)的工作。CNN是一種帶有卷積結構的深度神經網絡,通常至少有兩個非線性可訓練的卷積層,兩個非線性的固定卷積層(又叫Pooling Laye)和一個全連接層,一共至少5個隱含層。CNN的結構受到著名的Hubel-Wiesel生物視覺模型的啟發,尤其
11、是模擬視覺皮層V1和V2層中Simple Cell和Complex Cell的行為。在很長時間里,CNN雖然在小規模的問題上,如手寫數字,取得過當時世界最好結果,但一直沒有取得巨大成功。這主要原因是,CNN在大規模圖像上效果不好,比如像素很多的自然圖片內容理解,所以沒有得到計算機視覺領域的足夠重視。這個情況一直持續到2012年10月,Geoffrey Hinton和他的兩個學生在著名的ImageNet問題上用更深的CNN取得世界最好結果,使得圖像識別大踏步前進。在Hinton的模型里,輸入就是圖像的像素,沒有用到任何的人工特征。這個驚人的結果為什么在之前沒有發生? 原因當然包括算法的提升,比如
12、dropout等防止過擬合技術,但最重要的是,GPU帶來的計算能力提升和更多的訓練數據。百度在2012年底將深度學習技術成功應用于自然圖像OCR識別和人臉識別等問題,并推出相應的桌面和移動搜索產品,2013年,深度學習模型被成功應用于一般圖片的識別和理解。從百度的經驗來看,深度學習應用于圖像識別不但大大提升了準確性,而且避免了人工特征抽取的時間消耗,從而大大提高了在線計算效率。可以很有把握地說,從現在開始,深度學習將取代“人工特征+機器學習”的方法而逐漸成為主流圖像識別方法。二 深度學習中的sparse autoencoder2.1 sparse autoencoderDeep learnin
13、g領域比較出名的一類算法sparse autoencoder,即稀疏模式的自動編碼。sparse autoencoder是一種自動提取樣本(如圖像)特征的方法。把輸入層激活度(如圖像)用隱層激活度表征,再把隱層信息在輸出層還原。這樣隱層上的信息就是輸入層的一個壓縮過的表征,且其信息熵會減小。并且這些表征很適合做分類器。我們知道,deep learning也叫做無監督學習,所以這里的sparse autoencoder也應是無監督的。如果是有監督的學習的話,在神經網絡中,我們只需要確定神經網絡的結構就可以求出損失函數的表達式了(當然,該表達式需對網絡的參數進行”懲罰”,以便使每個參數不要太大),
14、同時也能夠求出損失函數偏導函數的表達式,然后利用優化算法求出網絡最優的參數。應該清楚的是,損失函數的表達式中,需要用到有標注值的樣本。那么這里的sparse autoencoder為什么能夠無監督學習呢?難道它的損失函數的表達式中不需要標注的樣本值(即通常所說的y值)么?其實在稀疏編碼中”標注值”也是需要的,只不過它的輸出理論值是本身輸入的特征值x,其實這里的標注值y=x。這樣做的好處是,網絡的隱含層能夠很好的代替輸入的特征,因為它能夠比較準確的還原出那些輸入特征值。Sparse autoencoder的一個網絡結構圖如下所示: 2.2 損失函數無稀疏約束時網絡的損失函數表達式如下: 稀疏編碼
15、是對網絡的隱含層的輸出有了約束,即隱含層節點輸出的平均值應盡量為0,這樣的話,大部分的隱含層節點都處于非激活狀態。因此,此時的sparse autoencoder損失函數表達式為: 后面那項為KL距離,其表達式如下: 隱含層節點輸出平均值求法如下: 其中的參數一般取很小,比如說0.05,也就是小概率發生事件的概率。這說明要求隱含層的每一個節點的輸出均值接近0.05(其實就是接近0,因為網絡中激活函數為sigmoid函數),這樣就達到稀疏的目的了。KL距離在這里表示的是兩個向量之間的差異值。從約束函數表達式中可以看出,差異越大則”懲罰越大”,因此最終的隱含層節點的輸出會接近0.05。假設我們有一
16、個固定樣本集 ,它包含 個樣例。我們可以用批量梯度下降法來求解神經網絡。具體來講,對于單個樣例 ,其代價函數為:這是一個(二分之一的)方差代價函數。給定一個包含 個樣例的數據集,我們可以定義整體代價函數為:以上公式中的第一項 是一個均方差項。第二項是一個規則化項(也叫權重衰減項),其目的是減小權重的幅度,防止過度擬合。 權重衰減參數 用于控制公式中兩項的相對重要性。在此重申一下這兩個復雜函數的含義: 是針對單個樣例計算得到的方差代價函數; 是整體樣本代價函數,它包含權重衰減項。 以上的代價函數經常被用于分類和回歸問題。在分類問題中,我們用 或 ,來代表兩種類型的標簽,這是因為 sigmoid激
17、活函數的值域為 ;如果我們使用雙曲正切型激活函數,那么應該選用 -1 和 +1 作為標簽。對于回歸問題,我們首先要變換輸出值域 ,以保證其范圍為 (同樣地,如果我們使用雙曲正切型激活函數,要使輸出值域為 )。 我們的目標是針對參數 和 來求其函數 的最小值。為了求解神經網絡,我們需要將每一個參數 和 初始化為一個很小的、接近零的隨機值(比如說,使用正態分布 生成的隨機值,其中 設置為 ),之后對目標函數使用諸如批量梯度下降法的最優化算法。因為 是一個非凸函數,梯度下降法很可能會收斂到局部最優解;但是在實際應用中,梯度下降法通常能得到令人滿意的結果。最后,需要再次強調的是,要將參數進行隨機初始化
18、,而不是全部置為 。如果所有參數都用相同的值作為初始值,那么所有隱藏層單元最終會得到與輸入值有關的、相同的函數(也就是說,對于所有 ,都會取相同的值,那么對于任何輸入 都會有: )。隨機初始化的目的是使對稱失效。2.3 反向傳播算法梯度下降法中每一次迭代都按照如下公式對參數 和 進行更新:其中 是學習速率。其中關鍵步驟是計算偏導數。我們現在來講一下反向傳播算法,它是計算偏導數的一種有效方法。我們首先來講一下如何使用反向傳播算法來計算 和 ,這兩項是單個樣例 的代價函數 的偏導數。一旦我們求出該偏導數,就可以推導出整體代價函數 的偏導數:以上兩行公式稍有不同,第一行比第二行多出一項,是因為權重衰
19、減是作用于 而不是 。反向傳播算法的思路如下:給定一個樣例 ,我們首先進行“前向傳導”運算,計算出網絡中所有的激活值,包括 的輸出值。之后,針對第 層的每一個節點 ,我們計算出其“殘差” ,該殘差表明了該節點對最終輸出值的殘差產生了多少影響。對于最終的輸出節點,我們可以直接算出網絡產生的激活值與實際值之間的差距,我們將這個差距定義為 (第 層表示輸出層)。對于隱藏單元我們如何處理呢?我們將基于節點(譯者注:第 層節點)殘差的加權平均值計算 ,這些節點以 作為輸入。下面將給出反向傳導算法的細節:進行前饋傳導計算,利用前向傳導公式,得到 直到輸出層 的激活值。對于第 層(輸出層)的每個輸出單元 ,
20、我們根據以下公式計算殘差: 對 的各個層,第 層的第 個節點的殘差計算方法如下: 將上式中的與的關系替換為與的關系,就可以得到: 以上逐次從后向前求導的過程即為“反向傳導”的本意所在。 計算我們需要的偏導數,計算方法如下: 最后,我們用矩陣-向量表示法重寫以上算法。我們使用“” 表示向量乘積運算符(在Matlab或Octave里用“.*”表示,也稱作阿達馬乘積)。若 ,則 。那么,反向傳播算法可表示為以下幾個步驟:1 進行前饋傳導計算,利用前向傳導公式,得到 直到輸出層 的激活值。2 對輸出層(第 層),計算: 3 對于 的各層,計算: 4 計算最終需要的偏導數值: 實現中應注意:在以上的第2
21、步和第3步中,我們需要為每一個 值計算其 。假設 是sigmoid函數,并且我們已經在前向傳導運算中得到了 。那么,使用我們早先推導出的 表達式,就可以計算得到 。 最后,我們將對梯度下降算法做個全面總結。在下面的偽代碼中, 是一個與矩陣 維度相同的矩陣, 是一個與 維度相同的向量。注意這里“”是一個矩陣,而不是“ 與 相乘”。下面,我們實現批量梯度下降法中的一次迭代:對于所有 ,令 , (設置為全零矩陣或全零向量)1 對于 到 , 使用反向傳播算法計算 和 。2 計算 。3 計算 。更新權重參數: 現在,我們可以重復梯度下降法的迭代步驟來減小代價函數 的值,進而求解我們的神經網絡。三 實驗仿
22、真3.1 利用autoencoder提取特征從給定的很多張自然圖片中截取出大小為8*8的小patches圖片共10000張,現在需要用sparse autoencoder的方法訓練出一個隱含層網絡所學習到的特征。該網絡共有3層,輸入層是64個節點,隱含層是25個節點,輸出層當然也是64個節點了。其實實現該功能的主要步驟還是需要計算出網絡的損失函數以及其偏導數。下面用簡單的語言大概介紹下這個步驟,方便理清算法的流程。1. 計算出網絡每個節點的輸入值(即程序中的z值)和輸出值(即程序中的a值,a是z的sigmoid函數值)。2. 利用z值和a值計算出網絡每個節點的誤差值(即程序中的delta值)。
23、3. 這樣可以利用上面計算出的每個節點的a,z,delta來表達出系統的損失函數以及損失函數的偏導數了,當然這些都是一些數學推導。其實步驟1是前向進行的,也就是說按照輸入層隱含層輸出層的方向進行計算。而步驟2是方向進行的(這也是該算法叫做BP算法的來源),即每個節點的誤差值是按照輸出層隱含層輸入層方向進行的。下面看一下實驗流程:首先運行主程序train.m中的步驟1,即隨機采樣出10000個小的patch,并且顯示出其中的204個patch圖像,圖像顯示如下所示: 然后運行train.m中的步驟2和步驟3,進行損失函數和梯度函數的計算并驗證。進行gradient checking的時間可能會太
24、長,我這里大概用了1個半小時以上,當用gradient checking時,發現誤差只有6.5101e-11,遠小于1e-9,所以說明前面的損失函數和偏導函數程序是對的。后面就可以接著用優化算法來求參數了,本程序給的是優化算法是L-BFGS。經過幾分鐘的優化,就出結果了。最后的W1的權值如下所示: 3.2 Self-taught learningSelf-taught learning是用的無監督學習來學習到特征提取的參數,然后用有監督學習來訓練分類器。這里分別是用的sparse autoencoder和softmax regression,實驗的數據依舊是手寫數字數據庫MNIST Datas
25、et。采用數字59的樣本來進行無監督訓練,采用的方法是sparse autoencoder,可以提取出這些數據的權值,權值轉換成圖片顯示如下: 但是本次實驗主要是進行04這5個數字的分類,雖然進行無監督訓練用的是數字59的訓練樣本,這依然不會影響后面的結果。只是后面的分類器設計是用的softmax regression,所以是有監督的。最后的結果精度是98%,而直接用原始的像素點進行分類器的設計不僅效果要差(才96%),而且訓練的速度也會變慢不少。3.3 convolution與 pooling在全局連接網絡中,如果我們的圖像很大,比如說為96*96,隱含層有要學習100個特征,則這時候把輸入
26、層的所有點都與隱含層節點連接,則需要學習106個參數,這樣的話在使用BP算法時速度就明顯慢了很多。所以后面就發展到了局部連接網絡,也就是說每個隱含層的節點只與一部分連續的輸入點連接。這樣的好處是模擬了人大腦皮層中視覺皮層不同位置只對局部區域有響應。局部連接網絡在神經網絡中的實現使用convolution的方法。它在神經網絡中的理論基礎是對于自然圖像來說,因為它們具有穩定性,即圖像中某個部分的統計特征和其它部位的相似,因此我們學習到的某個部位的特征也同樣適用于其它部位。下面具體看一個例子是怎樣實現convolution的,假如對一張大圖片的數據集,r*c大小,則首先需要對這個數據集隨機采樣大小為
27、a*b的小圖片,然后用這些小圖片patch進行學習(比如說sparse autoencoder),此時的隱含節點為k個。因此最終學習到的特征數為: 雖然按照convolution的方法可以減小不少需要訓練的網絡參數,比如說96*96,,100個隱含層的,采用8*8patch,也100個隱含層,則其需要訓練的參數個數減小到了103,大大的減小特征提取過程的困難。但是此時同樣出現了一個問題,即它的輸出向量的維數變得很大,本來完全連接的網絡輸出只有100維的,現在的網絡輸出為89*89*100=792100維,大大的變大了,這對后面的分類器的設計同樣帶來了困難,所以pooling方法就出現了。為什么
28、pooling的方法可以工作呢?首先在前面的使用convolution時是利用了圖像的平穩性特征,即不同部位的圖像的統計特征是相同的,那么在使用convolution對圖片中的某個局部部位計算時,得到的一個向量應該是對這個圖像局部的一個特征,既然圖像有平穩性特征,那么對這個得到的特征向量進行統計計算的話,所有的圖像局部塊應該也都能得到相似的結果。對convolution得到的結果進行統計計算過程就叫做pooling,由此可見pooling也是有效的。常見的pooling方法有max pooling和average pooling等。并且學習到的特征具有旋轉不變性。從上面的介紹可以簡單的知道,c
29、onvolution是為了解決前面無監督特征提取學習計算復雜度的問題,而pooling方法是為了后面有監督特征分類器學習的,也是為了減小需要訓練的系統參數(當然這是在普遍例子中的理解,也就是說我們采用無監督的方法提取目標的特征,而采用有監督的方法來訓練分類器)。本次實驗是練習convolution和pooling的使用,更深一層的理解怎樣對大的圖片采用convolution得到每個特征的輸出結果,然后采用pooling方法對這些結果進行計算,使之具有平移不變等特性。首先來看看整個訓練和測試過程的大概流程:在訓練階段,是對小的patches進行whitening的。由于輸入的數據是大的圖片,所以
30、每次進行convolution時都需要進行whitening和網絡的權值計算,這樣每一個學習到的隱含層節點的特征對每一張圖片都可以得到一張稍小的特征圖片,接著對這張特征圖片進行均值pooling。有了這些特征值以及標注值,就可以用softmax來訓練多分類器了。在測試階段是對大圖片采取convolution的,每次convolution的圖像塊也同樣需要用訓練時的whitening參數進行預處理,分別經過convolution和pooling提取特征,這和前面的訓練過程一樣。然后用訓練好的softmax分類器就可進行預測了。訓練特征提取的網絡參數用的時間比較多,而訓練比如說softmax分類器
31、則用的時間比較短。在matlab中當有n維數組時,一般是從右向左進行剝皮計算,因為matlab輸出都是按照這種方法進行的。當然了,如果要理解的話,從左向右和從右向左都是可以的,只要是方便理解就行。程序中進行convolution測試的理由是:先用cnnConvolve函數計算出所給樣本的convolution值,然后隨機選取多個patch,用直接代數運算的方法得出網絡的輸出值,如果對于所有(比如說這里選的1000個)的patch,這兩者之間的差都非常小的話,說明convution計算是正確的。程序中進行pooling測試的理由是:采用函數cnnPool來計算,而該函數的參數為polling的維
32、數以及需要pooling的數據。因此程序中先隨便給一組數據,然后用手動的方法計算出均值pooling的結果,最后用cnnPool函數也計算出一個結果,如果兩者的結果相同,則說明pooling函數是正確的。程序中顏色特征的學習體現在:每次只對RGB中的一個通道進行convolution,分別計算3次,然后把三個通道得到的convolution結果矩陣對應元素相加即可。這樣的話,后面的Pooling操作只需在一個圖像上進行即可。由于只需訓練4個類別的softmax分類器,所以其速度非常快,1分鐘都不到。訓練出來的特征圖像為: 最終的預測準確度為:Accuracy: 80.406%3.4構建deep
33、 network網絡 練習2個隱含層的網絡的訓練方法,每個網絡層都是用的sparse autoencoder思想,利用兩個隱含層的網絡來提取出輸入數據的特征。本次實驗驗要完成的任務是對MINST進行手寫數字識別,當提取出手寫數字圖片的特征后,就用softmax進行對其進行分類。進行deep network的訓練方法大致如下:1. 用原始輸入數據作為輸入,訓練出(利用sparse autoencoder方法)第一個隱含層結構的網絡參數,并將用訓練好的參數算出第1個隱含層的輸出。2. 把步驟1的輸出作為第2個網絡的輸入,用同樣的方法訓練第2個隱含層網絡的參數。3. 用步驟2 的輸出作為多分類器so
34、ftmax的輸入,然后利用原始數據的標簽來訓練出softmax分類器的網絡參數。4. 計算2個隱含層加softmax分類器整個網絡一起的損失函數,以及整個網絡對每個參數的偏導函數值。5. 用步驟1,2和3的網絡參數作為整個深度網絡(2個隱含層,1個softmax輸出層)參數初始化的值,然后用lbfs算法迭代求出上面損失函數最小值附近處的參數值,并作為整個網絡最后的最優參數值。上面的訓練過程是針對使用softmax分類器進行的,而softmax分類器的損失函數等是有公式進行計算的。所以在進行參數校正時,可以對把所有網絡看做是一個整體,然后計算整個網絡的損失函數和其偏導,這樣的話當我們有了標注好了
35、的數據后,就可以用前面訓練好了的參數作為初始參數,然后用優化算法求得整個網絡的參數了。關于深度網絡的學習幾個需要注意的小點(假設隱含層為2層):利用sparse autoencoder進行預訓練時,需要依次計算出每個隱含層的輸出,如果后面是采用softmax分類器的話,則同樣也需要用最后一個隱含層的輸出作為softmax的輸入來訓練softmax的網絡參數。由步驟1可知,在進行參數校正之前是需要對分類器的參數進行預訓練的。且在進行參數校正(Finetuning )時是將所有的隱含層看做是一個單一的網絡層,因此每一次迭代就可以更新所有網絡層的參數。另外在實際的訓練過程中可以看到,訓練第一個隱含層
36、所用的時間較長,應該需要訓練的參數矩陣為200*784(沒包括b參數),訓練第二個隱含層的時間較第一個隱含層要短些,主要原因是此時只需學習到200*200的參數矩陣,其參數個數大大減小。而訓練softmax的時間更短,那是因為它的參數個數更少,且損失函數和偏導的計算公式也沒有前面兩層的復雜。最后對整個網絡的微調所用的時間和第二個隱含層的訓練時間長短差不多。實驗結果:第一個隱含層的特征值如下所示: 第二個隱含層的特征值顯示不知道該怎么弄,因為第二個隱含層每個節點都是對應的200維,用display_network這個函數去顯示的話是不行的,它只能顯示維數能夠開平方的那些特征,所以不知道是該將20
37、0弄成20*10,還是弄成16*25好,很好奇關于deep learning那么多文章中第二層網絡是怎么顯示的,將200分解后的顯示哪個具有代表性呢?待定。所以這里暫且不顯示,因為截取200前面的196位用display_network來顯示的話,什么都看不出來: 沒有經過網絡參數微調時的識別準去率為:Before Finetuning Test Accuracy: 92.190%經過了網絡參數微調后的識別準確率為:After Finetuning Test Accuracy: 97.670%四 深度學習研發面臨的重大問題4.1 理論問題理論問題主要體現在兩個方面,一個是統計學習方面的,另一個
38、是計算方面的。我們已經知道,深度模型相比較于淺層模型有更好的對非線性函數的表示能力。具體來說,對于任意一個非線性函數,根據神經網絡的Universal Approximation Theory,我們一定能找到一個淺層網絡和一個深度網絡來足夠好地表示。但深度網絡只需要少得多的參數。但可表示性不代表可學習性。我們需要了解深度學習的樣本復雜度,也就是我們需要多少訓練樣本才能學習到足夠好的深度模型。從另一方面來說,我們需要多少計算資源才能通過訓練得到更好的模型?理想的計算優化方法是什么?由于深度模型都是非凸函數,這方面的理論研究極其困難。4.2 建模問題在推進深度學習的學習理論和計算理論的同時,我們是
39、否可以提出新的分層模型,使其不但具有傳統深度模型所具有的強大表示能力,還具有其他的好處,比如更容易做理論分析。另外,針對具體應用問題,我們如何設計一個最適合的深度模型來解決問題?我們已經看到,無論在圖像深度模型,還是語言深度模型,似乎都存在深度和卷積等共同的信息處理結構。甚至對于語音聲學模型,研究人員也在探索卷積深度網絡。那么一個更有意思的問題是,是否存在可能建立一個通用的深度模型或深度模型的建模語言,作為統一的框架來處理語音、圖像和語言?4.3 工程問題需要指出的是,對于互聯網公司而言,如何在工程上利用大規模的并行計算平臺來實現海量數據訓練,是各家公司從事深度學習技術研發首先要解決的問題。傳
40、統的大數據平臺如Hadoop,由于數據處理的Latency太高,顯然不適合需要頻繁迭代的深度學習。現有成熟的DNN訓練技術大都是采用隨機梯度法(SGD)方法訓練的。這種方法本身不可能在多個計算機之間并行。即使是采用GPU進行傳統的DNN模型進行訓練,其訓練時間也是非常漫長的,一般訓練幾千小時的聲學模型所需要幾個月的時間。而隨著互聯網服務的深入,海量數據訓練越來越重要,DNN這種緩慢的訓練速度必然不能滿足互聯網服務應用的需要。Google搭建的DistBelief,是一個采用普通服務器的深度學習并行計算平臺,采用異步算法,由很多計算單元獨立地更新同一個參數服務器的模型參數,實現了隨機梯度下降算法
41、的并行化,加快了模型訓練速度。與Google采用普通服務器不同,百度的多GPU并行計算平臺,克服了傳統SGD訓練的不能并行的技術難題,神經網絡的訓練已經可以在海量語料上并行展開。可以預期,未來隨著海量數據訓練的DNN技術的發展,語音圖像系統的識別率還會持續提升。參考文獻:1BENGIO YLearning deep architectures for A1JFoundations and Trends in Machine Learning,2009,2(1):1-1242 D. Ciresan, U.Meier, J.Masci, and J. Schmidhuber. A committee of neural networks for traffic sign classification. In Neural Networks (IJCNN), The 2011 International Joint Conference on, pages 19181921. IEEE, 2011. 103HINTON G,OSINDERO S,TEH YA fast learning algo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 禮縣2025屆小升初易錯點數學檢測卷含解析
- 朔州市山陰縣2024-2025學年六年級數學小升初摸底考試含解析
- 溫州商學院《中學音樂教學法(一)》2023-2024學年第二學期期末試卷
- 山東省東營市四校連賽市級名校2025屆初三畢業班適應性訓練物理試題含解析
- 2025年醫學統計學考試試卷及答案
- 2025年新能源技術工程師考試試題及答案
- 江蘇省南京市部分校2025年初三綜合題(三)生物試題(文史類)試題含解析
- 江西省上饒市民校考試聯盟2025年高三4月月考語文試題(詳細答案版)含解析
- 濮陽科技職業學院《園本課程研發》2023-2024學年第二學期期末試卷
- 江蘇省鎮江丹陽市市級名校2024-2025學年初三下學期四校聯考試題(5月)生物試題試卷含解析
- 網絡表情包的流行趨勢分析-全面剖析
- 2025-2030中國非調質鋼市場供需狀況與未來發展戰略規劃研究研究報告
- 2025年四川省自然資源投資集團有限責任公司招聘筆試參考題庫含答案解析
- 2025重慶機場集團限公司公開招聘46人易考易錯模擬試題(共500題)試卷后附參考答案
- 房屋市政工程生產安全重大事故隱患判定標準(2024版)宣傳海報
- 2025年湖北省武漢市高考數學模擬試卷附答案解析
- 《宿舍樓安全評價》word版
- 石油知識-石油地球物理勘探
- 承包商(外來施工人員)入廠安全培訓教學內容課件
- 心腦血管疾病基礎知識-課件(演示)教學文案
- 農產品貯藏與加工實驗
評論
0/150
提交評論