預設函式 hypothesis function
z =w
x+
bz = wx+b
z=wx+b
損失函式 loss function
j (w
,b)=
12(z
−y)2
j(w,b) = \frac(z-y)^2
j(w,b)
=21
(z−y
)2z是**值,y是樣本標籤值。
求w的梯度
我們用j的值作為基準,去求w對它的影響,也就是j對w的偏導數(鏈式求導):
∂ j(
w,b)
∂w=∂
j∂z∂
z∂
w\frac}} = \frac}}\frac}}
∂w∂j(w
,b)
=∂z∂
j∂w
∂z
因為:∂j∂
z=∂∂
z[12
(z−y
)2]=
z−
y\frac}} = \frac}}[\frac(z-y)^2] = z-y
∂z∂j=
∂z∂
[21
(z−y
)2]=
z−y ∂z∂
w=∂∂
w(wx
+b)=
x\frac}} = \frac}}(wx+b) = x
∂w∂z=
∂w∂
(wx+
b)=x
所以組合起來:
∂ j∂
w=∂j
∂z∂z
∂w=(
z−y)
⋅x
\frac}} = \frac}}\frac}} = (z-y) \cdot x
∂w∂j=
∂z∂j
∂w∂
z=(
z−y)
⋅x求b的梯度
∂ j∂
b=∂j
∂z∂z
∂b
\frac}} = \frac}}\frac}}
∂b∂j=
∂z∂j
∂b∂
z其中第一項前面算w的時候已經有了,而:
∂ z∂
b=∂(
wx+b
)∂b=
1\frac}} = \frac}} = 1
∂b∂z=
∂b∂(
wx+b
)=1
所以:∂j∂
b=∂j
∂z∂z
∂b=(
z−y)
⋅1=z
−y
\frac}} = \frac}}\frac}} = (z-y) \cdot 1 = z-y
∂b∂j=
∂z∂j
∂b∂
z=(
z−y)
⋅1=z
−y**
if __name__ == '__main__':
eta = 0.1
x, y = readdata()
w, b = 0.0, 0.0
#w,b = np.random.random(),np.random.random()
# count of samples
num_example = x.shape[0]
for i in range(num_example):
# get x and y value for one sample
x = x[i]
y = y[i]
# get z from x,y
z = w*x+b
# calculate gradient of w and b
dz = z - y
db = dz
dw = dz * x
# update w,b
w = w - eta * dw
b = b - eta * db
print(w,b)
dw=
(z−y
)⋅x,
db=z
−y
dw = (z-y) \cdot x,db = z-y
dw=(z−
y)⋅x
,db=
z−y,這個和公式推導完全一樣。之所以有個dz是想儲存中間計算結果,不重複勞動。因為這個函式是每次內迴圈都被呼叫的,所以要盡量優化。
另外,大家可以看到,在**中,我們並沒有直接計算損失函式值,而只是把它融入在公式推導中。
木頭:哦!我明白了,原來大名鼎鼎的梯度下降,其實就是把推導的結果轉化為數學公式和**,直接放在迭代過程裡!
機器學習之梯度下降法 梯度下降法分析
梯度下降法的基本思想是函式沿著其梯度方向增加最快,反之,沿著其梯度反方向減小最快。在前面的線性回歸和邏輯回歸中,都採用了梯度下降法來求解。梯度下降的迭代公式為 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 梯度是乙個向量,它的...