尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
刘二大人深度学习实践笔记--梯度下降算法
目录梯度下降算法GD代码随机梯度下降算法 SGD代码批量梯度下降算法MBGD在寻找loss最低的权重时之前使用穷举法但是如果模型中有多个需要确定的参数会导致需要列举的点过多我们把找到合适的求函数最小值的方法叫做优化问题下面介绍梯度下降算法梯度下降算法GD梯度目标函数对权重求导梯度的正方向是上升的负方向是下降的更新方向取梯度的负方向乘以学习率a一般a要取得比较小否则每次调整的过多会无法收敛应用了贪心的算法对于非凸函数不一定能得到全局最优解但是能得到局部的最优解深度学习的目标函数中不一定有很多局部最优点所以经常使用梯度下降算法但是会存在鞍点鞍点这个点的梯度值为0如果陷入鞍点就无法移动无法迭代了代码import numpy as np import matplotlib.pyplot as plt #对数据集保存x为输入y为输出对应位置为一组 x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0] # 初始猜测权重 w 1.0 def forward(x): return x * w # 计算mse def cost(xs,ys): cost 0 for x, y in zip(xs, ys): y_pred forward(x) cost (y_pred - y)**2 return cost/len(xs) # 计算梯度 def gradient(xs, ys): grad 0 for x, y in zip(xs, ys): grad 2*x*(x*w - y) return grad / len(xs) w 1.0 w_list [] cost_list [] print(Predict before training, 4, forward(4)) for epoch in range(100): cost_val cost(x_data, y_data) grad_val gradient(x_data, y_data) #计算梯度 cost_list.append(cost_val) w - 0.01 * grad_val #更新 print(Epoch:,epoch, w, w, loss, cost_val) print(Predict after training, 4, forward(4)) plt.plot(np.arange(1, 101, 1), cost_list) plt.ylabel(cost) plt.xlabel(epoch) plt.show()在训练集上训练时以epoch为横坐标mse为纵坐标正常的函数图像应该是逐渐趋于0收敛的类似于如果最后反而上升了说明训练失败了结果发散了可能是因为学习率a取得太大了随机梯度下降算法 SGD梯度下降算法是将所有样本的损失取平均值作为权重更新的依据随机梯度下降从N个数据中随机选一个的损失作为权重更新的依据引入了一个随机噪声这样即使陷入了鞍点也很可能脱离鞍点代码import numpy as np import matplotlib.pyplot as plt #对数据集保存x为输入y为输出对应位置为一组 x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0] # 初始猜测权重 w 1.0 def forward(x): return x * w # 计算mse,修改为只计算单个样本而不是平均值 def loss(x,y): y_pred forward(x) return (y_pred - y)**2 # 计算梯度修改为只计算单个样本而不是平均值 def gradient(x, y): return 2*x*(x*w - y) w 1.0 cost_list [] print(Predict before training, 4, forward(4)) # 修改为在每个样本更新权重而不是每个轮次更新 for epoch in range(100): epoch_loss 0 for x, y in zip(x_data, y_data): grad gradient(x, y) w w - 0.01 * grad epoch_loss loss(x, y) print(Epoch:,epoch, w, w, epoch_loss, epoch_loss) cost_list.append(epoch_loss) print(Predict after training, 4, forward(4)) plt.plot(np.arange(1, 101, 1), cost_list) plt.ylabel(loss) plt.xlabel(epoch) plt.show()注意梯度下降算法GD中两个样本之间是可以并行的不相互影响因为w每个轮次才改变一次计算效率高但是可能陷入鞍点随机梯度下降算法SGD两个样本之间互相影响因为后面的样本使用的w受前面的改变计算效率低但是得到的最优点更好因此选取折中方案批量梯度下降算法MBGD批量梯度下降算法MBGD每个batch更新一次权重
RELATED

相关推荐

NVIDIA|vLLM 源码静态拆解:一个高性能大模型推理框架,到底由哪些工程能力支撑?

NVIDIA|vLLM 源码静态拆解:一个高性能大模型推理框架,到底由哪些工程能力支撑?

NVIDIA|vLLM 源码静态拆解:一个高性能大模型推理框架,到底由哪些工程能力支撑?本文基于 vLLM 仓库固定快照 9ff7041b55555976359fe8a67eef59f3a055a822 的静态源码证据撰写。 文中不运行项目、不虚构压测结果,也不将“…

📅 2026/9/22 5:16:15
从 GEM200 升级到 GEM300:老厂改造要补哪几层,为什么没人愿意做?

从 GEM200 升级到 GEM300:老厂改造要补哪几层,为什么没人愿意做?

从 GEM200 升级到 GEM300:老厂改造要补哪几层,为什么没人愿意做?摘要:很多 200mm Fab 的厂长都有一个梦:把老产线升级到 300mm 标准,实现单片追踪、自动排产、EAP 全自动调度。但实现是——国内跑了十几年的…

📅 2026/9/17 0:31:42
数据结构‑二叉树(二):二叉堆从零实现|Heap结构设计 + 建堆优化 + 堆排序深度解析

数据结构‑二叉树(二):二叉堆从零实现|Heap结构设计 + 建堆优化 + 堆排序深度解析

写在前面 上一篇 数据结构-二叉树(一):树的基础概念与二叉树核心结构-CSDN博客 ,我们学习了树、二叉树以及完全二叉树,并得到数组存储下父子下标公式: 左孩子:left parent * 2 1 右孩子&…

📅 2026/10/8 2:34:22
MORE NEWS

更多资讯

📰

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

📰

综合之自动售货机2.0

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

AHT10读取温湿度

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

ws2812动态滚动显示图片

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

MIPI协议介绍

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

【后端】ORM / ODM

待更新

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