1. 程式人生 > >啟發式優化演算法:梯度下降法和梯度上升法

啟發式優化演算法:梯度下降法和梯度上升法

梯度下降演算法理論知識我們給出一組房子面積,臥室數目以及對應房價資料,如何從資料中找到房價y與面積x1和臥室數目x2的關係?本文旨在,通過數學推導的角度介紹梯度下降法
feet^2--x1;bedrooms--x2
f e e t 2

x 1 feet^2 - x_1 , b e d r o
o m s x 2 bedrooms - x_2
, P
r i c e h ( x ) Price - h(x)

一、線性函式

為了實現監督學習,我們選擇採用自變數x1、x2的線性函式來評估因變數y值,得到:
在這裡插入圖片描述
這裡, θ 1 \theta_1 θ 2 \theta_2 代表自變數 x 1 x_1 x 2 x_2 的權重(weights), θ 0 \theta_0 代表偏移量。為了方便,我們將評估值寫作h(x),令 x 0 x_0 =1,則h(x)可以寫作:
在這裡插入圖片描述
把x寫作(1,x1,x2),可以把引數 θ 0 \theta_0 也融入到引數裡,進行矩陣乘法 。

二、誤差函式

為了得到weights的值,我們需要令我們目前的樣本資料評估出的h(x)儘可能的接近真實y值。我們定義 誤差函式(cost function)來表示h(x)和y值相接近的程度:
在這裡插入圖片描述

  • n為自變數的數量,m為輸入樣本數的數量或理解為 x x 的座標最大值。對應的是,下標是自變數個數,上標是樣本資料或為 x x 的座標。( 切記,下面的公式不是按 i , j i, j 區分的,而是上下標區分。)

  • 這裡的係數1/2是為了後面求解偏導數時可以與係數相互抵消。我們的目的是要誤差函式儘可能的小,即求解weights使誤差函式儘可能小。首先,我們隨機初始化weigths,常用的直接初始化為1,然後不斷反覆的更新weights使得誤差函式減小,直到滿足要求時停止。

筆者拙見,可以直接跳過…
其實,以上部分類似於最小二乘法,因為無論梯度下降,還是最小二乘法,都是通過二次誤差函式的求導來擬合,區別在於,最小二乘法,直接算出引數,而梯度下降法則是對引數不斷地更新迭代。

三、公式推導

這裡更新演算法我們選擇梯度下降演算法,利用初始化的weights並且反覆更新weights:
在這裡插入圖片描述
這裡a代表學習率,表示每次向著J最陡峭的方向邁步的大小。為了更新weights,我們需要求出函式J的偏導數。首先計算只有一組資料樣本(x,y)時,如何計算J的偏導數:
在這裡插入圖片描述

求導技巧:對於 i = 0 N θ x i y \sum_{i=0}^N \theta x_i- y θ j \theta_j 的求導,因為 θ i \theta_i 是變數且 i \in (0,n) ,因此對 θ j \theta_j 求導將只會剩下 θ j \theta_j 的引數 x i x_i

對於只含有一組資料的訓練樣本,我們可以得到更新weights的規則為:
在這裡插入圖片描述
擴充套件到多組資料樣本,更新公式為:
在這裡插入圖片描述
稱為批處理梯度下降演算法,這種更新演算法所需要的運算成本很高,尤其是資料量較大時。考慮下面的更新演算法:
在這裡插入圖片描述

以上都是順著x的方向依次取資料,那麼再進一步優化,按照隨機的取法取 x x 的資料, 考慮下面的更新演算法:

圖片名稱

如果從 [ 1 , m ] [ 1,m ] 隨機取 i i ,並且這種演算法不停的更新weights,每次使用一個樣本資料進行更新,並且因為 i i 的隨機性,能有效跳出區域性最優解。那麼該演算法又叫做隨機梯度下降法,當資料量較大時,一般使用後者演算法進行更新。

四、如何通俗的梯度下降法

在一元函式的函式影象,梯度就等於斜率,它的方向沒有選擇,並不能直觀理解梯度下降最快。
而只有在二元及其以上的函式影象,面上的一點的梯度才會有方向的選擇,梯度方向才會有,最直觀的下降最抖現象。

進一步瞭解,涉及的數學知識:

梯度是函式值變化最大的方向 -> 方向導數-> 高數裡的全微分概念
梯度下降法程式碼的書寫 -> 熟悉矩陣的運算

五、梯度上升法

梯度上升法用來求最大值,而梯度下降法用來求最小值。
在《機器學習實戰》一書的第5章中講到了Logistic——本質上是一個基於條件概率的判別模型,它利用了Sigma函式值域在[0,1]這個特性。 Logistic迴歸用於二分類問題,面對具體的二分類問題,比如明天是否會下雨。因而轉用概率來表示和推導。
這本書中採用了,梯度上升演算法,而且神奇的和基於二次誤差函式得到的梯度下降公式完全一致,但是採用的數學推導卻是基於,最大似然估計的推導。
在這裡插入圖片描述
在這裡插入圖片描述感興趣的同學,可以看:
https://www.jianshu.com/p/7574ce1949b8

六、程式碼

^ ~ ^後續再補充
機器學習,希望自己紮紮實實的走好每一步。