版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者(huxingfei097@163.com),謝謝合作!
-
上溢和下溢:
?連續(xù)數(shù)學(xué)在數(shù)字計(jì)算機(jī)上最根本的困難是,需要通過有限的位數(shù)來表示無限多的實(shí)數(shù),因此在計(jì)算機(jī)中表示實(shí)數(shù)時(shí),總是會(huì)引入一些近似誤差,當(dāng)許多操作結(jié)合時(shí),可能會(huì)引發(fā)重大問題。
?下溢:由于計(jì)算機(jī)表示數(shù)值的位數(shù)有限,所以一些接近零的數(shù)四舍五入變成了零,稱為下溢。
?上溢:一些數(shù)值過大(∞)或者過小(-∞)時(shí),計(jì)算機(jī)同樣無法精確表示出來,稱為上溢。
?必須對(duì)上溢和下溢進(jìn)行數(shù)值穩(wěn)定(對(duì)分子或者分母或者其中某一項(xiàng)式子做加減運(yùn)算等,使得數(shù)值不再接近零或者趨于無窮)。 -
病態(tài)條件:
?條件數(shù)指的是函數(shù)相對(duì)于輸入的微小變化而變化的程度。輸入發(fā)生了微小擾動(dòng)后,輸出隨即迅速發(fā)生改變,稱之為病態(tài)條件,這種系統(tǒng)對(duì)于科學(xué)計(jì)算來說是有問題的。
?函數(shù) f(x) = A-1x, A∈ Rn * n,其條件數(shù)為:
?????maxi,j| λi / λj |
即最大特征值和最小特征值的比值的絕對(duì)值。當(dāng)該值很大時(shí),矩陣A求逆對(duì)輸入的誤差非常敏感,但這種敏感性是矩陣本身所固有的特性。 -
基于梯度的優(yōu)化方法(梯度下降算法):
?將要進(jìn)行最小化或最大化的函數(shù)稱為目標(biāo)函數(shù)或準(zhǔn)則,當(dāng)我們要對(duì)其進(jìn)行最小化時(shí),也稱為代價(jià)函數(shù)、損失函數(shù)或誤差函數(shù)。
?通常使用上標(biāo) * 表示最小化或最大化函數(shù)的 x 值,如 x* = arg min f(x)。?如上圖所示,對(duì)于函數(shù) f(x),在某一點(diǎn)處(如圖中的A點(diǎn)),可以沿兩個(gè)方向移動(dòng)(斜向上或者斜向下),圖中的紅線是在該點(diǎn)處的導(dǎo)數(shù),由圖中可知,若要最小化函數(shù)需要沿著導(dǎo)數(shù)的反方向(斜向下)進(jìn)行移動(dòng)。具體的數(shù)學(xué)推導(dǎo)過程如下(采用泰勒公式推導(dǎo)):梯度下降
??一階泰勒公式如下:
????f(x) ≈ f(x0) + (x - x0) f '(x0) ??f '(x0) 表示 f(x)對(duì)x求導(dǎo)后帶入x0的值
設(shè)λ為每次更新的步長,v 為(x - x0)的方向,則:
????f(x) ≈ f(x0) + λv f '(x0)
最小化目標(biāo)函數(shù)時(shí),我們希望每次更新 x 使得 f(x)變小,即:
????f(x) - f(x0) ≈ λv f '(x0) < 0
步長λ通常為正值,因此,上式可以簡化為:
????v f '(x0) < 0
v 表示下一步前進(jìn)的單位向量。f '(x0) 表示 f(x)對(duì)x求導(dǎo)后帶入x0的值,在向量求導(dǎo)中該值稱為梯度(關(guān)于向量求導(dǎo)問題,詳細(xì)可參考:矩陣求導(dǎo)術(shù))。進(jìn)一步推導(dǎo)可得:
????v f '(x0) = ||v|| || f '(x0) || cos(θ)
θ為 v 與 f '(x0)之間的夾角。在 ||v||和|| f '(x0) ||固定的情況下,當(dāng)cos(θ) = -1時(shí),即 v與f '(x0)反向時(shí),||v||和|| f '(x0) ||的乘積最小,即f(x) 降低的最多,而f '(x0)的方向?yàn)樘荻?,故沿著?fù)梯度的方向f(x) 局部下降最快。進(jìn)一步推導(dǎo)可得:
?????v = -f '(x0) / ||f '(x0)|| (v是一個(gè)單位向量,方向與f '(x0)相反)
?f '(x0) = 0時(shí),導(dǎo)數(shù)無法提供移動(dòng)方向的信息,該點(diǎn)稱為臨界點(diǎn)或者駐點(diǎn)。局部極小點(diǎn)意味著這個(gè)點(diǎn)的 f(x)小于所有臨近點(diǎn),因此無法通過移動(dòng)無窮小的步長來減小f(x),同樣局部極大點(diǎn)處無法再增大f(x)。有些臨界點(diǎn)既不是最大點(diǎn)也不是最小點(diǎn),稱為鞍點(diǎn)。
?在深度學(xué)習(xí)背景下,要優(yōu)化的函數(shù)可能包含有許多不是最優(yōu)的局部極小點(diǎn)以及鞍點(diǎn),尤其是在多維的情況下,優(yōu)化將變得更困難。因此通常尋找使得 f 非常小的點(diǎn)(并不一定是最小的點(diǎn))。近似最小化 -
Jacobian和Hessian矩陣
?Jacobian矩陣(雅可比矩陣):對(duì)于一個(gè)函數(shù) f:Rm→Rn,定義 f 的Jacobian矩陣 J ∈Rm * n,其中 J 中的每個(gè)元素 Ji,j = α f(xi) / αxj(f(xi) 對(duì)xj求偏導(dǎo))
?Hessian矩陣:定義如下Hessian矩陣主要用來存儲(chǔ)二階導(dǎo)數(shù),等價(jià)于梯度的Jacobian矩陣。在二階偏導(dǎo)連續(xù)的點(diǎn)處交換求導(dǎo)順序,結(jié)果不變即 H i, j = H j, i,Hessian矩陣在這些點(diǎn)處是對(duì)稱的。在深度學(xué)習(xí)背景下,可以認(rèn)為Hessian矩陣是實(shí)對(duì)稱的,可以將其分解為一組實(shí)特征值和一組特征向量的正交基。在特定方向 d 上的二階導(dǎo)數(shù)可以寫成 dTH d。當(dāng) d 是H的一個(gè)特征向量時(shí),這個(gè)方向的二階導(dǎo)數(shù)就是對(duì)應(yīng)的權(quán)值。在其他方向上,方向二階導(dǎo)數(shù)是所有特征值的加權(quán)平均,權(quán)重在 0 到 1 之間,且與 d 的夾角越小的特征向量權(quán)重越大??梢酝ㄟ^二階導(dǎo)數(shù)預(yù)期一個(gè)梯度下降步驟能表現(xiàn)的多好。在當(dāng)前點(diǎn)x(0)的近似二階泰勒公式如下:
???f(x) = f(x(0)) + ( x - x(0))T g + ? ( x - x(0))T H (x - x(0))
具體推導(dǎo)不再展開,和上面使用一階泰勒展開的推導(dǎo)過程很相似。
?當(dāng)Hessian矩陣的條件數(shù)很差時(shí),梯度下降算法也會(huì)表現(xiàn)的很差。 -
約束優(yōu)化
?有時(shí)候,并不需要在 x 的所有可能值下最大化或最小化一個(gè)函數(shù),而是希望在 x 的某些集合 S 中找 f(x)的最大值或最小值,這稱為約束優(yōu)化。
?Karush-kuhn-Tucker(KKT)方法(KKT方法是拉格朗日乘數(shù)法的推廣)。如果通過等式和不等式的形式來描述 S,使用 m 個(gè)函數(shù) g(i)和 n 個(gè)函數(shù) h(j),則 S 可以表示為 S = {x| ?i,g(i)(x) = 0 and ?j,h(j)(x) ≤ 0},其中涉及 g(i)的等式稱為等式約束,涉及 h(j)的不等式稱為不等式約束,為每個(gè)約束引入新的變量 λi和 αj,新變量稱為KKT乘子(類似拉格朗日乘子)。定義廣義Lagrangian函數(shù):?可以通過優(yōu)化無約束的的廣義Lagrangian來解決約束最小化問題(最大化問題可以通過加負(fù)號(hào)轉(zhuǎn)變成最小化問題)。滿足KKT條件的的函數(shù),其最優(yōu)值必定滿足:
?① L 對(duì)各個(gè)x求導(dǎo)均為零
?② h(x) = 0
?③ λi g(i)(x)=0,λi≥0
?其中第③個(gè)式子采用松弛變量構(gòu)造出拉格朗日表達(dá)式求導(dǎo)后得到,此處不再展開,感興趣可以查看這篇文章: KKT條件介紹。上圖為對(duì)滿足KKT條件的優(yōu)化問題化簡過程。
參考資料:
? 《深度學(xué)習(xí)》
本系列相關(guān)文章:
深度學(xué)習(xí)(三):概率與信息論基礎(chǔ)
深度學(xué)習(xí)(二):主成分分析算法
深度學(xué)習(xí)(一):線性代數(shù)基礎(chǔ)
深度學(xué)習(xí)新手,文章若有疏漏,歡迎及時(shí)指正!






