徐龍飛,郁進明
(東華大學 信息科學與技術學院,上海 201620)
機器學習算法在生活工作中的各個領域應用得越來越廣泛。機器學習算法的使用可從大量的數據中發(fā)現一些規(guī)律或模式,從而進行預測和輔助決策。在公共醫(yī)療診斷、金融量化交易等行業(yè),這些算法都起著關鍵的作用。線性回歸算法[1](linear regression,LR)是其中常見的一種算法,具有易于理解,方便執(zhí)行,應用廣泛等特點。在使用LR時需要確定函數主體,主體之一便是優(yōu)化器即梯度下降方法,不同的優(yōu)化器對模型性能的影響不同。盡管LR模型使用廣泛,但在日常使用時,難免受到一些干擾數據的影響,而且選擇不同的優(yōu)化器對模型性能也會產生較大影響。
為此,文中通過使用Python語言和TensorFlow[2]框架在加入高斯噪聲的場景下,比較不同優(yōu)化器的損失函數和計算時間,以選擇合適的優(yōu)化器來提高LR模型性能。
線性回歸模型的基本原理是通過訓練數據來學得一個線性模型以盡可能準確地預測輸出值。在LR模型中,自變量輸入和因變量輸出可以分成連續(xù)型和離散型。在LR模型中,如果輸入和輸出是一對一的關系,數學上表現為一個一元函數,這樣的模型稱為一元LR模型。如果回歸分析中包括兩個或兩個以上的自變量,這些變量符合多元多次函數,那么這樣的回歸分析則稱為多元線性回歸分析。如果從二維來看,一元線性模型對應于一條直線,多元線性回歸對應于一條曲線。如果從三維空間來看,一元線性模型對應于一個平面,多元線性回歸對應于一個超平面。使用LR模型,分為以下幾步:
(1)根據場景選擇自變量個數以及次數,針對不同的問題和任務可以產生不同的預測或分類效果。
(2)確定一個衡量標準,即選擇損失函數[3](loss function),不同的模型在不同的損失函數下表現的性能可能不一樣,所以需要依據情況來定。文中選擇均方誤差作為損失函數。
(3)通過改變優(yōu)化器尋找該場景下性能最優(yōu)的模型,文中比較了批量梯度下降、隨機梯度下降和動量梯度下降。
(4)對最優(yōu)的模型進行測試。
一元線性回歸分析中,輸入和輸出呈一條直線關系。線性回歸模型簡單,可解釋性高,形式簡單,易于建模,在一定程度上可以防止過擬合,用途廣泛,可作為各個系統(tǒng)的基線模型。一元線性回歸是很多其他非線性模型發(fā)展的基礎。在LR模型的基礎上,通過增加層次結構,使用低維數據映射到高維的方法[4],可以生成許多預測和分類功能強大的非線性模型。一元LR線性模型的公式如下:
(1)
多元線性回歸的輸入和輸出呈非線性關系,有多個輸入,且輸入可以為高次方。多元線性回歸模型的非線性特點在很多實際場景下的性能表現要優(yōu)于一元線性回歸模型。公式如下:
(2)
在確定模型的情況下,對于線性回歸模型,需要求解模型的參數。先從數據中獲取n組實際值(x1,y1),(x2,y2),…,(xn,yn),對于平面或曲面中的這n個點,理論上可以使用多條曲線來擬合,但不同的模型擬合的效果不一樣,所以選用模型時盡量使擬合的效果最佳。直觀上看,當擬合的曲線位于樣本數據的中心位置時擬合效果最好??梢远x一些標準來確定擬合效果的好壞。文中使用的LR模型的目標函數為輸入與輸出的殘差平方和,如式(3)所示,可以防止殘差和互相抵消的情況。該評價標準可以有效地計算出實際值和預測值之間的誤差,也可以減少計算量[6]。
(3)
(5)
求得參數之后就可以在訓練集上進行測試,但此時的模型可能會有過擬合的情況,解決的一般辦法是在模型中加入正則項。
正則化是一種回歸的形式,它將系數估計朝零的方向進行約束、調整或縮小。也就是說,正則化可以在學習過程中降低模型復雜度和不穩(wěn)定程度,從而避免過擬合的危險。式(6)則是加入L1正則項后的模型。這一方法通過添加收縮量調整殘差平方和?,F在,系數要朝最小化上述函數的方向進行調整和估計。其中λ是調整因子,它決定了要如何對模型的復雜度進行懲罰。模型復雜度是由系數的增大來表現的。如果要最小化上述函數,這些系數就應該變小。這也就是L2正則避免系數過大的方法。
(6)
式(7)則是加入L2正則后的模型。其中需要最小化上述函數。很明顯,這種變體只有在懲罰高系數時才有別于L1正則。它使用平方項來代替絕對值作為懲罰項。換個角度看,上述方法L1正則可以被認為是求解一個方程,其中系數的平方和小于等于s。L2正則可以看作系數的模數之和小于等于s的方程。其中s是一個隨收縮因子λ變化的常數。
(7)
L1與L2正則都要在平方誤差項與正則化項之間折中,它將把不重要的預測因子的系數縮小到趨近于0,但永不達到0。也就是說,最終的模型會包含所有的預測因子。在L1正則中,如果將調整因子λ調整得足夠大,L1正則可以迫使一些系數估計值完全等于0。因此L1可以進行變量選擇,產生稀疏模型。于是求解L1正則的結果時得到了僅采用一部分初始特征的模型,可以認為使用L1正則的模型時選擇特征的步驟和模型訓練的步驟合在了一起。L1正則的優(yōu)點是可以使數據稀疏,計算量較小,具有較好的可解釋性,但防止過擬合的效果不強,而L2正則可以防止過擬合,但計算量較大。
彈性網絡結合了L1正則和L2正則的特點,如式(8)所示,在絕對值和平方項前加入和為1的系數,可以調節(jié)兩個正則項的比例。彈性網絡[8]的特點是系數之間不會交叉,隨意計算的系數擬合程度較高,而且收斂速度較快。
(8)
彈性網絡是一種結合了L1、L2正則作為先驗正則項的LR模型。這種組合允許學習到一個只有少量參數是非零稀疏的模型[9],保留了L1和L2的特點,彈性網絡是一不斷迭代的方法。關鍵在于選擇λ的大小,如果λ較大,那么意味著系數較小,數據的方差變小,此時可以防止過擬合,如果λ的值選擇不合理,就會忽略掉數據的部分特征,導致擬合效果變差,所以λ值的選擇會直接影響彈性網絡的擬合效果。
高斯噪聲[10]出現在生產和生活中的方方面面,是一種無法避免的干擾,比如磁場的變化,電流的流通與關閉,都會產生高斯噪聲。文中使用高斯噪聲可以很好地模擬日常使用模型出現的各種干擾。高斯噪聲的特點是其概率密度服從標準正態(tài)分布[11],高斯噪聲的特性可以用式(9)表示。
(9)
其中,μ表示x的平均值或期望值,?表示x的標準差[12]。正態(tài)分布的一個特點是關于x=μ對稱。正態(tài)分布曲線有兩個拐點,分別分布在離均值一個標準差的位置,為x=μ-?和x=μ+?。由于對于離期望值好幾個標準差范圍之外的取值,它們的概率趨近于0。
梯度下降法[13]是一種最優(yōu)化算法,可以求解到函數的局部極值。梯度下降法也稱為最速下降法。要使用梯度下降法找到一個函數的局部極小值,需要在函數上找到當前點對于當前梯度的反方向,同時行進規(guī)定步長距離來進行迭代搜索[14]。所以梯度下降法有助于求解某個函數的極小值或者最小值。對于n維問題求最優(yōu)解,梯度下降法是最常用的方法之一。
梯度下降的公式[15]如式(10)所示。起始時導數為正,α減小后并以新的α為基點重新求導,一直迭代就會找到最小的α,若導數為負,α就會不斷增加,直到找到使損失函數最小的值。需要注意的是步長θa的大小,如果θ太小,則會迭代很多次才找到最優(yōu)解,若θ太大,可能跳過最優(yōu),從而找不到最優(yōu)解[16]。另外,在不斷迭代的過程中,梯度值會不斷變小,所以α的變化速度也會越來越慢,所以不需要使速率α的值越來越小,當梯度減小到某個值時,如果繼續(xù)進行迭代計算,這時梯度的變化值會很小??梢圆捎迷O定閾值的方法,只要變化小于該閾值,就停止迭代,那么最后得到的梯度可以認為是最優(yōu)值。
(10)
其中θ為學習率,所以在使用梯度下降算法的時候,需要進行一些調優(yōu)策略[17]。如果學習率過大,那么每次迭代參數時變化比較大,α有可能不會收斂;如果學習率過小,則每次迭代更新的變化比較小,就會導致迭代所耗的時間太長,導致α很長時間內都無法收斂到某個值。
批量梯度下降[11]的公式如下:
(11)
批量梯度下降法[18]使用時每次學習都使用整個訓練集,所以每次迭代后的梯度都是往最優(yōu)解的方法行進,直到收斂于最優(yōu)解所在的點,如果使用的是凸函數,那么最后求得的梯度就是全局最優(yōu)的[19],如果使用的是非凸函數,那么梯度可能會是局部的最優(yōu)值。BGD容易得到最優(yōu)解,但是由于每次考慮所有樣本,速度很慢,學習所需的計算時間太長,同時會占用大量內存。
隨機梯度下降的公式如下:
(12)
隨機梯度下降[20]的特點是每次隨機計算一個樣本,迭代速度快,但不一定每次都朝著收斂的方向。對于樣本數量非常之多的情況,BGD算法會非常耗時[21],因為每次迭代都要遍歷所有樣本,可選用SGD算法,盡管SGD的迭代次數比BGD大很多,但一次學習時間非???。SGD的缺點在于每次更新時不一定會按照正確的梯度進行,更新后的參數方差可能較大,從而導致?lián)p失函數值波動范圍大。如果目標函數有谷底區(qū)域,SGD會使優(yōu)化的方向從當前的局部極小值點調整到另一個更優(yōu)的局部極小值點,如果使用的不是凸函數,那么最后α可能收斂到某個局部最優(yōu)的極值點。
Adam優(yōu)化算法[22]是在SGD的基礎上發(fā)展而來,廣泛使用于計算機視覺和自然語言處理及其他的實際場景中。Adam算法的特點是學習率會在計算過程中不斷改變來適應權重的改變。Adam算法使用的是梯度的一階矩估計以及二階矩估計的大小值,從而在參數發(fā)生改變時,計算出適合改變后參數的學習率,可以為不同的參數算出各自的自適應性學習率,Adam算法計算高效,而且所需的計算內存較少。Adam算法的更新規(guī)則如下:
(13)
根據Adam算法的特性,在很多實際場景中Adam算法對模型有很好的優(yōu)化能力。
文中使用的操作系統(tǒng)為Win10,編程語言為Python,深度學習框架為TensorFlow,硬件設備為8 GB內存,Intel i5處理器。
實驗流程如圖1所示。本次實驗過程中使用的具體的多元線性回歸模型是y=x3×0.7+0.6,然后對數據進行預處理和添加噪聲,并選擇不同的優(yōu)化器進行迭代,優(yōu)化器的學習率設為0.5,迭代次數為500次。
實驗使用Python編程語言,使用的機器學習框架為TensorFlow,還使用了numpy和matplotlib程序庫,用來進行數組和矩陣的計算以及對實驗結果進行畫圖。
圖1 實驗流程
偽代碼如下所示:
Import numpy,tensorflow,matplotlib
x1=random.normal
y1=x1**3 *0.7+0.6+random.normal(0,0.5)
End
W=random_uniform([1],-1.0,1.0))
loss=reduce_mean(square(y_p-y_a))
for i 1∶500
Optimizer1=train.Optimizer(0.5)
Optimizer2=train.GradientDescentOptimizer(0.5)
Optimizer3=train.AdamOptimizerOptimizer(0.5)
課后,為了讓青少年能夠充分利用課后時間開展文化活動,學校調整放學時間,留有充分時間保證課后家長可以帶領孩子進入博物館或圖書館,開展相應活動。此外,馬克龍政府正在積極進行圖書館的開館時間改革,確保孩子和家長能夠在課后進入圖書館閱讀和學習。
End
Print W,b,loss
Plot
實驗中使用的高斯噪聲的圖像如圖2所示,添加的高斯噪聲的均值為0,標準差為0.2。
如圖3所示,在多元線性回歸模型y=x3×0.5+0.7中加入高斯噪聲后的輸出數據分布如圖3所示??梢钥闯黾尤敫咚乖肼暫蟮哪P褪艿礁咚乖肼暤挠绊懀P偷妮斎牒洼敵鲆呀洸辉俪尸F線性特性。
圖2 高斯噪聲波形
圖3 加入高斯噪聲后的輸出數據圖像
本次實驗中在使用不同優(yōu)化器進行500次迭代后的損失函數與計算時間數據如表1~表3中所示。使用批量梯度下降得出的損失函數和計算時間如表1所示。
表1 BGD的損失函數與計算時間
從表1可以看出,批量梯度下降在迭代到215次時系數W和損失函數loss已經穩(wěn)定,最終的損失函數為0.089 965 21,計算時間為2.243 9 s。
使用隨機梯度下降得出的損失函數和計算時間如表2所示。
表2 SGD的損失函數與計算時間
從表2可以看出,隨機梯度下降在迭代到157次時系數W和損失函數loss已經穩(wěn)定,最終的損失函數為0.089 965 2,計算時間為1.938 8 s。
使用Adam優(yōu)化器得出的損失函數和計算時間如表3所示。
表3 Adam的損失函數與計算時間
從表3可以看出,Adam優(yōu)化器在迭代到109次迭代時系數W和損失函數loss已經穩(wěn)定,最終的損失函數為0.089 965 21,計算時間為1.921 8 s。
從以上實驗結果可以看出,在LR模型中加入高斯噪聲后,由于Adam算法的一些特性,使得訓練的迭代次數少于BGD和Adam優(yōu)化器,且損失函數值最小。圖4是使用Adam擬合后的圖像,可見使用Adam算法后的LR模型可以比較好地擬合原始輸出圖像。
圖4 Adam優(yōu)化器擬合圖像與原始輸出圖像
本次實驗的結論是在加入高斯噪聲后,使用Adam的LR模型性能優(yōu)于使用BGD和SGD的LR模型。
LR模型在使用過程中會受到各種干擾的影響,可以使用高斯噪聲來模擬干擾的影響。
研究了在加入高斯噪聲的情況下如何選擇優(yōu)化器使得LR模型的性能最優(yōu)。通過比較不同優(yōu)化器的損失函數和計算時間,得出使用Adam優(yōu)化器可以有效提高模型性能。同時,該方法仍然有需要完善的地方,比如可以使用混淆矩陣或海明距離等指標來評價優(yōu)化器的性能,這些也是接下來需要深入研究的方向。