深度學習的應用與實踐

dicksonjyl560101發表於2020-01-08

深度學習的應用與實踐

 

 

 

一、深度學習簡介


       
  深度學習,英文名稱為Deep Learning,是近幾年人工智慧領域的主要研究方向。深度學習的主要任務是透過構建深度卷積神經網路(Deep Neural Network,DNN)和採用大量樣本資料作為輸入,人們最終會得到一個具有強大分析能力和識別能力的模型,該模型包含了DNN的構成引數以應用於實際工作。

 

         由於深度學習依賴DNN這樣一個引數量龐大且非線性的框架,使得對於它的研究充滿了挑戰和困難。然而,近幾年的研究和應用表明,深度學習已經基本取代了先前相關技術,在影像識別,語音識別已經取得了非凡的突破,但這並不意味著深度學習已經發展成熟,它還需要研究者進一步的理論分析和應用實踐。

 

 

1.  深度學習的歷史


       
  談及深度學習的發展歷程,就如同各種理論被人們關注和忽視的歷程一樣,具有高低起伏。深度學習並不是近幾年才提出的,而之所以受到大眾熟知也是因為社交媒體的廣泛傳播才被又一次拉上臺面。例如2016年的AlphaGo對戰李世石的比賽,在那年甚至之前的年代裡圍棋一直被認為是機器與人之間算力較量的最後一個跨越,許多人認為李世石穩操勝券,而沒想到人工智慧最終更勝一籌。

 

         最早的神經網路是1943年提出的MCP人工神經元模型,其在1958年被應用於感知器演算法中,用於機器學習分類任務。然而,儘管這樣的方法被證明是可收斂的,卻因為被結構簡單(線性模型),分類認為受限(二分類,複雜的任務無法正確分類)而使得神經網路的研究處於一次長達17年的低潮期。

 

         在1986年,Hinton發明了BP演算法,其由訊號的正向傳播和誤差的反向傳播兩個過程組成,應用於多層感知器(MLP),並且採用Sigmoid進行非線性對映解決了之前非線性分類學習問題。所謂的BP演算法,也就是在正向傳播時將輸入樣本輸入網路,經過隱層傳遞到輸出層,輸出值與期望值不同則進行誤差的反向傳播,而反向傳播就是按原通路透過隱層傳至輸入層,將誤差分攤各個神經單元,獲得各層神經元的誤差訊號響應,修正各個神經單元的權重佔比。最終,人們將得到一個較為適合的權重模型,其實際輸出與期望輸出的誤差達到最低限度,可以被用於實際任務當中。

 

         然而說到真正意義上的卷積神經網路,LeNet可以說算的上是現代使用深度學習的基石,其結構於1989年被LeCun提出,其在數字識別的效果也非常好。例如,現在很多AI入門人員都必須要經歷的LeNet-5模型實現MNIST資料識別任務。可是這樣的方法卻並沒有引起很大的關注,我想可能是因為科技發展和理論實踐不相適應造成的,更何況神經網路缺少相應的嚴格數學理論支援(到現在這個問題還是存在),使得剛剛升起的勝利白帆又再一次降下。

 

         儘管深度學習的研究再一次的處於低谷期,但並不意味著深度學習停滯不前。1997年,著名的長短期記憶網路(LSTM)被提出,其解決了一般迴圈神經網路(RNN)存在長期依賴問題,即相較於RNN解決了長序列訓練過程中存在梯度消失和梯度爆炸問題。作為一個非線性模型,LSTM可用於構建大型DNN,在實際任務中,LSTM可被用於語音識別等方面。現如今我們可以利用多種深度框架對其進行復現,也算得上是對那時研究出該架構的人員的一種安慰。

 

         值得一提的是在深度學習火熱之前,統計學習方法佔據上風,從1986年的決策樹方法到2001年的隨機森林,從1995年的線性SVM(支援向量機)到2000年的非線性的KernelSVM,以及一些著名的HMM,樸素貝葉斯等方法,它們也推進人類對於人工智慧領域的實現,並且也可以和深度學習相輔相成。到現在,我們依舊可以使用DNN與類似SVM和CRF搭配進行分類任務,統計學習方法中一些指標也通常被作為設計網路合理性的評判標準。

 

       2006  年,Hinton又提出瞭解決DNN訓練當中梯度消失解決方法,現在的研究者也依舊基本遵循這樣的方法,即無監督預訓練初始化權值和有監督引數微調。值得一提的是為了更好的調參用於快速精準訓練,預訓練模型以及最佳化器SGD和ADAM被廣泛應用,也算的上是對這個方法提出的最好證明。

 

         從2012年AlexNet參加ImageNet影像分類比賽碾壓第二名SVM方法事件開始,深度學習才又漸漸被關注起來。與此同時,為了更好的實現深度學習機制,一些著名的深度學習框架也被提出,例如Caffe,TensorFlow,Pytorch,Keras,MXNet等,它們也隨著計算機程式語言的發展被一一實現,現如今Python語言對其都有支援,我想這也是Python近幾年火熱的原因之一。再加上顯示卡近幾年的快速發展,其在支援並行處理高效計算的能力得到提升,不僅擴大了遊戲行業和影視行業的影響力,同時也使得深度學習的研究也得到了越來越多的企業關注(高效訓練,大規模叢集)。

 

         除此之外,ResNet和DenseNet的提出,又再一次給搭建更深層次網路奠定基礎。也因此越來越多的網路結構和理論研究基於前者被設計和實現,越來越多的應用和產品也被落地使用,在我看來,深度學習已經成為了科技生活中不可或缺的一部分,影響著身邊的每一個人。

 

 

