python神经网络编程入门(三)----矩阵乘法真是神经网络的“偷懒神器”
既然上一期咱们把门路摸清了这一期咱们就掰开了、揉碎了把矩阵乘法这个“偷懒神器”给彻底吃透。我知道很多同学一看到“矩阵”两个字就头皮发麻脑子里全是当年在学校里背的“行乘列、加起来”那种枯燥的记忆。别怕今天我们不背公式我们只玩数字表格。而且我保证这一期结束之后你再看到那一堆数字眼里看到的不是数字而是神经网络里正在“哗哗”流动的信号流。那种感觉绝对成就感爆棚一、 先聊聊“为什么要自找麻烦”——人类的“算力”太脆弱我们先来做个思想实验。假设你现在手头有一个5层、每层100个节点的神经网络。如果不用矩阵你要怎么算从第一层到第二层的信号你需要把第一层100个节点的信号分别乘上对应的权重然后送到第二层的100个节点里。这就意味着你要做 100×100 10000 次乘法再加上 10000 次加法。这只是一层后面还有4层等着你呢。你拿着笔在纸上算算到第50个节点的时候脑子已经开始“冒烟”了算到第80个节点的时候你已经分不清刚才乘的是0.3还是0.03了。更恐怖的是人类天生不擅长做这种大量重复且枯燥的运算算错一个数字后面全盘皆输。这时候矩阵的作用就凸显出来了。它就像一个“超级压缩包”。原本要写满好几页纸的计算公式用矩阵来表达就简简单单几个字母X W · I。图1不仅如此计算机特别喜欢矩阵。像 Python 这种编程语言底层就是用 C 语言优化过的它知道矩阵乘法里全是重复的乘加运算所以会用最快的方式比如向量化指令帮你算完。你只要写一行代码电脑“唰”一下就给你算出来了。所以矩阵不是来折磨你的是来帮你“打工”的。二、 揭开面纱——矩阵不就是个“Excel表格”吗别把矩阵想得太玄乎。说穿了矩阵就是一个长方形的数字表格。你用过 Excel 吧里面那一格一格的就是矩阵。比如下面这个图2记住一个约定俗成的规矩前面一个数字代表“行”后面一个数字代表“列”。所以上图叫做2×3 矩阵读作“2乘3”意思是2行3列。你千万别说成“3乘2”那就闹笑话了。图3三、 重头戏矩阵乘法到底怎么算拿出草稿纸跟着我画好现在到了最让人头疼、也是最重要的部分——乘法。铁律第一条矩阵乘法不是对应位置相乘如果你把 [[1,2], [3,4]] 和 [[5,6], [7,8]] 对应位置相乘1×5, 2×6...那你从一开始就错了。矩阵乘法有自己的“游戏规则”。1. 手把手算左上角那个数19请你看着下面这两个矩阵图4我们要算结果矩阵我们叫它 C的左上角也就是第1行第1列的数字。规则来了我们要用A 的第一行和B 的第一列。拿出 A 的第一行1 和 2拿出 B 的第一列5 和 7现在把它们对应相乘再相加第一个乘第一个1 × 5 5第二个乘第二个2 × 7 14最后加起来5 14 19看19 就是这么来的图52. 再算右下角那个数50接着算结果矩阵 C 的右下角第2行第2列。拿出 A 的第二行3 和 4拿出 B 的第二列6 和 8对应相乘再相加3 × 6 184 × 8 3218 32 50图6剩下的两个数右上角 22左下角 43大家可以自己按照这个方法推一遍右上角A的第一行 × B的第二列 (1×6)(2×8)22左下角A的第二行 × B的第一列 (3×5)(4×7)43最后结果 C 就是图73. 用“人话”总结规律如果上面的数字让你眼花那我们换个说法。想象你有一个手电筒代表 A 的行和一个扫把代表 B 的列。结果矩阵里第i行第j列的那个数就是你拿着手电筒横着照 A 的第 i 行拿着扫把竖着扫 B 的第 j 列然后把扫到的一对一对数字相乘最后全部加起来。这个操作在数学上有个专门的名字叫点乘Dot Product或内积。4. 致命限制不是你想乘就能乘这里有个坑很多新手都会栽跟头。相乘的两个矩阵必须“门当户对”具体来说第一个矩阵的列数必须等于第二个矩阵的行数。比如一个 2×3 的矩阵能和 3×4 的矩阵相乘因为中间的 3 和 3 对上了。但是一个 2×3 的矩阵绝对不能和一个 5×5 的矩阵相乘因为 3 和 5 不相等乘不了。为什么必须这样因为行里的元素个数和列里的元素个数要能一一配对相乘如果不相等比如一个行有3个数另一个列只有2个数那最后一个数找谁乘去只能“落单”了。四、 见证奇迹的时刻——把字母换成神经网络的“零件”前面都是纯数学现在我们把神经网络里东西代进去。我们把刚才公式里的字母换个名字第一个矩阵原来是 A我们叫它W代表权重矩阵。第二个矩阵原来是 B我们叫它I代表输入矩阵。那么X W · I代表什么代表输入信号I穿过了这层权重W之后变成了新的组合信号X图9现在你看输出1收到的组合信号 (输入1 × w₁₁) (输入2 × w₂₁)输出2收到的组合信号 (输入1 × w₁₂) (输入2 × w₂₂)你看这不就是矩阵乘法的规则吗输出1对应结果矩阵的第一行第一列输入1×w₁₁ 输入2×w₂₁正是拿着权重矩阵的第一行去点乘输入矩阵。再仔细看我们把神经元之间复杂的连接变成了一次简单的矩阵乘法。学累了休息一下放松一下眼睛五、 实战演习带你手撕一个 3层 3节点 的神经网络光看两层不过瘾咱们来个真家伙——3层网络每层3个节点。跟着我一步一步走走完这一遍你对神经网络的前向传播就彻底毕业了。第1步准备好输入信号Input Layer假设输入层接到了三个数字0.9、0.1、0.8。把它们写成矩阵3行1列也叫列向量第2步翻出第一组权重输入层 → 隐藏层这个网络里输入层的3个节点到隐藏层的3个节点总共有 3×3 9 条连接线。我们把这 9 个权重随机编一些数字填进一个 3×3 的矩阵图11第3步第一次矩阵乘法算出“组合输入”X_hidden现在我们来算X_hidden W_input_hidden × I。跟着我算隐藏层第1个节点收到的信号结果的第一行用权重矩阵的第1行0.9, 0.3, 0.4去点乘输入矩阵0.9, 0.1, 0.8(0.9 × 0.9) (0.3 × 0.1) (0.4 × 0.8) 0.81 0.03 0.321.16算隐藏层第2个节点收到的信号结果的第二行用权重矩阵的第2行0.2, 0.8, 0.2去点乘输入矩阵0.9, 0.1, 0.8(0.2 × 0.9) (0.8 × 0.1) (0.2 × 0.8) 0.18 0.08 0.160.42算隐藏层第3个节点收到的信号结果的第三行用权重矩阵的第3行0.1, 0.5, 0.6去点乘输入矩阵0.9, 0.1, 0.8(0.1 × 0.9) (0.5 × 0.1) (0.6 × 0.8) 0.09 0.05 0.480.62图12我们只用了短短几步就把三个隐藏节点收到的信号全算出来了。如果没有矩阵你得写 3 个长长的算式现在我们只需要一张表格。第4步让信号“活”起来——应用 S 激活函数现在的 1.16、0.42、0.62 还只是冰冷的线性叠加我们要让神经元像生物一样有个“阈值开关”这就是S函数Sigmoid。S函数的公式是y 1 / (1 e^(-x))。别被这个公式吓跑你只要记住它的功能无论输入的数字是正无穷还是负无穷输出都会被压缩在 0 到 1 之间。我们拿第一个数1.16算一下先算 e^(-1.16)。e 约等于 2.71828计算器按一下e^(-1.16) ≈ 0.3135。带入公式1 / (1 0.3135) 1 / 1.3135 ≈0.761。同理0.42 过 S 函数 ≈0.6030.62 过 S 函数 ≈0.650图13把这 3 个数写成矩阵O_hidden隐藏层的输出图14第5步继续“前传”——第二组权重隐藏层 → 输出层现在我们要把隐藏层的输出当做下一层输出层的输入。同理我们需要第二组权重矩阵W_hidden_output3×3 的表格里面填满新的随机权重图15重点来了这一层的计算方法和上一层的计算方法一模一样我们用X_output W_hidden_output × O_hidden。也就是图16咱们一行一行来算计算输出层第1个节点结果矩阵第一行拿出权重矩阵的第一行0.3, 0.6, 0.1和隐藏层输出0.761, 0.603, 0.650对应相乘再相加0.3 × 0.761 0.22830.6 × 0.603 0.36180.1 × 0.650 0.0650加起来0.2283 0.3618 0.0650 0.6551计算输出层第2个节点结果矩阵第二行拿出权重矩阵的第二行0.5, 0.2, 0.8去点乘0.5 × 0.761 0.38050.2 × 0.603 0.12060.8 × 0.650 0.5200加起来0.3805 0.1206 0.5200 1.0211计算输出层第3个节点结果矩阵第三行拿出权重矩阵的第三行0.7, 0.4, 0.3去点乘0.7 × 0.761 0.53270.4 × 0.603 0.24120.3 × 0.650 0.1950加起来0.5327 0.2412 0.1950 0.9689图17第6步最后一次应用 S 激活函数到了最后一层我们再次把 X_output 里的每一个数分别丢进 S 函数里公式y 1 / (1 e^(-x))算第一个最终输出x 0.6551e^(-0.6551) ≈ 0.5193y 1 / (1 0.5193) 1 / 1.5193 ≈0.658算第二个最终输出x 1.0211e^(-1.0211) ≈ 0.3603y 1 / (1 0.3603) 1 / 1.3603 ≈0.735算第三个最终输出x 0.9689e^(-0.9689) ≈ 0.3795y 1 / (1 0.3795) 1 / 1.3795 ≈0.725图18恭喜你你完完整整地走完了一个三层神经网络的“前向传播”Forward Propagation你看不管网络有多深我们永远都在重复同一个动作矩阵乘法 S函数。六、 为什么说“层数越多矩阵越香”如果你只有3个节点你或许觉得写算式也行。但如果换成100个节点呢不用矩阵的话你要写 100×100 10000 个乘法算式累都能累死你。用了矩阵你只需要写一行X W · I。这就是矩阵的力量——它把“海量的体力活”变成了“简洁的脑力活”。你不需要告诉计算机怎么一个一个算只需要告诉它“把这俩矩阵乘一下”它就会自动调用最高效的算法把结果给你。七、 终极拷问算完了然后呢信号经过层层传递终于从输入端跑到了输出端我们得到了三个数字0.658, 0.735, 0.725。但问题来了这几个数字对不对比如我们期望它输出的是 (0.9, 0.1, 0.2)结果它输出的是 (0.658, 0.735, 0.725)这差得也太远了这说明我们刚才瞎编的那些随机权重W1 和 W2是不合格的那么怎么才能知道这差距有多大怎么把这巨大的差距“甩锅”给前面的每一个权重怎么让这些权重根据误差去调整自己使得下次输出更接近正确答案这就是神经网络最核心、最精妙、也是最难理解的部分——误差反向传播Backpropagation。下一期我们就要拿起“手术刀”解剖这个误差看看它到底是怎么一层一层往回传的。放心到了那时候矩阵乘法又会成为我们手中最锋利的武器帮我们轻松算出每个权重该调多少。保持你的好奇心我们下期见代码片段1计算相关代码如下import numpy as np # 1. 定义 Sigmoid 激活函数 def sigmoid(x): S函数将任意实数压缩到0~1之间 return 1 / (1 np.exp(-x)) # 2. 定义输入信号 # 3×1 的列向量对应文章中的 I [0.9, 0.1, 0.8]^T I np.array([[0.9], [0.1], [0.8]]) print(【输入信号 I】) print(I) print() # 3. 定义第一组权重输入层 → 隐藏层 # 3×3 矩阵对应文章中的 W_input_hidden W_input_hidden np.array([[0.9, 0.3, 0.4], [0.2, 0.8, 0.2], [0.1, 0.5, 0.6]]) print(【第一组权重 W_input_hidden输入层→隐藏层】) print(W_input_hidden) print() # 4. 第一次矩阵乘法X_hidden W_input_hidden × I # np.dot() 或 运算符都可以做矩阵乘法[reference:2][reference:3] X_hidden np.dot(W_input_hidden, I) # 或者 W_input_hidden I print(【第一次矩阵乘法 X_hidden W_input_hidden × I】) print(X_hidden) # 应该输出 [[1.16], [0.42], [0.62]] print() # 5. 第一次应用 SigmoidO_hidden sigmoid(X_hidden) O_hidden sigmoid(X_hidden) print(【第一次激活 O_hidden sigmoid(X_hidden)】) print(O_hidden) # 应该输出 [[0.761], [0.603], [0.650]] print() # 6. 定义第二组权重隐藏层 → 输出层 # 3×3 矩阵对应文章中的 W_hidden_output W_hidden_output np.array([[0.3, 0.6, 0.1], [0.5, 0.2, 0.8], [0.7, 0.4, 0.3]]) print(【第二组权重 W_hidden_output隐藏层→输出层】) print(W_hidden_output) print() # 7. 第二次矩阵乘法X_output W_hidden_output × O_hidden X_output np.dot(W_hidden_output, O_hidden) # 或者 W_hidden_output O_hidden print(【第二次矩阵乘法 X_output W_hidden_output × O_hidden】) print(X_output) # 应该输出 [[0.6551], [1.0211], [0.9689]] print() # 8. 第二次应用 Sigmoid最终输出 sigmoid(X_output) final_output sigmoid(X_output) print(【最终输出 sigmoid(X_output)】) print(final_output) # 应该输出 [[0.658], [0.735], [0.725]]

