- 深度學習自然語言處理實戰
- 開課吧組編 張楠 蘇南 王貴陽等編著
- 7230字
- 2021-04-22 17:09:09
1.2 深度學習神經網絡
深度學習是從海量數據中學習的方法,它是從不同層數的神經網絡提取數據特征,層數越高,這些被提取的特征可能越抽象。深度學習中的“深度”就是在這些神經網絡結構中的連續的表示層,模型中包含多少層就是網絡結構的深度。現在的深度學習網絡一般都包含了幾十個甚至上百個表示層,這些表示層組成的神經網絡都會從我們設定的訓練數據集中進行學習。深度學習最終的表現受到的最大制約是輸入神經網絡模型中的數據集,算法的不斷迭代和更新促使我們更好地學習數據集。
深度學習神經網絡是一種計算學習系統,它使用功能網絡來理解并將一種形式的數據輸入轉換為所需的輸出(通常為另一種形式)。人工神經網絡的概念受到了生物學和人類大腦神經元共同發揮作用來理解人類感官輸入方式的啟發。神經網絡只是深度學習算法中使用的許多工具和方法之一。神經網絡本身可以在許多不同的深度學習算法中作為一部分,以便將復雜的數據輸入處理到計算機可以理解的空間中。
使用神經網絡的深度學習算法,通常不需要通過定義對輸入的期望的特定規則進行編程。相反,神經網絡學習算法通過處理訓練期間提供的許多帶標簽的示例(即帶有“答案”的數據)來學習,并使用此答案來學習輸入的哪些特征以構造正確的輸出。一旦處理了足夠多的示例,神經網絡就可以開始處理看不見的新輸入并成功返回準確的結果。程序看到的示例和輸入的種類越多,結果通常就越準確,因為程序是根據經驗學習的。
深度學習的發展受到了神經生物學的啟發,一些核心概念都是從神經生物學中的既有概念得到的。深度學習機制與神經傳導機制的對比如圖1-2所示,但是深度學習只是借鑒了神經生物學的一些靈感,兩者的學習機制并不是相同的,此處需要向讀者進行聲明。目前,神經網絡已應用于許多現實生活中的問題,其中包括語音和圖像識別、垃圾郵件過濾、財務和醫療診斷等。

●圖1-2 深度學習機制與神經傳導機制的對比圖
1.2.1 神經網絡
通過一個示例可以更好地理解深度學習神經網絡這個概念。想象一下嘗試在文本中如何將“我愛你中國”合理地分詞。盡管這對于人類來說很容易理解,但是使用經典方法訓練計算機來進行分辨要困難得多??紤]到“我愛你中國”在文本上的分詞可能存在多種可能性,因此當文本變長時幾乎不可能編寫用于說明每種情況的代碼。但是,使用深度學習,尤其是神經網絡,該程序可以更好地理解文本中的內容。通過使用幾層函數將文本分解為計算機可以使用的數據點和信息,神經網絡可以判斷許多示例中存在的趨勢,并根據文本的相似性對其進行處理和分詞。
圖1-3中,最左側的第一列為輸入層(Input Layer),輸入神經網絡的所有數據都是從這一層輸入的,此處標記為第0層。中間第二列為中間層,但是大部分情況下我們稱之為隱藏層(Hidden Layer)。因為這一層是對輸入的數據進行處理的層,我們只能看到輸入的數據和輸出的數據,看不到數據在這些層中是如何被加工、提取特征并且返回的,類比于肉眼看不到的神經元,所以在這里的所有層都被變為隱藏層,這一層被標記為第1層(層數多時,會有多個隱藏層)。右邊第三列,我們稱之為輸出層(Output Layer),這層將輸出我們需要得到的結果,這層被標記為第2層。

