前言
在上一篇隨筆里,我們講了Logistic回歸cost函數的推導過程。接下來的算法求解使用如下的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函數,求出代價值,與上一個代價值相減,結果小於閾值,立即停止迭代。
結語
公式推導用的也就是偏導數的求解等少量數學公式,關鍵是體會局部最優的思想