深度學(xué)習(xí)(四):數(shù)值計(jì)算基礎(chǔ)

版權(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(θ)
    θ為 vf '(x0)之間的夾角。在 ||v||和|| f '(x0) ||固定的情況下,當(dāng)cos(θ) = -1時(shí),即 vf '(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) / αxjf(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) dH的一個(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í)指正!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容