花書 四 數(shù)值計(jì)算

上溢和下溢

計(jì)算機(jī)中在表示實(shí)數(shù)時(shí)候存在的誤差。
一種近似誤差是舍入誤差。這種舍入誤差指的是,指運(yùn)算得到的近似值和精確值之間的差異。
如果忽略舍入誤差,會(huì)導(dǎo)致某些理論可行的算法在實(shí)踐中也可能會(huì)失效。

文中的兩個(gè)舍入誤差引起的例子,上溢和下溢。
當(dāng)大量級(jí)的數(shù)被近似為∞ 或 ?∞ 時(shí)發(fā)生上溢。
當(dāng)接近零的數(shù)被四舍五入為零時(shí)發(fā)生下溢

例子: softmax 函數(shù)
softMax函數(shù)

softmax函數(shù)在深度學(xué)習(xí)中經(jīng)常用到,必須對(duì)上溢和下溢進(jìn)行數(shù)值穩(wěn)定。

當(dāng)所有的xi都等于某一常數(shù)C, 如果C是很小的負(fù)數(shù),在計(jì)算機(jī)中可能對(duì)其存在舍入誤差直接取0。那么則會(huì)發(fā)生下溢,反之則會(huì)產(chǎn)生上溢。

病態(tài)條件

書中對(duì)病態(tài)條件的描述是

條件數(shù)表征函數(shù)對(duì)于輸入的微小變化而變化的快慢。
1.病態(tài)系統(tǒng)

首先 一個(gè)線性系統(tǒng)是否是病態(tài)的,需要看這個(gè)系統(tǒng)的解受系數(shù)矩陣微小變化的擾動(dòng)情況[1]。
例如現(xiàn)有線性系統(tǒng):
Ax = b, 解方程



很容易得到解為: x1 = -100, x2 = -200. 如果在樣本采集時(shí)存在一個(gè)微小的誤差,比如,將 A 矩陣的系數(shù) 400 改變成 401:



則得到一個(gè)截然不同的解:
x1 = 40000, x2 = 79800.

當(dāng)解集 x 對(duì) A 和 b 的系數(shù)高度敏感,那么這樣的方程組就是病態(tài)的 (ill-conditioned).

2.條件數(shù)

那么,如何評(píng)價(jià)一個(gè)方程組是病態(tài)還是非病態(tài)的呢?在此之前,需要了解矩陣和向量的 norm, 這里具體是計(jì)算很簡(jiǎn)單的 infinity norm, 即找行絕對(duì)值之和最大,舉個(gè)例子:


矩陣范數(shù):

1-范數(shù) :列和范數(shù),即所有矩陣列向量絕對(duì)值之和的最大值

2-范數(shù):譜范數(shù),即A'A矩陣的最大特征值的開平方

∞-范數(shù):行和范數(shù),即所有矩陣行向量絕對(duì)值之和的最大值

F-范數(shù):Frobenius范數(shù),即矩陣元素絕對(duì)值的平方和再開平方

矩陣范數(shù)性質(zhì):
1.||A||>=0;
2.||A||=0 iff A=O (零矩陣); (1和2可統(tǒng)稱為正定性)

3.||aA||=|a| ||A||; (齊次性)
4.||A+B||<= ||A|| + ||B||. (三角不等式)
5.||AB||<=||A|| ||B||. (相容性)

理解了這些概念,下面討論一下衡量方程組病態(tài)程度的條件數(shù),首先假設(shè)向量 b 受到擾動(dòng),導(dǎo)致解集 x 產(chǎn)生偏差:



根據(jù)相容性可得


綜合上面兩個(gè)不等式

可得

如果是矩陣A產(chǎn)生的誤差,同意可得

其中, 條件數(shù)定義為:

書中對(duì)其條件數(shù)定義采用二姐矩陣范數(shù)形式:



所以 當(dāng)這個(gè)數(shù)很大的時(shí)候,矩陣其實(shí)是對(duì)輸入誤差特別敏感的,在實(shí)踐中,該錯(cuò)誤與求逆過程中的本身數(shù)值錯(cuò)誤將會(huì)進(jìn)一步復(fù)合。

基于梯度的優(yōu)化方法

我們把需要最小化或者最大話的函數(shù)成為目標(biāo)函數(shù)或準(zhǔn)則。
當(dāng)我們對(duì)其進(jìn)行最小化時(shí),我們也將其成為代價(jià)函數(shù),損失函數(shù),誤差函數(shù)。

為了求解這個(gè)函數(shù)的最小值,我們引入當(dāng)前點(diǎn)x的導(dǎo)數(shù),導(dǎo)數(shù)表示了,如果縮放輸入的小變化,才能在輸出獲得相應(yīng)的變化。



因此我們可以通過根據(jù)導(dǎo)數(shù)來不斷的往導(dǎo)數(shù)的反方向移動(dòng)一小步來減少f(x)
這種技術(shù)被成為梯度下降。

當(dāng)導(dǎo)數(shù)等于0的時(shí)候,這表示導(dǎo)數(shù)無法提供往哪個(gè)方向移動(dòng)的信息。
這些點(diǎn)被成為臨界點(diǎn)或駐點(diǎn)。
局部極小值點(diǎn)意味著f(x) 小于所有附近的點(diǎn)
局部極大值點(diǎn)意味著f(x)大于所有附近的點(diǎn)
有些臨界點(diǎn)既不是最小值點(diǎn),也不是最大值點(diǎn),這些點(diǎn)被成為鞍點(diǎn)。


