深度學習:技術原理、迭代路徑與侷限

  本文嘗試覆盤梳理深度學習目前的技術要點,深度學習中模型迭代的方向,以及改進後存在的侷限。

  第一部分:深度學習技術基本要素:神經元、神經網絡、分類器、可視化框架

  在深度學習領域,神經元是深度學習的基本單位。

  神經元從數學角度來看,為一個線性函數公式(如下圖神經元裡的公式)+非線性函數(激勵函數)組成。線性函數(包括降維後的線性函數,此處不細展開)用於深度學習神經網絡的模型訓練,這其中,很可能出現欠擬合(欠擬合是指相對簡單的線性函數,分類處理信息時,因為分類標籤數量或準確度不足以做有效區分)。於是,在處理這一個問題時,工程師們人為設置了激勵函數,來平衡線性函數無法解決的問題:激活函數是神經元中非線性部分,用來減低線性部分造成的誤差。

  經由神經元作為節點連接而成的網絡,是神經網絡。最基本的神經網絡,有兩個神經元,分別處在隱含層、輸出層,如下圖:

  最簡神經網絡結構示意圖

  深度神經網絡,是由含多層隱含層神經元組成的神經網絡。具體的原理和實踐會在下文再做展開,展開之前,不妨先了解深度學習技術層面到底解決了什麼問題?

  首先,深度學習與傳統機器學習處理輸入信息方式,有一個根本的差異:

  傳統機器學習主要是通過四種基於人為整理、明確分類維度邏輯關係的方式處理輸入的信息。包括樸素貝葉斯,用概率量化計算模型;決策樹,用合適的維度降低分類信息熵;迴歸模型,建模降低預測值與訓練目標值的差距;SVM(支持向量機),尋找超平面保證分類的置信度最大。

  在深度學習中,有大量的線性與非線性分類器,分類器是自動對信息進行處理,並不需要人為事先明確特徵、標籤分類。

  相對而言,不需要預先準確分類標籤的深度學習解決了傳統機器學習的兩大問題:

  特徵清晰度要求降低。訓練中不再只是在固定明確的標籤下處理,還允許模糊、噪聲存在,對不同特徵偏向的數據敏感程度自動忽略。

  不可分類變為可分。由於沒有明確分類的前提,使得原本大量(人為)無法分類的特徵,可以變成(機器)可分類的特徵,且相對高效地進行。(人為分類總是有侷限的,因為需要明確定義、標籤,一來需要時間、二來需要有效共識的達成)

  接著,可以大致瞭解目前深度學習使用的框架有哪些,比如TensorFlow、Caffe、Chainer、Torch、Theano等。在這裡我想強調的是深度學習中主流選用的框架TensorFlow的部分特性。

  在一個前沿技術領域,一個框架是否值得使用(或者更準確地說,在這裡我想提到的是能否下一步擴大使用範圍),比如,TensorFlow是否值得使用,專業的工程師可能會提到:框架性能、社區活躍度、語言、環境與集群支持等等。就我目前的瞭解到的,有兩個我覺得(面向用戶,很受啟發的)值得關注的地方:一個是使用的社區活躍度,一個是使用界面是否可視化。社群活躍度意味著這個框架使用時,開發者之間的交流與相互促進程度,如果是一個非常小眾、其他開發者不願參與的框架,那麼是不利於下一步擴大使用範圍的。使用界面可視化,TensorFlow 有Tensorboard,Tensorboard支持可視化的訓練網絡過程——事實上,可視化操作,一直是開發者與使用者(無論是相對原創開發者而言後來的開發者、還是普通用戶)之間達成相對簡單溝通的一個非常重要的環節。

  開發者/工程人員致力於用最簡潔的語言(無論是否友好,甚至可能晦澀難懂)來運行工程,但這個結果,很可能是後來者、用戶的“艱難”讀取。這不難讓我想到一個《硅谷》(Silicon Valley,HBO)電視劇中一個情節:Pied Piper最初上線時,用戶界面異常簡陋,男主Richard Hendricks還有他的所有工程界的朋友都完全沒有意識到這一點——他們覺得非常適合自己使用,但作為普通用戶+投資人的女主Monica Hall(本來是對Pied Piper抱著極大期待的)在內測使用時,第一反應是覺得界面一點都不友好,沒有繼續使用的興趣。後來Pied Piper用戶數一直徘徊在萬人左右,沒有上升趨勢,教育用戶後接受使用的人數也沒有明顯提升。

  這個可視化(友好面向用戶的一種)是題外話了,不過回到深度學習,無論是其目前主流選擇的框架(如TensorFlow)還是編程語言(如Python),都是往面向用戶友好/易用的方向行進的。

  上面提到深度學習技術實現的基本元素,包括神經元、激活函數、神經網絡和深度神經網絡,目前深度學習使用的主流框架及其選擇標準。此外,還提到深度學習可以解決傳統機器學習無法突破的“明確的特徵”侷限。

  第二部分:深度學習模型迭代/改進方向,改進後對應侷限

  接下來,回到前面提到的目前深度學習基於上面提到的基本元素,真正落地的深度神經網絡工程原理和實踐。這一部分會按前饋神經網絡、卷積神經網絡、循環神經網絡、深度殘差網絡、強化學習、對抗學習的順序展開。我會比較詳細介紹前饋神經網絡在工程訓練中的流程,其他會把它們分別要解決的問題以及可能的侷限。

  前饋神經網絡

  前饋神經網絡是深度學習中最簡單的神經網絡,一般分為:反向傳播神經網絡(BP網絡),徑向基函數神經網絡(RBF網絡)。在這裡我會相對詳細地梳理這個最樸素的神經網絡是如何落地的。

  首先,我們來看一下前饋神經網絡最基礎的網絡結構,以BP網絡為例,這個我們在上文最基礎的神經網絡中就給出了示意圖。上文的示意圖中,神經元裡的(wx+b)->,其實是簡化了的,具體函數表達式會如下圖:

  神經網絡函數表達式

  這個神經網絡進入工程訓練,需要經過以下三個環節:

  準備樣本(可以是文本、圖片、音頻以及音視頻結合等訓練樣本)

  清洗處理(目的是幫助網絡更高效、準確分類)

  正式訓練(將訓練樣本代入訓練模型,即上述示圖公式)

  在上面三個環節中,正式訓練的時候,訓練過程不斷迭代使得w、b的值越來越適合(擬合)要訓練的模型,為了求出w、b,深度學習中有梯度下降法(迭代法思維),來獲取逼近最優w、b值。再進一步,由於梯度下降法訓練時候要動用比較重的樣本訓練,後來又出現了隨機梯度下降法(即隨機抽樣而不是全部樣本進行處理),來獲得相對較優的w、b值。

  值得注意的是,從梯度下降法到隨機梯度下降,這樣的思維轉化,在深度學習領域是非常常見的:深度學習面向萬級以上的海量樣本,如何使訓練由相對重的模式變成比較輕的模式,從總體到隨機抽樣,是一種解決方案——核心就是在無限成本取得最優到有限成本取得次優之間權衡。

  梯度下降法:求取(w,b)極值,使損失最小化

  另外,在求取w、b值的過程中,無論是取任何值,難以避免產生的是一個誤差值,在訓練過程中,工程師們會引入一個損失函數Loss,而上述的梯度下降求取w、b最優解的同時便是求出最小損失函數的過程。

  在訓練過程中,有兩個主要環節,一個是訓練集訓練,一個是驗證集測試。前者是搭建最合適模型所需,後者是檢驗所搭建模型是否合適使用。在檢驗的過程中,可能會出現過擬合(Overfitting)問題,深度學習中高VC維的分類器,可能使模型過度擬合,降低模型的準確性——驗證集驗證過程中會基於Loss損失函數和準確率(Accuracy)來判斷是否在較優的準確度。在搭建模型完成後,還有第三步,就是用測試集,檢驗搭建模型的效用了。

  以上便是一個基礎神經網絡的流程框架,和在訓練處理中引入的比較核心的思維。

  介紹完最簡單的神經網絡工程流程,接下來,我會針對卷積神經網絡、循環神經網絡、深度殘差網絡要解決的問題和目前的侷限來分享。

  之所以以這個角度,是因為,在學習深度學習的過程中,我們會很容易發現,基於上述提到的最基礎的神經網絡結構,開發者們是一一針對工程實踐時,遇到的瓶頸,找到對應的解決辦法。而這些辦法,慢慢建立成為新的落地模型。所以,我們是可以基於最簡單網絡模型,再進一步瞭解這些更新的神經網絡模型的(它們的特性與功能)。

  這些模型,既可以解決最基本神經網絡無法突破的部分問題,同時,也面臨著其他具體的侷限。

  卷積神經網絡(CNN)

  CNN,也是一種BP網絡,,不過與之前的相比,其神經元可響應一部分覆蓋範圍的周圍單元、通關權值共享的方式使得下一層工作量大大較少(可參照下圖)。而之前提到的是全連接網絡。

  全連接網絡的好處是,最大程度讓整個網絡節點不會漏掉(就像上面的神經網絡示意圖,每一個上一層神經元全部連接到下一層的神經元)。但是,就像上文也提到的,深度學習要處理的是萬級以上的海量數據,要對海量數據進行全連接處理,是一種非常重的模式,訓練過程中,收斂速度會很慢。

  CNN,相較而言,就是比較輕的模式(這裡再一次提到用有限成本處理海量信息的方案了),可以在訓練中,較少更新權重、明顯快於全連接網絡地完成收斂。

  卷積網絡處理數據過程及方式

  CNN的訓練過程如上圖所示,除了一般處理方式(圖中加和處理的模式,即將所有卷積的數據彙總),還有池化層處理的方式。池化層處理,主要分為兩種路徑,一種是取最大值,一種是取平均值。無論是哪種路徑,目的都在於對數據進行又一次特徵提取,減少下一層的數據處理量,同時獲得相對抽象、模糊的信息,提高泛化性(想象一下,目標是找到所有人的共性。那上一步是:只提取一個人的特性,和找到幾個人的共性,哪一種方式的更快、特徵更有效)。

  當然,上面提到的池化層會對信息進行模糊化處理,算是一種有損壓縮。與之對應的,是整個卷積神經網絡,在卷積核對輸入向量進行特徵提取的過程(將高維向量映射成低維向量),其實也是一種有損壓縮。

  到這裡,又可以解答卷積神經網絡可以解決什麼的問題了。在開始的時候,我們提到,CNN神經元通過權值共享加快訓練過程中的收斂速度,現在我們可以發現,CNN可以解決的另一個問題:減少噪聲、訛誤對分類的影響。(當然這個可能需要更具體的工程流程展示才會比較清楚,感興趣的讀者可以進一步瞭解)

  循環神經網絡(RNN)

  它要解決的問題是什麼呢?是上下文場景記憶的問題。

  上文提到的神經網絡模型都不能解決“記憶暫存功能”(對比較遠期輸入的內容無法進行量化,與當前內容一起反應到網絡中進行訓練),循環神經網絡可以解決,在自然語言處理(NLP)中也應用最廣泛。

  在講RNN如何實現上下文場景記憶問題時,無法跳過的一個基礎是:隱馬爾可夫模型(HMM)。隱馬爾可夫模型中,有馬爾可夫鏈。馬爾可夫鏈的核心是:在給定當前知識和信息的前提下,觀察對象過去的歷史狀態,對將來的預測來說是無關的。在RNN中,隱含狀態下的馬爾可夫鏈會處理神經元之間的信息傳遞。

  不過,理論上RNN是行得通的,但在實踐上工程師們發現訓練效果並不佳,所以現在用了LSTM(Long Short-Term Memory,長短期記憶網絡)來取代傳統的RNN。LSTM規避了傳統RNN中遇到的問題,並啟動了一個有效的機制:忘記門(Forget Gate),在訓練過程中LSTM會把有潛在影響的關係學習,忽略無效(不具有影響)的關係。

  LSTM目前應用在翻譯器、聊天機器人、分類器等場景。

  說到侷限性,訓練過程中,目前只支持相對固定、邊界劃定清晰的場景,LSTM對多場景問題也是無能為力的(這也是深度學習所有網絡模型沒有本質突破的問題,觀點取自參考書籍)。

  深度殘差網絡(DRN)。

  它要解決的問題是:傳統深度學習網絡中,網絡到一定深度後,學習率、準確率會下降的問題。目前,DRN在圖像分類、對象檢測、語義分割等領域都有較好的識別確信度。

  強化學習、對抗學習、其他

  強化學習(Reinforcement Learning)和對抗學習,相對來說,都是深度學習比較前沿的部分。

  強化學習,嚴格來說,是AI在訓練中得到策略的訓練過程,強調的是一個過程,而不同於上述各種神經網絡強調的是搭建模型的方式。

  那強化學習要解決的問題是什麼?上面我們提到的神經網絡大部分是在完成分類問題,判斷樣本標籤類別等,那機器如何更智能表現呢?強化學習就作為一種機器自學習的狀態,來解決上面神經網絡相對來說需干預才可學習的侷限。比如在AlphaGo圍棋學習中,就會用到強化學習這樣的自學習過程。

  強化學習模型核心

  強化學習要做的主要有兩步:

  將獎勵、損失定義好

  以主體較低成本不斷嘗試,總結不同狀態(State)下,獎勵(Reward)大的工作方式。(其中一種思路就是上圖提到的馬爾可夫決策過程,可參照RNN部分)

  對抗學習,目前主要是指生成對抗網絡(Generative Adversarial Networks,GAN)。GAN是通過模擬一種數據概率分佈的生成器,使得概率分佈與觀測數據的概率統計分佈一致或者儘可能接近。這個過程涉及納什均衡中的博弈機制,具體包括在訓練中,判別模型(Discriminative Model)——儘可能提取特徵正確率增加的模型,生成模型(Generative Model)——儘可能“偽造”讓判別模型以為是真的結果。

  其他,還有相對更前沿的,包括條件生成對抗網絡(CGAN)、深度卷積對抗網絡(DCGAN)等等。這些前沿方向,對應解決的,包括對抗學習穩定性不高、訓練數據還原度及質量水平等問題。

  到這裡,全文梳理了深度學習的基本元素、目前比較核心的神經網絡模型、較為前沿的訓練模式,以及它們要解決的問題、在實踐中對應的侷限。如果想進一步瞭解深度學習,你下一步可以學習的方向是:在這個框架之下,基於更具體的算法、問題與案例,實踐代碼工程。

  ------

  本文是作者學習《白話深度學習與TensorFlow》一書後的筆記與覆盤,其中算法模型大部分參考此書。

  轉載請註明出處,歡迎交流AI相關,Wechat:Danbchpk

《更多精彩内容,按讚追蹤Gooread·精選!》
喜歡這篇文章嗎?立刻分享出去讓更多人知道~

BY : 36氪

    相關閱讀


您可能感興趣