梯度下降演算法,它主要的實現功能,是乙個優化演算法,通過給出的例項來不斷逼近某個模型。
例如用下山的例子來解釋梯度下降演算法,我們要最快速的下山,第乙個是找到最陡的坡,第二個是邁出適當的步伐。兩者結合才能達到最快的速度。
從山頂下山: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下一樣的吧。先讓我們在上面的工具條的空白的地方,選擇刪除面板。然後,讓我們在底下的面板...