如何在Python中實現梯度下降演算法以尋找局部最小值?

王林
發布: 2023-09-06 22:37:05
轉載
688 人瀏覽過

梯度下降是機器學習中重要的最佳化方法,用於最小化模型的損失函數。通俗地說,它需要反覆改變模型的參數,直到找到最小化損失函數的理想值範圍。此方法的工作原理是沿著損失函數負梯度的方向,或者更具體地說,沿著最速下降的路徑,邁出微小的一步。學習率是調節演算法速度和準確性之間權衡的超參數,它會影響步長的大小。許多機器學習方法,包括線性回歸、邏輯回歸和神經網絡,僅舉幾例,都採用梯度下降。它的主要應用是模型訓練,其目標是最小化目標變數的預期值和實際值之間的差異。在這篇文章中,我們將研究在 Python 中實現梯度下降來找到局部最小值。

現在是時候在 Python 中實現梯度下降了。以下是我們如何實現它的基本說明 -

  • 首先,我們導入必要的函式庫。

  • 定義它的函數及其導數。

  • 接下來,我們將應用梯度下降函數。

  • 應用函數後,我們將設定參數來尋找局部最小值,

  • #最後,我們將繪製輸出圖。

在Python中實現梯度下降

導入庫

import numpy as np
import matplotlib.pyplot as plt
登入後複製

接著我們定義函數 f(x) 及其導數 f'(x) -

def f(x):
   return x**2 - 4*x + 6

def df(x):
   return 2*x - 4
登入後複製

F(x) 是必須減少的函數,df 是其導數 (x)。梯度下降方法利用導數透過揭示函數沿途的斜率來引導自身趨向最小值。

然後定義梯度下降函數。

def gradient_descent(initial_x, learning_rate, num_iterations):
   x = initial_x
   x_history = [x]
  
   for i in range(num_iterations):
       gradient = df(x)
       x = x - learning_rate * gradient
       x_history.append(x)
      
   return x, x_history
登入後複製

x的起始值、學習率和所需的迭代次數被傳送到梯度下降函數。為了在每次迭代後保存 x 的值,它將 x 初始化為其原始值並產生一個空列表。然後,該方法對所提供的迭代次數執行梯度下降,根據方程式 x = x - 學習率 * 梯度在每次迭代中更改 x。此函數會產生每次迭代的 x 值以及 x 的最終值的清單。

梯度下降函數現在可用來定位 f(x) 的局部最小值 -

範例

initial_x = 0
learning_rate = 0.1
num_iterations = 50

x, x_history = gradient_descent(initial_x, learning_rate, num_iterations)

print("Local minimum: {:.2f}".format(x))
登入後複製

輸出

Local minimum: 2.00
登入後複製

在此圖中,x 一開始設定為 0,學習率為 0.1,並執行 50 次迭代。最後,我們發布 x 的值,該值應該接近 x=2 處的局部最小值。

繪製函數 f(x) 和每次迭代的 x 值可以讓我們看到實際的梯度下降過程 -

範例

# Create a range of x values to plot
x_vals = np.linspace(-1, 5, 100)

# Plot the function f(x)
plt.plot(x_vals, f(x_vals))

# Plot the values of x at each iteration
plt.plot(x_history, f(np.array(x_history)), 'rx')

# Label the axes and add a title
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('Gradient Descent')

# Show the plot
plt.show()
登入後複製

輸出

如何在Python中實現梯度下降演算法以尋找局部最小值?

#結論

總之,為了找到函數的局部最小值,Python 利用了稱為梯度下降的有效最佳化過程。梯度下降透過在每一步計算函數的導數,沿著最陡下降的方向重複更新輸入值,直到達到最低值。在 Python 中實現梯度下降需要指定要最佳化的函數及其導數、初始化輸入值以及確定演算法的學習率和迭代次數。優化完成後,可以透過追蹤其步驟到最小值並查看它是如何達到這一目標來評估該方法。梯度下降在機器學習和最佳化應用中是一種有用的技術,因為 Python 可以處理大數據集和複雜的函數。

以上是如何在Python中實現梯度下降演算法以尋找局部最小值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!