●圖1-3 神經網絡結構圖
一般情況下,神經網絡是從隱藏層開始計算層數的,第0層的輸入層不計入神經網絡層數。這個神經網絡是一個最簡單的兩層神經網絡,后續所有需要應用的深度學習神經網絡都是在此基礎上形成的。
神經網絡可以應用于各種各樣的問題,并且可以評估許多不同類型的輸入,包括圖像、視頻、文件、數據庫等。它們也不需要顯式編程即可解釋這些輸入的內容。由于神經網絡提供了通用的解決問題的方法,因此該技術可以應用的領域幾乎沒有限制。當今神經網絡的一些常見應用包括圖像/模式識別、自動駕駛車輛軌跡預測、面部識別、數據挖掘、電子郵件中的垃圾郵件過濾、醫學診斷和癌癥研究。如今,神經網絡的用途還有很多,并且使用率正在迅速提高。
1.2.2 隱藏層
在神經網絡中,隱藏層位于輸入層和輸出層之間,它的功能是將權重應用于輸入層輸入的數據,并通過激活函數將其轉化為輸出層的數據。簡而言之,隱藏層對輸入到網絡中的輸入執行非線性變換。隱藏的層取決于神經網絡的功能,并且類似地,這些層可以根據其相關的權重而變化。
隱藏層在神經網絡中很常見,但是用法和體系結構經常因情況而異。它是幾乎任何神經網絡的典型部分,可以在其中模擬人腦中所進行的活動的類型。隱藏層中的人工神經元都像大腦中的生物神經元一樣工作——它吸收概率輸入信號,對其進行處理,并將其轉換為與生物神經元軸突相對應的輸出。深度學習模型的許多分析都集中在神經網絡中隱藏層的構建上,設置這些隱藏層以生成各種結果的方法有多種。例如,專注于圖像處理的卷積神經網絡、常用的循環神經網絡以及可直接用于訓練數據的簡單前饋神經網絡。
1.2.3 梯度下降
在使用深度學習神經網絡模型進行訓練時,輸入層輸入的數據經過模型的轉化,會從輸出層輸出一個結果,因此,需要判斷這個結果和真實值之間的差異,一般是差異值越小越好。梯度下降(Gradient Descent)方法可以很好地評估這個差異。
我們以經典的房價預測模型來幫助理解梯度下降算法?,F在,給定歷史房屋數據,需要創建一個模型,該模型在給定房屋面積(1 ft2=0.093 m2)的情況下預測新房屋的價格。
讓我們從繪制歷史住房數據開始,如圖1-4所示。

●圖1-4 房屋面積與對應的房屋價格
現在,使用簡單的線性模型(在歷史數據上擬合一條線)來預測給定面積(x)的新房子(ypred)的價格,如圖1-5所示。

●圖1-5 新房子價格預測圖
如圖1-6所示,點畫線給出了給定房屋面積(x)的預計房價(ypred)。

●圖1-6 給定房屋面積的預計房價
實線提供了歷史數據中的實際房價,yactual和ypred之間的差異(由虛線給出)是預測誤差(E)。
因此,我們需要找到一條具有最佳a、b值(稱為權重)的線,以減小預測誤差并提高預測精度,使其最適合歷史數據。因此,我們的目標是找到最佳的a、b,以最小化房屋實際價格和預測價格之間的誤差。
平方和誤差(Sum of Squared Errors,SSE)=1/2∑(yactual-ypred)2
這是梯度下降出現的地方。梯度下降是一種優化算法,可找到減小預測誤差的最佳權重(W,b)。
現在,讓我們逐步了解梯度下降算法:
(1)使用隨機值初始化權重(W和b),然后計算誤差(SSE);
(2)計算梯度,即當權重(W和b)從其隨機初始化值改變很小的值時,SSE的變化。這有助于我們在使SSE最小化的方向上改變W和b的值;
(3)使用梯度調整權重以達到最佳值,即SSE最小化;
(4)使用新的權重進行預測并計算新的SSE;
(5)重復第(2)步和第(3)步,直到SSE不再顯著減少。
如果線性函數能夠很好地擬合到這個模型的數據,那么,就可以通過這個方法最后得到接近實際房價的預測值。但是在實際操作中,我們發現線性函數所擬合的數據結果往往并不能很好地將預測的結果與實際的結果貼合,因此,我們就需要增加一些權重使得線性函數變為非線性函數 [一般標記為F(x)] 來進行擬合:
ypred=F(x)=w1x1+w2x2+…+wnxn+b=Wx+b
這個非線性的函數可以被看作兩個一維向量W和x的乘積加上一個一維向量B。但是在大多數情況下,由于偏置B的維度遠低于權重W,將其省略后對函數的影響微乎其微,因此,一般情況下可以標記為F(x)=Wx。
梯度下降的函數又稱成本函數(Cost Function),標記為如下的函數:J(W,b)= y-F(x)。成本函數如圖1-7所示。

