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

020、深度学习入门:神经网络基础与反向传播

昨天调一个三层的全连接网络loss死活不降。打印梯度发现第一层的权重全是零——反向传播根本没传过去。同事凑过来看了一眼“你激活函数梯度写错了吧”一查代码果然在tanh求导的地方少了个平方。这种低级错误让我想起刚入门时反向传播的链式法则绕得人头晕。今天咱们就掰开揉碎讲清楚神经网络到底是怎么“学习”的。从实际问题切入梯度去哪了假设你在训练一个简单的分类网络结构是输入层(784) - 隐藏层(128) - 输出层(10)。前向推理代码大概长这样defforward(x):z1x w1b1# 第一层线性变换a1np.tanh(z1)# 激活函数z2a1 w2b2 outputsoftmax(z2)returnoutput前向传播容易理解就是数据一层层流过去。问题出在反向传播模型输出和真实标签的误差怎么反过来告诉每一层的权重该往哪个方向调整反向传播链式法则的工程实现反向传播的核心是链式求导。但工程实现时我们通常从后往前计算“局部梯度”。以两层网络为例损失函数L对w1的梯度要经过三层传递∂L/∂w1 ∂L/∂z2 · ∂z2/∂a1 · ∂a1/∂z1 · ∂z1/∂w1实际编程时我们不会真的展开这个式子而是用计算图的思想逐层回传。下面这个反向传播的实现很典型defbackward(x,y,output):# 输出层梯度dz2output-y# softmax交叉熵的梯度就是这个简洁形式记住能省事# 第二层权重梯度dw2a1.T dz2# 这里形状要对齐转置经常忘db2np.sum(dz2,axis0)# 往第一层回传da1dz2 w2.T# 注意这里w2要转置维度匹配容易出错dz1da1*(1-a1**2)# tanh的导数我当初就是这里少写了平方# 第一层权重梯度dw1x.T dz1 db1np.sum(dz1,axis0)returndw1,db1,dw2,db2注意看第11行tanh的导数是1 - tanh(x)^2。如果你写成1 - tanh(x)梯度值会小很多前面层的权重几乎更新不动。这就是开头说的bug来源。激活函数选型别只看准确率新手常纠结用什么激活函数。ReLU确实流行但死亡ReLU问题在嵌入式设备上很头疼——某些神经元一旦输出全零就再也激活不了。我的经验是中间层用LeakyReLU给负值留个0.01的斜率避免死亡二分类输出层用sigmoid多分类用softmax回归任务用线性层tanh在RNN里还行但深度网络容易梯度消失# 激活函数实现别写太复杂defleaky_relu(x,alpha0.01):returnnp.where(x0,x,x*alpha)# 向量化操作比for循环快几十倍# 反向传播时梯度要对应defleaky_relu_grad(x,alpha0.01):dxnp.ones_like(x)dx[x0]alpha# 小于0的位置梯度为alphareturndx初始化权重不是小事权重初始化不对网络可能一开始就“死”了。比如全用零初始化所有神经元输出相同梯度也相同相当于一个神经元。常用的Xavier初始化实现起来很简单definit_weights(input_size,output_size):limitnp.sqrt(6/(input_sizeoutput_size))returnnp.random.uniform(-limit,limit,(input_size,output_size))但要注意Xavier假设激活函数是线性的对ReLU系激活函数效果打折扣。这时用He初始化方差为2/n更合适。调试技巧梯度检查当你自己实现反向传播时一定要做梯度检查。用数值梯度验证解析梯度defgrad_check(layer_func,x,w,epsilon1e-7):grad_analyticbackward(x,w)# 你的反向传播结果grad_numericnp.zeros_like(w)foriinrange(w.size):w_plusw.copy()w_minusw.copy()w_plus.flat[i]epsilon w_minus.flat[i]-epsilon loss_pluslayer_func(x,w_plus)loss_minuslayer_func(x,w_minus)grad_numeric.flat[i](loss_plus-loss_minus)/(2*epsilon)diffnp.linalg.norm(grad_analytic-grad_numeric)/np.linalg.norm(grad_analyticgrad_numeric)returndiff1e-7# 小于这个阈值基本就对了这个操作计算量大训练时别用但验证新网络结构时能救命。个人经验别重复造轮子但要懂轮子现在深度学习框架很成熟TensorFlow/PyTorch一行代码就搞定反向传播。但我建议初学者至少手写一次全连接网络的反向传播包括矩阵维度变换、激活函数求导、损失函数求导。这个过程能让你真正理解梯度消失/爆炸是怎么发生的试试点乘操作连乘十次批量训练时梯度怎么平均注意axis参数dropout在反向传播时要做什么mask要记住实际项目中我通常用框架搭原型但遇到性能瓶颈或部署到嵌入式设备时经常要拆开网络手动优化。这时候对反向传播的理解就值钱了。最后给个实用建议把常用层的梯度公式写成小抄贴在显示器边上比如卷积层的im2col梯度、LSTM的梯度流。调试时对照着看能省下大量瞎猜的时间。神经网络训练不收敛时先检查梯度再调学习率最后怀疑数据——这个顺序能帮你少走弯路。

