您當前的位置:首頁 > 攝影

數學基礎之梯度

作者:由 FlyAI 發表于 攝影時間:2022-09-20

數學基礎之梯度

Fly-AI競賽服務平臺 flyai。com

在開始學習之前推薦大家可以多在

FlyAI競賽服務平臺

多參加訓練和競賽,以此來提升自己的能力。FlyAI是為AI開發者提供資料競賽並支援GPU離線訓練的一站式服務平臺。每週免費提供專案開源演算法樣例,支援演算法能力變現以及快速的迭代演算法模型。

本文是對網上學習資料的整理與記錄(主要來自CSDN,連結附在最後的參考資料部分),方便自己日後的複習鞏固,也分享熱愛知識的網友們。

對於機器學習中最重要的數學概念之一

梯度

的解讀,主要從《高等數學》和《微積分》中的定義與理解進行剖析,並增加了另一個角度泰勒級數,來解析為什麼函式上的一點沿著梯度的方向具有最大的變化率,這是機器學習最佳化演算法——梯度下降法的核心思想。

1|0導數

導數,反映的是函式y=f(x)y=f(x)在某一點處沿xx軸正方向的變化率。公式定義如下:

數學基礎之梯度

再強調一遍,導數f′(x)f′(x)是函式f(x)f(x)在xx軸上某一點處沿著xx軸正方向的變化率 / 變化趨勢。

直觀地看,也就是在xx軸上某一點處,如果f′(x)>0f′(x)>0,說明f(x)f(x)的函式值在xx點沿xx軸正方向是趨於增加的;如果f′(x)<0f′(x)<0,說明f(x)f(x)的函式值在xx點沿xx軸正方向是趨於減少的。用圖說話,則

數學基礎之梯度

圖中的綠色曲線表示函式,,點P和點M是曲線上的兩點。藍色直線為函式曲線在P點的切線,點P橫座標(自變數)為xx,點M橫座標為x+Δxx+Δx,則圖中的Δx,Δy,dx,dyΔx,Δy,dx,dy等符號的意義及關係如下:

ΔxΔx:xx的變化量;

dxdx:xx的變化量ΔxΔx趨於00時,則記作微元dxdx;

ΔyΔy:Δy=f(x0+Δx)−f(x0)Δy=f(x0+Δx)−f(x0),是函式的增量;

dydy:dy=f′(x0)dxdy=f′(x0)dx,是切線的增量;

當Δx→0Δx→0時,dydy與ΔyΔy都是無窮小,dydy是ΔyΔy的主部,即Δy=dy+o(Δx)Δy=dy+o(Δx)。

可見,導數是代表函式(曲線)的斜率,是描述函式(曲線)變化快慢的量。同時曲線的極大值點也可以使用導數來判斷,即極大值點的導數為00,此時斜率為零(但反過來一階導數為零的點不一定是極值點可能是駐點,這時需要根據二階導數判斷),那麼導數就為我們求解函式的極值提供了可能,當然我們現在說的導數是一元導數即f(x)f(x),只具有一個自變數xx,因此很容易求導。

2|0多元函式與偏導數

2|1多元函式

大多數情況下,決定因變數的因素可能並非只有一個。以某個地區的房價為例,導致房價變動的因素可能包括面積,學區劃分,地段,交通,城市規模等等。每個因素都可以作為自變數,自變數不為1個的函式叫做多元函式。在這種多因素的情況下,如果想知道哪個因素對房價變動的影響最大(所謂的影響最大就是這個因素能使房價函式的變化率最大),很顯然,可以用求導實現。那麼針對多變數的情況,例如f(x,y)f(x,y),就要引入偏導數的概念了。

2|2偏導數

多元函式有多個自變數,每個自變數可以獨立自由變化,那麼它的函式值的變化率該如何得到呢?這時候就可以採用學過的一個實驗方法——控制變數法。

還是以房價為例,如果房價和麵積,交通,學區三個因素有關,area=f(x,y,z)area=f(x,y,z),xx代表面積,yy代表交通,zz標識學區。

