梯度下降算法是一种用于寻找函数最小值的优化方法。在机器学习中,常用于训练模型,帮助我们找到模型参数(比如权重和偏置)的最佳值,以使模型的预测误差(损失函数)最小。
想象你站在一个山顶上,目标是找到最低的山谷(最小值)。你不能直接看见山谷在哪,但可以根据地势的陡峭程度(斜率)决定往哪个方向走。
关键问题:在一个函数中,我们如何找到最小值?如何"下山"找到最优解?
给出一个简单的函数,比如 \(f(x)=x^{2}\),目的是找到函数的最小值。在一维情况下,梯度就是函数的导数,表示曲线在某一点的斜率。使用简单的数学公式告诉学生如何计算导数:例如: \(f'(x) = 2x\)。
从某个初始点(如 \(x_{0}=3\))开始,根据梯度下降的公式 \(x_{n+1} = x_n -- \eta \cdot f'(x_n)\) 更新,在这里,\(η\) 是学习率,控制每次更新的步长。
例如:选取合适的学习率 \(η=0.1\) ,逐步计算几次迭代:
- \(x_{1}=3-0.1*6=2.4\)
- \(x_{2}=2.4-0.1*4.8=1.92\)
- ...
- \(x_{n}\) 接近最优解 0 时,\(f(x)\) 接近最小值
接下来,扩展到二维函数,比如 \(f(x)=x^{2}+y^{2}\),这个函数代表一个圆形山谷,最低点在 (0,0)。梯度下降的多维公式 \((x_{n+1}, y_{n+1}) = x_n -- \eta \cdot f'(x_n, y_n)\):
- \(x_{n+1} = x_n -- \eta \cdot 2x_n\)
- \(y_{n+1} = x_n -- \eta \cdot 2y_n\)
选择一个初始点 \((x_{0}=3, y_{0}=4)\),使用适当的学习率 \(η=0.1\) ,逐步计算几次迭代:
- \(x_1=3−0.1⋅6=2.4, y_1=4−0.1⋅8=3.2\)
- \(x_2=2.4−0.1⋅4.8=1.92, y_1=3.2−0.1⋅6.4=2.56\)
- ...
梯度下降每次迭代都沿着梯度的方向前进,以找到函数的局部或全局最小值。从一维到多维,只是增加了变量的数量,核心过程没有变。在高维情况下,每个变量都会有一个对应的梯度分量,所有的更新过程仍然遵循相同的逻辑。
注意:梯度下降算法在进行迭代优化时,需要设置初始值和学习率。在复杂函数优化时,不同的初始值和学习率都会影响到是否找到最优解,以及优化的速度。