二 機器學習 演算法 梯度的上公升與下降

2021-09-29 21:00:46 字數 2479 閱讀 8508

先理解下什麼是梯度,用通俗的話來說就是在原變數的基礎上每次迭代增加一定的量,比較各個變數下目標函式的大小。

例如有乙個目標函式 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

望您:「情深不壽,強極則辱,謙謙君子,溫潤如玉」。

機器學習 梯度下降演算法

梯度下降法是乙個 最優化演算法,通常也稱為最速下降法。最速下降法是求解無約束優化問題最簡單和最古老的方法之一,雖然現在已經不具有實用性,但是許多有效演算法都是以它為基礎進行改進和修正而得到的。最速下降法是用負梯度方向為搜尋方向的,最速下降法越接近目標值,步長越小,前進越慢。可以用於求解非線性方程組。...

機器學習 梯度下降演算法

梯度下降法是乙個最優化演算法,通常也稱為最速下降法。最速下降法是求解無約束優化問題最簡單和最古老的方法之一,雖然現在已經不具有實用性,但是許多有效演算法都是以它為基礎進行改進和修正而得到的。最速下降法是用負梯度方向為搜尋方向的,最速下降法越接近目標值,步長越小,前進越慢。可以用於求解非線性方程組。舉...

機器學習 梯度下降演算法

梯度下降演算法。什麼是梯度 梯度 梯度的本意是乙個向量,由函式對每個引數的偏導組成,表示某一函式在該點處的方向導數沿著該方向取得最大值,即函式在該點處沿著該方向變化最快,變化率最大。梯度下降演算法原理 演算法思想 梯度下降是一種非常通用的優化演算法,能夠為大範圍的問題找到最優解。梯度下降的中心思想就...