●圖1-7 成本函數示意圖
1.2.4 激活函數
有一種說法認為:“沒有激活函數的神經網絡實質上只是線性回歸模型”,激活函數在神經網絡中占據著重要的位置。激活函數通過計算加權和并進一步增加偏差來決定是否要激活神經元。激活函數的目的是將非線性引入神經元的輸出中。它可以對輸入進行非線性轉換,使其能夠學習和執行更復雜的任務。
我們在1.2.3節中對神經元進行數據運算時用的是F(x)=Wx,現在以此來進行計算。
第一層的計算結果為ypred(1)=W(1)x+b(1),激活值為A(1)=ypred(1)。
第二層的計算結果為ypred(2)=W(2)(A(1))+b(2),激活值為A(2)=ypred(2)。
將第二層的計算結果展開,可得如下公式:
ypred(2)=W(2)(W(1)x+b(1))+b(2)
ypred(2)=(W(2)W(1))x+(W(2)b(1)+b(2))
令W(2)W(1)=W,W(2)b(1)+b(2)=b,最終輸出
ypred(2)=Wx+b
由上述推演過程可以看出,即使應用了隱藏層,輸出的結果仍會是線性函數。因此可以得出結論:無論神經網絡中連接多少個隱藏層,所有層的行為方式都相同,因為兩個線性函數的組合仍是線性函數。神經元僅憑其線性無法學習。非線性激活函數將使其根據差異誤差進行學習。因此,我們需要激活函數。
以下為目前常用的幾種激活函數,可以根據實際的業務場景選擇合適的激活函數進行使用。
(1)線性函數
公式:y=ax。
無論有多少層,如果使用線性激活函數,模型本質上都是線性的。
取值范圍:(-inf,+inf)。
用途:線性激活函數僅在一個地方使用,即輸出層。
(2)Sigmoid函數
公式:y=1/(1+e-x)。
性質:非線性。請注意,x值介于-2與2之間時,y值非常陡峭。這意味著在該區間x值的一點變化也會導致y值的劇大變化。
取值范圍:(0,1)。
用途:通常在二分類的輸出層中使用,結果為0或1,因為Sigmoid函數的值僅介于0和1之間,如果值大于0.5,則可以將結果預測為1,否則,結果為0。Sigmoid函數如圖1-8所示。

●圖1-8 Sigmoid函數
(3)tanh函數
比Sigmoid函數更好的激活是tanh函數,也稱為雙曲正切函數。它實際上是Sigmoid函數的數學變體版本。兩者是相似的,可以相互推導。
公式:f(x)=tanh(x)=2/(1+e-2x)-1
或者tanh(x)=2sigmoid(2x)-1
取值范圍:(-1,1)。
性質:非線性。
用途:通常用于神經網絡的隱藏層,它的值介于-1與1之間,隱藏層的均值為0或非常接近,因此有助于通過使均值接近0來使數據居中,這使學習下一層變得容易得多。Tanh函數如圖1-9所示。
(4)ReLU函數
ReLU(Rectified Linear Unit,ReLU)函數也稱修正線性單元,是使用最廣泛的激活函數,主要在神經網絡的隱藏層中使用。
公式:A(x)=max(0,x)。如果x為正,則給出輸出x;否則,為0。
取值范圍:[0,inf)。
性質:非線性。這意味著我們可以輕松地向后傳播偏差,并且ReLU函數可以激活多層神經元。

●圖1-9 tanh函數
用途:ReLU函數比tanh函數和Sigmoid函數更加節省資源,因為它涉及更簡單的數學運算。一次只有少數神經元被激活,使得網絡稀疏,從而使其高效且易于計算。ReLU函數如圖1-10所示。

●圖1-10 ReLU函數
(5)Softmax函數
Softmax函數是Sigmoid函數的一種變體,適合處理多分類問題。
性質:非線性。
用途:通常在嘗試處理多個類時使用。Softmax函數會將每個類別的輸出壓縮在0和1之間,并且除以輸出的總和。Softmax函數更適用于分類器的輸出層。
一般情況下,可以根據自己或者其他人的經驗選擇合適的激活函數,如果真的不確定應該使用哪種激活函數,應優先選擇使用ReLU激活函數,因為它具有普適性。如果輸出用于二分類,那么Sigmoid激活函數是很自然的選擇。
1.2.5 權重初始化
權重初始化對深度學習神經網絡最終的收斂有重要影響,合理的權重參數往往可以加速模型的訓練。
(1)權重初始化的原因
假設我們的神經網絡是一個包含9層隱藏層的神經網絡,每個隱藏層包含了2個隱藏單元。網絡的權重初始化設置為Wi(i=1,2,…,9),偏置初始化設置為0,激活函數設置為ReLU激活函數。結構如圖1-11所示。

