cost函式梯度求解證明

2021-08-17 22:55:14 字數 2353 閱讀 3736

cost函式形式:

簡單回顧一下幾個變數的含義:

表1 cost函式解釋

x(i)

每個樣本資料點在某乙個特徵上的值,即特徵向量x的某個值

y(i)

每個樣本資料的所屬類別標籤

m樣本資料點的個數

hθ(x)

樣本資料的概率密度函式,即某個資料屬於1類(二分類問題)的概率

j(θ)

代價函式,估計樣本屬於某類的風險程度,越小代表越有可能屬於這類

我們的目標是求出θ,使得這個代價函式j(θ)的值最小,這裡就需要用到梯度下降演算法。

梯度下降演算法

對於乙個函式,我們要找它的最小值,有多種演算法,這裡我們選擇比較容易用**實現和符合機器學習步驟的梯度下降演算法。

先來看看梯度下降演算法中,自變數的迭代過程。表示如下

可以看到,這是乙個θ值不斷迭代的過程,其中α是學習速率,就是θ的移動「步幅」,後面的偏導數數就是梯度,可以理解為cost函式在θ當前位置,對於j位置特徵的下降速度。

對於二維空間,梯度可以理解為函式影象的切線斜率。即:特徵是一維的

對於多維特徵,cost函式的影象就應該是這樣的,下面舉個例子:

圖1 cost函式舉例

這是乙個二維特徵的cost函式的影象,這個時候,梯度有無限多個,我們不能只說cost函式的梯度,應該說,cost函式在某個方向上的梯度。例如,cost函式在θ0方向上,在(θ0=m,θ1=n)上的梯度就是cost函式與θ1=n這個平面的交線在(m,n)處的斜率。

上面的描述比較抽象,簡單說來,假設影象就是乙個小山坡(有點像吧),你站在影象的(m,n)點處,朝θ0的方向看過去,看到的「山坡」的「坡度」就是上面所說的梯度了。

這個迭代過程,用形象化的語言描述,就是:

我站在山坡上,找到乙個初始點θj,每次我沿著某乙個方向走α這麼長的路,由於總是朝著梯度的方向走,我總會走到山坡底(也就是cost函式的極小值)。

然而,這樣的「盆地」可能有多個,我們不同的走法,可能會走到不同的山底,如圖:

圖2 多「山谷」cost函式

這裡的兩條路線分別走向不同的山谷,這就說明:梯度下降演算法只能求出乙個區域性最小值,不一定是全域性最小值,但這不影響它是乙個好的方法。

這樣,θ

的迭代過程就講清楚了。接下來說一下迭代的終止條件。

迭代肯定不是無限下去的,我們不妨想一下:當我們走到了山谷,再想往某個方向走的時候,發現都不能再往下走了,那麼我們的旅行就終止了。

同樣,當θ

迭代了n次後(就如圖2的黑線一樣),發現接下來走α這麼長的路,下降的高度很小很小(臨界值),或者不再下降,甚至反而往上走了,所以我們的迭代終止條件就是cost函式的減少值小於某個值。

我們再來回顧一下迭代公式(1):其中α

是經驗設定,稱之為learning rate,初始值也是隨機選定,那麼後面的那個梯度呢?

梯度就是cost函式對於特徵向量某一維的偏導數。我們來看看這個怎麼推導和簡化。

【梯度的求解】

先來寫一下大致的推導過程:

稍微解釋一下推導流程,便於理解。

(1)--->(2):使用sigmoid函式的形式g(z)替換hθ(x)、提出公因子,放在式子尾

(2)--->(3):這一步具體推導如下(使用了復合函式的求導公式)

後面的幾步較為簡單,就不另作說明了。

【演算法執行】

到了這裡,我們推出了迭代公式的最終形式:

更一般的形式就是把j去掉,表示對特徵的每一維都如此迭代

注意,在迭代過程中,θ的所有特徵是同步更新的,所以根據給定的資料集,就能使用梯度下降演算法來求解θ了,迭代終止條件即是將當前θ帶入cost函式,求出代價值,與上乙個代價值相減,結果小於閾值,立即停止迭代。

結語公式推導用的也就是偏導數的求解等少量數學公式,關鍵是體會區域性最優的思想

求解函式梯度(Python,numpy

求函式的梯度,也就是所有偏導的組合 import numpy as np defnumberical grandient f,x h 1e 4 定義乙個微小量,不能太小,太小計算機沒法正確表示 grad np.zeros like x 生成和x形狀相同的陣列 for idx in range x.s...

Pytorch自動求解梯度

要理解pytorch求解梯度,首先需要理解pytorch當中的計算圖的概念,在計算圖當中每乙個variable都代表的乙個節點,每乙個節點就可以代表乙個神經元,我們只有將變數放入節點當中才可以對節點當中的變數求解梯度,假設我們有乙個矩陣 1.2.3.4.5.6.我們將這個矩陣 二維張量 首先在pyt...

python 梯度法求解函式極值的例項

如下所示 coding utf 8 a 0.001 定義收斂步長 xd 1 定義尋找步長 x 0 定義乙個種子x0 i 0 迴圈迭代次數 y 0dic import math def f x y math.sin x 定義函式f x sinx return y def fd x y math.cos...