啟發式優化演算法:梯度下降法和梯度上升法
梯度下降演算法理論知識我們給出一組房子面積,臥室數目以及對應房價資料,如何從資料中找到房價y與面積x1和臥室數目x2的關係?本文旨在,通過數學推導的角度介紹梯度下降法
,
,
一、線性函式
為了實現監督學習,我們選擇採用自變數x1、x2的線性函式來評估因變數y值,得到:
這裡,
、
代表自變數
、
的權重(weights),
代表偏移量。為了方便,我們將評估值寫作h(x),令
=1,則h(x)可以寫作:
把x寫作(1,x1,x2),可以把引數
也融入到引數裡,進行矩陣乘法 。
二、誤差函式
為了得到weights的值,我們需要令我們目前的樣本資料評估出的h(x)儘可能的接近真實y值。我們定義 誤差函式(cost function)來表示h(x)和y值相接近的程度:
-
n為自變數的數量,m為輸入樣本數的數量或理解為 的座標最大值。對應的是,下標是自變數個數,上標是樣本資料或為 的座標。( 切記,下面的公式不是按 區分的,而是上下標區分。)
-
這裡的係數1/2是為了後面求解偏導數時可以與係數相互抵消。我們的目的是要誤差函式儘可能的小,即求解weights使誤差函式儘可能小。首先,我們隨機初始化weigths,常用的直接初始化為1,然後不斷反覆的更新weights使得誤差函式減小,直到滿足要求時停止。
筆者拙見,可以直接跳過…
其實,以上部分類似於最小二乘法,因為無論梯度下降,還是最小二乘法,都是通過二次誤差函式的求導來擬合,區別在於,最小二乘法,直接算出引數,而梯度下降法則是對引數不斷地更新迭代。
三、公式推導
這裡更新演算法我們選擇梯度下降演算法,利用初始化的weights並且反覆更新weights:
這裡a代表學習率,表示每次向著J最陡峭的方向邁步的大小。為了更新weights,我們需要求出函式J的偏導數。首先計算只有一組資料樣本(x,y)時,如何計算J的偏導數:
求導技巧:對於 對 的求導,因為 是變數且 i (0,n) ,因此對 求導將只會剩下 的引數 。
對於只含有一組資料的訓練樣本,我們可以得到更新weights的規則為:
擴充套件到多組資料樣本,更新公式為:
稱為批處理梯度下降演算法,這種更新演算法所需要的運算成本很高,尤其是資料量較大時。考慮下面的更新演算法:
以上都是順著x的方向依次取資料,那麼再進一步優化,按照隨機的取法取 的資料, 考慮下面的更新演算法:
如果從 隨機取 ,並且這種演算法不停的更新weights,每次使用一個樣本資料進行更新,並且因為 的隨機性,能有效跳出區域性最優解。那麼該演算法又叫做隨機梯度下降法,當資料量較大時,一般使用後者演算法進行更新。
四、如何通俗的梯度下降法
在一元函式的函式影象,梯度就等於斜率,它的方向沒有選擇,並不能直觀理解梯度下降最快。
而只有在二元及其以上的函式影象,面上的一點的梯度才會有方向的選擇,梯度方向才會有,最直觀的下降最抖現象。
進一步瞭解,涉及的數學知識:
梯度是函式值變化最大的方向 -> 方向導數-> 高數裡的全微分概念
梯度下降法程式碼的書寫 -> 熟悉矩陣的運算
五、梯度上升法
梯度上升法用來求最大值,而梯度下降法用來求最小值。
在《機器學習實戰》一書的第5章中講到了Logistic——本質上是一個基於條件概率的判別模型,它利用了Sigma函式值域在[0,1]這個特性。 Logistic迴歸用於二分類問題,面對具體的二分類問題,比如明天是否會下雨。因而轉用概率來表示和推導。
這本書中採用了,梯度上升演算法,而且神奇的和基於二次誤差函式得到的梯度下降公式完全一致,但是採用的數學推導卻是基於,最大似然估計的推導。
感興趣的同學,可以看:
https://www.jianshu.com/p/7574ce1949b8
六、程式碼
^ ~ ^後續再補充
機器學習,希望自己紮紮實實的走好每一步。