相关新闻

6G:愿景、应用场景、架构与关键技术

6G:愿景、应用场景、架构与关键技术

6G:愿景、应用场景、架构与关键技术本文面向从事通信和信息技术的工程师与研究人员,系统梳理未来6G移动通信系统的主要方向。在5G的基础上,6G将进一步提升性能,引入新的业务场景,并与计算、控制和感知深度融合。文中包…

2026/7/7 2:04:05 阅读更多 →
计算机毕业设计之基于大数据的抖音音乐播放数据分析可视化

计算机毕业设计之基于大数据的抖音音乐播放数据分析可视化

基于大数据的抖音音乐播放数据分析可视化利用海量数据资源为用户提供个性化音乐推荐的服务平台。通过分析用户的听歌历史、喜好偏好、社交网络互动等多个维度数据,运用机器学习和数据挖掘技术,为用户提供精准、高效的音乐推荐。收集用户在抖音平台上的听…

2026/7/7 2:00:03 阅读更多 →
EhViewer安全架构深度解析:多层次防护机制的技术实现

EhViewer安全架构深度解析:多层次防护机制的技术实现

EhViewer安全架构深度解析:多层次防护机制的技术实现 EhViewer作为一款基于Material Design 3重构的漫画浏览应用,在提供流畅用户体验的同时构建了完善的安全防护体系。我们深入分析其安全架构,探讨如何在移动应用环境中实现Cookie管理、数据…

