You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib中求多项式曲线的梯度及正斜率临界点

实现多项式曲线梯度由负转正临界点的检测

你已经通过5次多项式拟合了学习率(Learning Rate)与损失(Loss)的关系曲线,要找到梯度由负转正的临界点并以此停止训练,可以按以下步骤实现:

步骤1:计算拟合多项式的导数(梯度)

numpy.poly1d 对象支持直接调用 deriv() 方法生成导函数,导函数的取值就是原多项式在对应点的梯度。

步骤2:求解导函数的根(梯度为0的点)

利用 numpy.roots() 函数求解导函数的根,这些根对应原多项式的极值点,其中我们需要的是斜率由负转正的极小值点(对应损失曲线的谷底)。

步骤3:筛选有效临界点

由于学习率的范围是1到16,需要过滤掉超出这个范围的根,同时只保留实根(复数根无实际意义),最后验证该点是否是斜率由负转正的点。

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

loss = [7,6,4,4,3,4,2,1,1,2,3,4,4,5,6,7]
learning_rate = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]

# 拟合5次多项式
draw_polynomial = np.poly1d(np.polyfit(learning_rate, loss, 5))
# 生成多项式的导函数(梯度函数)
gradient_poly = draw_polynomial.deriv()

# 求解导函数的根(梯度为0的点)
roots = np.roots(gradient_poly)

# 筛选有效根:在学习率范围内的实根
valid_roots = []
for root in roots:
    # 只保留实根,且在[1,16]区间内
    if np.isreal(root) and 1 <= root.real <= 16:
        valid_roots.append(root.real)

# 确定斜率由负转正的临界点(极小值点)
# 验证方法:取根左侧和右侧的点,看梯度符号变化(负→正)
critical_point = None
for root in valid_roots:
    left_grad = gradient_poly(root - 0.1)
    right_grad = gradient_poly(root + 0.1)
    if left_grad < 0 and right_grad > 0:
        critical_point = root
        break

# 可视化结果
polyline = np.linspace(1, 16, 50)
plt.plot(learning_rate, loss, color='orange', label='原始数据')
plt.plot(polyline, draw_polynomial(polyline), color='purple', label='5次拟合曲线')
# 画出临界点
if critical_point:
    plt.scatter(critical_point, draw_polynomial(critical_point), color='red', s=100, label='临界点')
    plt.text(critical_point + 0.5, draw_polynomial(critical_point), f'LR={critical_point:.2f}', fontsize=10)

plt.xlabel("Learning Rate")
plt.ylabel("Loss")
plt.legend()
plt.show()

# 输出临界点的学习率值
if critical_point:
    print(f"梯度由负转正的临界点学习率为: {critical_point:.2f}")

说明

  • 导函数的根对应原多项式的极值点,通过判断根左右两侧的梯度符号,就能确定哪个是斜率由负转正的极小值点——也就是你需要停止训练的临界点。
  • 代码中加入了可视化标注,能直观看到临界点在损失曲线上的位置。

内容的提问来源于stack exchange,提问作者Sunjaree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:40:23