2.  深度學習的革命性


       
  作為一名從事深度學習研究的人員,在我看來深度學習的革命性就在於其已經被計算機技術實現,並且將理論應用於實際生活當中。

 

         深度學習之所以近幾年發展迅速,我認為是以下幾點已經得到保證:環境搭建,資料處理,訓練策略和評判標準。環境搭建是一件對於深度學習入門人員的噩夢,這樣的噩夢似乎對之前擅長傳統方法的研究人員也產生了影響。在之前不需要深度學習的年代,研究機器學習的人們或多或少都是利用紙筆以及少量的計算機技術實現研究,例如紙筆推導公式,Matlab畫圖,Lingo解方程等。但是隨著深度學習的發展,對於計算機程式語言的瞭解以及計算機組成原理等知識成為了必要手段。現在的研究人員,不會Python,就不可能掌握深度學習框架,不會搭建WIndows和Linux環境,就不能高效地使用顯示卡進行訓練,那麼搭建深度網路就會成為空談。資料處理不掌握Pillow和OpenCV,就不能對網路輸入進行畫素級的控制。特徵圖和參權重十分依賴輸入,如果輸入不進行相應的處理,其得到的效果可能不是很好,例如邊緣問題和噪聲問題都會影響整體的網路效能(因此需要排除外在的干擾因素,DNN不具備這樣的能力,但是可以透過網路引數學習較大程度避免),使得預期效果變差。訓練環節是深度學習較為耗時耗精力的部分,儘管我們有了像ADAM這樣使網路快速收斂的最佳化器,但是其效果可能不如SGD這樣的慢速的隨機梯度下降最佳化器好,除此之外,初始引數設定也需要不斷修改,屬於“煉丹”的過程,即為耗時,但不管如何,沒有前人對這些最佳化器的實現,我們到現在光是使用程式碼實現收斂就非常困難。當然,最後一個就是評價函式的使用,Python的scikit-learn的包整合了統計學習方法和機器學習模型等內容,易安裝和上手,我們也不需要花費很大的工夫自己去實現。

 

         到此,深度學習的基本工作難點都列舉出來,試想如果沒有計算機程式語言快速發展,沒有計算機顯示卡並行處理以及多執行緒處理機制等功能的庇佑,深度學習也許還處於不受關注的階段,只停留於理論,缺乏實驗論證。

 

 

二、深度學習領域


1.
  計算機視覺


(1)目標檢測 
       目標檢測(Object Detection)是當前計算機視覺和機器學習領域的研究熱點之一,核心任務是篩選出給定影像中所有感興趣的目標,確定其位置和大小。其中難點便是遮擋,光照,姿態等造成的畫素級誤差,這是目標檢測所要挑戰和避免的問題。現如今深度學習中一般透過搭建DNN提取目標特徵,利用ROI對映和IoU確定閾值以及區域建議網路RPN統一座標迴歸損失和二分類損失來聯合訓練。

 

(2)語義分割 
       語義分割(Semantic Segmentation)旨在將影像中的物體作為可解釋的語義類別,該類別將是DNN學習的特徵聚類得到。和目標檢測一樣,在深度學習中需要IoU作為評價指標評估設計的語義分割網路。值得注意的是,語義類別對應於不同的顏色,生成的結果需要和原始的標註影像相比較,較為一致才能算是一個可分辨不同語義資訊的網路。

 

