機器學習小組 梯度下降

2021-10-22 23:50:20 字數 3123 閱讀 7430

梯度下降演算法

基本概念

損失函式包含了若干個位置的模型引數,我們就是要找到使損失函式盡可能小的引數未知模型引數。簡單線性回歸使用最小二乘法來求損失函式的最小值。在絕大多數的情況下,損失函式是很複雜的(比如邏輯回歸),根本無法得到引數估計值的表示式。因此需要一種對大多數函式都適用的方法。這就引出了「梯度演算法」。

梯度下降(gradient descent, gd)優化演算法,其作用是用來對原始模型的損失函式進行優化,以便尋找到最優的引數,使得損失函式的值最小。抓住了引數與損失值之間的導數,也就是能夠計算梯度(gradient),通過導數告訴我們此時此刻某引數應該朝什麼方向,以怎樣的速度運動,能安全高效降低損失值,朝最小損失值靠攏。梯度指向誤差值增加最快的方向,導數為0(梯度為0向量)的點,就是優化問題的解。

數學推導

從數學的角度出發,針對損失函式l,假設選取的初始點為(a0,b0);現在將這個點稍微移動一點點,得到(a1,b1)。

將泰勒展開式代入其中,我們則得到:

我們如果按照規定的移動距離公式移動引數,那麼損失函式的函式值始終是下降的,這樣就達到了我們要求的「損失變小」的要求了。如果一直重複這種移動,則可以證明損失函式最終能夠達到乙個最小值。

梯度的方向就是損失函式值在此點上公升最快的方向,是損失增大的區域,而我們要使損失最小,因此就要逆著梯度方向走,自然就是負的梯度的方向,所以此處需要加上負號.

**模擬運算

import numpy as np

import matplotlib.pyplot as plt

from scipy.misc import derivative

deflossfunction

(x):

return

(x-2.5)**

2-1# 在-1到6的範圍內構建140個點

plot_x = np.linspace(-1

,6,141

)# plot_y 是對應的損失函式值

plot_y = lossfunction(plot_x)

plt.plot(plot_x,plot_y)

plt.show(

)def

dlf(theta)

:return derivative(lossfunction, theta, dx=1e-

6)theta =

0.0eta =

0.1epsilon =1e-

6while

true

:# 每一輪迴圈後,要求當前這個點的梯度是多少

gradient = dlf(theta)

last_theta = theta

# 移動點,沿梯度的反方向移動步長eta

theta = theta - eta * gradient

# 判斷theta是否達到最小值

# 因為梯度在不斷下降,因此新theta的損失函式在不斷減小

# 看差值是否達到了要求if(

封裝函式:

```python

theta_history=

defgradient_descent

(initial_theta, eta, epsilon=1e-

6): theta = initial_theta

while

true

:# 每一輪迴圈後,要求當前這個點的梯度是多少

gradient = dlf(theta)

last_theta = theta

# 移動點,沿梯度的反方向移動步長eta

theta = theta - eta * gradient

# 判斷theta是否達到損失函式最小值的位置if(

abs(lossfunction(theta)

- lossfunction(last_theta)

)< epsilon)

:break

defplot_theta_history()

: plt.plot(plot_x,plot_y)

plt.plot(np.array(theta_history)

, lossfunction(np.array(theta_history)

), color=

'red'

, marker=

'o')

plt.show(

)

eta=

0.1theta_history =

gradient_descent(0.

, eta)

plot_theta_history(

)print

("梯度下降查詢次數:"

("梯度下降查詢次數:"

學習率調大:

機器學習 梯度下降

參照 機器學習 這本書的第4.4.3節。一.解決目標及情景假設 當給定一些資料,輸入x向量已知,輸出y也已知,設計乙個線性函式y h x 去擬合這些資料。既然是線性函式,在此不妨設為h x w0 x0 w1 x1。此時我們遇到的問題就是如何確定w0和w1這兩個引數,即w w0,w1 這個向量。既然是...

機器學習 梯度下降

梯度下降法 如果讀者對方向導數和梯度的定義不太了解,請先閱讀上篇文章 方向導數與梯度 前些時間接觸了機器學習,發現梯度下降法是機器學習裡比較基礎又比較重要的乙個求最小值的演算法。梯度下降演算法過程如下 1 隨機初始值 2 迭代 在這裡,簡單談一下自己對梯度下降法的理解。首先,要明確梯度是乙個向量,是...

機器學習 梯度下降

1.引數要同時更新 2.初始化不同,獲得的最小值也不同,即得到的引數也不同,演算法收斂到不同的區域性最優解。凸函式只有全域性最優解,無論如何初始化,不必擔心陷入區域性最優解 3.越接近最小值時,收斂的速度最逐漸減慢,在學習率不變的情況下,越接近最小值 最優解 偏導數的絕對值會越來越小,所以演算法收斂...