相关文章:

020、深度学习入门:神经网络基础与反向传播

昨天调一个三层的全连接网络,loss死活不降。打印梯度发现第一层的权重全是零——反向传播根本没传过去。同事凑过来看了一眼:“你激活函数梯度写错了吧?”一查代码,果然在tanh求导的地方少了个平方。这种低级错误让我想起刚入门时…...

第27章 2021真题作文

目录 题目2021.11-论面向方面的编程技术及其应用 题目2021.11-系统安全架构设计及其应用: 题目2021.11-论企业集成平台的理解与应用 题目2021.11-论面向方面的编程技术及其应用 针对应用开发所面临的规模不断扩大、复杂度不断提升的问题,面向方面的编…...

Tensorflow-Cookbook最佳实践:如何避免常见陷阱与性能优化技巧

Tensorflow-Cookbook最佳实践:如何避免常见陷阱与性能优化技巧 【免费下载链接】Tensorflow-Cookbook Simple Tensorflow Cookbook for easy-to-use 项目地址: https://gitcode.com/gh_mirrors/te/Tensorflow-Cookbook TensorFlow作为深度学习领域最流行的框…...

nodejs新手福音,在快马平台零配置开启你的第一个后端项目

作为一个刚接触Node.js的新手,最让我头疼的就是环境配置。记得第一次尝试安装Node.js时,光是环境变量就折腾了半天,还经常遇到版本不兼容的问题。直到发现了InsCode(快马)平台,才发现原来学习Node.js可以这么简单。 项目结构一目了…...

Paper2Slides自定义样式:从学术风格到动漫主题的完整教程

Paper2Slides自定义样式:从学术风格到动漫主题的完整教程 【免费下载链接】Paper2Slides "Paper2Slides: From Paper to Presentation in One Click" 项目地址: https://gitcode.com/gh_mirrors/pap/Paper2Slides 想要快速将学术论文转化为精美的演…...

Net Insight推出可编程视频制作网络解决方案

随着实时媒体工作流程在设施、合作伙伴网络和云环境之间日益分布化,技术进步正在运营域之间创建可编程的分界点。基于这一动态趋势,Net Insight推出了可编程信任边界技术,使实时媒体互连在设施、网络和云环境之间传输时变得可预测。解释此次发…...

5步搞定微信聊天记录永久保存:WechatBakTool全面解析

5步搞定微信聊天记录永久保存:WechatBakTool全面解析 【免费下载链接】WechatBakTool 基于C#的微信PC版聊天记录备份工具,提供图形界面,解密微信数据库并导出聊天记录。 项目地址: https://gitcode.com/gh_mirrors/we/WechatBakTool 在…...

Pexpect ANSI终端仿真:构建专业级命令行界面的完整指南

Pexpect ANSI终端仿真:构建专业级命令行界面的完整指南 【免费下载链接】pexpect A Python module for controlling interactive programs in a pseudo-terminal 项目地址: https://gitcode.com/gh_mirrors/pe/pexpect Pexpect是一个强大的Python模块&#x…...

思科报告:无线网络成企业战略增长引擎,AI驱动投资激增

企业正面临连接需求和人工智能驱动转型的拐点,而无线网络的战略性投资正成为企业成功的催化剂,在多个业务维度同时带来可衡量的回报。这是思科最新发布的研究报告得出的结论。在首份《2026年无线网络状态》全球报告中,这家IT和网络巨头调查了…...

Lepton AI批处理机制深度解析:提升GPU利用率的终极指南

Lepton AI批处理机制深度解析:提升GPU利用率的终极指南 【免费下载链接】leptonai A Pythonic framework to simplify AI service building 项目地址: https://gitcode.com/gh_mirrors/le/leptonai Lepton AI作为Pythonic AI服务构建框架,其批处理…...

【LeetCode刷题日记】:反转链表(面试基础考察)

🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可须臾或…...

ThorUI-uniapp插件生态解析:如何扩展你的开发能力

ThorUI-uniapp插件生态解析:如何扩展你的开发能力 【免费下载链接】ThorUI-uniapp dingyong0214/ThorUI-uniapp: 是一个基于 ThorUI 的 UniApp UI 库,适合用于 UniApp 开发中的 UI 设计和实现。 项目地址: https://gitcode.com/gh_mirrors/th/ThorUI-u…...

OpenClaw 报错大全:2026 年我踩过的 12 个坑 + 完整解决方案

上周 Agent Skills 生态突然爆了,OpenClaw 一夜之间成了标配工具。我也跟风装了一个,结果第一天就报了 5 个错,折腾到凌晨两点。后来几天陆续又踩了一堆坑,索性把所有报错都记下来,整理成这篇文章。如果你正在用 OpenC…...

如何用 Splinter 在 5 分钟内完成第一个 Web 自动化测试

如何用 Splinter 在 5 分钟内完成第一个 Web 自动化测试 【免费下载链接】splinter splinter - python test framework for web applications 项目地址: https://gitcode.com/gh_mirrors/sp/splinter Splinter 是一款强大的 Python Web 应用测试框架,能帮助…...

