1.1 方向導數
方向導數:類比於函數的偏導數是函數沿座標軸方向的變化率,方向導數是函數沿某一射線方向的變化率。
定理:如果函數 f(x,y) 在點 P0(x0,y0) 可微分,那麼函數在該點沿任一方向 l 的方向導數存在,且有
∂l∂f∣∣∣∣(x0,y0)=fx(x0,y0)cosα+fy(x0,y0)cosβ
其中 cosρ 和 cosβ 是方向 l 的方向餘弦。
1.2 梯度
梯度:梯度是一個向量(矢量),表示某一函數在該點處的方向導數沿着該方向取得最大值,即函數在該點處沿着該方向(梯度的方向)變化最快,變化率最大(爲梯度的模)。
定義:設二元函數 z=f(x,y) 在平面區域D上具有一階連續偏導數,則對與於每一個點 P(x,y) 都可定出一個向量 {∂x∂f,∂y∂f}=fx(x,y)i+fy(x,y)j ,該函數就稱爲函數 z=f(x,y) 在點 P(x,y) 的梯度,記作 gradf(x,y) 或 ∇f(x,y) ,既有:
gradf(x,y)=∇f(x,y)={∂x∂f,∂y∂f}=fx(x,y)i+fy(x,y)j
1.3 梯度下降算法
梯度下降算法針對的是最小優化問題(即求最小值問題),目的是使目標函數沿最快路徑下降到最小值。
通俗的解釋,是模擬下山,每次沿着當前位置最陡峭最易下山的方向前進一小步,然後繼續沿下一個位置最陡方向前進一小步。這樣一步一步走下去,一直走到覺得我們已經到了山腳。
雖然這樣很好理解,但這只是給不懂梯度下降算法的小白講的形象比喻,最終要落實到算法上代碼上,具體的過程是怎麼樣的呢?還得靠數學推導。
算法作用於損失函數(也稱目標函數、代價函數、誤差函數),是爲了找到使損失函數取最小值的權重(w)和偏置(b)。
設損失函數爲 l(x,w,b,y) ,要尋找最優的 w 和 b ,爲便於計算,抽象出函數描述 f(w,b) ,這裏 f=l ,只是描述形式不同。同時設 θ=(w,b)T ,T 爲轉置符號,此時 θ 是一個二維列向量。
則損失函數爲 f(θ),將其進行一階泰勒展開,得:
f(θ)≈f(θ0)+(θ−θ0)⋅∇f(θ0)
爲什麼要一階泰勒展開呢,因爲這樣可以“以直代曲”,數學術語叫“局部線性近似”,就是在很小的區間內,直線與曲線近似重合,對曲線不易做的計算,可以對直線計算作爲代替。
θ−θ0 就是這個很小的區間,可以表示爲 Δθ ,但它仍然是一個矢量,將其分解爲模和單位向量的形式,即長度和方向的形式:
Δθ=θ−θ0=ρv這裏的 ρ 就是前面下山比喻中每次走的一小步的距離,v 就是走的方向,這裏注意ρ 是距離(長度),所以 ρ > 0。
則損失函數 f(θ) 的一階泰勒展開式可描述爲:
f(θ)≈f(θ0)+ρv⋅∇f(θ0)
其中 f(θ0) 是現在的損失函數的值,f(θ) 是即將要更新的損失函數的值,前面說過我們的目的是爲了找到使損失函數取最小值的權重(w)和偏置(b),所以我們每次更新要保證 f(θ)<f(θ0) ,即:
f(θ)−f(θ0)≈ρv⋅∇f(θ0)<0
又因爲 ρ > 0,所以有:
v⋅∇f(θ0)<0
這裏注意,v 是一個向量,∇f(θ0) 是函數 f(w,b) 在點 (w0,b0) 處的梯度,它也是一個向量。要兩個向量的乘積小於0,則需要他們的夾角大於90°。再次想到我們的目的,使目標函數沿 最快 路徑下降到最小值,既然要最快,f(θ) 與 $ f(\theta_0)$ 的距離(即 ∣f(θ)−f(θ0)∣)就要越大越好,根據公式 f(θ)−f(θ0)≈ρv⋅∇f(θ0)<0 ,就是結果越小越好(因爲結果是負值)。再回到 v 和 ∇f(θ0) 兩個向量的乘積上,就是他們的夾角爲180°時,v⋅∇f(θ0) 的結果最小,此時結果爲:
v⋅∇f(θ0)=−∣∣v∣∣⋅∣∣∇f(θ0)∣∣=−∣∣∇f(θ0)∣∣
則 v 描述爲:
v=−∣∣∇f(θ0)∣∣∇f(θ0)
帶入 θ−θ0=ρv 得:
θ=θ0−ρ∣∣∇f(θ0)∣∣∇f(θ0)
因爲 ρ 和 ∣∣∇f(θ0)∣∣1 都是標量,所以可以設 α=∣∣∇f(θ0)∣∣ρ ,則上式(梯度下降算法中 θ 的更新表達式)可描述爲:
θ=θ0−α∇f(θ0)
這裏的 α 就是我們常說的學習速率。
當實際使用該算法時,我們還需將公式還原,即將 θ=(w,b)T,θ0=(w0,b0)T 代入上式得:
(w,b)T=(w0,b0)T−α(∂x∂f,∂y∂f)T即:
w=w0−α∂w0∂fb=b0−α∂b0∂f
這個公式纔是最終往代碼裏寫的形式,只不過要結合你 f (損失函數)的具體形式進一步計算偏導,再落實到代碼。
梯度(數學名詞)_百度百科
簡單的梯度下降算法,你真的懂了嗎?