(3)超解析度重建 
       超解析度重建(Super Resolution Construction)的主要任務是透過軟體和硬體的方法,從觀測到的低解析度影像重建出高解析度影像,這樣的技術在醫療影像和影片編碼通訊中十分重要。該領域一般分為單影像超分和影片超分,一般在影片序列中透過該技術解決丟幀,幀影像模糊等問題,而在單影像在中主要為了提升細節和質感。在深度學習中一般採用殘差形式網路學習雙二次或雙三次下采樣帶來的精度損失,以提升大圖細節;對於影片超分一般採用光流或者運動補償來解決幀影像的重建任務。

 

(4)行人重識別 
       行人重識別(Person Re-identification)也稱行人再識別,是利用計算機視覺技術判斷影像或者影片序列中是否存在特定行人的技術。其廣泛被認為是一個影像檢索的子問題。核心任務是給定一個監控行人影像,檢索跨裝置下的該行人影像。現如今一般人臉識別和該技術進行聯合,用於在人臉識別的輔助以及人臉識別失效(人臉模糊,人臉被遮擋)時發揮作用。在深度學習中一般透過全域性和區域性特徵提取和以及度量學習對多組行人圖片進行分類和身份查詢。

 

 

2.  語音識別


       
  語音識別(Speech Recognization)是一門交叉學科,近十幾年進步顯著。除了需要數字訊號處理,模式識別,機率論等理論知識,深度學習的發展也使其有了很大幅度的效果提升。深度學習中將聲音轉化為位元的目的類似於在計算機視覺中處理影像資料一樣,轉換為特徵向量,與影像處理不太一樣的是需要對波(聲音的形式)進行取樣,取樣的方式,取樣點的個數和座標也是關鍵資訊,然後對這些數字資訊進行處理輸入到網路中進行訓練,得到一個可以進行語音識別的模型。語音識別的難點有很多,例如克服發音音節相似度高進行精準識別,實時語音轉寫等,這就需要很多不同人樣本的聲音作為資料集來讓深度網路具有更強的泛化性,以及需要設計的網路本身的複雜程度是否得當等條件。

 

3.  自然語言處理 
       自然語言處理(NLP)是電腦科學和人工智慧領域的方向之一,研究能實現人與計算機之間用自然語言進行有效通訊的各種理論和方法。深度學習由於其非線性的複雜結構,將低維稠密且連續的向量表示為不同粒度的語言單元,例如詞、短語、句子和文章,讓計算機可以理解透過網路模型參與編織的語言,進而使得人類和計算機進行溝通。此外深度學習領域中研究人員使用迴圈、卷積、遞迴等神經網路模型對不同的語言單元向量進行組合,獲得更大語言單元的表示。不同的向量空間擁有的組合越複雜,計算機越是能處理更加難以理解的語義資訊。將人類的文字作為輸入,本身就具有挑戰性,因此得到的自然語言計算機如何處理就更難上加難,而這也是NLP不斷探索的領域。透過深度學習,人們已經在AI領域向前邁出一大步,相信人與機器溝通中“信、達、雅”這三個方面終將實現。

 

 

三、深度學習相關框架


       
  武俠小說裡面我們經常可以看到劍法高超的俠客手持長劍,而他們手中的“劍”名稱不一,用法也不同,但卻能憑此一較高下。深度學習也是一樣,需要這樣的“劍”來展現劍招和較量,而這些“劍”就是深度學習框架,沒有這些框架,我們就不能實現深度學習任務。下面對一些框架進行簡單介紹。

 

1.Caffe 
       
  全稱是Convolutional Architecture for Fast Feature Embedding,它是一個清晰、高效的深度學習框架,核心語言是C++並支援命令列、Python和MATLAB介面,然而比較困難的是搭建環境和程式碼編寫,由於Visual Studio版本更迭以及一些相關必備執行庫的編譯過程複雜問題,使得使用Caffe的研究人員相較於之前大幅度減少,而且如果希望模型可以在GPU訓練,還需要自己實現基於C++和CUDA語言的層,這對於程式設計難度很大,更加對入門人員不友好。

 

2.TensorFlow 
       
  一經推出就大獲成功的框架,採用靜態計算圖機制,程式設計介面支援C++,Java,Go,R和Python,同時也整合了Keras框架的核心內容。此外,TensorFlow由於使用C++ Eigen庫,其便可在ARM架構上編譯和模型訓練,因此可以在各種雲伺服器和移動裝置上進行模型訓練,而華為雲的多模態開發套件HiLens Kit已經利用TensorFlow這一特點具備了開發框架的搭載,外部介面的管理和運算元庫封裝等功能,可一鍵部署和一鍵解除安裝。可以說TensorFlow使得AI技術在企業中得到了快速發展和廣泛關注,也使得越來越多的人使用深度學習進行工作。然而,其缺點也很讓人苦惱,一是環境搭建,二是複雜設計,讓研究人員針對不斷改變的介面有心無力,bug頻出。

 

