版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
深度學習(一)深度學習簡介
深度學習是一種基于神經網絡的學習方法。和傳統(tǒng)的機器學習方法相比,深度學習模型一般需要更豐富的數據、更強大的計算資源,同時也能達到更高的準確率。目前,深度學習方法被廣泛應用于計算機視覺、自然語言處理、強化學習等領域。本章將依次進行介紹。本章要點計算機視覺的定義和基本任務仿生學和深度學習自然語言處理的基本問題傳統(tǒng)方法與神經網絡方法的對比強化學習算法簡介強化學習的應用計算機視覺的定義計算機視覺是使用計算機及相關設備對生物視覺的一種模擬。它的主要任務是通過對采集的圖片或視頻進行處理以獲得相應場景的三維信息。計算機視覺是一門關于如何運用照相機和計算機來獲取我們所需的,被拍攝對象的數據與信息的學問。形象地說,就是給計算機安裝上眼睛(照相機)和大腦(算法),讓計算機能夠感知環(huán)境。計算機視覺的基本任務計算機視覺的基本任務包含圖像處理、模式識別或圖像識別、景物分析、圖像理解等。除了圖像處理和模式識別之外,它還包括空間形狀的描述,幾何建模以及認識過程。
實現(xiàn)圖像理解是計算機視覺的終極目標。圖像處理技術圖像處理技術可以把輸入圖像轉換成具有所希望特性的另一幅圖像。例如,可通過處理使輸出圖像有較高的信噪比,或通過增強處理突出圖像的細節(jié),以便于操作員的檢驗。在計算機視覺研究中經常利用圖像處理技術進行預處理和特征抽取。模式識別技術模式識別技術根據從圖像抽取的統(tǒng)計特性或結構信息,把圖像分成預定的類別。例如,文字識別或指紋識別。在計算機視覺中模式識別技術經常用于對圖像中的某些部分,例如分割區(qū)域的識別和分類。圖像理解技術圖像理解技術是對圖像內容信息的理解。給定一幅圖像,圖像理解程序不僅描述圖像本身,而且描述和解釋圖像所代表的景物,以便對圖像代表的內容做出決定。計算機視覺的傳統(tǒng)算法在深度學習算法出現(xiàn)之前,對于視覺算法來說,大致可以分為以下5個步驟:特征感知,圖像預處理,特征提取,特征篩選,推理預測與識別。傳統(tǒng)算法缺乏對特征的重視圖像特征提取需要人力依賴特征算子成功或半成功的例子指紋識別算法基于Haar的人臉檢測算法基于HoG特征的物體檢測仿生學與深度學習神經網絡示例輸入:圖片輸出:標簽視覺系統(tǒng)信息處理機制發(fā)現(xiàn)人:DavidHubel時間:1981意義:證明大腦的可視皮層是分級的。視覺功能劃分抽象:把非常具體的形象的元素抽象出來形成有意義的概念。迭代:把有意義的概念往上迭代,變成更加抽象,人可以感知到的抽象概念。抽象與迭代的過程案例說明人腦感知氣球模擬識別人臉識別摩托車現(xiàn)代深度學習卷積神經網絡(CNN)卷積神經網絡是一種對人腦比較精準的模擬,它模擬了人腦識別圖片時感知圖片中的局部特征,之后將局部特征綜合起來再得到整張圖的全局信息的過程。其卷積層通常是堆疊的,低層的卷積層可以提取到圖片的局部特征,高層的卷積能夠從低層的卷積層中學到更復雜的特征,從而實現(xiàn)到圖片的分類和識別。卷積就是兩個函數之間的相互關系在計算機視覺里面,可以把卷積當作一個抽象的過程,就是把小區(qū)域內的信息統(tǒng)計抽象出來?,F(xiàn)代深度學習的過程用學習好的卷積和對圖像進行掃描,然后每一個卷積和會生成一個掃描的響應圖,我們叫responsemap,或者叫featuremap。如果有多個卷積和,就有多個featuremap。也就說從一個最開始的輸入圖像(RGB三個通道)可以得到256個通道的featuremap,因為有256個卷積和,每個卷積和代表一種統(tǒng)計抽象的方式?,F(xiàn)代深度學習的過程池化操作。池化操作在統(tǒng)計上的概念更明確,就是一個對一個小區(qū)域內求平均值或者求最大值的統(tǒng)計操作。帶來的結果是,如果之前輸入有兩個通道的,或者256通道的卷積的響應featuremap,每一個featuremap都經過一個求最大的一個池化層,會得到一個比原來featuremap更小的256的featuremap?,F(xiàn)代深度學習的過程LeNet網絡LeNet網絡輸入圖像是大小為32×32像素的灰度圖,第一層經過了一組卷積和,生成了6個28X28的featuremap,然后經過一個池化層,得到6個14X14的featuremap,然后再經過一個卷積層,生成了16個10X10的卷積層,再經過池化層生成16個5×5的featuremap。這16個大小為5×5的featuremap再經過3個全連接層,即可得到最后的輸出結果。輸出就是標簽空間的輸出?,F(xiàn)代深度學習AlexNet網絡AlexNet是基于LeNet的改進,它可以被看作LeNet的放大版。AlexNet的輸入是一個大小為224X224像素的圖片,輸入圖像在經過若干個卷積層和若干個池化層后,最后經過兩個全連接層泛化特征,得到最后的預測結果。AlexNet的特征:在第一層,都是一些填充的塊狀物和邊界等特征;中間的層開始學習一些紋理特征;而在接近分類器的高層,則可以明顯看到的物體形狀的特征。最后的一層,即分類層,不同物體的主要特征已經被完全提取出來?,F(xiàn)代深度學習AlexNet網絡自然語言自然語言,區(qū)別于計算機所使用的機器語言和程序語言,是指人類用于日常交流的語言。而自然語言處理的目的卻是要讓計算機來理解和處理人類的語言。自然語言的一個句子背后往往包含著不直接表述出來的常識和邏輯。這使得計算機在試圖處理自然語言的時候不能從字面上獲取所有的信息。因此自然語言處理的難度更大,它的發(fā)展與應用相比于計算機視覺也往往呈現(xiàn)出滯后的情況。為了將深度學習引入自然語言處理領域,研究者嘗試了許多方法來表示和處理自然語言的表層信息(如詞向量、更高層次、帶上下文信息的特征表示等),也嘗試過許多方法來結合常識與直接感知(如知識圖譜、多模態(tài)信息等)。這些研究都富有成果,其中的許多都已應用于現(xiàn)實中,甚至用于社會管理、商業(yè)、軍事的目的。自然語言處理的基本問題自然語言處理主要研究能實現(xiàn)人與計算機之間用自然語言進行有效通信的各種理論和方法,其主要任務包括:語言建模:計算一個句子在一個語言中出現(xiàn)的概率。中文分詞:將中文句子恰當地切分為單個的詞。句法分析:通過明確句子內兩個或多個詞的關系來了解整個句子的結構。最終句法分析的結果是一棵句法樹。情感分類:給出一個句子,判斷這個句子表達的情感。機器翻譯:最常見的是把源語言的一個句子翻譯成目標語言的一個句子,最終預測出來的整個目標語言句子必須與給定的源語言句子具有完全相同的含義。閱讀理解:有許多形式。有時候是輸入一個段落,一個問題,生成一個回答,或者在原文中標定一個范圍作為回答,有時候是輸出一個分類。傳統(tǒng)方法與神經網絡方法的比較人工參與程度人的參與程度越來越低,但系統(tǒng)的效果越來越好。這是合乎直覺的,因為人對于世界的認識和建??偸瞧娴?、有局限性的。如果可以將自然語言處理系統(tǒng)的構建自動化,將其基于對世界的觀測點(即數據集),所建立的模型和方法一定會比人類的認知更加符合真實的世界。數據量隨著自然語言處理系統(tǒng)中人工參與的程度越來越低,系統(tǒng)的細節(jié)就需要更多的信息來決定,這些信息只能來自于更多的數據。可解釋性
人工參與程度的降低帶來的另一個問題是模型的可解釋性越來越低。在理想狀況下,如果系統(tǒng)非常有效,人們根本不需要關心黑盒系統(tǒng)的內部構造,但事實是自然語言處理系統(tǒng)的狀態(tài)離完美還有相當的差距。自然語言處理的發(fā)展趨勢從傳統(tǒng)方法和神經網絡方法的對比中,可以看出自然語言處理的模型和系統(tǒng)構建是向著越來越自動化、模型越來越通用的趨勢發(fā)展的。一開始,人們試圖減少和去除人類專家知識的參與。因此就有了大量的網絡參數、復雜的架構設計,這些都是通過在概率模型中提供潛在變量,使得模型具有捕捉和表達復雜規(guī)則的能力。之后,人們覺得每一次為新的自然語言處理任務設計一個新的模型架構并從頭訓練的過程過于煩瑣,于是試圖開發(fā)利用這些任務底層所共享的語言特征。在這一背景下,遷移學習逐漸發(fā)展?,F(xiàn)在人們希望神經網絡的架構都可以不需要設計,而是根據具體的任務和數據來搜索得到。這一新興領域方興未艾,可以預見隨著研究的深入,自然語言處理的自動化程度一定會得到極大提高。強化學習什么是強化學習強化學習是機器學習的一個重要分支,它與非監(jiān)督學習、監(jiān)督學習并列為機器學習的三類主要學習方法。強化學習強調如何基于環(huán)境行動,以取得最大化的預期利益,所以強化學習可以被理解為決策問題。它是多學科多領域交叉的產物,其靈感來自于心理學的行為主義理論,即有機體如何在環(huán)境給予的獎勵或懲罰的刺激下,逐步形成對刺激的預期,產生能獲得最大利益的習慣性行為。強化學習的應用范圍非常廣泛,各領域對它的研究重點各有不同。強化學習監(jiān)督學習是通過帶有標簽或對應結果的樣本訓練得到一個最優(yōu)模型,再利用這個模型將所有的輸入映射為相應的輸出,以實現(xiàn)分類。非監(jiān)督學習是在樣本的標簽未知的情況下,根據樣本間的相似性對樣本集進行聚類,使類內差距最小化,學習出分類器。強化學習與監(jiān)督學習和非監(jiān)督學習強化學習的四個元素智能體(agent)智能體是執(zhí)行任務的客體,只能通過與環(huán)境互動來提升策略。環(huán)境狀態(tài)(state)在每一個時間節(jié)點,agent所處的環(huán)境的表示即為環(huán)境狀態(tài)。行動(action)
在每一個環(huán)境狀態(tài)中,agent可以采取的動作即為行動。反饋(reward)
每到一個環(huán)境狀態(tài),agent就有可能會收到一個reward
反饋。強化學習算法的目標強化學習算法的目標就是獲得最多的累計獎勵(正反饋)。以“幼童學習走路”為例:幼童需要自主學習走路,沒有人指導他應該如何完成“走路”,他需要通過不斷的嘗試和外界對他的反饋來學習走路。強化學習的特征沒有監(jiān)督者,只有一個反饋信號;反饋是延遲的,不是立即生成的;另外,強化學習是序列學習,時間在強化學習中具有重要的意義;Agent的行為會影響以后所有的決策。強化學習算法簡介強化學習主要可以分為Model-Free(無模型的)和Model-based(有模型的)兩大類。Model-Free算法又分成基于概率的和基于價值的。Model-Free和Model-Based如果agent不需要去理解或計算出環(huán)境模型,算法就是Model-Free的;相應地,如果需要計算出環(huán)境模型,那么算法就是Model-Based的。兩種方法各有優(yōu)劣。Model-Based方法中,agent可以根據模型預測下一步的結果,并提前規(guī)劃行動路徑。但真實模型和學習到的模型是有誤差的,這種誤差會導致agent雖然在模型中表現(xiàn)很好,但是在真實環(huán)境中可能打不到預期結果。Model-Free的算法看似隨意,但這恰好更易于研究者們去實現(xiàn)和調整。強化學習算法簡介基于概率的算法和基于價值的算法基于概率的算法直接輸出下一步要采取的各種動作的概率,然后根據概率采取行動。每種動作都有可能被選中,只是可能性不同?;诟怕实乃惴ǖ拇硭惴閜olicy-gradient而基于價值的算法輸出的則是所有動作的價值,然后根據最高價值來選擇動作,相比基于概率的方法,基于價值的決策部分更為死板——只選價值最高的,而基于概率的,即使某個動作的概率最高,但是還是不一定會選到它?;趦r值的算法的代表算法為Q-Learning。強化學習算法的應用交互性檢索交互性檢索是在檢索用戶不能構建良好的檢索式(關鍵詞)的情況下,通過與檢索平臺交流互動并不斷修改檢索式,從而獲得較準確檢索結果的過程。強化學習算法的應用新聞推薦一次完整的推薦過程包含以下過程:用戶刷新或者下拉,后臺獲取到用戶請求,并根據用戶的標簽召回候選新聞,推薦引擎則對候選新聞進行排序,最終給用戶推出新聞,如此往復,直到用戶關閉app,停止瀏覽新聞。將用戶持續(xù)瀏覽新聞的推薦過程看成一個決策過程,就可以通過強化學習學習每一次推薦的最佳策略,從而使得用戶從開始打開app開始到關閉app這段時間內的點擊量最高。小結本章簡要介紹了深度學習的應用領域。卷積神經網絡可以模擬人類處理視覺信息的方式提取圖像特征,極大地推動了計算機視覺領域的發(fā)展。自然語言處理是典型的時序信息分析問題,其主要應用包括句法分析、情感分類、機器翻譯等。強化學習強調智能體與環(huán)境的交互與決策,具有廣泛的應用價值。通過引入深度學習,模型的函數擬合能力得到了顯著的提升,從而可以應用到一系列高層任務中。本章列出的三個應用領域只是舉例,目前還有許多領域在深度學習技術的推動下進行著變革,有興趣的讀者可以深入了解。TheEnd謝謝!深度學習框架簡介和對比(一)深度學習框架簡介
深度學習采用的是一種“端到端”的學習模式,從而在很大程度上減輕了研究人員的負擔。但是隨著神經網絡的發(fā)展,模型的復雜度也在不斷提升。即使是在一個最簡單的卷積神經網絡中也會包含卷積層、池化層、激活層、Flatten層、全連接層等。如果每次搭建一個新的網絡之前都需要重新實現(xiàn)這些層的話,勢必會占用許多時間,因此各大深度學習框架應運而生??蚣艽嬖诘囊饬x就是屏蔽底層的細節(jié),使研究者可以專注于模型結構。目前較為流行的深度學習框架有Caffe、TensorFlow以及Pytorch等。本章將依次進行介紹。本章要點Caffe的特點和概述TensorFlow的特點和概述數據流圖PyTorch的特點和概述三者的比較Caffe簡介Caffe,全稱ConvolutionalArchitectureforFastFeatureEmbedding。是一種常用的深度學習框架,主要應用在視頻、圖像處理方面的應用上。caffe是一個清晰,可讀性高,快速的深度學習框架。Caffe是第一個主流的工業(yè)級深度學習工具,專精于圖像處理。它有很多擴展,但是由于一些遺留的架構問題,不夠靈活,且對遞歸網絡和語言建模的支持很差。對于
基于層的網絡結構,caffe擴展性不好;而用戶如果想要增加層,則需要自己實現(xiàn)(forward,backwardandgradientupdate)Caffe的特點Caffe的基本工作流程是設計建立在神經網絡的一個簡單假設,所有的計算都是層的形式表示的,網絡層所做的事情就是輸入數據,然后輸出計算結果。以卷積為例,卷積就是輸入一幅圖像,然后和這一層的參數(filter)做卷積,最終輸出卷積結果。每層需要兩種函數計算,一種是forward,從輸入計算到輸出;另一種是backward,從上層給的gradient來計算相對于輸入層的gradient。這兩個函數實現(xiàn)之后,我們就可以把許多層連接成一個網絡,這個網絡輸入數據(圖像,語音或其他原始數據),然后計算需要的輸出(比如識別的標簽)。在訓練的時候,可以根據已有的標簽計算loss和gradient,然后用gradient來更新網絡中的參數。Caffe的特點Caffe是一個清晰而高效的深度學習框架,它基于純粹的C++/CUDA架構,支持命令行、Python和MATLAB接口,可以在CPU和GPU直接無縫切換。它的模型與優(yōu)化都是通過配置文件來設置,無須代碼。Caffe設計之初就做到了盡可能的模塊化,允許對數據格式、網絡層和損失函數進行擴展。Caffe的模型定義是用ProtocolBuffer(協(xié)議緩沖區(qū))語言寫進配置文件的,以任意有向無環(huán)圖的形式。Caffe會根據網絡需要正確占用內存,通過一個函數調用實現(xiàn)CPU和GPU之間的切換。Caffe每一個單一的模塊都對應一個測試,使得測試的覆蓋非常方便,同時提供python和matlab接口,用這兩種語法進行調用都是可行的。Caffe概述Caffe是一種對新手非常友好的深度學習框架模型,它的相應優(yōu)化都是以文本形式而非代碼形式給出。Caffe中的網絡都是有向無環(huán)圖的集合,可以直接定義。Caffe概述數據及其導數以blobs的形式在層間流動,Caffe層的定義由2部分組成:層屬性與層參數,如圖所示。圖中前4行是層屬性,定義了層名稱、層類型以及層連接結構(輸入blob和輸出blob);而后半部分是各種層參數。Blob是用以存儲數據的4維數組。Caffe概述在Caffe模型中,網絡參數的定義也非常方便,可以隨意設置相應參數。感覺上更像是配置服務器參數而不像是代碼。TensorFlow簡介TensorFlow是一個采用數據流圖(dataflowgraphs)用于數值計算的開源軟件庫。節(jié)點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節(jié)點間相互聯(lián)系的多維數據數組,即張量(tensor)。它靈活的架構讓你可以在多種平臺上展開計算,例如臺式計算機中的一個或多個CPU(或GPU),服務器,移動設備等等。TensorFlow最初由Google大腦小組的研究員和工程師們開發(fā)出來,用于機器學習和深度神經網絡方面的研究,但這個系統(tǒng)的通用性使其也可廣泛用于其他計算領域。數據流圖數據流圖用“結點”(nodes)和“線”(edges)的有向圖來描述數學計算。“節(jié)點”一般用來表示施加的數學操作,但也可以表示數據輸入(feedin)的起點/輸出(pushout)的終點,或者是讀取/寫入持久變量(persistentvariable)的終點?!熬€”表示“節(jié)點”之間的輸入/輸出關系。這些數據“線”可以輸運“size可動態(tài)調整”的多維數據數組,即“張量”(tensor)。張量從圖中流過的直觀圖像是這個工具取名為“TensorFlow”的原因。一旦輸入端的所有張量準備好,節(jié)點將被分配到各種計算設備完成異步并行地執(zhí)行運算。數據流圖TensorFlow的特點TensorFlow不是一個嚴格的“神經網絡”庫。只要用戶可以將計算表示為一個數據流圖就可以使用TensorFlow。用戶負責構建圖,描寫驅動計算的內部循環(huán)。TensorFlow提供有用的工具來幫助用戶組裝“子圖”,當然用戶也可以自己在TensorFlow基礎上寫自己的“上層庫”。定義新復合操作和寫一個Python函數一樣容易。TensorFlow的可擴展性相當強,如果用戶找不到想要的底層數據操作,也可以自己寫一些c++代碼來豐富底層的操作。TensorFlow在CPU和GPU上運行,比如說可以運行在臺式機、服務器、手機移動設備等等。TensorFlow支持將訓練模型自動在多個CPU上規(guī)模化運算,以及將模型遷移到移動端后臺。TensorFlow的特點基于梯度的機器學習算法會受益于TensorFlow自動求微分的能力。作為TensorFlow用戶,只需要定義預測模型的結構,將這個結構和目標函數(objectivefunction)結合在一起,并添加數據,TensorFlow將自動為用戶計算相關的微分導數。計算某個變量相對于其他變量的導數僅僅是通過擴展你的圖來完成的,所以用戶能一直清楚看到究竟在發(fā)生什么。TensorFlow還有一個合理的c++使用界面,也有一個易用的python使用界面來構建和執(zhí)行你的graphs。你可以直接寫python/c++程序,也可以用交互式的ipython界面來用TensorFlow嘗試些想法,它可以幫用戶將筆記、代碼、可視化等有條理地歸置好。TensorFlow概述TensorFlow中Flow,也就是流,是其完成運算的基本方式。流是指一個計算圖或簡單的一個圖,圖不能形成環(huán)路,圖中的每個節(jié)點代表一個操作,如加法、減法等。每個操作都會導致新的張量形成。TensorFlow概述計算圖具有以下屬性:葉子頂點或起始頂點始終是張量。意即,操作永遠不會發(fā)生在圖的開頭,由此可以推斷,圖中的每個操作都應該接受一個張量并產生一個新的張量。同樣,張量不能作為非葉子節(jié)點出現(xiàn),這意味著它們應始終作為輸入提供給操作/節(jié)點。計算圖總是以層次順序表達復雜的操作。通過將a+b表示為c,將b+1表示為d,可以分層次組織上述表達式。因此,可以將e寫為:e=(c)x(d)這里c=a+b且d=b+1.以反序遍歷圖形而形成子表達式,這些子表達式組合起來形成最終表達式。TensorFlow概述當我們正向遍歷時,遇到的頂點總是成為下一個頂點的依賴關系,例如沒有a和b就無法獲得c,同樣的,如果不解決c和d則無法獲得e。同級節(jié)點的操作彼此獨立,這是計算圖的重要屬性之一。當我們按照圖中所示的方式構造一個圖時,很自然的是,在同一級中的節(jié)點,例如c和d,彼此獨立,這意味著沒有必要在計算d之前計算c。因此它們可以并行執(zhí)行。計算圖的并行也是最重要的屬性之一。它清楚地表明,同級的節(jié)點是獨立的,這意味著在c被計算之前不需空閑,可以在計算c的同時并行計算d。TensorFlow充分利用了這個屬性。TensorFlow概述TensorFlow允許用戶使用并行計算設備更快地執(zhí)行操作。計算的節(jié)點或操作自動調度進行并行計算。這一切都發(fā)生在內部,例如在上圖中,可以在CPU上調度操作c,在GPU上調度操作d。下圖展示了兩種分布式執(zhí)行的過程。TensorFlow概述上圖中,第一種是單個系統(tǒng)分布式執(zhí)行,其中單個TensorFlow會話創(chuàng)建單個worker,并且該worker負責在各設備上調度任務。在第二種系統(tǒng)下,有多個worker,他們可以在同一臺機器上或不同的機器上,每個worker都在自己的上下文中運行。在上圖中,worker進程1運行在獨立的機器上,并調度所有可用設備進行計算。TensorFlow概述子圖是主圖的一部分,從屬性2可以說子圖總是表示一個子表達式,因為c是e的子表達式。子圖也滿足最后一個屬性。同一級別的子圖也相互獨立,可以并行執(zhí)行。因此可以在一臺設備上調度整個子圖。TensorFlow概述TensorFlow將其所有操作分配到由worker管理的不同設備上。更常見的是,worker之間交換張量形式的數據,例如在e=(c)*(d)的圖表中,一旦計算出c,就需要將其進一步傳遞給e,因此Tensor在節(jié)點間前向流動。該流動如下圖所示。TensorFlow概述右圖解釋了子圖的并行執(zhí)行。這里有2個矩陣乘法運算,因為它們都處于同一級別,彼此獨立,這符合最后一個屬性。由于獨立性的緣故,節(jié)點安排在不同的設備gpu_0和gpu_1上。PyTorch簡介PyTorch具有先進設計理念的框架,其歷史可追溯到2002年就誕生于紐約大學的Torch。Torch使用了一種不是很大眾的語言Lua作為接口。Lua簡潔高效,但由于其過于小眾,以至于很多人聽說要掌握Torch必須新學一門語言就望而卻步,但Lua其實是一門比Python還簡單的語言。考慮到Python在計算科學領域的領先地位,以及其生態(tài)完整性和接口易用性,幾乎任何框架都不可避免地要提供Python接口。終于,在2017年,Torch的幕后團隊推出了PyTorch。PyTorch不是簡單地封裝LuaTorch提供Python接口,而是對Tensor之上的所有模塊進行了重構,并新增了最先進的自動求導系統(tǒng),成為當下最流行的動態(tài)圖框架。PyTorch的特點PyTorch既可以看作為加入了GPU支持的numpy。TensorFlow與Caffe都是命令式的編程語言,而且是靜態(tài)的,即首先必須構建一個神經網絡,然后一次又一次使用同樣的結構;如果想要改變網絡的結構,就必須從頭開始。但是PyTorch通過一種反向自動求導的技術,可以讓用戶零延遲地任意改變神經網絡的行為。PyTorch的設計思路是線性、直觀且易于使用的,當用戶執(zhí)行一行代碼時,它會忠實地執(zhí)行,所以當用戶的代碼出現(xiàn)Bug的時候,可以通過這些信息輕松快捷地找到出錯的代碼,不會讓用戶在Debug的時候因為錯誤的指向或者異步和不透明的引擎浪費太多的時間。PyTorch的代碼相對于TensorFlow而言,更加簡潔直觀,同時對于TensorFlow高度工業(yè)化的底層代碼,PyTorch的源代碼就要友好得多,更容易看懂。深入API,理解PyTorch底層肯定是一件令人高興的事。PyTorch概述PyTorch最大優(yōu)勢是建立的神經網絡是動態(tài)的,可以非常容易的輸出每一步的調試結果,相比于其他框架來說,調試起來十分方便。PyTorch的圖是隨著代碼的運行逐步建立起來的,也就是說使用者并不需要在一開始就定義好全部的網絡的結構,而是可以隨著編碼的進行來一點一點的調試,相比于TensorFlow和Caffe的靜態(tài)圖而言,這種設計顯得更加貼近一般人的編碼習慣。PyTorch概述三者的比較CaffeCaffe的優(yōu)點是簡潔快速,缺點是缺少靈活性。Caffe靈活性的缺失主要是因為它的設計缺陷。Caffe憑借其易用性、簡潔明了的源碼、出眾的性能和快速的原型設計獲取了眾多用戶。但是在深度學習新時代到來之時,Caffe已經表現(xiàn)出明顯的力不從心,諸多問題逐漸顯現(xiàn),包括靈活性缺失、擴展難、依賴眾多環(huán)境難以配置、應用局限等。盡管現(xiàn)在在GitHub上還能找到許多基于Caffe的項目,但是新的項目已經越來越少。三者的比較Caffe2Caffe的作者在加入FAIR后開發(fā)了Caffe2。Caffe2是一個兼具表現(xiàn)力、速度和模塊性的開源深度學習框架。它沿襲了大量的Caffe設計,可解決多年來在Caffe的使用和部署中發(fā)現(xiàn)的瓶頸問題。Caffe2的設計追求輕量級,在保有擴展性和高性能的同時,Caffe2也強調了便攜性。Caffe2從一開始就以性能、擴展、移動端部署作為主要設計目標。Caffe2繼承了Caffe的優(yōu)點,在速度上令人印象深刻。然而盡管已經發(fā)布半年多,開發(fā)一年多,Caffe2仍然是一個不太成熟的框架。三者的比較TensorFlowTensorFlow已經成為當今最炙手可熱的深度學習框架,但是由于自身的缺陷,TensorFlow離最初的設計目標還很遙遠。TensorFlow和Theano擁有相近的設計理念,都是基于計算圖實現(xiàn)自動微分系統(tǒng)。TensorFlow使用數據流圖進行數值計算,圖中的節(jié)點代表數學運算,而圖中的邊則代表在這些節(jié)點之間傳遞的多維數組。TensorFlow編程接口支持Python和C++。隨著1.0版本的公布,Java、Go、R和HaskellAPI的alpha版本也被支持。此外,TensorFlow還可在GoogleCloud和AWS中運行。TensorFlow還支持Windows7、Windows10和WindowsServer2016。由于TensorFlow使用C++Eigen庫,所以庫可在ARM架構上編譯和優(yōu)化。這也就意味著用戶可以在各種服務器和移動設備上部署自己的訓練模型,無須執(zhí)行單獨的模型解碼器或者加載Python解釋器。三者的比較TensorFlow的批評過于復雜的系統(tǒng)設計。TensorFlow代碼量龐大,使維護難以完成。對于入門者,TensorFlow的底層運行機制難以掌握,很多時候導致了放棄。頻繁變動的接口。TensorFlow的接口一直處于快速迭代之中,且向后兼容性較差,這導致許多陳舊的開源代碼已經無法在新版運行,同時也間接導致了許多第三方框架出現(xiàn)BUG。接口設計過于晦澀難懂,擁有圖、會話、命名空間、PlaceHolder等諸多抽象概念,對普通用戶來說難以理解。同一個功能,TensorFlow提供了多種實現(xiàn),這些實現(xiàn)良莠不齊,使用中還有細微的區(qū)別,很容易將用戶帶入坑中。TensorFlow作為一個復雜的系統(tǒng),文檔和教程眾多,但缺乏明顯的條理和層次,雖然查找很方便,但用戶卻很難找到一個真正循序漸進的入門教程。至今TensorFlow仍沒有一個統(tǒng)一易用的接口。三者的比較PyTorchPyTorch是當前難得的簡潔優(yōu)雅且高效快速的框架。PyTorch的設計追求最少的封裝,遵循tensor→variable(autograd)→nn.Module三個由低到高的抽象層次,分別代表高維數組(張量)、自動求導(變量)和神經網絡(層/模塊),而且這三個抽象之間聯(lián)系緊密,可以同時進行修改和操作。簡潔的設計帶來的另外一個好處就是代碼易于理解。PyTorch的靈活性不以速度為代價,在許多評測中,PyTorch的速度表現(xiàn)勝過TensorFlow和Keras等框架。三者的比較PyTorchPyTorch正在受到越來越多人的追捧。PyTorch是所有的框架中面向對象設計的最優(yōu)雅的一個。PyTorch的面向對象的接口設計來源于Torch,而Torch的接口設計以靈活易用而著稱。PyTorch繼承了Torch的衣缽,尤其是API的設計和模塊的接口都與Torch高度一致。PyTorch的設計最符合人們的思維,它讓用戶盡可能地專注于實現(xiàn)自己的想法,即所思即所得,不需要考慮太多關于框架本身的束縛。PyTorch提供了完整的文檔,循序漸進的指南,作者親自維護的論壇供用戶交流和求教問題。Facebook人工智能研究院對PyTorch提供了強力支持,作為當今排名前三的深度學習研究機構,F(xiàn)AIR的支持足以確保PyTorch獲得持續(xù)的開發(fā)更新。同樣的,由于推出時間較短,在Github上并沒有如Caffe或TensorFlow那樣多的代碼實現(xiàn),使用TensorFlow能找到很多別人的代碼,而對于PyTorch的使用者,可能需要自己完成很多的代碼實現(xiàn)。小結
本章介紹了三種常用的機器學習框架,其中TensorFlow和PyTorch是目前最流行的兩種開源框架。在以往版本的實現(xiàn)中,TensorFlow主要提供靜態(tài)圖構建的功能,因此具有較高的運算性能,但是模型的調試分析成本較高。PyTorch主要提供動態(tài)圖計算的功能,API涉及接近Python原生語法,因此易用性較好,但是在圖優(yōu)化方面不如TensorFlow。這樣的特點導致TensorFlow大量用于AI企業(yè)的模型部署,而學術界大量使用PyTorch進行研究。不過目前我們也看到兩種框架正在吸收對方的優(yōu)勢,例如TensorFlow的eager模式就是對動態(tài)圖的一種嘗試。TheEnd謝謝!機器學習基礎知識(一)導入
深度學習是作為機器學習的一個分支發(fā)展而來的,因此有必要介紹機器學習的基礎知識。本章首先介紹模型評估與模型參數選擇,這些知識在深度學習中具有相當重要的地位。而后,本章簡要介紹了監(jiān)督學習與非監(jiān)督學習。大多數基礎的深度學習模型都是基于監(jiān)督學習的,但是隨著模型復雜度的提高,模型對數據的需求量也日益增加。因此,許多研究者都在嘗試將非監(jiān)督學習應用到深度學習中,以獲得更佳廉價的訓練數據。本章要點模型評估與模型參數選擇驗證正則化監(jiān)督學習非監(jiān)督學習模型評估與模型參數選擇
模型評估與模型參數選擇訓練集可能存在以下問題:1.訓練集樣本太少,缺乏代表性;2.訓練集中本身存在錯誤的樣本,即噪聲。如果片面地追求訓練誤差的最小化,就會導致模型參數復雜度增加,使得模型過擬合。為了選擇效果最佳的模型,防止過擬合的問題,通常可以采取的方法有:使用驗證集調參對損失函數進行正則化驗證模型不能過擬合于訓練集,否則將不能在測試集上得到最優(yōu)結果;但是否能直接以測試集上的表現(xiàn)來選擇模型參數呢?答案是否定的。因為這樣的模型參數將會是針對某個特定測試集的,得出來的評價標準將會失去其公平性,失去了與其他同類或不同類模型相比較的意義。因此參數的選擇(即調參)必須在一個獨立于訓練集和測試集的數據集上進行,這樣的用于模型調參的數據集被稱為開發(fā)集或驗證集。然而很多時候我們能得到的數據量非常有限。這個時候我們可以不顯式地使用驗證集,而是重復使用訓練集和測試集,這種方法稱為交叉驗證。常用的交叉驗證方法有:簡單交叉驗證。K-重交叉驗證。正則化
監(jiān)督學習與非監(jiān)督學習
監(jiān)督學習
監(jiān)督學習回歸回歸問題在生活中非常常見,其最簡單的形式是一個連續(xù)函數的擬合。如果一個購物網站想要計算出其在某個時期的預期收益,研究人員會將相關因素如廣告投放量、網站流量、優(yōu)惠力度等納入自變量,根據現(xiàn)有數據擬合函數,得到在未來某一時刻的預測值?;貧w問題中通常使用均方損失函數來作為度量模型效果的指標,最簡單的求解例子是最小二乘法。監(jiān)督學習
監(jiān)督學習分類通常在不平衡類問題中,我們使用F-度量來作為評價模型的指標。以二元不平衡分類問題為例,這種分類問題往往是異常檢測,模型的好壞往往取決于能否很好地檢出異常,同時盡可能不誤報異常。定義占樣本少數的類為正類(Positiveclass),占樣本多數的為負類(Negativeclass),那么預測只可能出現(xiàn)4種狀況:將正類樣本預測為正類(TruePositive,TP)將負類樣本預測為正類(FalsePositive,FP)將正類樣本預測為負類(FalseNegative,FN)將負類樣本預測為負類(TrueNegative,TN)監(jiān)督學習
監(jiān)督學習
非監(jiān)督學習
非監(jiān)督學習
小結
本章對機器學習基礎知識進行了介紹,這部分是理解后續(xù)高級操作的基礎,需要讀者認真消化。監(jiān)督學習與非監(jiān)督學習主要針對數據集定義。有監(jiān)督數據集需要人工標注,成本較為昂貴,但是在訓練模型時往往能夠保障效果。無監(jiān)督數據集一般不需要過多人工操作,可以通過爬蟲等方式自動大量獲得。由于沒有監(jiān)督信息的約束,需要設計巧妙的學習算法才能有效利用無監(jiān)督數據集訓練模型,不過大量廉價數據可以從另一個方面提高模型性能。模型評估需要根據模型的訓練歷史判斷模型是否處于欠擬合或過擬合狀態(tài)。盡管有一定的規(guī)律作為指導,而且有一些工具可以輔助分析,但是模型的評估過程一般需要較為豐富的經驗。讀者可以在深度學習實驗中有意識地訓練自己的模型評估能力。TheEnd謝謝!PyTorch深度學習基礎(一)導入
在介紹PyTorch之前,讀者需要先了解Numpy。Numpy是用于科學計算的框架,它提供了一個N維矩陣對象ndarray,以及初始化、計算ndarray的函數,以及變換ndarray形狀,組合拆分ndarray的函數。PyTorch的Tensor和Numpy的ndarray十分類似,但是Tensor具備兩個ndarray不具備,但是對于深度學習來說非常重要的功能,其一是Tensor能用利用GPU計算,其二是,Tensor在計算時,能夠作為結點自動的加入到計算圖當中,而計算圖可以為其中的每個結點自動的計算微分.本章要點Tensor對象及其運算Tensor的索引和切片Tensor的變換、拼接和拆分PyTorch的Reduction操作PyTorch的自動微分AutogradTensor對象及其運算Tensor對象是一個維度任意的矩陣,但是一個Tensor中所有元素的數據類型必須一致。torch包含的數據類型和普遍編程語言的數據類型類似,包含浮點型,有符號整型和無符號整形,這些類型既可以定義在CPU上,也可以定義在GPU上。在使用Tensor數據類型時,可以通過dtype屬性指定它的數據類型,device指定它的設備(CPU或者GPU)。Tensor對象及其運算通過device指定在GPU上定義變量后,可以在終端上通過nvidia-smi命令查看顯存占用。torch還支持在CPU和GPU之間拷貝變量。Tensor對象及其運算對Tensor執(zhí)行算數運算符的運算時,是兩個矩陣對應元素的運算。torch.mm執(zhí)行的矩陣乘法的計算。Tensor對象及其運算此外,還有一些具有特定功能的函數。torch.clamp起的是分段函數的作用,可用于去掉矩陣中過小或者過大的元素;torch.round將小數部分化整;torch.tanh計算雙曲正切函數,該函數將數值映射到(0,1)之間。Tensor對象及其運算除了直接從ndarray或list類型的數據中創(chuàng)建Tensor,PyTorch還提供了一些函數可直接創(chuàng)建數據,這類函數往往需要提供矩陣的維度。torch.arange和Python內置的range的使用方法基本相同,其第3個參數是步長。torch.linspace第3個參數指定返回的個數。torch.ones返回全0,torch.zeros返回全0矩陣。Tensor對象及其運算Tensor對象及其運算torch.rand返回從[0,1]之間的均勻分布采樣的元素所組成的矩陣,torch.randn返回從正態(tài)分布采樣的元素所組成的矩陣。torch.randint返回指定區(qū)間的均勻分布采樣的隨機整數所生成的矩陣。Tensor的索引和切片Tensor支持基本的索引和切片操作,不僅如此,它還支持ndarray中的高級索引(整數索引和布爾索引)操作。Tensor的索引和切片Tensor的索引和切片torch.where(condition,x,y)判斷condition的條件是否滿足,當某個元素滿足,則返回對應矩陣x相同位置的元素,否則返回矩陣y的元素。Tensor的變換、拼接和拆分PyTorch提供了大量的對Tensor進行操作的函數或方法,這些函數內部使用指針實現(xiàn)對矩陣的形狀變換,拼接,拆分等操作,使得我們無須關心Tensor在內存的物理結構或者管理指針就可以方便且快速的執(zhí)行這些操作。Tensor.nelement(),Tensor.ndimension(),ndimension.size()可分別用來查看矩陣元素的個數,軸的個數以及維度,屬性Tensor.shape也可以用來查看Tensor的維度。Tensor的變換、拼接和拆分Tensor的變換、拼接和拆分在PyTorch中,Tensor.reshape和Tensor.view都能被用來更改Tensor的維度。它們的區(qū)別在于,Tensor.view要求Tensor的物理存儲必須是連續(xù)的,否則將報錯,而Tensor.reshape則沒有這種要求。但是,Tensor.view返回的一定是一個索引,更改返回值,則原始值同樣被更改,Tensor.reshape返回的是引用還是拷貝是不確定的。它們的相同之處都接收要輸出的維度作為參數,切輸出的矩陣元素個數不能改變,可以在維度中輸入-1,PyTorch會自動推斷它的數值。Tensor的變換、拼接和拆分Tensor的變換、拼接和拆分torch.squeeze和torch.unsqueeze用來給Tensor去掉和添加軸。torch.squeeze去掉維度為1的軸,而torch.unsqueeze用于給Tensor的指定位置添加一個維度為1的軸Tensor的變換、拼接和拆分torch.t和torch.transpose用于轉置二維矩陣。這兩個函數只接收二維Tensor,torch.t是torch.transpose的簡化版。Tensor的變換、拼接和拆分對于高維度Tensor,可以使用permute方法來變換維度。Tensor的變換、拼接和拆分PyTorch提供了torch.cat和torch.stack用于拼接矩陣,不同的是,torch.cat在已有的軸dim上拼接矩陣,給定軸的維度可以不同,而其他軸的維度必須相同。torch.stack在新的軸上拼接,它要求被拼接的矩陣所有維度都相同。Tensor的變換、拼接和拆分Tensor的變換、拼接和拆分除了拼接矩陣,PyTorch還提供了torch.split和torch.chunk用于拆分矩陣。它們的不同之處在于,torch.split傳入的是拆分后每個矩陣的大小,可以傳入list,也可以傳入整數,而torch.chunk傳入的是拆分的矩陣個數。Tensor的變換、拼接和拆分PyTorch的Reduction操作Reduction運算的特點是它往往對一個Tensor內的元素做歸約操作,比如torch.max找極大值,torch.cumsum計算累加,它還提供了dim參數來指定沿矩陣的哪個維度執(zhí)行操作。PyTorch的Reduction操作PyTorch的Reduction操作PyTorch的Reduction操作PyTorch的自動微分Autograd將Tensor的requires_grad屬性設置為True時,PyTorch的torch.autograd會自動的追蹤它的計算軌跡,當需要計算微分的時候,只需要對最終計算結果的Tensor調用backward方法,中間所有計算結點的微分就會被保存在grad屬性中了。PyTorch的自動微分AutogradPyTorch的自動微分Autograd小結本章介紹了PyTorch框架的基本使用方法和工作原理。Tensor的中文名為張量,本質上是一個多維矩陣。通過后文的介紹讀者將會很自然地理解Tensor在深度學習計算中的重要地位,因此本章講述的Tensor基本操作需要重點掌握。另一方面,PyTorch的動態(tài)圖計算依賴于強大的自動微分功能。理解自動微分不會幫助讀者提升編程技能,但是可以使讀者更容易理解PyTorch的底層計算過程,從而理解梯度的反向傳播等操作。TheEnd謝謝!PyTorch深度學習基礎
PyTorch深度學習基礎
本章要點線性回歸Logistic回歸用PyTorch實現(xiàn)logisticregressionlogisticregression的算法優(yōu)化logisticregression的模型可視化線性回歸
線性回歸
線性回歸線性回歸
線性回歸
線性回歸
線性回歸
線性回歸
Logistic回歸
Logistic回歸
Logistic回歸Logistic函數圖像Logistic回歸
Logistic回歸
Logistic回歸
用PyTorch實現(xiàn)logisticregression用PyTorch實現(xiàn)logisticregression的代碼主要依賴于三個模塊用PyTorch實現(xiàn)logisticregression
用PyTorch實現(xiàn)logisticregression
用PyTorch實現(xiàn)logisticregression數據準備用PyTorch實現(xiàn)logisticregression數據準備17-18行設置樣本對應的標簽y,分別用0和1表示不同高斯分布的數據,也就是正樣本和負樣本。第21行使用cat函數將x1和x2組合在一起,第22-24行打亂樣本和標簽的順序,將數據重新隨機排列是十分重要的步驟,否則算法的每次迭代只會學習到同一個類別的信息,容易造成模型過擬合。用PyTorch實現(xiàn)logisticregression數據準備用PyTorch實現(xiàn)logisticregression
用PyTorch實現(xiàn)logisticregression線性方程用PyTorch實現(xiàn)logisticregression線性方程上面代碼的第一行定義了線性模型的輸入維度D_in和輸出維度D_out,第2-3行實例化了nn.Linear,將線性模型應用到數據x上,得到計算結果output。Linear的初始參數是隨機設置的,可以調用Linear.weight和Linear.bias獲取線性模型的參數,第5行打印了輸入變量x,模型參數weight和bias,計算結果output的維度。第7-8行定義了我們自己實現(xiàn)的線性模型my_linear,第10行將my_linear的計算結果和PyTorch的計算結果output做比較,可以發(fā)現(xiàn)其結果一致。用PyTorch實現(xiàn)logisticregression激活函數前文介紹了torch.nn.Linear可用于實現(xiàn)線性模型,除此之外,它還提供了機器學習當中常用的激活函數,logistcregression用于二分類問題時,使用sigmoid函數將線性模型的計算結果映射到0和1之間,得到的計算結果作為樣本為正類的置信概率。torch.nn.Sigmoid()提供了這一函數的計算,在使用時,將Sigmoid類實例化,再將需要計算的變量作為參數傳遞給實例化的對象。用PyTorch實現(xiàn)logisticregression激活函數作為練習,第4-6行手動實現(xiàn)sigmoid函數,第8行通過PyTorch驗證我們的實現(xiàn)結果,其結果一致。用PyTorch實現(xiàn)logisticregression損失函數logisticregression使用交叉熵作為損失函數。PyTorch的torch.nn提供了許多標準的損失函數,我們可以直接使用torch.nn.BCELoss計算二值交叉熵損失。第1-2行調用了BCELoss來計算我們實現(xiàn)的logisticregression模型的輸出結果sigmoid(output)和數據的標簽y,同樣地,在4-6行我們自定義了二值交叉熵函數,在第8行將my_loss和PyTorch的BCELoss做比較,發(fā)現(xiàn)結果無差。用PyTorch實現(xiàn)logisticregression損失函數用PyTorch實現(xiàn)logisticregression損失函數在前面的代碼中,我們使用了torch.nn包中的線性模型nn.Linear,激活函數nn.Softmax(),損失函數nn.BCELoss,它們都繼承于nn.Module類,在PyTorch中,我們通過繼承nn.Module來構建我們自己的模型。接下來我們用nn.Module來實現(xiàn)logisticRegression。用PyTorch實現(xiàn)logisticregression損失函數用PyTorch實現(xiàn)logisticregression損失函數通過繼承nn.Module實現(xiàn)自己的模型時,forward()方法是必須被子類覆寫的,在forward內部應當定義每次調用模型時執(zhí)行的計算。從前面的應用我們可以看出,nn.Module類的主要作用就是接收Tensor然后計算并返回結果。在一個Module中,還可以嵌套其他的Module,被嵌套的Module的屬性就可以被自動獲取,比如可以調用nn.Module.parameters()方法獲取Module所有保留的參數,調用nn.Module.to()方法將模型的參數放置到GPU上等等。用PyTorch實現(xiàn)logisticregression優(yōu)化算法logisticregression通常采用梯度下降法優(yōu)化目標函數。PyTorch的torch.optim包實現(xiàn)了大多數常用的優(yōu)化算法,使用起來非常簡單。首先構建一個優(yōu)化器,在構建時,首先需要將待學習的參數傳入,然后傳入優(yōu)化器需要的參數,比如學習率。用PyTorch實現(xiàn)logisticregression優(yōu)化算法構建完優(yōu)化器,就可以迭代的對模型進行訓練,有兩個步驟,其一是調用損失函數的backward()方法計算模型的梯度,然后再調用優(yōu)化器的step()方法,更新模型的參數。需要注意的是,首先應當調用優(yōu)化器的zero_grad()方法清空參數的梯度。用PyTorch實現(xiàn)logisticregression優(yōu)化算法用PyTorch實現(xiàn)logisticregression
用PyTorch實現(xiàn)logisticregression模型可視化用PyTorch實現(xiàn)logisticregression模型可視化結果圖小結Logistic回歸是深度學習中最基礎的非線性模型之一。作為鋪墊,在介紹Logistic回歸以前,本章首先介紹了線性回歸。線性回歸的預測目標是連續(xù)變量,而Logistic回歸的預測目標是二元變量。為了應對這一差異,Logistic回歸在線性回歸的基礎上加入了Sigmoid激活函數。本章最后使用PyTorch實現(xiàn)了Logistic回歸模型,讀者可以通過這個例子進一步體會深度學習模型構建的整體流程以及框架編程的簡便性。TheEnd謝謝!多層感知器(一)導入
人工智能的研究者為了模擬人類的認知,提出了不同的模型。人工神經網絡是人工智能中非常重要的一個學派——連接主義最為廣泛使用的模型。
在傳統(tǒng)上,基于規(guī)則的符號主義學派認為,人類的認知是基于信息中的模式;而這些模式可以被表示成為符號,并可以通過操作這些符號,顯式地使用邏輯規(guī)則進行計算與推理。多層感知器(一)導入
而基于統(tǒng)計的連接主義的模型將認知所需的功能屬性結合到模型中來,通過模擬生物神經網絡的信息處理方式來構建具有認知功能的模型。類似于生物神經元與神經網絡,這類模型具有三個特點:
擁有處理信號的基礎單元
處理單元之間以并行方式連接
處理單元之間的連接是有權重的
這一類模型被稱為人工神經網絡,多層感知器是最為簡單的一種。本章要點多層感知器的相關基礎概念單層感知器和多層感知器BP神經網絡Dropout正則化批標準化基礎概念
基礎概念
基礎概念
基礎概念
基礎概念
基礎概念
基礎概念
基礎概念
基礎概念神經網絡神經網絡是一個有向圖,以神經元為頂點,神經元的輸入為頂點的入邊,神經元的輸出為頂點的出邊。因此神經網絡實際上是一個計算圖,直觀地展示了一系列對數據進行計算操作的過程。神經網絡是一個端到端的系統(tǒng),這個系統(tǒng)接受一定形式的數據作為輸入,經過系統(tǒng)內的一系列計算操作后,給出一定形式的數據作為輸出;系統(tǒng)內的運算可以被視為一個黑箱子,這與人類的認知在一定程度上具有相似性。通常地,為了直觀起見,人們對神經網絡中的各頂點進行了層次劃分?;A概念輸入層接受來自網絡外部的數據的頂點,組成輸入層。輸出層向網絡外部輸出數據的頂點,組成輸出層。隱藏層除了輸入層和輸出層以外的其他層,均為隱藏層?;A概念
感知器感知器的概念由RosenblattFrank在1957提出,是一種監(jiān)督訓練的二元分類器。單層感知器
單層感知器
多層感知器
多層感知器
BP神經網絡在多層感知器被引入的同時,也引入了一個新的問題:由于隱藏層的預期輸出并沒有在訓練樣例中給出,隱藏層結點的誤差無法像單層感知器那樣直接計算得到。為了解決這個問題,后向傳播算法被引入,其核心思想是將誤差由輸出層向前層后向傳播,利用后一層的誤差來估計前一層的誤差。后向傳播算法由HenryJ.Kelley在1960和ArthurE.Bryson在1961分別提出。使用后向傳播算法訓練的網絡稱為BP神經網絡。梯度下降
梯度下降梯度下降
后向傳播
后向傳播
Dropout正則化Dropout是一種正則化技術,通過防止特征的協(xié)同適應,可用于減少神經網絡中的過擬合。Dropout的效果非常好,實現(xiàn)簡單且不會降低網絡速度,被廣泛使用。特征的協(xié)同適應指的是在訓練模型時,共同訓練的神經元為了相互彌補錯誤,而相互關聯(lián)的現(xiàn)象,在神經網絡中這種現(xiàn)象會變得尤其復雜。協(xié)同適應會轉而導致模型的過度擬合,因為協(xié)同適應的現(xiàn)象并不會泛化未曾見過的數據。Dropout從解決特征間的協(xié)同適應入手,有效地控制了神經網絡的過擬合。Dropout正則化ropout在每次訓練中,按照一定概率p隨機的抑制一些神經元的更新,相應地,按照概率1?p保留一些神經元的更新。當神經元被抑制時,它的前向結果被置為0,而不管相應的權重和輸入數據的數值大小。被抑制的神經元在后向傳播中,也不會更新相應權重,也就是說被抑制的神經元在前向和后向中都不起任何作用。通過隨機的抑制一部分神經元,可以有效防止特征的相互適應。Dropout正則化Dropout的實現(xiàn)方法非常簡單,參考如下代碼,第3行生成了一個隨機數矩陣activations,表示神經網絡中隱含層的激活值,第4-5行構建了一個參數p=0.5伯努利分布,并從中采樣一個由伯努利變量組成的掩碼矩陣mask,伯努利變量是只有0和1兩種取值可能性的離散變量。第6行將mask和activations逐元素相乘,mask中數值為0的變量會將相應的激活值置為0,從而這一激活值無論它本來的數值多大都不會參與到當前網絡中更深層的計算,而mask中數值為1的變量則會保留相應的激活值。Dropout正則化Dropout正則化
Dropout正則化Dropout會在訓練和測試時做出不同的行為,PyTorch的torch.nn.Module提供了train方法和eval方法,通過調用這兩個方法就可以將網絡設置為訓練模式或測試模式,這兩個方法只對Dropout這種訓練和測試不一致的網絡層起作用,而不影響其他的網絡層,后面介紹的BatchNormalization也是訓練和測試步驟不同的網絡層。批標準化在訓練神經網絡時,往往需要標準化輸入數據,使得網絡的訓練更加快速和有效,然而SGD等學習算法會在訓練中不斷改變網絡的參數,隱含層的激活值的分布會因此發(fā)生變化,而這一種變化就稱為內協(xié)變量偏移。為了減輕ICS問題,批標準化固定激活函數的輸入變量的均值和方差,使得網絡的訓練更快。除了加速訓練這一優(yōu)勢,批標準化還具備其他功能:首先,應用了批標準化的神經網絡在反向傳播中有著非常好的梯度流。不僅如此,批標準化還具有正則化的作用。最后,批標準化讓深度神經網絡使用飽和非線性函數成為可能。批標準化的實現(xiàn)方式
批標準化的實現(xiàn)方式
批標準化的實現(xiàn)方式
批標準化的使用方法在PyTorch中,torch.nn.BatchNorm1d提供了批標準化的實現(xiàn),同樣地,它也被當作神經網絡中的層使用。它有兩個十分關鍵的參數,num_features確定特征的數量,affine決定批標準化是否使用仿射映射。下面的代碼第4行實例化了一個BatchNorm1d對象,將模型的兩個中間變量running_mean和running_var初始化為5維的向量。第5-6行打印了這兩個變量的數據。第9-11行從標準高斯分布采樣了一些數據然后提供給批標準化層。第14-15行打印了變化后的running_mean和running_var。第17-24行驗證了如果我們將模型設置為eval模式,這兩個變量不會發(fā)生任何變化。批標準化的使用方法批標準化的使用方法批標準化的使用方法批標準化的使用方法
批標準化的使用方法批標準化的使用方法小結感知器模型可以算得上是深度學習的基石。最初的單層感知器模型就是為了模擬人腦神經元提出的,但是就連異或運算都無法模擬。經過多年的研究,人們終于提出了多層感知器模型,用于擬合任意函數。結合高效的BP算法,神經網絡終于誕生。盡管目前看來,BP神經網絡已經無法勝任許多工作,但是從發(fā)展的角度來看,BP神經網絡仍是學習深度學習不可不知的重要部分。本章的最后兩節(jié)介紹了常用的訓練技巧,這些技巧可以有效地提升模型表現(xiàn),避免過擬合。TheEnd謝謝!卷積神經網絡CNN與計算機視覺(一)導入
計算機視覺是一門研究如何使計算機識別圖片的科學,也是深度學習的主要應用領域之一。在眾多深度模型中,卷積神經網絡獨領風騷,已經稱為計算機視覺的主要研究工具之一。本章首先介紹卷積神經網絡的基本知識,而后給出一些常見的卷積神經網絡模型。本章要點卷積神經網絡的基本思想卷積操作池化層卷積神經網絡VGG網絡InceptionNetResNet用PyTorch進行手寫數字識別卷積神經網絡的基本思想卷積神經網絡最初由YannLeCun等人在1989年提出,是最初取得成功的深度神經網絡之一。它的基本思想是:局部連接。參數共享。卷積神經網絡的基本思想
卷積神經網絡的基本思想
卷積神經網絡的基本思想
卷積操作
卷積操作卷積操作
卷積操作
池化層池化(Pooling)的目的是降低特征空間的維度,只抽取局部最顯著的特征,同時這些特征出現(xiàn)的具體位置也被忽略。這樣做是符合直覺的:以圖像處理為例,我們通常關注的是一個特征是否出現(xiàn),而不太關心它們出現(xiàn)在哪里;這被稱為圖像的靜態(tài)性。通過池化降低空間維度的做法不但降低了計算開銷,還使得卷積神經網絡對于噪聲具有魯棒性。池化層
卷積神經網絡一般來說,卷積神經網絡(ConvolutionalNeuralNetwork,CNN)由一個卷積層、一個池化層、一個非線性激活函數層組成。卷積神經網絡在圖像分類中表現(xiàn)良好的深度神經網絡往往由許多“卷積層+池化層”的組合堆疊而成,通常多達數十乃至上百層。經典網絡結構VGG,InceptionNet,ResNet等CNN網絡從大規(guī)模圖像數據集訓練的用于圖像分類的網絡,ImageNet從2010年起每年都舉辦圖像分類的競賽,為了公平起見,它為每位參賽者提供來自于1000個類別的120萬張圖像。在如此巨大的數據集中訓練出的深度學習模型特征具有非常良好的泛化能力,在遷移學習后,可以被用于除圖像分類之外的其他任務,比如目標檢測,圖像分割。PyTorch的torchvision.models為我們提供了大量的模型實現(xiàn),以及模型的預訓練權重文件,其中就包括本節(jié)介紹的VGG,ResNet,InceptionNet。經典網絡結構
經典網絡結構VGG網絡結構經典網絡結構
經典網絡結構InceptionNet網絡結構經典網絡結構
經典網絡結構ResNet神經網絡越深,對復雜特征的表示能力就越強。但是單純的提升網絡的深度會導致在反向傳播算法在傳遞梯度時,發(fā)生梯度消失現(xiàn)象,導致網絡的訓練無效。通過一些權重初始化方法和BatchNormalization可以解決這一問題,但是,即便使用了這些方法,網絡在達到一定深度之后,模型訓練的準確率不會再提升,甚至會開始下降,這種現(xiàn)象稱為訓練準確率的退化(degradation)問題。退化問題表明,深層模型的訓練是非常困難的。ResNet提出了殘差學習的方法,用于解決深度學習模型的退化問題。經典網絡結構
經典網絡結構
用PyTorch進行手寫數字識別torch.utils.data.Datasets是PyTorch用來表示數據集的類,在本節(jié)我們使用torchvision.datasets.MNIST構建手寫數字數據集。用PyTorch進行手寫數字識別下面代碼第5行實例化了Datasets對象。第7行,使用了len(mnist),這里調用了_len_方法,第8行使用了mnist[j],調用的是_getitem_,在我們自己建立數據集時,需要繼承Dataset,并且覆寫_item_和_len_兩個方法。第9-10行繪制了MNIST手寫數字數據集。用PyTorch進行手寫數字識別代碼段用PyTorch進行手寫數字識別
用PyTorch進行手寫數字識別準備好處理好數據的流程后,就可以讀取用于訓練的數據了,torch.utils.data.DataLoader提供了迭代數據,隨機抽取數據,批量化數據,使用multiprocessing并行化讀取數據的功能。下面定義了函數imshow,第2行將數據從標準化的數據中恢復出來,第3行將Tensor類型轉換為ndarray,這樣才可以用matplotlib繪制出來,繪制的結果如圖所示,第4行將矩陣的維度從(C,W,H)轉換為(W,H,C)。用PyTorch進行手寫數字識別代碼段用PyTorch進行手寫數字識別在準備好數據和模型后,我們就可以訓練模型了。下面我們分別定義了數據處理和加載流程,模型,優(yōu)化器,損失函數,以及用準確率評估模型能力。模型訓練迭代過程的損失圖像如圖所示。用PyTorch進行手寫數字識別模型訓練迭代過程的準確率圖像如圖所示。小結
本章介紹了卷積神經網絡與計算機視覺的相關概念。視覺作為人類感受世界的主要途徑之一,其重要性在機器智能方面不言而喻。但是在很長一段時間里,計算機只能通過基本的圖像處理和幾何分析方法觀察世界,這無疑限制了其他領域智能的發(fā)展。卷積神經網絡的出現(xiàn)扭轉了這樣的局面。通過卷積和池化等運算,卷積層能夠高效地提取圖像和視頻特征,為后續(xù)任務提供堅實的基礎。本章實現(xiàn)的手寫數字識別只是當下計算機視覺中最簡單的應用之一,更為先進的卷積神經網絡模型甚至能夠在上百萬張圖片中完成分類任務,而且精度超過人類。TheEnd謝謝!神經網絡與自然語言處理(一)導入
隨著梯度反向傳播算法的提出,神經網絡在計算機視覺領域取得了巨大的成功,神經網絡第一次真正地超越傳統(tǒng)方法,成為在學術界乃至工業(yè)界實用的模型。
這時在自然語言處理領域,統(tǒng)計方法仍然是主流的方法。由于自然語言處理中所要處理的對象都是離散的符號,自然語言處理與連續(xù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建師范大學《多媒體信息編輯》2023-2024學年第一學期期末試卷
- 河北省承德市隆化縣第二中學2023-2024學年九年級上學期期中考試道德與法治試題
- 運動會開幕式主持詞
- 部分非常規(guī)作業(yè)許可證(樣表)易燃易爆介質臨時接管線
- 畢業(yè)典禮活動小結
- 2024屆云南省鹽津縣第三中學高三沖刺模擬考試(5月)數學試題
- 2024屆四川省成都市經開區(qū)實驗中學高考數學試題5月沖刺題
- 水循環(huán)課件新人教版
- 2024年宿遷道路旅客運輸駕駛員從業(yè)資格模擬試題
- 2024年陜西客運資格證考試題
- 2023年貴州大方富民村鎮(zhèn)銀行招聘考試真題
- 物聯(lián)網安裝調試員職業(yè)技能競賽考試題庫(含答案)
- 七年級上冊語文統(tǒng)編版 10 《往事依依》活動型公開課一等獎創(chuàng)新教學設計(表格式)
- 2021-2022學年北京市房山區(qū)九年級(上)期中數學試卷【含解析】
- DB11∕1450-2017 管道燃氣用戶安全巡檢技術規(guī)程
- 北京市海淀區(qū)2023-2024學年七年級下學期期末數學練習試題(解析版)
- 室上性心動過速-醫(yī)學課件
- 游泳自由泳教案(表格式)
- 《第五課-放映幻燈片》優(yōu)教課件
- Java Web程序設計智慧樹知到期末考試答案章節(jié)答案2024年青島職業(yè)技術學院
- CTF信息安全競賽理論知識考試題庫大全-下(多選、判斷題)
評論
0/150
提交評論