如果嫌隨機梯度下降的方法還不夠快,沒事,總會有大神跳出來說還有動量梯度下降。
隨機下降在這裡
普通梯度下降,每次調整權重的方法就是梯度乘以學習速率:ω=
ω−η∗
g ω=ω
−η∗g
而動量梯度下降,不僅考慮了當前的梯度,還用到了之前的梯度:lg
=lg∗
disc
ount
+gl g=
lg∗d
isco
unt+
gω=ω
−η∗l
g ω=ω
−η∗l
g從公式可以看出,梯度裡包含了上一次梯度,權重discount一般設定為0.9。
實踐證明,動量梯度下降收斂速度真的很快,**如下:
'''
普通的全梯度下降方法
'''import numpy as np
import math
print(__doc__)
sample = 10
num_input = 5
#加入訓練資料
np.random.seed(0)
normalrand = np.random.normal(0,0.1,sample) # 10個均值為0方差為0.1 的隨機數 (b)
weight = [5,100,-5,-400,0.02] # 1 * 5 權重
x_train = np.random.random((sample, num_input)) #x 資料(10 * 5)
y_train = np.zeros((sample,1)) # y資料(10 * 1)
for i in range (0,len(x_train)):
total = 0
for j in range(0,len(x_train[i])):
total += weight[j]*x_train[i,j]
y_train[i] = total+ normalrand[i]
# 訓練
np.random.seed(0)
weight = np.random.random(num_input+1)
np.random.seed(0)
recordgrade = np.random.random(num_input+1)
discount = 0.9
rate = 0.04
for epoch in range(0,500):
# 計算loss
predicty = np.zeros((len(x_train)))
for i in range(0,len(x_train)):
predicty[i] = np.dot(x_train[i],weight[0:num_input])+ weight[num_input]
loss = 0
for i in range(0,len(x_train)):
loss += (predicty[i]-y_train[i])**2
print("epoch: %d-loss: %f"%(epoch,loss)) #列印迭代次數和損失函式
# 計算梯度並更新
for i in range(0,len(weight)-1): #權重w
grade = 0
for j in range(0,len(x_train)):
grade += 2*(predicty[j]-y_train[j])*x_train[j,i]
recordgrade[i] = recordgrade[i]*discount + grade
weight[i] = weight[i] - rate*recordgrade[i]
grade = 0
for j in range(0,len(x_train)): #偏差b
grade += 2*(predicty[j]-y_train[j])
recordgrade[num_input] = recordgrade[num_input]*discount + grade
weight[num_input] = weight[num_input] - rate*recordgrade[num_input]
print(weight)
線性回歸 梯度下降
線性回歸演算法屬於監督學習的一種,主要用於模型為連續函式的數值 過程總得來說就是初步建模後,通過訓練集合確定模型引數,得到最終 函式,此時輸入自變數即可得到 值。1 初步建模。確定假設函式 h x 最終 用 2 建立價值函式 j 也叫目標函式 損失函式等,求引數 用 3 求引數 對價值函式求偏導 即...
線性回歸梯度下降
梯度下降 一種最優化演算法,就是沿著函式的梯度方向尋找函式的最小值 線性回歸模型 最終的目標就是利用 梯度下降法 求出使 誤差函式 最小的線性函式的系數值 梯度下降演算法有兩種 1.批量梯度下降 batch gradient descent 2.隨機梯度下降 stochastic gradient ...
線性回歸 梯度下降
利用回歸方程對乙個或多個自變數和因變數之間進行建模的分析方式損失 計算損失用最小二乘法。優化。優化有兩種方式。一種是正規方程解法通常只適用於極少量資料,一般不會用 二是梯度下降的方式通常使用梯度下降 梯度下降的簡介。梯度就是倒導數 切線。沿著切線的方向下降的最快。梯度下降有兩個引數,起始點和學習率 ...