深度學習 – 自適應線性單元
如前所述,在 20 世紀 50 年代,感知器 (Rosenblatt, 1956, 1958) 成為第一個能根據每個類別的輸入樣本來學習權重的模型。約在同一時期,自適應線性單元 (adaptive linearelement, ADALINE) 簡單地返回函數 f(x) 本身的值來預測一個實數 (Widrow and Hoff, 1960),並且它還可以學習從數據預測這些數。
自適應線性單元(Adaline)的激活函數是一個線性函數,該函數的輸出等於輸入,實際上就相當於沒有激活函數,線性激活函數φ(Z)的定義:
φ(Z)=Z=WTX
自適應線性單元的訓練
自適應線性單元的訓練規則
- 權重根據線性激活函數進行更新
- 將樣本數據中的實際輸出與線性激活函數的輸出進行比較,計算模型偏差,然后更新權重。
感知器訓練規則
- 權重是根據單位階躍函數更新的
- 將樣本數據中的實際輸出與模型輸出進行比較,計算模型偏差,然后更新權重。
自適應線性單元與感知器的區別,在與激活函數不同,自適應線性單元將返回一個實數值而不是0,1分類。因此自適應線性單元用來解決回歸問題而不是分類問題。
自適應線性單元訓練時,用於調節權重的訓練算法是被稱為隨機梯度下降(stochastic gradient descent)的一種特例。稍加改進后的隨機梯度下降算法仍然是當今深度學習的主要訓練算法。后面將詳細介紹。
監督學習與無監督學習
監督學習:對有標記(分類)的訓練樣本進行學習,以盡可能對訓練樣本集外的數據進行標記(分類)預測。
監督學習中,所有的標記(分類)是已知的。因此,訓練樣本的岐義性低。
無監督學習:對沒有標記(分類)的訓練樣本進行學習,以發現訓練樣本集中的結構性知識。
這里,所有的標記(分類)是未知的。因此,訓練樣本的岐義性高。
聚類就是典型的無監督學習,經過聚類后的樣本數據就可以用來做監督學習。
目標函數
通常,神經網絡的訓練都屬於監督學習類別,即使樣本數據沒有分類,也可先做聚類處理,把樣本數據分類,然后就可以用來做監督學習了。
在監督學習下,對於一個樣本,我們知道它的特征(輸入)x,以及標記(輸出)y。同時,我們還可以得到神經網絡的預測輸出y^。注意這里面我們用y表示訓練樣本里面的標記,也就是實際值;用y^表示神經網絡的的預測值。我們當然希望預測值y^和實際值y越接近越好。
數學上有很多方法來表示預測值y^和實際值y接近程度,比如我們可以用y^和y的差的平方的21來表示它們的接近程度
我們把
e叫做單個樣本的誤差。至於為什么前面要乘21,是為了后面計算方便。
訓練數據中會有很多樣本,比如N個,我們可以用訓練數據中所有樣本的誤差的和,來表示神經網絡的誤差E,也就是
上式的
e(1)表示第一個樣本的誤差,e(2)表示第二個樣本的誤差……。
上面的也可以表示為和式:
x
(i)表示第i個訓練樣本的特征,y(i)表示第i個樣本的標記,我們也可以用元組(x(i),y(i))表示第i個訓練樣本。y^(i)則是神經網絡對第i個樣本的預測值,φ(z(i))中z(i)表示第i個樣本的加權求和值,φ(z)表示線性激活函數。
對於一個訓練數據集來說,我們當然希望誤差E最小越好。對於特定的訓練數據集來說,(x(i),y(i))的值都是已知的,所以E其實是參數w的函數。
由此可見,神經網絡的訓練,實際上就是求取到合適的權重
w,使差值E取得最小值。這在數學上稱作優化問題,而J(w)就是我們優化的目標,稱之為目標函數,也被稱為代價函數、損失函數。
注意:前面提到,目標函數實際上是差值平方和,從數學上來說,平方與線性激活函數讓目標函數變成可微凸函數。
對於可微凸函數,可以使用一種簡單但功能強大的優化算法,梯度下降法來求取目標函數J(w)的最小值,及其對應的參數w。
深度學習 – 梯度下降法
梯度下降法的主要思想是沿着損失函數的曲線下降,直到到達局部或全局的最小值點。
從數學上來看,梯度是指某點的切線斜率,即導數或偏導數(多元函數),在頂點斜率為0,所以找到斜率為0的點就是極值點。
梯度是函數值相對於自變量的變化率,變化率正負表示梯度方向,變化率為正,自變量變大函數值也變大,變化率為負,自變量變大函數值變小。為了找到函數極小值,自變量應該朝函數值變小的方向邁進,即梯度的反方向。
在每次迭代中,權重更新的步長與梯度方向相反,步長大小由學習率的值決定。
用梯度下降法求取損失函數最小值的步驟
損失函數的偏導數計算
在上面的內容中,我們直接給出了計算偏導數的公式,下面是該公式的推導過程。如不敢興趣可跳過。
從上一章中,我們得知損失函數可以表示為:
梯度下降法的分類
批量梯度下降(Batch gradient descent)
上面使用的梯度下降法,每次都使用全量的訓練集樣本來更新模型參數,被稱為批量梯度下降法。
批量梯度下降每次學習都使用整個訓練集,因此其優點在於每次更新都會朝着正確的方向進行,最后能夠保證收斂於極值點(凸函數收斂於全局極值點,非凸函數可能會收斂於局部極值點),但是其缺點在於每次學習時間過長,並且如果訓練集很大以至於需要消耗大量的內存,並且批量梯度下降不能進行在線模型參數更新。
隨機梯度下降(Stochastic gradient descent)
隨機梯度下降算法每次從訓練集中隨機選擇一個樣本來進行學習。
批量梯度下降算法每次都會使用全部訓練樣本,因此這些計算是冗余的,因為每次都使用完全相同的樣本集。而隨機梯度下降算法每次只隨機選擇一個樣本來更新模型參數,因此每次的學習是非常快速的,並且可以進行在線更新。
隨機梯度下降最大的缺點在於每次更新可能並不會按照正確的方向進行,因此可以帶來優化波動(擾動)。
不過從另一個方面來看,隨機梯度下降所帶來的波動有個好處就是,對於類似盆地區域(即很多局部極小值點)那么這個波動的特點可能會使得優化的方向從當前的局部極小值點跳到另一個更好的局部極小值點,這樣便可能對於非凸函數,最終收斂於一個較好的局部極值點,甚至全局極值點。
由於波動,因此會使得迭代次數(學習次數)增多,即收斂速度變慢。不過最終其會和全量梯度下降算法一樣,具有相同的收斂性,即凸函數收斂於全局極值點,非凸損失函數收斂於局部極值點。
小批量梯度下降(Mini-batch gradient descent)
Mini-batch 梯度下降綜合了 batch 梯度下降與 stochastic 梯度下降,在每次更新速度與更新次數中間取得一個平衡,其每次更新從訓練集中隨機選擇 m, m < n 個樣本進行學習。
相對於隨機梯度下降,Mini-batch梯度下降降低了收斂波動性,即降低了參數更新的方差,使得更新更加穩定。相對於批量梯度下降,其提高了每次學習的速度。並且其不用擔心內存瓶頸從而可以利用矩陣運算進行高效計算。一般而言每次更新隨機選擇[50,256]個樣本進行學習,但是也要根據具體問題而選擇,實踐中可以進行多次試驗,選擇一個更新速度與更次次數都較適合的樣本數。
深度學習 – 學習率
超參數
超參數是開發人員在構建模型時根據經驗預先設置的參數,例如,網絡層數,每層的神經元數量。
超參數不包括訓練中學習的參數,例如,權重與偏置。
感知器和Adaline算法的超參數為:
- 學習率η
- epoch次數
學習率表示學習的速度,影響訓練過程中,權重每次調整的值大小。
epoch是指一個完整的訓練,即訓練集中的數據都跑過一遍。
學習率選擇
實踐中,通常需要做一些實驗,找到一個最適合的學習率η,可以讓訓練過程達到最優收斂。
學習率過小,導致收斂速度慢,步子小速度慢;學習率過大,導致找不到最小值點,步子太大跨過去了。
左邊的圖展示了最優學習率,成本函數可以快速收斂到全局最小值,但是如果學習率太小,收斂過程會變得很慢。
右邊的圖展示了,當選了一個很大的學習率,在調整權重時,有可能會跳過全局最小值。
如前所述,在 20 世紀 50 年代,感知器 (Rosenblatt, 1956, 1958) 成為第一個能根據每個類別的輸入樣本來學習權重的模型。約在同一時期,自適應線性單元 (adaptive linearelement, ADALINE) 簡單地返回函數 f(x) 本身的值來預測一個實數 (Widrow and Hoff, 1960),並且它還可以學習從數據預測這些數。
自適應線性單元(Adaline)的激活函數是一個線性函數,該函數的輸出等於輸入,實際上就相當於沒有激活函數,線性激活函數φ(Z)的定義:
φ(Z)=Z=WTX
自適應線性單元的訓練
自適應線性單元的訓練規則
- 權重根據線性激活函數進行更新
- 將樣本數據中的實際輸出與線性激活函數的輸出進行比較,計算模型偏差,然后更新權重。
感知器訓練規則
- 權重是根據單位階躍函數更新的
- 將樣本數據中的實際輸出與模型輸出進行比較,計算模型偏差,然后更新權重。
自適應線性單元與感知器的區別,在與激活函數不同,自適應線性單元將返回一個實數值而不是0,1分類。因此自適應線性單元用來解決回歸問題而不是分類問題。
自適應線性單元訓練時,用於調節權重的訓練算法是被稱為隨機梯度下降(stochastic gradient descent)的一種特例。稍加改進后的隨機梯度下降算法仍然是當今深度學習的主要訓練算法。后面將詳細介紹。
監督學習與無監督學習
監督學習:對有標記(分類)的訓練樣本進行學習,以盡可能對訓練樣本集外的數據進行標記(分類)預測。
監督學習中,所有的標記(分類)是已知的。因此,訓練樣本的岐義性低。
無監督學習:對沒有標記(分類)的訓練樣本進行學習,以發現訓練樣本集中的結構性知識。
這里,所有的標記(分類)是未知的。因此,訓練樣本的岐義性高。
聚類就是典型的無監督學習,經過聚類后的樣本數據就可以用來做監督學習。
目標函數
通常,神經網絡的訓練都屬於監督學習類別,即使樣本數據沒有分類,也可先做聚類處理,把樣本數據分類,然后就可以用來做監督學習了。
在監督學習下,對於一個樣本,我們知道它的特征(輸入)x,以及標記(輸出)y。同時,我們還可以得到神經網絡的預測輸出y^。注意這里面我們用y表示訓練樣本里面的標記,也就是實際值;用y^表示神經網絡的的預測值。我們當然希望預測值y^和實際值y越接近越好。
數學上有很多方法來表示預測值y^和實際值y接近程度,比如我們可以用y^和y的差的平方的21來表示它們的接近程度
e=21(y–^)2
我們把e叫做單個樣本的誤差。至於為什么前面要乘21,是為了后面計算方便。
訓練數據中會有很多樣本,比如N個,我們可以用訓練數據中所有樣本的誤差的和,來表示神經網絡的誤差E,也就是
E=e(1)+e(2)+e(3)+…+e(n)
上式的e(1)表示第一個樣本的誤差,e(2)表示第二個樣本的誤差……。
上面的也可以表示為和式:
E=e(1)+e(2)+e(3)+…+e(n)=i=1∑ne(i)=21i=1∑n(y(i)–y^(i))2
其中
y^(i)=φ(z(i))=wTx(i)
x(i)表示第i個訓練樣本的特征,y(i)表示第i個樣本的標記,我們也可以用元組(x(i),y(i))表示第i個訓練樣本。y^(i)則是神經網絡對第i個樣本的預測值,φ(z(i))中z(i)表示第i個樣本的加權求和值,φ(z)表示線性激活函數。
對於一個訓練數據集來說,我們當然希望誤差E最小越好。對於特定的訓練數據集來說,(x(i),y(i))的值都是已知的,所以E其實是參數w的函數。
E=J(w)=21i=1∑n(y(i)–y^(i))2=21i=1∑n(y(i)–φ(z(i)))2=21i=1∑n(y(i)–wTx(i))2
由此可見,神經網絡的訓練,實際上就是求取到合適的權重w,使差值E取得最小值。這在數學上稱作優化問題,而J(w)就是我們優化的目標,稱之為目標函數,也被稱為代價函數、損失函數。
注意:前面提到,目標函數實際上是差值平方和,從數學上來說,平方與線性激活函數讓目標函數變成可微凸函數。
對於可微凸函數,可以使用一種簡單但功能強大的優化算法,梯度下降法來求取目標函數J(w)的最小值,及其對應的參數w。