免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Homemade-Machine-Learning:梯度下降算法 5 分钟上手,完整实现与避坑

Homemade-Machine-Learning:梯度下降算法 5 分钟上手,完整实现与避坑 Homemade-Machine-Learning梯度下降算法 5 分钟上手完整实现与避坑【免费下载链接】homemade-machine-learning Python examples of popular machine learning algorithms with interactive Jupyter demos and math being explained项目地址: https://gitcode.com/gh_mirrors/ho/homemade-machine-learning训练了线性回归损失曲线却要么不动、要么直接爆炸。别急着换模型多半是你没搞懂优化器在干什么。这篇文章用开源项目 Homemade-Machine-Learning 把梯度下降算法拆开讲透读完你能说清楚损失为什么不收敛也知道怎么修。先跑起来再看原理2 分钟看到梯度下降演示别急着啃数学先跑起来。克隆仓库、装依赖、打开一个演示git clone https://gitcode.com/gh_mirrors/ho/homemade-machine-learning cd homemade-machine-learning pip install -r requirements.txt然后用 Jupyter可以在浏览器里跑代码、看图表的交互式笔记本打开 univariate_linear_regression_demo.ipynb。项目自带现成数据集data/iris.csv不用你准备数据点 Run一分钟就能看到损失曲线和拟合直线出来。看到曲线从高位一路降到低位你就知道梯度下降确实在干活。这种我确实能用的信心比先读十页公式值钱。梯度下降到底在干什么一个下山类比想象你站在大雾里的山坡上想走到最低的谷底。看不到全局但能感觉到脚下坡的方向。策略很简单朝下坡方向迈一步一直走到下不了为止。梯度下降干的就是这件事山是成本函数 J(θ)衡量模型预测和真实值差多远坡的方向是梯度J(θ) 增长最快的方向步子迈多大由学习率 αlearning rate决定数学本质就两行J(θ) (1/2m) · Σ(预测值 − 真实值)² θ ← θ − α · ∂J/∂θ第一行算偏了多远第二行就是朝反方向迈一步。项目里这一步写在 linear_regression.py 的 gradient_step 方法里核心就这几行delta predictions - self.labels # 预测与真实值的差距 theta theta * reg_param - alpha * (1 / num_examples) * (delta.T self.data).T # 一步更新把参数朝减小误差的方向收缩 self.theta theta把 α 改一改就能直观感受步长大小——这也是下面所有坑的入口。三种梯度下降变体怎么选演示 notebook 用的是批量梯度下降数据量小收敛过程看得清楚。真实项目里变体有三种选型一张表变体适用场景优点注意点批量 BGD小数据万行以内方向准收敛稳定速度慢大数据吃不消随机 SGD百万行级别数据迭代快能跳出局部坑曲线抖动大要配衰减学习率小批量 Mini-batch多数场景的默认选择速度稳定两相宜batch 大小常取 32~256只记一句话除非数据特别大小批量就是默认答案。梯度下降不收敛怎么办调参与踩坑指南⚡️坑 1学习率太大现象损失上下震荡甚至直接变 inf、NaN。 原因步子迈太大在谷底两边来回横跳。 一行修复把 α 减半从 0.1 往下试0.01 附近通常稳。坑 2损失下降但迭代次数内不收敛现象曲线有坡度就是不平台500 次迭代不够用。 原因α 太小或者特征量级差异大谷底又长又窄。 一行修复加大迭代次数并先做特征归一化——项目里 prepare_for_training.py 默认就做了别关掉。坑 3训练误差低、测试误差高现象训练集上近乎完美换新数据就拉胯。 原因模型把训练集背下来了过拟合。 一行修复调大 λ正则化参数惩罚参数幅值train()的lambda_param参数就是干这个的。完整实现在 homemade/linear_regression/linear_regression.py。项目里还能玩什么梯度下降不只属于线性回归同一个优化器在项目里撑起了一堆演示multivariate_linear_regression_demo.ipynb看多特征下梯度下降如何收敛损失曲线随学习率怎么变logistic_regression_with_linear_boundary_demo.ipynb换个 sigmoid 假设函数同一套梯度下降就能把两类数据分开multilayer_perceptron_demo.ipynb再深一层看反向传播梯度怎么一层层在网络里传回去上面这张全景图看得明白回归、分类、神经网络参数优化的地基都是同一个梯度下降。吃透这一步项目的一半你就通了。开头那条爆炸的损失曲线其实是在给你发信号先查 α再查特征缩放。现在就克隆仓库、打开单变量演示把train()里的 α 改掉跑三遍看损失曲线跟着你的手指动——这种手感比任何公式都牢。【免费下载链接】homemade-machine-learning Python examples of popular machine learning algorithms with interactive Jupyter demos and math being explained项目地址: https://gitcode.com/gh_mirrors/ho/homemade-machine-learning创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表