●圖1-11 9層神經網絡
在網絡進行前向傳播的過程中,如果在第1層輸入的是,那么通過第1層隱藏層后,兩個隱藏單元輸出的值分別是
和
。如果
,那么這兩個隱藏單元的輸出值是一樣的,也就是說這兩個隱藏單元會導致相同的梯度。在訓練過程中,這會產生對稱性的訓練,從而阻止不同神經元學習不同的事物。當
和
太大或者太小時,雖然打破了對稱性,但是將會導致神經元的學習緩慢或者發散。因此,選擇合適的初始化值非常重要。
在這個9層神經網絡中,假設所有的激活函數是線性的(恒等函數),那么輸出的預測值為

其中,L=10,由于從第1層到第9層的神經元都是2個并且接收了2個輸入,所以W1,W2,…,WL-1都是2×2的矩陣。
假設W都被初始化為1.5,如下所示:

對應到式(1.1)中,可以看到這個輸出的激活值a[L]是隨著L呈現指數級增長的,當這些激活值被用于反向傳播時,會導致出現梯度爆炸問題。換言之,受限于參數的損失函數的梯度過大,導致損失函數在其最小值附近振蕩。
假設W都被初始化為0.5,如下所示:

對應到式(1.1)中,可以看到這個輸出的激活值a[L]是隨著L而呈現指數級下降的,當這些激活值被用于反向傳播時,會導致出現梯度消失問題。換言之,受限于參數的損失函數的梯度過小,導致損失函數在達到最小值之前已經收斂。
由此可見,進行合理的參數初始化是非常重要的。
(2)如何找到合適的初始化權重值
為了防止梯度消失或者梯度爆炸,需要堅持以下原則:一是激活值的均值應該是0;二是每一層的激活值的方差應該保持一致。
在這兩個原則下,反向傳播的梯度信號就不會在任意層中被過小或過大的值相乘,從而不會出現梯度消失或者梯度爆炸的情況。
更加具體地,對于L層,它的前向傳播如下所示:
a[L -1]=g[L-1](z[L-1])
z[L ]=W[L]a[L-1]+b[L]
a[L ]=g[L](z[L])
此外,需要遵循以下的公式:
E(a[L-1])=E(a[L])
Var(a[L-1])=Var(a[L])
參數初始化時是為了讓神經網絡在訓練過程中學習到有用的信息,這意味著參數梯度不應該為0。
(3)Kaiming初始化的概念與PyTorch實現
在計算機視覺的深度學習網絡中,大部分情況下使用的激活函數都是ReLU激活函數,在這種情況下一般選擇Kaiming初始化(又稱為He初始化、Msra初始化)。Kaiming初始化是何凱明在推導Resnet網絡的論文中提出的。文中提到了“正向傳播時,狀態值的方差保持不變;反向傳播時,關于激活值的梯度的方差也保持不變?!?/p>
當單層使用ReLU激活函數時,其平均標準差將非常接近輸入連接層數的平方根。代碼如下所示:

輸出的結果如下:

按輸入連接層數的平方根縮放權重矩陣的值將導致每個單獨的ReLU層平均具有1的標準差,如下所示:

輸出結果如下:

由上述所示,將層激活的標準差保持在1附近將使我們能夠在深度神經網絡中堆疊更多的層,而不會出現梯度爆炸或消失的情況。
何凱明團隊據此提出了根據輸入權重初始化的策略,如下所示:
1)在給定層上創建具有適合權重矩陣的維度的張量,并用服從標準正態分布的隨機數字填充它。
2)將每個隨機選擇的數字乘以sqrt(2/n),其中n是從上一層的輸出進入給定層的傳入連接數。
3)偏置張量初始化設置為0。
定義Kaiming初始化函數的代碼如下所示:

Kaiming初始化的均值和標準差:

