1. 程式人生 > >機器學習之--梯度下降演算法

機器學習之--梯度下降演算法

貌似機器學習最繞不過去的演算法,是梯度下降演算法。這裡專門捋一下。

1. 什麼是梯度

有知乎大神已經解釋的很不錯,這裡轉載並稍作修改,加上自己的看法。先給出連結,畢竟轉載要說明出處嘛。為什麼梯度反方向是函式值區域性下降最快的方向?

因為高等數學都忘光了,先從導數/偏倒數/方向導數,慢慢推出梯度吧。

1.1 導數

導數的幾何意義可能很多人都比較熟悉: 當函式定義域和取值都在實數域中的時候,導數可以表示函式曲線上的切線斜率。 除了切線的斜率,導數還表示函式在該點的變化率。
這裡寫圖片描述

用圖可表示為
這裡寫圖片描述
直白的來說,導數代表了在自變數變化趨於無窮小的時候,函式值的變化與自變數變化的比值代表了導數,幾何意義有該點的切線。物理意義有該時刻的(瞬時)變化率…

注意在一元函式中,只有一個自變數變動,也就是說只存在一個方向的變化率,這也就是為什麼一元函式沒有偏導數的原因。

1.2 偏導數

既然談到偏導數,那就至少涉及到兩個自變數,以兩個自變數為例,z=f(x,y) 。從導數到偏導數,也就是從曲線來到了曲面. 曲線上的一點,其切線只有一條。但是曲面的一點,切線有無數條。

而我們所說的偏導數就是指的是多元函式沿座標軸的變化率:
f

x ( x , y ) 指的是函式在y方向不變,函式值沿著x軸方向的變化率
f y
( x , y )
指的是函式在x方向不變,函式值沿著y軸方向的變化率

對應的影象形象表達如下:
這裡寫圖片描述
可能到這裡,讀者就已經發現偏導數的侷限性了,原來我們學到的偏導數指的是多元函式沿座標軸的變化率,但是我們往往很多時候要考慮多元函式沿任意方向的變化率,那麼就引出了方向導數。

1.3 方向導數

假設你站在山坡上,想知道山坡的坡度(傾斜度)
山坡圖如下:
這裡寫圖片描述
假設山坡表示為 z = f ( x , y ) ,你應該已經會做主要倆個方向的斜率:
y方向的斜率可以對y偏微分得到。同樣的,x方向的斜率也可以對x偏微分得到。

那麼我們可以使用這倆個偏微分來求出任何方向的斜率(類似於一個平面的所有向量可以用倆個基向量來表示一樣)

現在我們有這個需求,想求出u方向的斜率怎麼辦?假設 z = f ( x , y ) 為一個曲面, p ( x 0 , y 0 ) 為函式定義域中一個點,單位向量可表示為 u = c o s θ i + s i n θ j ,其中 θ 是此向量與x軸正向夾角.單位向量u可以表示對任何方向導數的方向.如下圖:
這裡寫圖片描述

那麼我們來考慮如何求出,曲面沿著 u 方向的斜率,可以類比於前面導數定義,得出如下:

f ( x , y ) 為一個二元函式, u = c o s θ i + s i n θ j 為一個單位向量,如果下列的極限值存在

lim t 0 f ( x 0 + t c o s θ , y 0 + t s i n θ ) f ( x 0 , y 0 ) t

此方向導數記為 D u f

則稱這個極限值是 f 沿著 u 方向的方向導數,那麼隨著 θ 的不同,我們可以求出任意方向的方向導數。這也表明了方向導數的用處,是為了給我們考慮函式對任意方向的變化率.

在求方向導數的時候,除了用上面的定義法求之外,我們還可以用偏微分來簡化我們的計算.

表示式是:

D u f ( x , y ) = f x ( x , y ) c o s θ + f y ( x , y ) s i n θ

(至於為什麼成立,很多資料有,不是這裡討論的重點,其實很好理解, θ 為0,就是x軸方向,偏導數不就是 f x ( x , y ) 嘛)

那麼一個平面上無數個方向,函式沿哪個方向變化率最大呢?

目前我不管梯度的事,我先把表示式寫出來:

D u f ( x , y ) = f x ( x , y ) c o s θ + f y ( x , y ) s i n θ

設有這樣兩個向量: A = ( f x ( x , y ) , f y ( x , y ) ) , I = ( c o s θ , s i n θ )

那麼我們可以得到:

D u f ( x , y ) = A I = | A | | I | c o s α (向量的點乘的基本公式。