趋近智
从头开始使用 Python 实现基本的梯度下降 (gradient descent)算法。这个实践练习展示了迭代优化过程的实际运行。
我们将应用梯度下降来寻找一个简单单变量函数的最小值。虽然机器学习 (machine learning)问题涉及成千上万或数百万个变量(参数 (parameter))的函数,但从一个变量开始,可以更容易地掌握核心更新机制并观察该过程。
我们来考虑函数 。这是一个向上开口的抛物线,因此它有一个单一的全局最小值。
我们的目标是使用梯度下降 (gradient descent)找到使 最小化的 值。
首先,我们需要函数本身及其导数(梯度)。 函数为:
导数(在此一维情况下为梯度)告诉我们任意点 的斜率:
我们可以在 Python 中定义这些:
import numpy as np
# 定义函数
def f(x):
return x**2 - 4*x + 5
# 定义函数的梯度(导数)
def gradient(x):
return 2*x - 4
梯度下降的核心是迭代应用的更新规则: 其中 是学习率。
我们来实现它。我们需要:
def gradient_descent(start_x, learning_rate, n_iterations):
"""
执行梯度下降以找到 f(x) 的最小值。
参数:
start_x: x 的初始猜测值。
learning_rate: 步长 alpha。
n_iterations: 要执行的迭代次数。
返回值:
一个包含以下内容的元组:
- x 的最终估计值。
- 每次迭代时 x 值的列表(历史记录)。
"""
x = start_x
history = [x] # Store history for visualization
print(f"从 x = {x:.4f} 开始梯度下降")
print("迭代 | 当前 x | 梯度 | 下一个 x")
print("--------------------------------------")
for i in range(n_iterations):
grad = gradient(x)
next_x = x - learning_rate * grad
print(f"{i+1:4} | {x:9.4f} | {grad:8.4f} | {next_x:9.4f}")
x = next_x
history.append(x)
print("--------------------------------------")
print(f"梯度下降在 {n_iterations} 次迭代后完成。")
print(f"估计的最小值出现在 x = {x:.4f}")
print(f"f(x) 在最小值处的值:{f(x):.4f}")
return x, history
# --- 设置参数并运行 ---
initial_x = 0.0 # 起始点
alpha = 0.1 # 学习率
iterations = 25 # 步数
final_x, x_history = gradient_descent(initial_x, alpha, iterations)
运行这段代码将打印算法在每一步的进展,展示 的值如何接近最小值。您应该观察到,当 接近最小值时,梯度会趋近于零(我们通过解析方法知道,最小值在 处,因为 意味着 )。
可视化该过程可以提供更清晰的认识。我们可以绘制函数 并叠加梯度下降 (gradient descent)算法所采取的步骤。
该图显示了二次函数 和梯度下降从 开始,学习率为 时所采取的路径。每个标记 (token)代表迭代中 的值,逐步向 处的最小值移动。上述代码片段手动包含了路径的示例值;您应该将其替换为
gradient_descent函数返回的x_history值,并使用f(x)计算相应的y值。
尝试更改 initial_x、learning_rate (alpha) 和 iterations。观察这些变化如何影响收敛:
initial_x: 对于这个凸函数,算法仍应收敛到相同的最小值。learning_rate(例如 0.8): 可能收敛更快,但如果过大(例如对于此函数为 1.1),算法可能会越过最小值并发生发散( 值将越来越大)。learning_rate(例如 0.01): 收敛将更慢,需要更多迭代才能接近最小值。iterations: 算法可能在达到最小值之前停止。这个简单实现展示了核心思想。在机器学习 (machine learning)中, 代表成本函数 , 代表整个模型参数集 ,而 代表梯度向量 (vector) 。梯度计算通常涉及反向传播 (backpropagation)等技术(下一章将介绍),但基本的更新步骤保持不变:沿与梯度相反的方向调整参数以最小化成本。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•