当前位置: 首页 > article >正文

3.一文看懂反向传播:从单个神经元到 PyTorch 自动求导

反向求导多层次对应一个神经单个神经元场景学习这一篇的前提是已经学会了梯度算法和线性结构算法不明白的可以去看我之前的文章。前面看不懂的直接跳转到 “ 反向传播的流程 ”底层的数学算法z 是中间变量 u 的函数u 是自变量 w权重的函数因此 z 通过 u 间接依赖 w。公式核心逻辑为单路相乘对权重 w 求偏导时仅存在 z→u→w 一条路径如果嵌套的跟多那就继续导将路径上的偏导数直接相乘即可无其他分支无需相加。注意这一篇文章只考虑单个神经元场景多个场景在下一篇完成。第一张图片是多个神经元的场景第二章是本文中对应的底层的运用逻辑我们知道对一个函数的求导就是求这个函数的最值。大模型的运用就是面对海量的训练数据找到一个最贴近输入一个x输出一个正确的y值。这样我们的大模型在没有对应的y值时也能通过之前我们训练的函数计算出预算出。所以训练的过程中我们要不断的求导直到找到最合适的 w 和 b 。类比人类的大脑如图看不懂的直接看下一张图树突就是我们的影响因数 w 和 b 但是树突不可能只有一个是有很多个的。轴突他输出信息的一个过程在我们的反向传播可以类比成激活函数他的作用就是放在我们的函数模型太过单一这里的意思就是嵌套另外一个函数上面的类比图只类比了一层一组 w 和 b树突对应 激活函数轴突。现在来看多层对应单个神经元的图反向传播的流程好的现在就根据这个来解说反向传播的流程我们先假设值 w1 b1 w2 b2 w3 b3,激活函数是在每一个算完 y wx b 对 fy 再进行嵌套的一个函数。正向运算一步一步的计算得到一个 y_forward 值。将 y_forward 与真正的 y_true 进行相减去得到损失值 loss 1/2*( y_forward - y_true )^2。为什么要*1/2这是因为我们方便计算倒数自己规定的因为导一下就没有常数了这个不影响因为反向传播会自己寻找最合适的 w 和 b进行平方是为了保证非负数。经理过这一步了我们就得到了 w1 b1 w2 b2 w3 b3 y_forward loss这几个值接下来我们就要进行反向求导一步一步的得到最佳 w 和 b分别对w1 b1 w2 b2 w3 b3进行求导注意了我们求导的函数是 loss 1/2*( y_forward - y_true )^2。求导公式如图求导之后我们得到了w1 b1 w2 b2 w3 b3 他们的导数然后用跟新公式对他们进行跟新。如此反复我们就能得到一个最佳的 w1 b1 w2 b2 w3 b3值。代码展示三层四层就是多两个参数思路代码是一样的# 这个库里面有自动帮我们计算的求导的方法就不用自己去手动计算了importtorch# 定义数据x_data[0.0,1.0,2.0,3.0]y_data[1.0,3.0,5.0,7.0]# 第1层参数w1torch.tensor([0.1],requires_gradTrue)# 第1层权重b1torch.tensor([0.0],requires_gradTrue)# 第1层偏置# 第2层参数w2torch.tensor([0.1],requires_gradTrue)# 第2层权重b2torch.tensor([0.0],requires_gradTrue)# 第2层偏置# 第3层参数输出层w3torch.tensor([0.1],requires_gradTrue)# 第3层权重b3torch.tensor([0.0],requires_gradTrue)# 第3层偏置# 定义学习率lr0.1# 定义遍历次数epochs2000# 定义期望函数defforward(x):# 第一层z1w1*xb1# a1 torch.sigmoid(z1) # 激活函数 这里知道了是线性结构就不用激活函数了如果要的话就嵌套进去就好了注意几个传参就是了# 第二层z2w2*z1b2# a2 torch.sigmoid(z2) # 激活函数这里知道了是线性结构就不用激活函数了如果要的话就嵌套进去就好了注意几个传参就是了# 第三层输出y_predw3*z2b3returnz1,z2,y_pred# 定义损失函数defloss_n(y_pred,y_true):return0.5*(y_pred-y_true)**2# 定义变量方便找到最小的损失值best_lossfloat(inf)# 先设成无穷大方便后面比较best_w10best_b10best_w20best_b20best_w30best_b30# 开始遍历计算forepochinrange(epochs):total_loss0forx,yinzip(x_data,y_data):# 先将原始数据转化成可以计算的形式# 因为 PyTorch 的运算和自动求导主要针对 tensorx_tensortorch.tensor([x])y_tensortorch.tensor([y])# 拿到原始数据z1,z2,y_predforward(x_tensor)# 开始计算求导,用链式法则把每一层参数的梯度都求出来lossloss_n(y_pred,y_tensor)loss.backward()# 梯度跟新公式withtorch.no_grad():w1-lr*w1.grad b1-lr*b1.grad w2-lr*w2.grad b2-lr*b2.grad w3-lr*w3.grad b3-lr*b3.grad# 记录损失,.item()是取里面的值因为他是tensor对象的数据total_lossloss.item()# 清零w1.grad.zero_()b1.grad.zero_()w2.grad.zero_()b2.grad.zero_()w3.grad.zero_()b3.grad.zero_()# 平均损失值total_losstotal_loss/len(x_data)# 找最佳的参数iftotal_lossbest_loss:best_losstotal_loss# 找到最小的参数best_w1w1.item()best_b1b1.item()best_w2w2.item()best_b2b2.item()best_w3w3.item()best_b3b3.item()ifepoch%1000:# 打印平均损失值print(fepoch:{epoch}| loss:{total_loss})print(fw1:{w1.item()}| b1:{b1.item()}| w2:{w2.item()}| b2:{b2.item()}| w3:{w3.item()}| b3:{b3.item()})# 打印最终值print(最终参数)print(w1 ,w1.item(),b1 ,b1.item())print(w2 ,w2.item(),b2 ,b2.item())print(w3 ,w3.item(),b3 ,b3.item())# 打印最佳值print(最佳参数)print(w1 ,best_w1,b1 ,best_b1)print(w2 ,best_w2,b2 ,best_b2)print(w3 ,best_w3,b3 ,best_b3)w_totalw1*w2*w3 b_totalw3*w2*b1w3*b2b3print(最终结果)print(w ,w_total.item(),b ,b_total.item())

