機器學習之梯度下降

2021-10-01 04:43:17 字數 2667 閱讀 4106

梯度下降不是乙個機器學習演算法,而是一種基於搜尋的最優化方法。梯度下降(gradient descent, gd)優化演算法,其作用是用來對原始模型的損失函式進行優化,以便尋找到最優的引數,使得損失函式的值最小。要找到使損失函式最小化的引數,如果純粹靠試錯搜尋,比如隨機選擇1000個值,依次作為某個引數的值,得到1000個損失值,選擇其中那個讓損失值最小的值,作為最優的引數值,那這樣太笨了。我們需要更聰明的演算法,從損失值出發,去更新引數,且要大幅降低計算次數。

梯度下降演算法作為乙個聰明很多的演算法,抓住了引數與損失值之間的導數,也就是能夠計算梯度(gradient),通過導數告訴我們此時此刻某引數應該朝什麼方向,以怎樣的速度運動,能安全高效降低損失值,朝最小損失值靠攏。

這樣的好處也可以節省一部分的計算資源

很多求解最優化問題的方法,大多源自於模擬生活中的某個過程。比如模擬生物繁殖,得到遺傳演算法。模擬鋼鐵冶煉的冷卻過程,得到退火演算法。其實梯度下降演算法就是模擬滾動,或者下山,在數學上可以通過函式的導數來達到這個模擬的效果。

梯度下降演算法是一種思想,沒有嚴格的定義。

梯度下降就是從群山中山頂找一條最短的路走到山谷最低的地方

既然是選擇乙個方向下山,那麼這個方向怎麼選?每次該怎麼走?選方向在演算法中是以隨機方式給出的,這也是造成有時候走不到真正最低點的原因。如果選定了方向,以後每走一步,都是選擇最陡的方向,直到最低點。

隨機選擇乙個方向,然後每次邁步都選擇最陡的方向,直到這個方向上能達到的最低點

乙個人被困在山上,需要從山頂到山谷。但此時霧很大,看不清下山的路徑。他必須利用自己周圍的資訊去找到下山的路徑。這個時候,他就可以利用梯度下降演算法來幫助自己下山。具體來說就是,以他當前的所處的位置為基準,隨機選擇乙個方向,然後每次邁步都選擇最陡的方向。然後每走一段距離,都反覆採用同乙個方法:如果發現腳下的路是下坡,就順著最陡的方向走一步,如果發現腳下的路是上坡,就逆著方向走一步,最後就能成功的抵達山谷。

def

fit_gd

(self, x_train, y_train, eta=

0.01

, n_iters=

1e4)

:"""根據訓練資料集x_train, y_train, 使用梯度下降法訓練linear regression模型"""

assert x_train.shape[0]

== y_train.shape[0]

, \ "the size of x_train must be equal to the size of y_train"

defj

(theta, x_b, y)

:try

:return np.

sum(

(y - x_b.dot(theta))**

2)/len

(y)except

:return

float

('inf'

)def

dj(theta, x_b, y)

:return x_b.t.dot(x_b.dot(theta)

- y)*2

./len(y)

defgradient_descent

(x_b, y, initial_theta, eta, n_iters=

1e4, epsilon=1e-

8): theta = initial_theta

cur_iter =

0while cur_iter < n_iters:

gradient = dj(theta, x_b, y)

last_theta = theta

theta = theta - eta * gradient

if(abs

(j(theta, x_b, y)

- j(last_theta, x_b, y)

)< epsilon)

:break

cur_iter +=

1return theta

x_b = np.hstack(

[np.ones(

(len

(x_train),1

)), x_train]

) initial_theta = np.zeros(x_b.shape[1]

) self._theta = gradient_descent(x_b, y_train, initial_theta, eta, n_iters)

self.intercept_ = self._theta[0]

self.coef_ = self._theta[1:

]return self

在機器學習的「三板斧」中,第三步的目標是讓損失函式最小化,從而引出了梯度下降法,這一目前機器學習、深度學習解決最優化問題的演算法中,最核心、應用最廣的方法。所謂梯度下降,是一種基於搜尋的最優化方法,其作用是用來對原始模型的損失函式進行優化,找到使損失函式(區域性)最小的引數。

首先對梯度下降有乙個整體的印象:梯度是向量,是多元函式的導數,指向誤差值增加最快的方向。我們沿著梯度的反方向進行線性搜尋,從而減少誤差值,是為梯度下降。

機器學習之梯度下降法 梯度下降法分析

梯度下降法的基本思想是函式沿著其梯度方向增加最快,反之,沿著其梯度反方向減小最快。在前面的線性回歸和邏輯回歸中,都採用了梯度下降法來求解。梯度下降的迭代公式為 j j j j 在回歸演算法的實驗中,梯度下降的步長 為0.01,當時也指出了該步長是通過多次時間找到的,且換一組資料後,演算法可能不收斂。...

機器學習之梯度下降法

1 批量 梯度下降 使用整個訓練集的優化演算法被稱為批量 batch 梯度下降演算法。術語 批量梯度下降 指使用全部訓練集,而術語 批量 單獨出現時指一組樣本。2 隨機梯度下降 每次只使用單個樣本的優化演算法被稱為隨機 stochastic 梯度下降演算法。3 小批量梯度下降 大多數用於深度學習的演...

機器學習之梯度下降法

如圖,對於函式f x,y 函式的增量與pp 兩點距離之比在p 沿l趨於p時,則為函式在點p沿l方向的方向導數。記為 f l lim 0f x x,y y f x,y 其中 x 2 y 2 方向導數為函式f沿某方向的變化速率。而且有如下定理 f l f xc os f y sin 梯度是乙個向量,它的...