新手入門 梯度下降演算法

2021-08-26 02:38:07 字數 2844 閱讀 2640

梯度下降演算法,它主要的實現功能,是乙個優化演算法,通過給出的例項來不斷逼近某個模型。

例如用下山的例子來解釋梯度下降演算法,我們要最快速的下山,第乙個是找到最陡的坡,第二個是邁出適當的步伐。兩者結合才能達到最快的速度。

從山頂下山:1.最陡峭 2.適當步伐。

1.如果不是最陡峭的路,那麼我們走緩坡,可能會延長路徑長度

2.如果不是適當步伐,走少了,我們需要多邁步,走多了,我們需要重新規劃路徑

如何找到最陡峭的路,利用梯度。

函式式子求導,得出的結果,就是梯度,也是變化率。

多元函式時,對每乙個變數,分別求導。

其實很簡單,具備大學高數的基礎知識就能理解,即多元微分。

所以說,最陡峭的地方,就是梯度所指方向,當然,在這裡指的是其反方向。因為我們要下山,而不是上山。我們按照梯度所指方向,就能夠最快速到達最低點。

上述已經基本描述清楚梯度下降講的是個什麼東西,下面通過標準的數學方式來解釋:

第乙個引數代表下一步的位置

第二個引數代表當前位置

因為是反方向,所以是負號

a代表步長,每邁出一步的距離,如上文所說,不能太大也不能太小

有函式:

其微分為:

起點:步長設定為   0.1

根據梯度下降公式,我們計算:

下面的各個值為:

此時的值足夠小,可以被認為到達山腳下。這個模型只是無限逼近,不會達到最後的最小值0.

同理二元函式也可以達到。

給定許多資料,例如許多座標,來擬合成一條線性的直線。

感知機(perceptron)為二類分類的線性分類模型。 輸入為例項的特徵向量,輸出為例項的類別, 取+1 和 -1 二值。

什麼是感知機:對於神經網路模型來說,如果不採用啟用函式,而用線性進行處理,無論中間怎麼處理,最後得到的結果還是線性的結果。如果加入啟用函式,就可以被用於擬合各種非線性模型中去。

下面這個例項,給出了很多的點,然後根據梯度下降演算法來求出擬合的直線。

用**進行運算:

# -*- coding: utf-8 -*-

"""created on mon aug 27 15:11:52 2018

@author: zlee

"""import matplotlib.pyplot as plt

from pylab import plot

import numpy as np

m = 20

x0 = np.ones((m, 1)) #組成乙個陣列為【i,1】的座標集合

x1 = np.arange(1, m+1).reshape(m, 1) #arrange根據生成的start與end生成乙個ndarray陣列,reshape給陣列乙個新的形狀而不改變其資料

x = np.hstack((x0, x1)) # 堆疊陣列水平順序(列)

y = np.array([ 3, 4, 5, 5, 2, 4, 7, 8, 11, 8, 12, 11, 13, 13, 16, 17, 18, 17, 19, 21 ]).reshape(m, 1)

# the learning rate alpha.

alpha = 0.01

'''代價函式

'''def error_function(theta, x, y):

diff = np.dot(x, theta) - y

return (1./2*m) * np.dot(np.transpose(diff), diff)

'''代價函式梯度

'''def gradient_function(theta, x, y):

diff = np.dot(x, theta) - y

return (1./m) * np.dot(np.transpose(x), diff)

'''梯度下降迭代計算

'''def gradient_descent(x, y, alpha):

theta = np.array([1, 1]).reshape(2, 1) #陣列轉為兩行一列

gradient = gradient_function(theta, x, y)

while not np.all(np.absolute(gradient) <= 1e-5):

theta = theta - alpha * gradient

gradient = gradient_function(theta, x, y)

return theta

#折線圖繪製函式

plot(y,'r*')

plt.show()

optimal = gradient_descent(x, y, alpha)

print('optimal:', optimal)

print('error function:', error_function(optimal, x, y)[0,0])

本來的點集合影象為:

梯度下降演算法 梯度下降演算法為何叫梯度下降?

首先,我們知道乙個演算法的名字可以很好地去解釋乙個演算法,那麼梯度下降演算法是什麼呢?很明顯的,就是用梯度這個工具來解決問題的一種演算法。解決什麼問題呢?如何在乙個函式曲面的某一點,找到乙個函式值變化最大的方向。比如 我們站在山上的某一點,我們想要以最快的速度上山,但是我們的步子大小是一定的,那麼最...

梯度下降演算法 梯度下降演算法公式推導

場景假設 梯度下降法的基本思想可以模擬為乙個下山的過程。假設這樣乙個場景 乙個人被困在山上,需要從山上下來 找到山的最低點 但此時山上的濃霧很大,導致可視度很低 因此,下山的路徑就無法確定,必須利用自己周圍的資訊一步一步地找到下山的路。這個時候,便可利用梯度下降演算法來幫助自己下山。怎麼做呢,首先以...

ubuntu新手入門

ubuntu使用設定之介面篇 ubuntu系統裝好了,不過怎麼看上則呢麼醜醜的?好像mr徐的介面和我的不一樣呢,怎麼設定的呢?首先,讓我們來設定工具條。ubuntu預設2條工具條,讓我們來把他設定成和windows下一樣的吧。先讓我們在上面的工具條的空白的地方,選擇刪除面板。然後,讓我們在底下的面板...