相关文章:

3.一文看懂反向传播:从单个神经元到 PyTorch 自动求导

反向求导,多层次对应一个神经,单个神经元场景 学习这一篇的前提是,已经学会了梯度算法和线性结构算法,不明白的可以去看我之前的文章。 前面看不懂的,直接跳转到 “ 反向传播的流程 ” 底层的数学算法 z 是中间变量 u …...

【国家卫健委《医疗卫生机构数据安全管理指南》强制落地倒计时】:PHP脱敏工具未升级?3类高危场景已触发监管预警!

第一章:国家卫健委《医疗卫生机构数据安全管理指南》强制落地背景与合规红线近年来,医疗健康数据泄露事件频发,患者隐私保护压力陡增。2023年12月,国家卫生健康委员会正式印发《医疗卫生机构数据安全管理指南》(国卫办…...

string的特性及使用

string这个词很容易让我们联想到str,也就是字符串,实际上string和字符串的关联性还是很强的。 很多字符串的题目都是string类的形式出现的,日常工作中为了方便使用都是用的string类, 标准string类 使用string类时,必须…...

(文档)第121讲:Oracle兼容工具—orafce使用技巧

目标 • orafce概述 • orafce安装 • orafce应用案例 orafce概述 orafce(Oracle Functions for PostgreSQL)是一个开源项目,旨在为 PostgreSQL 数据库提供一些 Oracle 数据库中缺失或行为不同的函数。该项目通过在 PostgreSQL 中实现这些函数,帮助…...

QGIS之四十三python处理数据

1、调出Python控制台 2、新建python脚本 右边的窗口可以拉过来 3、让AI根据你的需求写python脚本 比如要进行文本转shp,让AI写python脚本,拷贝脚本进来,保存文件 4、执行脚本...

工业以太网无线网桥 SG-WX-Bridge v2.0|免布线、一对多、即插即用,工业现场无线通信神器

工厂布线麻烦、距离远、施工成本高?设备移动频繁、有线网扯来扯去易损坏?三格电子SG-WX-Bridge v2.0 工业以太网无线网桥,专为工业现场打造,把有线网变无线,1 台 AP 最多带 8 台 STA,Profinet/EtherNet/IP/…...

机器学习经验总结整理

1.一个标准的机器学习项目流程(一定要记住顺序)很多新手觉得乱,是因为没按流程想问题。做任何项目,脑子里要有这根“流水线”:定义问题 → 是分类还是回归还是聚类?业务目标是什么?获取数据 → …...

千问3.5-27B模型微调实战:提升OpenClaw任务成功率

千问3.5-27B模型微调实战:提升OpenClaw任务成功率 1. 为什么需要微调千问3.5-27B? 当我第一次将OpenClaw接入千问3.5-27B时,发现它在简单任务上表现不错,但遇到复杂操作链时经常"卡壳"。比如让它整理一周的会议录音文…...

【国家级数字农业项目技术白皮书节选】:PHP轻量化时序数据处理框架如何扛住每秒8700+传感器上报?

第一章:农业 PHP 物联网数据可视化案例在智慧农业实践中,PHP 作为轻量级服务端语言,常被用于快速构建物联网数据聚合与可视化看板。本案例基于 ESP32 传感器节点采集土壤湿度、环境温湿度及光照强度,通过 HTTP POST 将 JSON 数据推…...

Arduino RTCtime库:标准time.h兼容的DS1307/DS3231驱动

1. 项目概述RTCtime 是一款专为 Arduino 平台设计的实时时钟(RTC)驱动库,核心目标是在硬件 RTC 模块与标准 C 运行时时间系统之间建立语义一致、类型兼容的桥梁。它并非一个独立的时间计算引擎,而是对底层硬件寄存器操作的封装层&…...

2026年全网视频去水印实测:6款消除字幕工具上手,哪款更适合你

短视频剪辑、素材二创时,画面里的顽固字幕、平台角标总是破坏整体质感,找对去字幕工具能直接拉高成品效率。这次我们亲测了市面上 6 款关注度较高的视频消除字幕工具,从便捷性、处理效果、隐私安全、批量能力、平台兼容五个维度逐一拆解&…...

加入csdn 5周年

不知不觉,已经是5年过去了,今天在b站刷了个视频大有感触,决定也用csdn记录一点东西,而不是一直把东西放在github上面或者是本地...

Idiap研究院:让语音识别AI学会聆听对话历史,压缩音频记忆

语音识别技术在我们的生活中越来越常见,从手机语音助手到客服电话,从会议记录到智能搜索。但你有没有想过,为什么这些系统有时候会犯一些很明显的错误?比如当你在和语音助手对话时,明明在前一句话中提到了"张三&q…...

方差的数学意义

方差(Variance)是统计学中一个非常基础且核心的概念。简单来说,它的数学意义就是衡量一组数据的离散程度,或者叫波动性。 如果说“平均值”(均值)告诉我们数据的中心在哪里,那么“方差”告诉我们…...

从月损耗20万到年增收300万:零售老板180天蜕变

李老板在二线城市经营着5家社区超市,年营收5000万,利润却越来越薄。一个残酷的数字让他夜不能寐:因线上线下系统割裂、手工操作繁多,每月生鲜损耗和运营错漏造成的损失超过20万元。他意识到,不变革,就是在慢…...

OpenClaw+Qwen3.5-9B组合优势:3个不可替代的使用场景

OpenClawQwen3.5-9B组合优势:3个不可替代的使用场景 1. 为什么选择OpenClawQwen3.5-9B组合 去年夏天,当我第一次尝试用Python脚本自动化处理医疗研究数据时,遇到了一个尴尬的问题:要么忍受公有云API的数据隐私风险,要…...

GLM-. 全面支持与 Gemini CLI 集成:HagiCode 的多模型进化之路估

1. 流图:数据的河流 如果把传统的堆叠面积图想象成一块块整齐堆叠的积木,那么流图就像一条蜿蜒流淌的河流,河道的宽窄变化自然流畅,波峰波谷过渡平滑。 它特别适合展示多个类别数据随时间的变化趋势,尤其是当你想强调整…...

使用Dify对接自己开发的mcp

先要有自己开发的mcp,然后部署到服务器 如何开发自己的mcp:Java使用spring Ai集成的mcp开发自己的mcp-CSDN博客 使用Dify对接mcp服务 Dify如何接入MCP工具_dify如何使用mcp工具-CSDN博客 基本上都差不多, 只说一点:如果一直报…...

eVTOL 研制必读 | 厘清研制保证与设计保证的边界

在很多航空企业里,经常会出现一种现象:项目团队在谈“研制保证体系”,管理层在谈“设计保证系统”;技术人员在强调 ARP4754A/B,组织层面却在说 DOA 合规。大家都在讲“保证”,却未必在讲同一件事。结果是什…...

无人外卖店

本项目以智能无人柜云值守模式,布局写字楼、社区等外卖密集区,24小时运营,对接美团、饿了么平台,主打预制餐饮品、零食等标准化商品。...

如何快速搭建个人数字图书馆:Talebook私有书库终极指南

如何快速搭建个人数字图书馆:Talebook私有书库终极指南 【免费下载链接】talebook 一个简单好用的个人书库 项目地址: https://gitcode.com/gh_mirrors/ta/talebook 想要拥有一个属于自己的数字图书馆吗?Talebook是一个基于Calibre的简单好用的个…...

问题解决策略基础算法实现训练1

问题 A: C 语言习题 字符串排序 [提交] [状态]题目描述 输入nnn个字符串,将它们按字母由小到大的顺序排列并输出。编写三个函数实现, 用于输出inputnnn个字符串, 用于排序sortstrnnn个字符串, 用于输出outputnnn个字符…...

当Windows 10的OneDrive无法彻底卸载时,这个批处理脚本是你的终极解决方案

当Windows 10的OneDrive无法彻底卸载时,这个批处理脚本是你的终极解决方案 【免费下载链接】OneDrive-Uninstaller Batch script to completely uninstall OneDrive in Windows 10 项目地址: https://gitcode.com/gh_mirrors/on/OneDrive-Uninstaller 你是否…...

OpenClaw截图分析功能:Qwen3.5-9B多模态界面理解案例

OpenClaw截图分析功能:Qwen3.5-9B多模态界面理解案例 1. 为什么需要截图分析功能 在日常工作中,我经常遇到需要分析软件界面、排查异常或生成报告的场景。传统方式要么依赖人工截图标注,要么需要开发专门的自动化脚本,效率低下且…...

Navicat找回历史执行记录突然失效怎么办_重置与缓存清理

Navicat历史记录消失是因异常退出导致history.db处于WAL日志不一致或事务未提交状态,并非数据被删;需关闭所有实例、备份并重命名history.db及相关文件后重启,新记录将重新生成。Navicat 历史执行记录消失,history.db 文件还在但不…...

自动送料机构的设计

自动送料机构是现代工业中提升效率的关键部件,其核心作用在于通过机械结构实现物料的精准、连续输送,替代人工操作带来的效率波动与误差风险。无论是金属零件、塑料制品还是粉末状原料,该机构均能根据工艺需求调整输送节奏,确保物…...

Windows Server 配置与管理——第4章:磁盘管理

目录 4.1 项目背景 4.2 相关知识 1. 概念和术语 2. 基本磁盘 3. 动态磁盘 4. 磁盘配额 4.3 项目过程 4.3.1 任务 1 基本磁盘管理 1. 扩展磁盘空间 2. 新建简单卷 3. 删除简单卷 4. 添加新磁盘 4.3.2 任务 2 动态磁盘管理 1. 将基本磁盘转换成动态磁盘 2. 创建、…...

智能相册管理:OpenClaw+Phi-3-vision-128k-instruct自动分类家庭照片

智能相册管理:OpenClawPhi-3-vision-128k-instruct自动分类家庭照片 1. 为什么需要智能相册管理? 每次打开手机相册,看到上万张杂乱无章的照片时,我都感到一阵头疼。孩子的成长瞬间、家庭旅行、朋友聚会全都混在一起&#xff0c…...

千问3.5-27B流式响应:OpenClaw实现长任务实时进度反馈

千问3.5-27B流式响应:OpenClaw实现长任务实时进度反馈 1. 为什么需要流式响应 上周我尝试用OpenClaw对接千问3.5-27B模型处理一份200页的PDF文档转换任务,结果遇到了一个尴尬场景——在飞书机器人对话窗口输入指令后,整整15分钟没有任何反馈…...

pcl2启动器下载

PCL2(全称 Plain Craft Launcher 2,中文常称为 PCL2 启动器)是由国内知名开发者"龙腾猫跃"倾力打造的一款《我的世界》(Minecraft)第三方启动工具。 PCL2 启动器集成了众多游戏版本、Mod、整合包相关的内容…...