使得f(x)取得絕對(duì)的最小值點(diǎn)是全局最小值點(diǎn)。函數(shù)可能只有一個(gè)全局最小點(diǎn)或存在多個(gè)全局最小點(diǎn),還可能存在不是全局最優(yōu)的局部極小點(diǎn)。
我們通常尋找使 f 非常小的點(diǎn),但這在任何形式意義下并不一定是最小


多維度輸入

針對(duì)具有多維輸入的函數(shù),我們需要用到 偏導(dǎo)數(shù)(partial derivative)的概念。
偏導(dǎo)數(shù) : ??xif(x) 衡量點(diǎn) x 處只有 xi 增加時(shí) f(x) 如何變化。
梯度:本意是一個(gè)向量(矢量),是包含所有偏導(dǎo)數(shù)的向量,
是函數(shù)對(duì)每個(gè)因子求偏導(dǎo)得到的列向量,表示著函數(shù)的變化趨勢(shì),
表示某一函數(shù)在該點(diǎn)處的方向?qū)?shù)沿著該方向取得最大值。記為




Jacobin 矩陣:



Hessian矩陣:

梯度下降,最速下降法,牛頓法。

問題一:[2] 為什么沿著負(fù)梯度方向是下降最快的方向?

將目標(biāo)函數(shù) f(x) 在點(diǎn) xk 處泰勒展開


由于我們定義了步長(zhǎng) α>0 ,因此,當(dāng) gTkdk<0 時(shí), f(x)<f(xk) ,即函數(shù)值是下降的。此時(shí) dk 就是一個(gè)下降方向。
但是 dk 具體等于什么的時(shí)候,可使目標(biāo)函數(shù)值下降最快呢?
Cauchy-Schwartz不等式(柯西-許瓦茲不等式)可得

當(dāng)且僅當(dāng) dk=gk 時(shí),等號(hào)成立, dTkgk 最大(>0)
所以 dk=?gk 時(shí), dTkgk 最?。?lt;0), f(x) 下降量最大
所以 ?gk 是最快速下降方向

問題二:梯度法的步長(zhǎng)如何確定?

書中簡(jiǎn)單提供了三種方式:
1.簡(jiǎn)單的取一個(gè)小常數(shù)
2.選擇使方向?qū)?shù)消失的步長(zhǎng)
3.還有一種方法是根據(jù)幾個(gè) ? 計(jì)算 f(x ? ??xf(x)),并選擇其中能產(chǎn)生最小目標(biāo)函數(shù)的 ?。這種策略被稱為線搜索(line search)

line search

對(duì)每一個(gè)line search過程來說,搜索方向 d_{k} 已經(jīng)確定了,所以,在一個(gè)確定的d_{k}上,要找到一個(gè)合適的 \alpha_{k}使得 \phi(\alpha) = f(x_{k}+\alpha d_{k})這個(gè)函數(shù)滿足f(x_{k}+\alpha_{k} d_{k})<f(x_{k}) ,這就是line search的目的。說白了,就是要找到 \phi(\alpha_{k})使 \phi(\alpha) 的函數(shù)函數(shù)值變小。
不變小的話就會(huì)像上圖那樣,不會(huì)精確收斂。
但是,要小到什么程度呢?假設(shè)小到有可能的“最小”,即:

問題三:負(fù)梯度方向真的是最好的方向嗎?

梯度是變化的,而梯度下降在一次迭代的過程中假設(shè)梯度是固定不變的,所謂的梯度方向只是起始點(diǎn)(xk)的梯度方向,并不一定是起始點(diǎn)和終點(diǎn)之間其他點(diǎn)的梯度方向。

所以梯度方向不一定是下降最快的方向
梯度下降的方向不是最快的方向的原因正是由于梯度方向的變化而決定
梯度變化也即是梯度的導(dǎo)數(shù),即函數(shù)的二階導(dǎo)數(shù)來決定的。

[1]病態(tài)矩陣與條件數(shù)
[2][原創(chuàng)] 再談 最速下降法/梯度法/Steepest Descent

?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 不同圖像灰度不同,邊界處一般會(huì)有明顯的邊緣,利用此特征可以分割圖像。需要說明的是:邊緣和物體間的邊界并不等同,邊緣...
    大川無敵閱讀 14,123評(píng)論 0 29
  • 深度學(xué)習(xí)(花書) 第一章 前言 本章節(jié)描述了深度學(xué)習(xí)的發(fā)展歷史,應(yīng)用前景,發(fā)展趨勢(shì),粗略的介紹機(jī)器學(xué)習(xí)如何有別于軟...
    迷途的Go閱讀 789評(píng)論 0 1
  • 筆記參考:https://zhuanlan.zhihu.com/p/21407711?refer=intellig...
    spectre_hola閱讀 1,150評(píng)論 0 1
  • AI人工智能時(shí)代,機(jī)器學(xué)習(xí),深度學(xué)習(xí)作為其核心,本文主要介紹機(jī)器學(xué)習(xí)的基礎(chǔ)算法,以詳細(xì)線介紹 線性回歸算法 及其 ...
    erixhao閱讀 14,209評(píng)論 0 36
  • 一個(gè)父親總是會(huì)讓自己的孩子流淚。 給他更多的機(jī)會(huì)去試煉自己。
    360氟閱讀 207評(píng)論 0 0

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