關(guān)毅鉻
(華南師范大學(xué)物理與電信工程學(xué)院 廣東 廣州 510006)
回歸分析中,只包括一個(gè)自變量和一個(gè)因變量,且二者的關(guān)系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析.梯度下降法是一種最優(yōu)化算法,常用于機(jī)器學(xué)習(xí)和人工智能中用來遞歸性地逼近最小偏差模型,對(duì)數(shù)據(jù)量大,關(guān)系復(fù)雜,很難得到解析解的函數(shù)關(guān)系來說十分有效[1].它是迭代法的一種,可以用于求解最小二乘法問題.所以我們也可以用梯度下降法來處理呈線性關(guān)系的實(shí)驗(yàn)數(shù)據(jù).
一元線性回歸其實(shí)就是去找到一條直線,這條直線能以最小的誤差來擬合數(shù)據(jù).
如圖1所示,橫坐標(biāo)表示x,縱坐標(biāo)表示y.一元線性回歸要找的就是圖中的這條直線,用y=b+mx表示.但是,所有的點(diǎn)都在這條擬合直線上肯定不現(xiàn)實(shí),所以這些點(diǎn)要盡量靠近這條直線.即去找每個(gè)點(diǎn)和直線的距離|yie=b+mxi|最小的那條線.為了簡(jiǎn)單起見,將絕對(duì)值轉(zhuǎn)化為平方,那么誤差可以表示為
這里i表示第i個(gè)數(shù)據(jù),N表示總的樣本個(gè)數(shù).把這個(gè)損失方程看作是m和b的方程.作為一個(gè)m和b的二次方程,那么求損失函數(shù)最小值的問題就轉(zhuǎn)變成了求極值問題.我們可以用梯度下降法求解m和b的值以確定擬合直線.
圖1 一元線性回歸擬合原理
為了更好地理解梯度下降法,這里把損失函數(shù)想象成一個(gè)碗,而函數(shù)的最小值就是碗底,如圖2(a)所示.不管位于這個(gè)碗的什么位置,只要往下走,也就是往梯度方向走,沿著梯度一點(diǎn)一點(diǎn)滑下去,就能達(dá)到這個(gè)最低點(diǎn).梯度就是下面兩個(gè)式子.
接下來就要定義步長(zhǎng),用來表示每次滑多長(zhǎng),再定義一個(gè)迭代值用來表示滑多少次,這樣就能一點(diǎn)一點(diǎn)地靠近最小值.定義好這兩個(gè)值,計(jì)算機(jī)就可以一邊求梯度,一邊向下滑,去更新m和b,最后得到損失函數(shù)最小時(shí)對(duì)應(yīng)的m和b的值.
也可以這樣理解梯度下降法.如圖2(b)所示,每一個(gè)圈代表一個(gè)函數(shù)梯度,最中心表示函數(shù)極值點(diǎn),每次迭代根據(jù)當(dāng)前位置求得的梯度(用于確定搜索方向以及與步長(zhǎng)共同決定前進(jìn)速度)和步長(zhǎng)找到一個(gè)新的位置,這樣不斷迭代最終到達(dá)目標(biāo)函數(shù)局部最優(yōu)點(diǎn)(如果目標(biāo)函數(shù)是凸函數(shù),則到達(dá)全局最優(yōu)點(diǎn)).
實(shí)現(xiàn)梯度下降法的主要Python代碼如下所示.
def optimizer(starting_b,starting_m,learning_rate,num_iter):
b = starting_b
m = starting_m
for i in range(num_iter):
b,m =compute_gradient(b,m,learning_rate)
return [b,m]
def compute_gradient(b_current,m_current,learning_rate):
b_gradient = 0
m_gradient = 0
N = float(len(data))
b_gradient = -(2/N)*(y-
m_current*x-b_current)
b_gradient = np.sum(b_gradient,axis=0)
m_gradient = -(2/N)*x*(y-
m_current*x-b_current)
m_gradient = np.sum(m_gradient,axis=0)
new_b = b_current - (learning_rate * b_gradient)
new_m = m_current - (learning_rate * m_gradient)
return [new_b,new_m]
求出m和b的具體數(shù)值,即找到了擬合的直線.一般數(shù)據(jù)處理中會(huì)用相關(guān)系數(shù)r檢驗(yàn)兩變量的相關(guān)性,用擬合優(yōu)度R2檢驗(yàn)回歸直線的擬合程度.
相關(guān)關(guān)系是一種非確定性的關(guān)系,相關(guān)系數(shù)是研究變量之間線性相關(guān)程度的量.相關(guān)系數(shù)又叫線性相關(guān)系數(shù),一般用字母r表示,用來度量?jī)蓚€(gè)變量間的線性關(guān)系.當(dāng)r接近于±1時(shí),可以說兩個(gè)變量相關(guān)性比較好.
相關(guān)系數(shù)公式為[2]
擬合優(yōu)度是指回歸直線對(duì)觀測(cè)值的擬合程度.度量擬合優(yōu)度的統(tǒng)計(jì)量是可決系數(shù)R2.R2最大值為1.R2的值越接近1,說明回歸直線對(duì)觀測(cè)值的擬合程度越好;反之,R2的值越接近零,說明回歸直線對(duì)觀測(cè)值的擬合程度越差.
擬合優(yōu)度公式為[3]:
根據(jù)愛因斯坦的光電效應(yīng)方程
可以推導(dǎo)出普朗克常量
根據(jù)實(shí)驗(yàn)數(shù)據(jù)擬合出遏止電壓和頻率的二元一次方程,求出斜率k,便可求得普朗克常量h=ek.
實(shí)驗(yàn)數(shù)據(jù)和運(yùn)用Python實(shí)現(xiàn)梯度下降法的結(jié)果,如表1和圖3所示.
圖3 Python實(shí)現(xiàn)遏止電壓和頻率一元線性擬合
光泵磁共振實(shí)驗(yàn)中,共振條件為
hν=ΔE=gFμBB0
此式可改寫為
顯然,ν和B之間為線性關(guān)系.即使考慮地磁場(chǎng)水平分量和掃場(chǎng)直流分量的影響,擬合直線的斜率也不會(huì)改變.設(shè)擬合的直線方程為
ν=a0+a1B
則斜率
從而
可見只要求出直線斜率a1,代入上式便可求得gF的值.
實(shí)驗(yàn)數(shù)據(jù)和運(yùn)用Python實(shí)現(xiàn)梯度下降法的結(jié)果,如表2和圖4所示.
表2 光泵磁共振測(cè)85Rb朗德因子實(shí)驗(yàn)數(shù)據(jù)
圖4 Python實(shí)現(xiàn)頻率和水平磁場(chǎng)一元線性擬合
馬呂斯定律為Iθ=I0cos2θ.顯然,Iθ和cos2θ為線性關(guān)系.大學(xué)物理實(shí)驗(yàn)中一般用偏振光實(shí)驗(yàn)驗(yàn)證馬呂斯定律.
實(shí)驗(yàn)數(shù)據(jù)和運(yùn)用Python實(shí)現(xiàn)梯度下降法的結(jié)果,如表3和圖5所示.
表3 偏振光實(shí)驗(yàn)驗(yàn)證馬呂斯定律實(shí)驗(yàn)數(shù)據(jù)
圖5 Python實(shí)現(xiàn)Iθ和cos2θ一元線性擬合
本研究在實(shí)現(xiàn)梯度下降法時(shí),設(shè)置步長(zhǎng)為0.001,迭代值為75 000.我們可以根據(jù)實(shí)際情況,調(diào)大步長(zhǎng)或調(diào)小迭代值,從而提高計(jì)算速度.
光電效應(yīng)求普朗克常量中,Excel得出的擬合優(yōu)度R2=0.9899,梯度下降法得到的擬合優(yōu)度R2=0.989 8;光泵磁共振測(cè)朗德因子中,Excel得出的擬合優(yōu)度R2=0.999 7,梯度下降法的擬合優(yōu)度R2=0.999 6;驗(yàn)證馬呂斯定律中,Excel得出的擬合優(yōu)度R2=0.9991,梯度下降法得到的擬合優(yōu)度R2=0.999 0.可見,Excel的R2和梯度下降法的R2結(jié)果基本一致.相關(guān)系數(shù)r和擬合優(yōu)度R2在保留有效數(shù)字時(shí),通常保留4位,而且只舍不入[7].而Excel的結(jié)果默認(rèn)四舍五入,所以兩者結(jié)果其實(shí)是一樣的.
梯度下降法與Excel的最小二乘法相比,梯度下降法需要選擇步長(zhǎng),而最小二乘法不需要.梯度下降法是迭代求解,最小二乘法是計(jì)算解析解.物理實(shí)驗(yàn)數(shù)據(jù)處理中,樣本量不算很大,梯度下降法與最小二乘法的計(jì)算速度大致相同,結(jié)果也相同.采用Python和梯度下降算法對(duì)我們了解深度學(xué)習(xí)和人工智能研究及處理相關(guān)數(shù)據(jù)有啟發(fā)意義.