可考慮先把交通yy和學區zz固定,考慮面積xx的微小變化對房價產生的影響,表示成:∂f(x,y,z)x∂f(x,y,z)x。同理,分別再把面積xx和交通zz固定,以及面積xx和學區yy固定在某一個點,得到分別對於交通和學區的變化率:∂f(x,y,z)y∂f(x,y,z)y 和 ∂f(x,y,z)z∂f(x,y,z)z。

這種在多元函式中,將其他變數看做常數,按照求導法則,計算分別針對某個變數的導數,叫做偏導數。偏導數每次只使一個自變數發生變化,所以計算過程和計算一元函式的導數過程無異。其物理意義就是檢視這一個變數在其他情況不變的情況下對函式的影響程度。

比如函式f(x,y)=x2+y2+2xy+3yf(x,y)=x2+y2+2xy+3y,求偏導的結果為:∂f(x,y)x=2x+2y∂f(x,y)x=2x+2y 和 ∂f(x,y)y=2y+2x+3∂f(x,y)y=2y+2x+3。

偏導數的公式定義如下:

數學基礎之梯度

不難看到,偏導數與導數本質是一致的,都是當自變數的變化量趨於0時,函式值的變化量與自變數變化量比值的極限。直觀地說,偏導數也就是函式在某一點上沿座標軸正方向的的變化率。區別在於:

導數,指的是一元函式中,函式y=f(x)y=f(x)在某一點處沿xx軸正方向的變化率;

偏導數,指的是多元函式中,函式y=f(x1,x2,…,xn)y=f(x1,x2,…,xn)在某一點處沿某一座標軸(x1,x2,…,xn)(x1,x2,…,xn)正方向的變化率。

3|0方向導數

方向導數的公式定義:

數學基礎之梯度

在前面導數和偏導數的定義中,均是沿座標軸正方向討論函式的變化率。那麼當我們討論函式沿任意方向的變化率時,也就引出了方向導數的定義,即:函式上某一點在某一趨近方向上的導數值。

通俗的解釋是:我們不僅要知道函式在座標軸正方向上的變化率(即偏導數),而且還要設法求得函式在其他特定方向上的變化率。而

方向導數就是函式在其他特定方向上的變化率

4|0梯度

4|1梯度的數學概念

梯度的提出只為回答一個問題:函式在變數空間的某一點處,沿著哪一個方向有最大的變化率?

梯度給出的答案是:函式在某一點的梯度是這樣一個

向量

,它的方向與取得

最大方向導數的方向

一致,而它的模為

最大方向導數的值

這裡注意三點:

1)梯度是一個向量,即有方向有大小;

2)梯度的方向是最大方向導數的方向;

3)梯度的值是最大方向導數的值。

通俗地講,就是函式在該點處沿著該方向(此梯度的方向)變化最快,變化率最大(為該梯度的模)。

梯度的公式定義:

數學基礎之梯度

以圓錐為例,圓錐的方程為:

數學基礎之梯度

其中aa為變參,這裡取a=2a=2。則針對曲面上每一個點P(x,y)P(x,y),其梯度可以定義為