基于Pyright配置完全指南:命令行、配置文件与语言服务器设置详解

基于Pyright配置完全指南:命令行、配置文件与语言服务器设置详解 【免费下载链接】basedpyright pyright fork with various type checking improvements, improved vscode support and pylance features built into the language server 项目地址: https://gitco…...

Speakeasy与Google Authenticator深度集成:QR码生成与扫描全流程

Speakeasy与Google Authenticator深度集成:QR码生成与扫描全流程 【免费下载链接】speakeasy **NOT MAINTAINED** Two-factor authentication for Node.js. One-time passcode generator (HOTP/TOTP) with support for Google Authenticator. 项目地址: https://g…...

深入解析SimpleScreenRecorder的OpenGL录制技术:游戏录制终极解决方案

深入解析SimpleScreenRecorder的OpenGL录制技术:游戏录制终极解决方案 【免费下载链接】ssr SimpleScreenRecorder, a screen recorder for Linux 项目地址: https://gitcode.com/gh_mirrors/ss/ssr SimpleScreenRecorder是一款功能强大的Linux屏幕录制工具&…...

深入Minoca OS内核架构:模块化设计与驱动模型解析

深入Minoca OS内核架构:模块化设计与驱动模型解析 【免费下载链接】os Minoca operating system 项目地址: https://gitcode.com/gh_mirrors/os1/os Minoca OS作为一款轻量级操作系统,其内核架构采用高度模块化设计,结合灵活的驱动模型…...

Zrythm自动化功能完全解析:从入门到精通

Zrythm自动化功能完全解析:从入门到精通 【免费下载链接】zrythm a highly automated and intuitive digital audio workstation - official mirror 项目地址: https://gitcode.com/gh_mirrors/zr/zrythm Zrythm是一款高度自动化和直观的数字音频工作站&…...

Zrythm未来路线图:AI集成、云端协作与下一代音频技术

Zrythm未来路线图:AI集成、云端协作与下一代音频技术 【免费下载链接】zrythm a highly automated and intuitive digital audio workstation - official mirror 项目地址: https://gitcode.com/gh_mirrors/zr/zrythm Zrythm作为一款高度自动化且直观的数字音…...

Condition底层机制剖析:多线程等待与通知机制 _

在使用Lock之前,使用的最多的同步方式应该是synchronized关键字来实现同步方式了。配合Object的wait()、notify()系列方法可以实现等待/通知模式。 Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者…...

React Native 项目重构利器:使用 react-native-rename 快速迁移应用品牌

React Native 项目重构利器:使用 react-native-rename 快速迁移应用品牌 【免费下载链接】react-native-rename Rename react-native app with just one command 项目地址: https://gitcode.com/gh_mirrors/re/react-native-rename react-native-rename 是一…...

综合能源系统多时间尺度优化调度!诸多创新点

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...

【源-荷-储协同互动】考虑源-荷-储协同互动的主动配电网优化调度研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...

python statistics

# Python statistics模块:一个被低估的数据分析工具 很多人第一次接触Python数据分析时,往往会直奔pandas或numpy而去,这当然没错。但有时候,我们需要的只是简单的统计计算,比如算个平均数、中位数,或者看看…...

docker相关知识和优化

关于dockerfile常用命令对比 CMD RUN ENTRYPOINT RUN是构建时运行的命令 CMD ENTRYPOINT是运行时执行的命令 不同点在于 docker run 的参数 会直接替换CMD里命令 而 ENTRYPOINT 是直接追加在命令后 所以对于不想影响格式 固定执行的命令 使用 ENTRYPOINT 再通过ENTRYPOIN…...

python random

# Python 的 random 模块:不只是“随机”那么简单 很多人第一次接触 Python 的 random 模块,大概都是在写猜数字游戏的时候。输入几行代码,屏幕上跳出一个随机数,感觉像是给程序注入了某种“不确定的灵魂”。但如果你认为 random …...

python math

# 关于Python的深拷贝,你可能需要知道这些 在Python里处理数据时,经常会遇到需要复制对象的情况。这时候很多人会直接使用赋值操作,但很快就会发现事情没那么简单。比如你有一个列表,里面嵌套了另一个列表,当你修改嵌套…...

Docker-存储驱动配置

devicemapper驱动devicemapper 是 Linux 内核中的一个框架,它可以将块设备(如磁盘、分区、文件)映射成虚拟的块设备。Docker 使用它来为每个容器提供一个独立的、隔离的文件系统。 direct-lvm 和 loop-lvm 是 devicemapper 驱动在 Docker 中实…...

Youtu-2B开源部署教程:腾讯优图LLM一键运行实践

Youtu-2B开源部署教程:腾讯优图LLM一键运行实践 1. 项目简介与核心价值 Youtu-2B是腾讯优图实验室推出的轻量化大语言模型服务,基于Tencent-YouTu-Research/Youtu-LLM-2B模型构建。这个模型虽然体积小巧,但在多个关键任务上表现出色&#x…...