12. 深度學習實踐:應用篇

儘管深度學習的目標是設計能夠處理各種任務的算法,但截至目前,其應用仍需一定程度的特化,我們重點關注CV,語音識別,NLP,以及其他商業領域的應用。

1. 大規模深度學習

DL基於聯結主義,大量神經元作用在一起往往能夠表示智能。神經元數量必須很大。相比上個世紀80年代,如今NN的精度和任務複雜度進一步提升,一個關鍵因素是網絡規模的巨大提升。但即便如此,NN的規模也僅和昆蟲級別差不多。


每個神經元的聯結量,已接近高級生物水平(數字表示對應年份的成果)

神經元的數量,達到昆蟲級別,和人類仍差距很大

1.1 快速的CPU實現

傳統的NN用單機CPU訓練(那會兒也沒啥用),如今看來不可取。在大規模使用GPU之前,研究者們通過設計一些特定的CPU上的操作來大大提升計算效率,例如調整定點運算等。

1.2 GPU實現

現代NN的實現基於GPU(圖形處理器/顯卡),其最初是爲圖形應用而開發的專用硬件。視頻遊戲系統的消費市場,刺激了GPU的發展,在遊戲設計上的特性,很好的轉到了NN的計算上來。

1.2.1 爲何能從遊戲轉到NN上?

  • 並行化:視頻遊戲渲染需要快速、並行地執行計算。遊戲環境和角色模型通過3D座標實現,爲了將其轉化爲2D顯示器上的座標,顯卡需要並行地對許多矩陣執行乘法和除法。然後,顯卡繼續在每個像素上執行計算。這些計算是非常簡單的,不涉及CPU常遇到的那種複雜分支運算等。例如,同一個剛體內的每個頂點都會乘上相同矩陣。各個計算過程完全獨立,因此可並處處理。
  • 帶寬高:遊戲視頻的計算過程中,還涉及處理大量內存緩衝,以及描述每一個需要被渲染對象的紋理的位圖信息,這些要求使得顯卡設計時,擁有高度並行特性,和很高的內存帶寬。

NN算法所需要的性能特性是相同的。訓練時通常不涉及大量分支運算和控制指令。計算中大量參數每次迭代都要更新,帶來很大緩衝,內存帶寬常爲瓶頸。NN可被分爲多個單獨的神經元,並獨立於同一層內其他神經元進行處理,帶來並行。因此,GPU很適合NN的訓練。

1.2.2 GPU的火爆

人們發現了GPU用於科學計算,發佈了通用GPU,用顯卡訓練NN的風潮開始了。NVIDIA發佈了CUDA編程語言。軟硬環境的齊備,通用GPU成爲訓練NN的理想平臺。

在GPU上寫高效代碼是一個難題。在GPU上獲得良好性能所需技術和傳統CPU不同,例如GPU中,大多數可寫內存位置並不會被高速緩存,計算某個值兩次往往比計算一次然後從內存中讀取更快。GPU代碼天生多線程,不同線程之間要仔細協調好。GPU中常見設定是一個組中的所有線程都同時執行同一指令,意味着難以執行分支操作。

爲解決這個問題,人們建立了一個包含高效操作的軟件庫,如包含卷積和矩陣乘法,然後從庫中調用所需的操作來建立模型。例如 ML庫 Pylearn2 中的算法均基於調用Theano和cuda-convnet 提供的高性能操作來指定。分層好處在於,簡化對多種硬件的支持,因爲Theano程序可在CPU/Gpu模式下運行,無需改變調用方式。其他還包括TensorFlow,Torch等。

1.2.3 大規模的分佈實現

把訓練或者推斷的任務,分攤到多個機器上實現。

  • 數據並行:每臺機器跑一部分樣本(每臺都部署模型,多個安檢口)
  • 模型並行:每臺機器負責一部分模型(數據在各臺上流動,訓的訓,推的推)

作者簡要提了,不再贅述。

1.2.4 模型壓縮

商業應用中,一個時間內存開銷都小的推斷算法,比訓練算法更爲重要。對不需個性化設計的應用,只需一次訓練,然後成千上萬用戶使用,例如部署到手機上。減少推斷所需開銷的一個策略:模型壓縮,用一個更小的模型取代原始耗時的模型。

瞭解下概念,不再贅述。

1.2.5 動態結構

加速數據處理系統的一種策略:動態結構。給定一個輸入,系統可動態決定運行NN的哪部分。也被稱爲條件計算。由於模型結構中許多部分可能只跟輸入的一小部分有關,只計算那些需要的特徵可起到加速的目的。決策樹模型就是動態結構的一個例子,它是一堆if-else的集合。借鑑過來,訓練一個決策樹,其中每個節點使用NN做出決策(1992年)。

1.2.6 專用硬件實現

自從NN研究以來,硬件設計者已在致力於加速NN的專用硬件實現。如近年來的FPGA的長足發展足以證明(有人用FPGA強大的計算能力來做NN訓練)。在針對諸如手機等低功率設備開發新的硬件設計,並且想要用於DL的一般公衆應用(如語音識別等)時,研究專用硬件能夠進一步推動其發展。2015年研究表明,低精度實現的工作是一個方向。

2. 計算機視覺

視覺是一個對人類以及許多動物毫不費力,但對計算機充滿挑戰的任務。DL中常用標準基準任務包括對象識別和OCR。大多數CV中的深度學習往往用於對象識別或者某種形式的檢測(復現人類能力)。

2.1 預處理

原始輸入往往以深度學習架構難以表示的形式出現。CV通常只需要相對少的預處理。圖像應該標準化,使得像素在相同並且合理的範圍內。將圖像格式化爲具有相同比例,嚴格上說是唯一一種必要的預處理。然而,即使這種操作也並不總是必要的,一些現代CNN接受可變大小的輸入,並可動態調整池化大小以保持輸出大小的恆定。其他CNN模型具有可變大小輸出,尺寸可隨輸入自動縮放,例如圖像逐像素標註模型。

數據集增強,可看做是隻對訓練集預處理的方式,這是減少泛化誤差一種極好方法。測試時可用的一個想法是:將同一輸入的多個不同版本傳給模型,在模型的不同實例上決定輸出,這也可認爲是集成方法。

其他一些預處理需要同時應用於訓練集和測試集,目的是將每個樣本置於更規範的形式,以便減少模型需要考慮的變化量,減少泛化誤差,減小擬合訓練集的模型大小。更簡單的任務可通過更小的模型解決,更簡單的模型泛化能力一般更好。

當使用大型數據集和大型模型訓練時,預處理通常不必要,最好只讓模型學習哪些變化性應當保留。例如,ImageNet數據集上的AlexNet系統(2012年)僅有一個預處理步驟:對每個像素減去訓練樣本的平均值。

  • 對比度歸一化:對比度簡單說就是圖像中亮像素和暗像素之間差異的大小。全局對比度歸一化(Global contrast normalization, GCN)和局部對比度歸一化(local contrast normalization, LCN)
    這裏寫圖片描述
  • 數據集增強:增加訓練集的額外副本,來增加其大小,改進泛化能力。對象識別任務非常適合用這招。

3. 語音識別

自動語音識別,Automatic speech recognition, ASR。

將一段包含自然語言發音的聲學信號投影到詞序列上。傳統做法以20ms爲一幀分割信號,令X={x(1),..,x(T)} 表示語音的輸入向量。令y={y1,..,yN} 表示目標輸出序列。語義識別任務構造函數f ,能夠在給定聲學序列下計算最有可能的語言序列:
這裏寫圖片描述

第一階段:20世紀80年代至2012年,最先進的語音識別系統是HMM-GMM模型。HMM對音素序列建模,GMM對聲學特徵和音素之間的關係建模。儘管其一直在ASR中佔據主導地位,語音識別仍然是NN成功應用的第一個領域。從20世紀80年代末期開始,大量語音識別系統使用了NN。1993年TIMIT成爲音素識別的一個基準數據集。由於語音識別軟件系統中複雜的工程因素,以及HMM效果不錯,工業界沒有迫切轉向NN,更多是用NN爲系統學習一些額外的特徵。

DL時代:2009年開始,研究者搞了個無監督學習的DL方法,基於訓練一個受限的玻爾茲曼機的無向概率模型,對輸入數據建模。無監督的預訓練用來構造一個深度FNN,每一層通過訓練受限的玻爾茲曼機來初始化。此工作將音素識別錯誤率從26%降到了20.7%。緊接着轉向了大規模詞彙語音識別,不僅包含識別音素,還包含識別大規模詞彙的序列。工業界興奮起來。2017年底,用科大訊飛目前的語音識別轉文字,很厲害,1小時音頻轉爲文字,準確率很高,10分鐘即可完成,僅需對部分標點,極個別文字修改下。

20世紀頭十年,基於GMM-HMM的系統幾乎停滯不前。DL掀起了新一波浪潮。2013年由學者提出用CNN來處理,時域和頻域上覆用權重,將輸入頻譜當成一個圖像,一個軸是時間,一個軸是譜分量的頻率。完全拋棄HMM轉向end-to-end的DL系統是研究熱點,2013年,一項突破是訓練了一個LSTM RNN來做,將錯誤率降到了17%的新低。

4. 自然語言處理

Natural Language Processing, NLP。讓計算機能夠使用人類語言。代表性的應用就是機器翻譯,計算機讀取一種人類語言,用另一種人類語言表達出來。計算機可以讀取C語言,JAVA語言等,但自然語言通常是模糊的,不遵循形式化的表述。難就在這裏。

4.1 N-gram

語言模型,定義了自然語言中標記序列的概率分佈。最早成功的語言模型基於固定長度序列的標記模型,稱爲n-gram:

這裏寫圖片描述

該模型定義了條件概率。幾十年來,N-gram模型是統計語言模型的核心模塊,如Jelinek 1980的工作,這是吳軍博士的老師,霍普金斯大學教授。《數學之美》中講到,賈里尼克教授摒棄了前人做法,提出用統計概率模型來解決NLP的問題,取得很大成功。

4.2 神經語言模型

4.3 高維輸出

4.4 結合N-gram和神經語言模型

4.5 神經機器翻譯

之前,大多數機器翻譯系統使用N-gram模型,而且包括最大熵語言模型,給定上下文中常見的詞,預測下一個詞。缺點是需要將序列處理爲固定長度,而RNN允許可變的輸入輸出長度,登上舞臺。

本書作者Bengio在神經語言模型中建樹看起來頗深,文中引用不少他的論著。

NLP涉及較專業領域,不太熟悉,僅作了解。不再贅述。

5. 其他應用

本節介紹其他類型的應用,與前3個任務不同,屬於NN正在擴展的研究領域。

5.1 推薦系統

兩種主要應用:

  • 在線廣告
  • 項目建議

提到了協同過濾,基於內容的推薦系統,強化學習等。

5.2 知識表示、推理和問答

NN在語言模型,機器翻譯和NLP領域很成功,這些嵌入表示關於單個詞語或概念的語義知識。研究前沿是爲短語或者詞語和事實之間的關係開發嵌入。搜索引擎已使用ML來實現這一目的,改進這些更高級的表示任重道遠。

提到了關係、三元組、詞義消歧等。

第二部分小結

這裏寫圖片描述

介紹了涉及深度學習的現代實踐,包括了所有非常成功的方法。這些方法使用代價函數的梯度尋找模型的參數,當具有足夠的訓練數據時,非常強大。

第三部分進入研究領域,旨在:用較少的訓練數據執行更多樣的任務,與第二部分相比,其中挑戰更困難而且遠未解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章