3.PyTorch 
前身是Torch,底層和Torch框架一樣,Python重寫之後靈活高效,採用動態計算圖機制,相比TensorFlow簡潔,物件導向,抽象層次高。對於環境搭建可能是最方便的框架之一,因此現如今基本上很多的論文都是PyTorch實現,程式碼和教程也非常多,對入門人員友好,計算速度快,程式碼易於閱讀。許多企業如今使用PyTorch作為研發框架,不得不說PyTorch真的是一個非常厲害的深度學習工具之一。

 

4.Keras 
       
  類似介面而非框架,容易上手,研究人員可以在TensorFlow中看到Keras的一些實現,很多初始化方法TensorFlow都可以直接使用Keras函式介面直接呼叫實現。然而缺點就在於封裝過重,不夠輕盈,許多程式碼的bug可能無法顯而易見。

 

5.Caffe2 
       
  繼承了Caffe的優點,速度更快,然而還是編譯困難,研究人員少,值得一提的是已經併入了PyTorch,因此我們可以在新版本的PyTorch中體會到它的存在。

 

6.MXNet 
       
  支援語言眾多,例如C++,Python,MATLAB,R等,同樣可以在叢集,移動裝置,GPU上部署。MXNet整合了Gluon介面,就如同torchvision之於PyTorch那樣,而且支援靜態圖和動態圖。然而由於推廣力度不夠使其並沒有像PyTorch和TensorFlow那樣受關注,不過其分散式支援卻是非常閃耀的一點。

 

 

四、深度學習實際應用


1.
  計算機視覺


       
  計算機視覺領域中不得不提到就是人臉識別,其就是利用計算機對人臉影像進行處理分析和理解,進行身份驗證,和上文提到的行人重識別一樣,都需要進行相似度比較和相似度查詢,只不過區別是一個需要人臉資訊(五官,關鍵點),而一個是整個行人資訊(姿態,關鍵點)。現如今的人臉識別大部分都是閉源的,各個大企業都有自己專門的人臉識別系統和服務,開發人員如果 想要使用就需要呼叫介面API獲取人臉的處理結果,自己去完成人臉識別會非常困難。首先就是資料集的獲取,因為人臉資訊是隱私,因此在這樣的領域最好是公司企業級別去做比較合適,在擁有相關法律支援的情況下進行實驗是合理的,當然也有一些公司會提供這樣的人臉識別資源包來幫助開發人員。

 

         除此之外,文字識別(Optical Character Recognition,OCR)也是深度學習中一大應用之一,其就是將圖片或掃描件中的文字識別成可編輯的文字,代替人工錄入,提升業務效率。基本上分為三大類:通用類,證件類和票 據類。通用類識別一般就是識別表格、圖片、手寫圖片,網路圖片和票 據票證中的文字內容,智慧定位座標,進一步進行資料探勘等操作。證件類識別一般指的是身份證、駕駛證、行駛證、護照和營業執照等文字識別,其中暗光、傾斜、過曝光等異常條件下識別是難點,深度學習透過對處於這些條件下樣本進行特徵學習可以有效的分類出正確的資訊。票 據類同樣如此,透過深度學習識別地址和票價等資訊,節省了大量的人工錄入成本,可以達到高精度的識別要求。

 

2.  語音識別和自然語言處理 


       語音識別的應用就更加廣泛了。例如微軟從2012年開始,利用深度學習進行機器翻譯和中文語音合成工作,其人工智慧小娜背後就是一套自然語言處理和語音識別的資料演算法。諸如這樣的人工智慧已經透過更加複雜的網路結構和演算法不斷更新換代,效能也會比之前的效果更好。除了像小娜這樣的人工智慧,華為的錄音檔案識別,一句話識別和實時語音轉寫同樣可以接收來自人類語音資訊,將其轉化為文字以便進行自然語言處理。可以說這二者的結合使得人工智慧與人類交流的距離又被拉進了一步。

 

 

五、總結


       
  現如今,深度學習發展迅速,碩果累累,希望我們每個人可以善用深度學習推動社會教育和科技的發展,體會人工智慧給我們帶來強大效益。

 


https://blog.csdn.net/weixin_42137700/article/details/103887735


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2672458/,如需轉載,請註明出處,否則將追究法律責任。

相關文章