內(nèi)容導(dǎo)讀:切線(xiàn)、導(dǎo)數(shù)、偏導(dǎo)數(shù)、梯度、梯度下降算法,從中學(xué)、大學(xué)數(shù)學(xué)到人工智能,這些概念是一脈相承的。本文將這些知識(shí)進(jìn)行大串聯(lián)。
如果你是個(gè)中學(xué)生,讀完本篇文章,你將會(huì)了解到,中學(xué)里學(xué)習(xí)的數(shù)學(xué)將來(lái)會(huì)在人工智能的哪些方面應(yīng)用。如果你正在從事人工智能的學(xué)習(xí)研究,本文將有助于你系統(tǒng)地重溫人工智能算法及其預(yù)備知識(shí)的前世今生。
(1)中學(xué)數(shù)學(xué)里的相切、切線(xiàn)、導(dǎo)數(shù)等概念。
曲線(xiàn)上某點(diǎn)A的切線(xiàn)是這樣定義的:B是曲線(xiàn)上鄰近A的點(diǎn),以A為定點(diǎn),當(dāng)B點(diǎn)沿著曲線(xiàn)無(wú)限地接近A點(diǎn)時(shí),割線(xiàn)AB的極限位置就是曲線(xiàn)在點(diǎn)A的切線(xiàn),A點(diǎn)叫做切點(diǎn)。下面的GIF動(dòng)畫(huà)動(dòng)態(tài)演示了這一過(guò)程。
我們可以繪制任意光滑曲線(xiàn)上的點(diǎn)的切線(xiàn)。下面幾幅動(dòng)圖展示了圓、拋物線(xiàn)、正弦曲線(xiàn)、復(fù)合函數(shù)曲線(xiàn)上的切線(xiàn)。
有了切線(xiàn)和切點(diǎn),我們還可以求出經(jīng)過(guò)切點(diǎn)的法線(xiàn),它與切線(xiàn)垂直。正弦曲線(xiàn)上任何一點(diǎn)的切線(xiàn)及其法線(xiàn)如下面的動(dòng)圖所示。
曲線(xiàn)上某點(diǎn)的切線(xiàn)的斜率,我們稱(chēng)之為曲線(xiàn)在該點(diǎn)的導(dǎo)數(shù)。當(dāng)然,導(dǎo)數(shù)有其嚴(yán)格的定義,函數(shù)y=f(x)在x0處的導(dǎo)數(shù)定義為:函數(shù)y=f(x)在x0處的函數(shù)值的增量Δy與自變量的增量Δx之比在Δx→0時(shí)的極限,如下圖所示:
當(dāng)然,這個(gè)導(dǎo)數(shù)值與x0處的切線(xiàn)斜率是相等的。
導(dǎo)數(shù)或者切線(xiàn)斜率有什么意義?它反映了當(dāng)自變量變化時(shí),因變量變化的快慢程度。如下圖所示,圖中給出了拋物線(xiàn)上兩點(diǎn)A,B的切線(xiàn),顯然B點(diǎn)的切線(xiàn)更陡峭,則在兩點(diǎn)處,當(dāng)自變量x有相同的變化量Δx時(shí),B點(diǎn)的因變量Δy更大。明白這一點(diǎn)很重要。
在中學(xué)里學(xué)習(xí)的導(dǎo)數(shù),僅限于單個(gè)自變量的函數(shù)。事實(shí)上,許多函數(shù)有2個(gè)或者更多自變量。那么此時(shí)導(dǎo)數(shù)該怎么定義呢?這就要用到偏導(dǎo)數(shù)。
(2)大學(xué)里的偏導(dǎo)數(shù)概念。
為了簡(jiǎn)化問(wèn)題,數(shù)學(xué)家們想了一個(gè)巧妙的方法。例如對(duì)2元函數(shù)f(x,y),把y看作常數(shù),則f(x,y)變成了一元函數(shù),就可以按照中學(xué)里導(dǎo)數(shù)的定義求解出f(x,y)在(x0,y0)處對(duì)x的導(dǎo)數(shù)。同理,將x看作常數(shù),可以求出f(x,y)在(x0,y0)處對(duì)y的導(dǎo)數(shù)。這個(gè)導(dǎo)數(shù)叫作對(duì)x或y方向的偏導(dǎo)數(shù),如下圖所示。
偏導(dǎo)數(shù)用下面的公式來(lái)表示。
偏導(dǎo)數(shù)反映了在(x0,y0)處,f(x,y)在某個(gè)方向上隨該自變量變化而發(fā)生變化的快慢程度。
很容易將偏導(dǎo)數(shù)的概念推廣到多元函數(shù)。
如果給偏導(dǎo)數(shù)添加方向,可以將偏導(dǎo)數(shù)變換為矢量形式。其變換方法為將各個(gè)方向的偏導(dǎo)數(shù)乘以該方向的單位方向向量,如下圖所示:
則該矢量的和稱(chēng)為梯度,如上面的圖所示。反過(guò)來(lái),梯度矢量在各個(gè)坐標(biāo)軸的投影的大小即為在各個(gè)方向的偏導(dǎo)數(shù)。
那么梯度有什么意義呢?根據(jù)前面的介紹,方向?qū)?shù)反映了函數(shù)值在各個(gè)方向上的最大變化率,梯度是各個(gè)方向梯度分量(偏導(dǎo)數(shù)乘以單位方向向量)的合成,則梯度自然反映了函數(shù)的最大變化率及其方向。
理解了這一點(diǎn)非常重要。它有什么用呢?
在人工智能的機(jī)器學(xué)習(xí)中,訓(xùn)練各種機(jī)器學(xué)習(xí)模型時(shí),常常構(gòu)造一個(gè)誤差函數(shù)。為了避免正負(fù)誤差抵消,常取模型輸出與目標(biāo)輸出的誤差平方和構(gòu)造一個(gè)誤差函數(shù),也稱(chēng)為損失函數(shù),如下圖所示。
而這個(gè)誤差函數(shù)中,有一些變量,譬如權(quán)重,是模型訓(xùn)練要優(yōu)化的對(duì)象。
機(jī)器學(xué)習(xí)模型的訓(xùn)練,是一個(gè)反復(fù)迭代更新誤差函數(shù)中的權(quán)重等變量,使誤差下降的過(guò)程。自然,誤差下降的越快,則模型訓(xùn)練用時(shí)越少。
聯(lián)想到函數(shù)沿梯度方向的變化量最大,自然而然的想到,每次迭代都沿梯度方向降低誤差,會(huì)使誤差快速下降??聪聢D,假定它是一個(gè)2元變量的誤差函數(shù)。誤差函數(shù)存在極小值,則顯然沿路徑ABCDE誤差下降到達(dá)最小值的速度最快。
簡(jiǎn)單的講,梯度下降算法基本思想是:在當(dāng)前位置,各個(gè)自變量沿各自的梯度方向變化,得到下一個(gè)位置。下圖是該算法的描述,分別給出了誤差函數(shù)和參數(shù)更新公式。
圖中,a是學(xué)習(xí)步長(zhǎng),用來(lái)控制參數(shù)更新的快慢。
下圖展示了一個(gè)1元誤差函數(shù)梯度下降算法的過(guò)程。
總結(jié):切線(xiàn)、導(dǎo)數(shù)、偏導(dǎo)數(shù)、梯度、梯度下降算法,從中學(xué)、大學(xué)數(shù)學(xué)到人工智能,這些概念層層遞進(jìn),一脈相承。反過(guò)來(lái)看,人工智能的算法并不復(fù)雜,它的基本思想就蘊(yùn)含在中學(xué)、大學(xué)學(xué)習(xí)的數(shù)學(xué)知識(shí)中。