∇f(x,y)=[∂f(x,y)∂x,[∂f(x,y)∂y]=∂f(x,y)∂xi⃗ +∂f(x,y)∂xj⃗ (i⃗ =(1,0),j⃗ =(0,1))∇f(x,y)=[∂f(x,y)∂x,[∂f(x,y)∂y]=∂f(x,y)∂xi→+∂f(x,y)∂xj→(i→=(1,0),j→=(0,1))

其中

數學基礎之梯度

同理

數學基礎之梯度

所以,在椎體的任意一點,梯度向量為a2xzi⃗ +a2yzj⃗ a2xzi→+a2yzj→記作:

gradf(x,y)=(a2xz,a2yz)gradf(x,y)=(a2xz,a2yz)

特殊情況下,在y=0y=0截面和x=0x=0截面與圓交線上的點的梯度為gradf(x,0)=(a,0)gradf(x,0)=(a,0) 和 gradf(0,y)=(0,a)gradf(0,y)=(0,a)

如下圖所示,由於梯度在另一個方向上的分量為00,所以梯度向量在座標軸方向上達到最大,這和直覺是相符的。

數學基礎之梯度

直覺上,不論從圓錐上哪個點觸發,它的梯度的大小是一樣的(方向不一樣),我們可以驗證一下

數學基礎之梯度

所以

數學基礎之梯度

=

數學基礎之梯度

所以,圓錐上任意一點的梯度大小均為aa,處處相等,包括上面計算得到的和座標軸平面相交的兩條線。

這裡,∇=∂∂xi⃗ +∂∂yj⃗ ∇=∂∂xi→+∂∂yj→ 叫做二維空間向量梯度運算元,∇f=∂f∂xi⃗ +∂f∂yj⃗ ∇f=∂f∂xi→+∂f∂yj→。

4|2方向導數與梯度(幾何角度)

第3節已講過,所謂方向導數,就是指函式f(x,y)f(x,y)沿著直線ℓℓ變化的速率,這條直線其實就是曲面上相對應的那條曲線在xoyxoy平面的投影。完成投影的這個豎立的平面就稱為投影平面,那麼,方向導數其實就是空間曲線沿著它自己在xoy平面的投影直線的變化率。正如dy/dxdy/dx表示二維平面中一條曲線在某一點沿著xx軸的變化速率(也就是切線的斜率)一樣。

所以,方向導數的公式可可轉換成

數學基礎之梯度

其中角θθ是直線ℓℓ和xx軸的夾角。那麼,方向導數在ℓℓ指向何方的時候取得最大值呢?

數學基礎之梯度

是方向ℓℓ上的單位向量,則方向導數可以寫成:

數學基礎之梯度

其中φφ角是投影直線$$\ell和梯度的夾角,不難得出,當φφ角為00時,方向導數取得最大值,換句話說,當方向導數和梯度同向時,變化率最大。

方向導數的最大值即是梯度:

數學基礎之梯度

4|3等高線與梯度

對於三維空間曲面來說,等高線就是平行於xoyxoy平面和曲面圖形交線在xoyxoy平面的投影,例如,下面圖形顯示的馬鞍面的等高線,它的等高線每一組都是雙曲線。

數學基礎之梯度

當採用等高線的概念後,等高線和梯度有一個非常有趣的關係,實際上,等高線和梯度方向是互相垂直的,以三維曲面等高線為例,推導如下:

等高線方程為:

數學基礎之梯度

則,該曲線在xoyxoy平面上的投影是一條曲線,在xoyxoy平面上該曲線的方程為:

數學基礎之梯度

曲線上一點PP的斜率,根據隱函式求導公式,兩邊對xx求導:

數學基礎之梯度

而梯度向量定義為:

數學基礎之梯度

梯度方向斜率為:

數學基礎之梯度

所以,梯度方向和等高線切線方向垂直。

數學基礎之梯度

4|4泰勒級數與梯度

數學中,

泰勒公式

是一個用函式在某點的資訊描述其附近取值的公式。如果函式足夠平滑的話,在已知函式在某一點的各階導數值的情況之下,泰勒公式可以用這些導數值做係數構建一個多項式來近似函式在這一點的鄰域中的值,即泰勒級數在某一鄰域內去無限接近該函式的一個公式。

數學基礎之梯度

這裡引入泰勒級數的目的是為了證明極值點的導數問題,高階函式一般要使用到矩陣論的海森矩陣相關知識,這裡不引入那麼深的概念,但是基本的矩陣知識還是需要的。

我們只保留前三項:f(xk+δ)≈f(xk)+f′(xk)δ+12f′′(xk)δ2f(xk+δ)≈f(xk)+f′(xk)δ+12f″(xk)δ2

之前提到了一階導數是極值點,現在解釋為什麼會是這樣:上面的δδ是指很小的步長,當δ>0δ>0時說明xx向右走,當δ<0δ<0時說明xx向左走,學過高等數學極限的應該有這個概念。

現在我們透過泰勒級數只考慮上面公式的前兩項f(xk+δ)≈f(xk)+f′(xk)δf(xk+δ)≈f(xk)+f′(xk)δ 來解釋為什麼極值點處的一階導數為00:

假如xkxk這一點的函式值f(Xk)f(Xk)為極值點,可以是極小值或者極大值(這裡以極大值點為例)。因為此時的f(x_k)為極大值,則無論δ>0δ>0還是δ<0δ<0,都有f(xk±δ)

無需畫圖,從泰勒級數就可以說明極值點的一階導數一定為00,那麼一階導數為零的點不一定是極值點怎麼證明呢?使用三項即可證明一階導數為零不一定是極值點:f(xk+δ)≈f(xk)+f′(xk)δ+12f′′(xk)δ2f(xk+δ)≈f(xk)+f′(xk)δ+12f″(xk)δ2 中,如果f′(xk)=0f′(xk)=0,那麼公式可寫成這樣:f(xk)+δ≈f(xk)+12f′′(xk)δ2f(xk)+δ≈f(xk)+12f″(xk)δ2。從上式可以看到如果在f′(xk)=0f′(xk)=0時假如f(xk)f(xk)為極大值,理應說無論δ>0δ>0還是δ<0δ<0,都有f(xk±δ)0f″(xk)>0,則f′′(xk)δ2>0f″(xk)δ2>0所以f(xk±δ)>f(xk)f(xk±δ)>f(xk),即證得f(xk)f(xk)不是極大值點,那如何才能判斷是極值點呢?

此時需要藉助二階導數,上面如果f′′(xk)<0f″(xk)<0,則f(xk)f(xk)為極大值點,所以才有一階導數等於零,二階導數小於零為極大值點,如果二階導數大於零則為極小值點。如果二階導數等於00怎麼辦?那就繼續判斷三階導數就可以了。

這是在標量的情況下的極值問題,如果xx是向量怎麼處理呢?還是引入泰勒公式就可以了。只是不一樣的是都是向量了。

我們知道機器學習中的變數都很多,一般都使用向量進行表示(此時為列向量)且為多元函式,求導和標量一樣的,只是現在是求偏導了:

f(xk+δ)≈f(xk)+f′(xk)Tδ+12f′′(xk)δ2f(xk+δ)≈f(xk)+f′(xk)Tδ+12f″(xk)δ2

上面的公式f(xk),δ,f′(xk)T,f′′(xk)f(xk),δ,f′(xk)T,f″(xk)都是向量,例如一階偏導f′(xk)f′(xk)應該是這樣的:

∂f(x)∂x=⎡⎣⎢⎢⎢⎢∂f(x)∂x1⋮∂f(x)∂xn⎤⎦⎥⎥⎥⎥∂f(x)∂x=[∂f(x)∂x1⋮∂f(x)∂xn]

因為是向量,所以有大小有方向了,大家注意到了沒有此時的f′(xk)Tf′(xk)T為行向量了,因為轉置了,因此和δδ相乘是內積,此時我們也只看前兩項即:f(xk+δ)≈f(xk)+f′(xk)Tδf(xk+δ)≈f(xk)+f′(xk)Tδ。現在重點來了啊,為了每次xx前進的方向是使函式f(xk)f(xk)增長最快,應該怎樣選取前進方向的步伐(即向量mathbfδmathbfδ)才能保證呢?顯然,mathbfδmathbfδ直接影響著f′(xk)Tδf′(xk)Tδ,而f(xx+δ)f(xx+δ)的值由f(xk)f(xk)、f′(xk)Tδf′(xk)Tδ決定,然而f(xk)f(xk)是確定的,所以使f′(xk)Tδf′(xk)Tδ最大即可。

而該式就是向量的內積,根據向量內積的性質可知,只要使δδ取的向量和f′(xk)f′(xk)共線就可以了:如果共線同向則取最大方向,反向取最小小方向。因此直接使δ=f′(xk)δ=f′(xk)即可,即保證方向共線就可以了,至於值得大小可以乘一個標量,現在我們找到了這個向量,而這個向量就是多元函式的一階偏導數,這時候就定義,多元函式的一階偏導數為梯度,符號為∇f(x0+y0)∇f(x0+y0),數學上的梯度就是這麼來的,此時就可以寫成這樣了:

f(xk+δ)≈f(xk)+∇Tf(xk)δ+12δT∇2f(xk)δf(xk+δ)≈f(xk)+∇Tf(xk)δ+12δT∇2f(xk)δ。

總結來說,梯度是為了尋找極值而生的,而且是極大值,因此梯度總是指向函式增長最快的方向,這就是本質原因了,但是我們常聽的是梯度下降,梯度方向取反即下降最快的,共線反向取極小值就這個道理。

梯度的知識點難在理解上,梯度不是標量,是向量,有方向有大小,一般我們不是很關心大小,因為可以透過標量放大或者縮小,重要的是方向問題。因為只要確定增長最快的方向,才能最快找到極值點,這也是很多演算法使用梯度最佳化演算法的原因,當然是梯度的反方向。

4|5斜率與梯度

斜率的方向對應曲線上某一點的切線,梯度的方向對應曲面上某一點切面的法線。

一維的斜率針對的二維的線,

二維的梯度針對的三維的面,

這裡的一維、二維對應的是自變數的個數,而斜率、梯度這些其實就是我們對函式的預測,預測建立在比函式高一維的維度。

數學基礎之梯度

4|6梯度檢測

概述

當我們對一個較為複雜的模型(例如神經網路)使用梯度下降演算法時,可能會存在一些不容易察覺的錯誤(比如難以發現的bug),雖然在訓練過程中,代價函式在變小,但最終的結果可能並不是最優解。

所以我們採用一種叫梯度檢測的思想,它可以透過估計梯度(或導數)的近似值來估算我們的梯度下降演算法算出的梯度(或導數)是否為正確的。

原理

梯度檢測會估計梯度(或導數)值,然後和你程式計算出來的梯度(導數)的值進行對比,以判斷程式算出的梯度(導數)值是否正確。

數學基礎之梯度

上圖中,我們關注θ0θ0點的函式的導數,即θ0θ0點切線(圖中藍線)的斜率,現在我們θ0−ϵθ0−ϵ 和 θ0+ϵθ0+ϵ兩點間連一條線(圖中紅線),我們發現紅線的斜率和藍線斜率很相似。

紅線的斜率可以用以下式子表示:J(θ0+ϵ)−J(θ0−ϵ)2ϵJ(θ0+ϵ)−J(θ0−ϵ)2ϵ。實際上,這個式子很好地表示了θ0θ0點導數的近似值。

在實際的應用中,θθ往往是一個向量,梯度下降演算法要求我們對向量中的每一個分量進行偏導數的計算,對於偏導數,我們同樣可以用以下式子進行近似計算:

J(θ1+ϵ,θ2,θ3,…,θn)−J(θ1−ϵ,θ2,θ3,…,θn)2ϵJ(θ1+ϵ,θ2,θ3,…,θn)−J(θ1−ϵ,θ2,θ3,…,θn)2ϵ

上式很好地估計了損失函式對θ1θ1的偏導數。

5|0梯度下降法

既然在變數空間的某一點處,函式沿梯度方向具有最大的變化率,那麼在最佳化目標函式的時候,自然是沿著負梯度方向去減小函式值,以此達到我們的最佳化目標。如何沿著負梯度方向減小函式值呢?既然梯度是偏導數的集合,如下:

數學基礎之梯度

同時梯度和偏導數都是向量,那麼參考向量運演算法則,我們在每個變數軸上減小對應變數值即可,梯度下降法可以描述如下:

數學基礎之梯度

以上就是梯度下降法的由來,大部分的機器學習任務,都可以利用

Gradient Descent

來進行最佳化。

詳解梯度下降法請點選機器學習最佳化演算法。

5|1參考資料:

https://

blog。csdn。net/walilk/ar

ticle/details/50978864

https://

blog。csdn。net/weixin_42

398658/article/details/83017995

https://

blog。csdn。net/tugouxp/a

rticle/details/109156764

https://www。

cnblogs。com/umbrellalal

alala/p/9012676。html

數學基礎之梯度

更多深度學習競賽專案,大家可移步官網進行檢視和參賽!

更多精彩內容請訪問FlyAI-AI競賽服務平臺;為AI開發者提供資料競賽並支援GPU離線訓練的一站式服務平臺;每週免費提供專案開源演算法樣例,支援演算法能力變現以及快速的迭代演算法模型。

挑戰者,都在FlyAI!!!

標簽: Xk  導數  梯度  函式  xx