先理解下什麼是梯度,用通俗的話來說就是在原變數的基礎上每次迭代增加一定的量,比較各個變數下目標函式的大小。
例如有乙個目標函式 y = 2χ2 ,那麼求目標函式的最小值,我們先給x賦乙個值-5,然後每次給x加乙個值(有正負方向的值),這樣y每次都會有乙個值,當值減小幅度達到一定精確度時停止,這是的x就是我們求的最優解。
#先導入相關的包
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#假設乙個函式
f =lambda x:
(x-3)**
2+2.5x -
7.5# 讓我們畫一下影象去看看
# 先自己去求一下曲線的最低點的值,也就是我們要求的值
# 導數 = 斜率 = 梯度2*
(x-3)*
1+2.5=02
*x =
3.5x =
1.75
# 1.75 也就是我們要**的值
# 下面開始**,用函式表示曲線的斜率
d =lambda x:2*
(x-3)+
2.5# 學習率每次學習之後改變的數值 sep,這個值的選取是非常的重要的
# 如果選取太大,則會發生梯度**,因為如果太大的話,可能加乙個sep就會跳過那個**的範圍,結果就會一直的變大
learning_rate =
0.1# 此處的min_value是預先假設的**值,機器學習的強大之處就在於,可以根據乙個隨意的值,利用自己的演算法求出正確的值
# 也可以定義乙個定值 min_value = 3
min_value = np.random.ranint(0,
3, size=1)
[0]print
('random隨機值'
, min_value)
# min_value_last 是與min_last一直相比較的值
min_value_last = min_value +
0.1# tol 是自定義的**範圍值,當二者相差小於0.0001時,說明此時的**值已經非常的接近正確結果了
tol =
0.0001
count=
0
while
true
:if np.
abs(min_value - min_value_last)
< tol:
break
min_value_last = min_value
# 帶入min_value實際就是每次去利用**值求出斜率,當改變值很小時,說明斜率接近 為0,為極值點
# 如果很難理解可以想一想 乙個一公尺的木棍 一直 /2 是不是可以無限的折,
# 同樣的道理,無限的減少一點越減越少
min_value = min_value - learning_rate*d(min_value)
count +=
1print
('---------->第%d次**'
通過**結果可以分析得到,經過了34次**,此時滿足|min_value_last - min_value| <= 0.0001 得出的**值也是與正確的結果非常的吻合.下面讓我們畫圖來看下具體的過程
# 此時我們定義 min_value 為固定的值 -2
x = np.linspace(-2
望您:「情深不壽,強極則辱,謙謙君子,溫潤如玉」。
機器學習 梯度下降演算法
梯度下降法是乙個 最優化演算法,通常也稱為最速下降法。最速下降法是求解無約束優化問題最簡單和最古老的方法之一,雖然現在已經不具有實用性,但是許多有效演算法都是以它為基礎進行改進和修正而得到的。最速下降法是用負梯度方向為搜尋方向的,最速下降法越接近目標值,步長越小,前進越慢。可以用於求解非線性方程組。...
機器學習 梯度下降演算法
梯度下降法是乙個最優化演算法,通常也稱為最速下降法。最速下降法是求解無約束優化問題最簡單和最古老的方法之一,雖然現在已經不具有實用性,但是許多有效演算法都是以它為基礎進行改進和修正而得到的。最速下降法是用負梯度方向為搜尋方向的,最速下降法越接近目標值,步長越小,前進越慢。可以用於求解非線性方程組。舉...
機器學習 梯度下降演算法
梯度下降演算法。什麼是梯度 梯度 梯度的本意是乙個向量,由函式對每個引數的偏導組成,表示某一函式在該點處的方向導數沿著該方向取得最大值,即函式在該點處沿著該方向變化最快,變化率最大。梯度下降演算法原理 演算法思想 梯度下降是一種非常通用的優化演算法,能夠為大範圍的問題找到最優解。梯度下降的中心思想就...