- 深度學習原理與應用
- 周中元 黃穎 張誠 周新
- 3074字
- 2021-04-30 22:05:32
1.1 什么是深度學習
在介紹深度學習之前,我們先來探究一下我們人類是如何進行學習的,這對理解深度學習是有益的。
先從科班的定義開始?!冬F代漢語詞典》第6版是這樣定義學習的:從閱讀、聽講、研究、實踐中獲得知識或技能。
百度百科的定義更為詳細些。學習,是指通過閱讀、聽講、思考、研究、實踐等途徑獲得知識或技能的過程。學習分為狹義與廣義兩種。
狹義:通過閱讀、聽講、研究、觀察、理解、探索、實驗、實踐等手段獲得知識或技能的過程,是一種使個體可以得到持續變化(知識和技能,方法與過程,情感與價值的改善和升華)的行為方式。例如通過學校教育獲得知識的過程。
廣義:是人在生活過程中,通過獲得經驗而產生的行為或行為潛能的相對持久的行為方式。
這兩種定義雖然各不相同,但是,其核心要義都可以抽象成以下描述:通過學習過程,使人類獲得了新的知識或能力。
接下來需要理解的是,什么是機器學習?從本質上講,機器學習就是計算機通過模擬人類的學習行為,使自己獲取新的知識或技能。
可是,計算機再先進也只是機器,而機器是死的,計算機的各種運算都是按照人類事先設定的程序和即時的輸入,通過計算得出結果的。如何讓計算機與人類一樣具有不斷進步的學習能力呢?
計算機發展到今天,所謂人類事先設定的程序,不再是所有指令都已經設定的、如同“鐵板一塊”的程序,而是在程序中設置了很多可以調節的參數,這些參數可以根據以后的輸入不斷地自行修正。修正的過程大致是這樣的:將每次輸入得到的運算結果與預期的結果進行比對,如果發現兩者的差距過大,機器就自動修正參數,然后再進行下一次同樣的比對,直至輸出結果與預期結果的差值滿足預期標準(不大可能與預期結果完全一致)。
同樣可以將上述計算機學習的過程抽象成:機器學習就是通過輸入大量的數據,將實際輸出與預期輸出的比對,逐步修正模型中的各項參數值,使實際輸出與預期輸出逐步接近,最終達到預期效果,從而使計算機達到或超過人類的能力。
其中的關鍵,一是需要大量的輸入數據,二是機器要有足夠的運算能力,可以承擔巨大的運算來完成眾多參數值的修正確定。
如果至此還是覺得有些抽象,下面通過2個例子來說明機器學習的基本方法和過程。
【例1】預測降水量。圖1-1是某市2019年月平均降水量。

圖1-1 某市2019年月平均降水量
現在需要預測2020年的月平均降水量。如何預測會比較準?直接照搬2019年的數據肯定不行,必須找一個數學模型來預測。考慮到測量數據本身有誤差,降水量也會因偶然因素出現偏離度較大的噪聲數據,所以用一條平滑的曲線來擬合圖1-1中在的折線,圖1-2是根據2019年數據用四次多項式擬合出2020年月平均降水量的擬合曲線。

圖1-2 預測某市2020年月平均降水量
這個四次多項式就是我們選用的數學模型,公式為:

其中x=1, 2, …, 12,通過公式(1.1)可以預測某個月的平均降水量,調整其中的5個參數w0~w4以得到不同的擬合曲線,下面的工作是選擇擬合最佳的那條曲線。
現在我們已經選定了這5個參數的值,也就是確定了這個預測的數學模型。怎么評價這個模型預測數據的準確性呢?
我們有2019年的12個月的數據,記為r1, r2, …, r12λ,μ,將x=1, 2, …, 12代入公式(1.1)可以得到2020年12個月的預測數據y1, y2, …, y12,用下面的平方誤差公式來求誤差值:

如果誤差太大,可以調整參數w0~w4的值,使誤差更小,最終達到要求。公式(1.2)稱為參數為w0~w4的誤差函數。
這個例子說明,機器學習通常分以下三個步驟:
(1)基于樣本數據,設計出預測模型,如公式(1.1);
(2)設計一個誤差函數,如公式(1.2),用它可以判斷所用參數是否最優;
(3)通過不斷調試,找到使誤差函數值最小的參數值w0~w4。
這三個步驟稱為“機器學習模型三步驟”。
【例2】檢測患者是否感染了病毒。為了簡單起見,僅檢測患者的2個指標x1, x2,根據這兩個指標檢測出的數值,求出患者感染病毒的概率。這個例子與第一個例子是不同的,第一個例子是預測數值,這個例子是對數據進行分類。
圖1-3標出了患者檢測的兩個指標值散點圖,以及后期檢查確認患者是否已經感染病毒的分類標識。