Kaiming正態分布初始化器:它從以0為中心、標準差為std = sqrt(2/n)的截斷正態分布中抽取樣本,其中n是權值張量中的輸入單位的數量。
Kaiming均勻分布初始化器:它從區間[-sqrt(6/n),sqrt(6/n)]的均勻分布中抽取樣本,其中n是權值張量中的輸入單位的數量。
當訓練超過30層的卷積神經網絡時,Kaiming團隊發現,如果采取Kaiming初始化的策略,這個網絡會有較好的收斂。對于計算機視覺的任務,大部分情況下都是包含了ReLU激活函數和多個深層的層,因此,采取Kaiming初始化是一種比較好的策略。
1.2.6 正則化
正則化一詞的意思是使事情變得規則或可以接受,這就是我們在深度學習中使用它的原因。正則化是一種通過在給定的訓練集上適當擬合函數并避免過度擬合來減少錯誤的技術。正則化可以通過在誤差函數中添加附加懲罰項來調整函數,附加項控制過度波動的函數,使系數無法取極值。在神經網絡中,這種保持檢查或減小誤差系數值的技術稱為權重衰減或權重增加。
我們知道,高斯噪聲是目標變量與實際獲得的輸出值(遵循高斯分布)之間的偏差。這樣做是為了表示任何現實世界數據集的情況,因為不存在沒有任何噪聲的完美數據。那么假設在數據集上的初始條件是目標變量ypred由實際值組成,并加上一些高斯噪聲(Gaussian noise):
ypred=F(x,W)+Gaussian noise
在許多情況下,使用此誤差函數通常會導致過度擬合。因此,引入了正則化項。引入正則化系數后,整體成本函數變為
J(x,W,b)=J(x,W,b)+λφ(W)
其中,λ為控制權重W的系數,可以通過改變λ來達到控制權重大小的目的。
1.2.7 歸一化
當網絡層數比較深時,模型可能對初始隨機權重和學習算法的配置敏感。因為在每次進行小批量處理(mini-batch)之后,當權重更新時,輸入到網絡深層的分布可能會發生變化。這可能導致學習算法永遠追逐運動目標。網絡中各層輸入分配的這種變化稱為內部協變量偏移(Internal Covariate Shift,ICS)。
(1)批量歸一化
批量歸一化(Batch Normalization)是用于訓練深度學習模型的流行歸一化方法之一。通過在訓練階段穩定層輸入的分布,它可以實現對深度神經網絡的更快、更穩定的訓練。為了改善模型中的訓練,重要的是減少內部協變量偏移。批量歸一化在這里通過添加控制層輸入的均值和方差的網絡層來減少內部協變量偏移。
批量歸一化的優點如下:
1)批量歸一化可減少內部協變量偏移(ICS)并加速深度神經網絡的訓練。
2)這種方法減少了梯度對參數或參數初始值的比例的依賴,從而提高了學習率,而沒有發散的風險。
3)批量歸一化可以通過防止網絡陷入飽和模式來使用飽和非線性。
(2)權重歸一化
權重歸一化(Weight Normalization)是在深度神經網絡中對權重向量進行重新參數化的過程,該過程通過將權重向量的長度與其方向解耦來進行。簡單來說,可以將權重歸一化定義為一種改善神經網絡模型權重可優化性的方法。
權重歸一化的優點如下:
1)權重歸一化改善了優化問題的條件,并加快了隨機梯度下降的收斂速度。
2)它可以成功應用于長短時記憶(Long Short-Term Memory,LSTM)等遞歸模型以及深度強化學習或生成模型。
(3)層歸一化
層歸一化(Layer Normalization)是提高各種神經網絡模型訓練速度的一種方法。與批量歸一化不同,此方法直接從隱藏層內神經元的總輸入中直接估算歸一化統計量。層規范化基本上是為了克服批量規范化的缺點而設計的,例如依賴于小批量等。
層歸一化的優點如下:
1)通過在每個時間步分別計算歸一化統計量,可以輕松地將層歸一化應用于遞歸神經網絡。
2)這種方法有效地穩定了循環網絡中的隱藏狀態。
(4)組歸一化
組歸一化(Group Normalization)可以說是批量歸一化的替代方法。該方法通過將通道劃分為組并在每個組內計算均值和方差進行歸一化(即對每個組內的特征進行歸一化)來工作。與批量歸一化不同,組歸一化與批次大小無關,并且其準確性在各種批次大小中都很穩定。
組歸一化的優點如下:
1)它具有取代許多深度學習任務中的批量歸一化的能力。
2)只需幾行代碼,就可以輕松實現。
- WordPress 2.7 Cookbook
- GIMP 2.6 cookbook
- HTML5 Multimedia Development Cookbook
- 好的PPT會說話:如何打造完美幻燈片
- 中文版Illustrator CC 2018基礎培訓教程
- 3ds Max 2015中文版從入門到精通
- Microsoft Dynamics GP 2010 Reporting
- Elasticsearch數據搜索與分析實戰
- 中文版3ds Max 2016/VRay效果圖制作技術大全
- Instant Flask Web Development
- 電腦寫作與定制五筆(第2版)
- Photoshop 2020實戰從入門到精通(超值版)
- 中文版Photoshop 2020基礎培訓教程
- Drupal for Education and E/Learning
- Photoshop CC 2015 標準教程(清華電腦學堂)