2026/7/7 1:58:02 阅读更多 →

最新新闻

AI视频生成技术在游戏特效制作中的应用实践

AI视频生成技术在游戏特效制作中的应用实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们来看一个基于AI视频生成技术的"恐惧魔王 吞噬魔法"特效测试项目。这个项目展示了如何利用AI技术实现游戏角色特效的…

2026/7/7 2:40:13 阅读更多 →
本地AI部署实战指南:从环境配置到性能优化的完整解决方案

本地AI部署实战指南:从环境配置到性能优化的完整解决方案

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 今天我们来聊聊一个让很多开发者头疼的问题:本地AI部署。虽然标题提到了"一人公司"的困境,但本文重…

2026/7/7 2:38:12 阅读更多 →
Claude偷改了你一行代码

Claude偷改了你一行代码

摘要:2026 年 6 月底,Reddit 开发者逆向 Claude Code 客户端,发现 Anthropic 用隐写术在中国用户请求里嵌入隐藏标记——读系统时区、比对 147 个加密域名、在日期字符串里替换 Unicode 字符。这段代码静默运行三个月,从未披露。三…

2026/7/7 2:36:12 阅读更多 →
面向AI应用的后端架构设计:协议选型、服务治理与可观测性

面向AI应用的后端架构设计:协议选型、服务治理与可观测性

引言:AI应用的后端挑战与传统架构的差异 在AI应用从概念验证走向生产部署的过程中,后端架构面临的挑战与传统互联网应用有本质差异。传统后端系统追求的是低延迟、高吞吐、确定性响应,而AI应用的核心瓶颈往往不在业务逻辑,而在于…

2026/7/7 2:36:12 阅读更多 →
[实战]Python爬取全国考研数据与可视化(附源码)

[实战]Python爬取全国考研数据与可视化(附源码)

很多考研同学都会关注院校招生人数、专业分数线等信息,手动整理效率极低。本篇用 Python 完成接 口爬虫 数据存储 可视化分析全流程实战,从考研网站抓取院校专业数据,再通过图表直观分析数据,适合爬虫、数据分析入门学习。 一、…

2026/7/7 2:36:12 阅读更多 →
ComfyUI整合包+KREA2模型:AI绘画本地部署全攻略

ComfyUI整合包+KREA2模型:AI绘画本地部署全攻略

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 如果你正在为AI绘画的复杂环境配置而头疼,特别是想要体验最新的KREA2模型却苦于繁琐的安装过程,那么萝卜大佬的…

2026/7/7 2:34:11 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