Gradient Descent
整理自Andrew Ng的machine learning课程。
目录:
- 梯度下降算法
- 梯度下降算法的直观展示
- 线性回归中的梯度下降
前提:
线性回归模型 :h(θ0,θ1)=θ0+θ1x
损失函数:J(θ0,θ1)=12m∑mi=1(hθ(x(i))−y(i))2
1、梯度下降算法
目的:求解出模型的参数 / estimate the parameters in the hypothesis function
如下图所示,θ0,θ1代表模型的参数,J(θ0,θ1)代表模型的损失函数
目的:从某一点出发,走到最低点。
怎么走:沿着所在点处最陡的方向下降。某一点山坡最陡的方向就是这一点的切线方向,也就是这一点的导数。每一步走多大取决于学习率α。
在图中,每一个十字星之间的距离取决与α的大小。小的α会使两点之间的距离比较小,大的α会产生大的步距。每一步走的方向取决于所在点的偏导。不同的起始点会有不同的终点,如上图从A出发最终到达B,而从C出发最终到达D。
梯度下降算法如下:
θj:=θj−α∂∂θjJ(θ0,θ1) repeat util convergence
注意:θ0,θ1在每一步的迭代中都是同步更新的
2、梯度下降算法的直观展示
如下图:此图是一个损失函数的图像
当θ1在最小值点的右边时,图像的斜率(导数)是正的,学习率α也是正的,根据梯度下降算法的公式,更新后的θ1是往左边方向走了,的确是朝着最小值点去了;
当θ1在最小值点的左边时,图像的斜率(导数)是负的,学习率α是正的,根据梯度下降算法的公式,更新后的θ1是往右边方向走了,也是朝着最小值点去了;
另外,我们需要调整α使的算法可以在一定的时间内收敛。收敛失败或者收敛的非常慢,都说明使用的步长α是错误的。
如果使用固定的α,算法会收敛吗?
梯度下降算法隐含的一个信息就是,当点越来越接近最小值点的时候,梯度也会越来越小,到达最小值点时,梯度为0;
所以即使不去调整α,走的步长也是会越来越短的,算法最终也还是会收敛的,所以没必要每次都调整α的大小。
3、线性回归中的梯度下降算法
当把梯度下降算法具体的运用到线性回归上去的时候,算法就可以在偏导部分写的更加具体了:
repear until convergence {
θ0:=θ0−α1m∑mi=1(hθ(xi)−yi)
θ1:=θ1−α1m∑mi=1((hθ(xi)−yi)xi)
}
batch gradient descent
以上:在每一步更新参数时,让所有的训练样本都参与更新的做法,称为batch gradient descent;
注意到:虽然梯度下降算法可能会陷入局部最优的情况,但是在线性回归中不存在这种问题,线性回归只有一个全局最优,没有局部最优,算法最终一定可以找到全局最优点(假设α不是特别大)。
线性回归中,J是一个凸二次函数,这样的函数是碗状的(bowl-shaped),没有局部最优,只有一个全局最优。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· 对象命名为何需要避免'-er'和'-or'后缀
· JDK 24 发布,新特性解读!
· .NET Core奇技淫巧之WinForm使用Python.NET并打包
· Java24你发任你发,我用Java8
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI