梯度——表示某一函式在該點處的方向導數沿著該方向取得最大值,即函式在該點處沿著該方向(此梯度的方向)變化最快。對於一元函式y=
f(x)
,其梯度
為∂y∂
x,對於
二元函式
f(x,
y),其
梯度為(
∂f∂x
,∂f∂
y)步長——在梯度下降迭代的過程中,每一步沿梯度負方向前進的長度
損失函式——在單個訓練樣本上的,也就是就算乙個樣本的誤差
代價函式——在整個訓練集上面的,也就是所有樣本的誤差的總和的平均,也就是損失函式的總和的平均
梯度下降法,也就是使函式按照其梯度方向的反方向(也就是下降最快的方向)改變自變數,從而是函式以最快的方向走向最低點,類似於下山,我們在不知道山的全貌的情況下,沿著坡度最陡的方向往下走比較可能最快的走到山底(但也可能是區域性最低處,這跟初始點,每步走的長度等有關)。
梯度下降法有批梯度下降,隨機梯度下降,以及小批量梯度下降
批梯度下降在求梯度時使用了所有的樣本,是一種比較常用的梯度下降法。
批梯度下降過程如下
根據資料的特徵x和標籤y之間的分布情況,假設乙個擬合函式y=
f(x)
,如此處
假設為y
=f(x
)=θ0
+θ1x
1+θ2
x2+.
..++
θnxn
,設x0
=1,則
y=f(
x)=θ
0x0+
θ1x1
+θ2x
2+..
.++θ
nxn,
於是y=
xθ。其
中,x為
m∗n矩
陣,θ為
n∗1向
量,y為
m∗1向
量,m為
樣本數,
n為乙個
樣本的特
徵數求得代價函式為j(
θ)=1
2m(x
θ−y)
t(xθ
−y)
若代價函式j(
θ)小到滿足精度要求,則結束梯度下降演算法,否則繼續第3步
求梯度∂j(
θ)∂θ
=xt(
xθ−y
)m用梯度∂j(
θ)∂θ
來求新的
θ θ=
θ−α∂
j(θ)
∂θ其中,α
為步長,調到第2步
**如下:
# -*- coding: utf-8 -*-
import numpy as np
defd_j
(x, y, theta):
# x表示樣本
# y表示樣本對應的標籤
# theta表示引數
return np.matmul(x.t, (np.matmul(x, theta) - y)) / np.shape(x)[0]
defcost_j
(x, y, theta):
# x表示樣本
# y表示樣本對應的標籤
# theta表示引數
x_theta_red_y = np.matmul(x, theta) - y
return np.matmul(x_theta_red_y.t, x_theta_red_y) / (2 * np.shape(x)[0])
step_size = 0.001
# 步長
max_iters = 10000
# 最大迭代次數
eps = 0.0001
# 精度
deftrain_gadient_descent
(x, y, theta):
cost = 100
cur_iters = 0
while cost > eps and cur_iters < max_iters:
theta = theta - step_size * d_j(x, y, theta)
cur_iters += 1
cost = cost_j(x, y, theta)
return theta
if __name__ == '__main__':
# 輸入的特徵和標籤
x = np.array([[1 ,1, 4], [1 ,2, 5], [1 ,5, 1], [1 ,4, 2]]) # feature
y = np.array([[19], [26], [19], [20]]) # lebal
# 假設的函式為 y=theta0+theta1*x1+theta2*x2
theta = np.array([[0.1],[0.1], [0.1]]) # 初始的theta引數
print(train_gadient_descent(x, y, theta))
隨機梯度下降法,其實和批量梯度下降法原理類似,區別在與求梯度時沒有用所有的m個樣本的資料,而是僅僅選取乙個樣本來求梯度。對應的更新公式是:θi
=θi−
α(hθ
(xj0
,xj1
,...
xjn)
−yj)
xji
批梯度下降法與隨機梯度下降法之間的比較如下:
該方法結合了上面兩種的特點,每次採用小批量的樣本進行迭代計算,是一種比較中庸的方法。
梯度下降法學習總結
梯度下降法是求解無約束優化問題的迭代演算法,每一步要求解目標函式的梯度向量。假設目標函式f x 在實數域上具有一階連續偏導數,無約束最優化問題為 mi nx r nf x 設x 是目標函式極小值點。選取適當的初值x 0 不斷迭代,更新 x 的值,直到梯度收斂 目標函式值收斂 的值收斂。在迭代的每一步...
筆記 梯度下降法
詳解機器學習中的梯度消失 原因及其解決方法 導數 方向導數和梯度 要了解梯度下降演算法是什麼首要知道梯度是什麼,導數和方向導數又是了解梯度的前提。導數導數反映的是函式y f x 在某一點處沿x軸正方向的變化率,如果f x 0,說明f x 的函式值在x點沿x軸正方向是趨於增加的 如果f x 0,說明f...
學習筆記 隨機梯度下降法
神經網路和深度學習 梯度下降法中,目標函式是整個訓練集上的風險函式,這種方式稱為批量梯度下降法 batch gradient descent,bgd 批量梯度下降法在 每次迭代時需要計算每個樣本上損失函式的梯度並求和 當訓練集中的樣本數量n很大時,空間複雜度比較高,每次迭代的計算開銷也很大。真正的優...