最速下降法代碼
最速下降法(Steepest Descent Method)是一種常用於最小化函數的算法。它的基本思想是從一個初始點開始,沿著梯度方向(即函數值變化最快的方向)一步步地移動,以達到函數的最小值。下面是一個使用Python編寫的最速下降法的簡單示例:
import numpy as np
def function_to_minimize(x):
return x**2 + 1
def gradient_of_function(x):
return 2 * x
def steepest_descent(initial_x, learning_rate, num_iterations):
x = initial_x
for t in range(num_iterations):
gradient = gradient_of_function(x)
x = x - learning_rate * gradient
print("Iteration {0}: x = {1}".format(t, x))
return x
# 示例使用
initial_x = 1.0
learning_rate = 0.1
num_iterations = 10
minimum_x = steepest_descent(initial_x, learning_rate, num_iterations)
print("Minimum found at x = ", minimum_x)
這個代碼首先定義了一個二次函數及其導數(梯度)。然後,steepest_descent
函數接受一個初始點 initial_x
、一個學習率 learning_rate
和一個疊代次數 num_iterations
,並使用這些參數來執行最速下降法。在每一輪疊代中,算法計算梯度,並使用梯度來更新點 x
。
請注意,這個示例中的函數是一個簡單的二次函數,它的梯度始終是常數。在實際應用中,函數和梯度通常需要通過數值積分或自動微分來計算。此外,學習率 learning_rate
需要適當調整,以確保算法能夠有效地朝著最小值移動。
最速下降法的一個常見問題是它可能會陷入局部最小值,而不是全局最小值。這通常是由於梯度為零的點不一定是全局最小值。在實際應用中,通常會結合其他技術(如線性搜尋、動態學習率調整或更複雜的優化算法)來解決這個問題。