圖1-3 檢測指標與感染結果散點圖
我們希望能夠根據這兩個指標數值,找出是否感染病毒的計算公式,以便在后續檢查之前可以預先給出是否感染病毒的初步判斷。
可以發現,圖1-3中的兩類數據大致可以用一條直線將其分割開來,如圖1-4所示。

圖1-4 散布數據點的直線分類
這條直線可以用如下公式表示:

在這條直線的右上方,患者感染的概率很高,在直線的左下方感染的概率較低。沿著這條直線的法線方向,患者感染概率越來越高。
為了將這樣的概率值表示出來,需要根據函數f(x1, x2)的值,計算一個感染概率值。在機器學習中,這樣的轉換函數選用sigmoid函數(見圖1-5):


圖1-5 直線分類轉換為感染概率
公式(1.3)完成了“機器學習三步驟”的第一步,公式(1.4)是第二步,最后還有算出使誤差函數取最小值的參數值w0~w2。
那么,機器是如何完成這些公式的運算呢?使用人工神經網絡。
公式(1.3)(1.4)比較簡單,如圖1-6所示,用只含單個神經元的神經網絡就可以完成。

圖1-6 單個神經元的神經網絡
在圖1-6的神經網絡中,首先將兩個輸入值x1, x2分別乘以其連接權重w1, w2,然后相加,再加上閾值w0,得到值f(x1, x2),也就是完成了公式(1.3)的計算。然后再將其輸入sigmoid函數,得出最終一個0~1的值,即公式(1.4)。
如果公式復雜一點,可以增加神經網絡的節點數和層數來完成。
圖1-7是一個兩層的神經網絡,有3個神經元,可以完成下列運算:

圖1-7 兩層3個神經元的神經網絡
f1(x1, x2)=w10+w11x1+w12x2
f2(x1, x2)=w20+w21x1+w22x2
f(f1, f2)=w0+w1f1+w2f2
這個稍微復雜一點的神經網絡已經包含9個參數,可以想象,調整這些參數已經不容易了?,F在所使用的神經網絡具有更多的層數,每一層的節點數也更多,如圖1-8所示,擴充神經網絡都是從這兩個維度來擴展的。

圖1-8 擴充復雜的神經網絡
作為輸入層的節點數非常重要,如果要足夠細致地區分輸入數據的細節特征,就需要有足夠多的節點數。理論上,只要增加這個節點數,就可以描述任何復雜的細節。這與黎曼積分精細分割積分區間的做法是一樣的。
有了以上鋪墊,理解深度學習應該比較容易了。
深度學習是在機器學習基礎上發展起來的更為復雜的、能力更強的方法,它運用的網絡結構層數和節點數比機器學習更多,訓練的數據量更大,輸入數據的特征提取實現了自動化。
深度學習自動提取特征是非常神奇的事,我們將在卷積神經網絡中清楚地看到這一奇跡。
與機器學習相比較,深度學習至少在以下幾個方面與之有明顯的差別:
(1)數據依賴。深度學習必須要有大量數據來支撐完成人工神經網絡的訓練、測試,如果數據量不足,深度學習的效果通常還不如機器學習好;
(2)特征工程。在機器學習中,數據的特征需要人工完成設計、標注,工作量非常巨大,往往需要采取眾包等方式投入大量的人力來完成,而且質量嚴重依賴參與者的經驗和能力。在深度學習中,數據特征是由機器自動完成提取和標注的,所付出的代價是需要大量的數據以及較長的訓練時間;
(3)神經網絡結構。深度學習所采樣的人工神經網絡層數更多,節點數更多,因此網絡所需的訓練時間更長;
(4)硬件依賴。機器學習可以在較低端的機器上運行,但深度學習因為需要完成大量的計算任務,所以必須要有GPU的支持。
當然,深度學習并不是單純地增加網絡層數,而是根據所要處理的問題,對各層的連接處增加了更多的處理機制。深度學習也不是隨意增加網絡節點數,而是為每個節點賦予了更加細致的角色。
深度學習的快速發展正在向更多應用領域拓展。目前應用比較活躍的應用領域包括:無人駕駛汽車、自然語音翻譯、語音識別、智能醫療、智能投顧(智能金融)、圖片識別與分類、人臉識別、目標識別、情感識別、藝術創作(繪畫、作曲、寫詩)、智能法務、機器博弈、預測未來、倉儲自動管控等。