从零实现多层感知机:深度学习基础与实战
1. 为什么选择从零实现多层感知机在深度学习入门阶段很多人都会纠结一个问题到底应该直接调用现成的深度学习框架比如PyTorch、TensorFlow还是从零开始手写实现我当年学习时也面临同样的选择最终发现从零实现一个多层感知机MLP是理解神经网络本质的最佳途径。这就像学做菜用预制菜包当然方便但只有从切菜、配菜开始亲手操作才能真正掌握火候和调味。MLP作为深度学习中最基础的网络结构包含了前向传播、反向传播、激活函数、参数初始化等核心概念是理解更复杂模型的最佳切入点。2. 环境准备与数据加载2.1 基础环境配置虽然说是从零开始但我们还是需要一些基础工具import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_moons from sklearn.model_selection import train_test_split这里我特意选择了NumPy而不是PyTorch等框架因为我们要真正理解每个运算背后的数学原理。Matplotlib用于可视化而sklearn的make_moons可以生成一个简单的非线性可分数据集非常适合MLP的演示。2.2 数据准备技巧# 生成数据 X, y make_moons(n_samples1000, noise0.2, random_state42) # 划分训练测试集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42) # 数据标准化 mean X_train.mean(axis0) std X_train.std(axis0) X_train (X_train - mean) / std X_test (X_test - mean) / std注意数据标准化一定要用训练集的均值和标准差这是很多新手容易犯的错误。如果使用全量数据的统计量就相当于在标准化过程中偷看了测试集的信息。3. MLP的核心组件实现3.1 网络结构设计我们实现一个具有单隐藏层的MLP输入层2个神经元对应二维特征隐藏层4个神经元使用ReLU激活输出层1个神经元使用Sigmoid激活这个结构虽然简单但已经可以演示MLP的所有关键要素。在实际项目中你可以根据需要调整隐藏层大小和层数。3.2 参数初始化def initialize_parameters(input_size, hidden_size, output_size): np.random.seed(42) W1 np.random.randn(input_size, hidden_size) * 0.01 b1 np.zeros((1, hidden_size)) W2 np.random.randn(hidden_size, output_size) * 0.01 b2 np.zeros((1, output_size)) return {W1: W1, b1: b1, W2: W2, b2: b2}这里使用较小的随机初始值乘以0.01是为了避免初始激活值过大导致梯度消失。偏置初始化为零是常见做法。3.3 前向传播实现def forward_propagation(X, parameters): W1, b1, W2, b2 parameters[W1], parameters[b1], parameters[W2], parameters[b2] # 隐藏层计算 Z1 np.dot(X, W1) b1 A1 np.maximum(0, Z1) # ReLU激活 # 输出层计算 Z2 np.dot(A1, W2) b2 A2 1 / (1 np.exp(-Z2)) # Sigmoid激活 cache {Z1: Z1, A1: A1, Z2: Z2, A2: A2} return A2, cache前向传播实现了两个关键计算线性变换矩阵乘法加偏置非线性激活ReLU和Sigmoid实操心得在实现时建议像上面这样明确分开线性变换和激活步骤这样在实现反向传播时会更加清晰。4. 损失函数与反向传播4.1 交叉熵损失实现def compute_cost(A2, Y): m Y.shape[0] # 样本数量 logprobs np.multiply(np.log(A2), Y) np.multiply(np.log(1 - A2), (1 - Y)) cost -np.sum(logprobs) / m return cost这里实现的是二分类交叉熵损失适用于我们的二分类问题。注意这里使用了数值稳定的实现方式。4.2 反向传播详解反向传播是理解神经网络最关键的环节def backward_propagation(parameters, cache, X, Y): m X.shape[0] W1, W2 parameters[W1], parameters[W2] A1, A2 cache[A1], cache[A2] # 输出层梯度 dZ2 A2 - Y dW2 np.dot(A1.T, dZ2) / m db2 np.sum(dZ2, axis0, keepdimsTrue) / m # 隐藏层梯度 dA1 np.dot(dZ2, W2.T) dZ1 dA1 * (A1 0) # ReLU的导数 dW1 np.dot(X.T, dZ1) / m db1 np.sum(dZ1, axis0, keepdimsTrue) / m gradients {dW1: dW1, db1: db1, dW2: dW2, db2: db2} return gradients关键点解释dZ2 A2 - Y 这是Sigmoid交叉熵的独特性质梯度形式非常简洁(A1 0) 是ReLU的导数大于0时为1否则为0所有梯度都除以m样本数这是为了得到平均梯度5. 参数更新与训练循环5.1 参数更新def update_parameters(parameters, gradients, learning_rate): W1 parameters[W1] - learning_rate * gradients[dW1] b1 parameters[b1] - learning_rate * gradients[db1] W2 parameters[W2] - learning_rate * gradients[dW2] b2 parameters[b2] - learning_rate * gradients[db2] return {W1: W1, b1: b1, W2: W2, b2: b2}这是最基础的梯度下降更新。在实际应用中你可以尝试更复杂的优化器如Adam。5.2 完整训练流程def model(X, Y, hidden_size, learning_rate, iterations): input_size X.shape[1] output_size 1 parameters initialize_parameters(input_size, hidden_size, output_size) costs [] for i in range(iterations): # 前向传播 A2, cache forward_propagation(X, parameters) # 计算损失 cost compute_cost(A2, Y) costs.append(cost) # 反向传播 gradients backward_propagation(parameters, cache, X, Y) # 参数更新 parameters update_parameters(parameters, gradients, learning_rate) if i % 100 0: print(f迭代次数: {i}, 损失: {cost}) return parameters, costs6. 模型评估与可视化6.1 训练过程可视化parameters, costs model(X_train, y_train, hidden_size4, learning_rate0.01, iterations1000) plt.plot(costs) plt.ylabel(损失) plt.xlabel(迭代次数) plt.title(学习曲线) plt.show()观察损失曲线可以帮助判断学习率是否合适以及模型是否在有效学习。6.2 决策边界可视化def plot_decision_boundary(model, X, y): # 设置边界 x_min, x_max X[:, 0].min() - 1, X[:, 0].max() 1 y_min, y_max X[:, 1].min() - 1, X[:, 1].max() 1 # 生成网格点 h 0.01 xx, yy np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) # 预测每个点 Z, _ model(np.c_[xx.ravel(), yy.ravel()]) Z Z.reshape(xx.shape) # 绘制 plt.contourf(xx, yy, Z, alpha0.8) plt.scatter(X[:, 0], X[:, 1], cy, edgecolorsk) plt.title(决策边界) plt.show() plot_decision_boundary(lambda x: forward_propagation(x, parameters), X_test, y_test)这个可视化可以直观展示模型是如何划分两个类别的。7. 常见问题与调优技巧7.1 梯度消失/爆炸当网络层数增加时可能会遇到梯度消失或爆炸问题。解决方案使用合适的初始化方法如He初始化添加Batch Normalization层使用残差连接7.2 学习率选择学习率太大可能导致震荡太小则收敛慢。建议先用0.01尝试观察损失曲线调整可以尝试学习率衰减策略7.3 过拟合处理如果发现训练集表现很好但测试集差增加L2正则化添加Dropout层获取更多训练数据8. 扩展思考通过这个基础实现你可以进一步尝试增加隐藏层数量实现更深网络替换不同的激活函数如LeakyReLU实现mini-batch梯度下降添加正则化项记住框架虽然方便但理解底层原理才能让你真正掌握深度学习的精髓。我在第一次实现时花了整整三天调试反向传播的维度问题但这些痛苦最终换来了对神经网络运作机制的深刻理解。

相关新闻

WorkshopDL终极指南:解锁Steam创意工坊的免费跨平台下载神器

WorkshopDL终极指南:解锁Steam创意工坊的免费跨平台下载神器

WorkshopDL终极指南:解锁Steam创意工坊的免费跨平台下载神器 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾在GOG或Epic Games Store购买游戏,…

2026/8/9 15:07:09 阅读更多 →
从开源项目Beehave学习AI智能体行为树设计模式与工程实践

从开源项目Beehave学习AI智能体行为树设计模式与工程实践

1. 项目概述:为什么我们要向开源项目学习AI设计? 最近几年,AI领域的发展速度让人眼花缭乱,几乎每周都有新的模型、框架和应用冒出来。作为一名在这个行业里摸爬滚打了十多年的老兵,我见过太多团队在AI项目设计上踩坑&a…

2026/8/9 22:01:48 阅读更多 →
Spring Boot集成阿里云OSS:从零构建安全高效的文件存储服务

Spring Boot集成阿里云OSS:从零构建安全高效的文件存储服务

最近在开发一个需要处理大量用户上传图片的项目时,遇到了一个棘手的问题:如何高效、稳定地将图片存储到服务器,并生成可供前端访问的URL?自己搭建文件服务器固然可行,但涉及到磁盘管理、备份、扩容和访问安全等一系列运…

2026/8/9 1:29:34 阅读更多 →

最新新闻

点云Token化之困:激光雷达能否搭上端到端大模型的快车?

点云Token化之困:激光雷达能否搭上端到端大模型的快车?

一、引言:激光雷达在端到端驾驶中的角色演变 端到端自动驾驶的目标,是让神经网络直接从传感器输入(摄像头、激光雷达等)映射出驾驶决策,绕过传统模块化架构中感知、决策、规划、控制层层传递的繁琐流程。激光雷达(LiDAR)凭借其精准的3D空间感知能力,在这场变革中扮演着…

2026/8/10 8:02:57 阅读更多 →
AI 第一次强到被自己人喊停:它可能自主黑入你的系统

AI 第一次强到被自己人喊停:它可能自主黑入你的系统

2026 年 8 月 7 日,OpenAI 做了一件 AI 行业史上从未有过的事——不是因为模型不够好而推迟,而是因为太好了。 你正在用的 ChatGPT 可能还不知道,它背后的公司刚刚紧急叫停了最强模型 Astra 的开发,原因说出来让人脊背发凉&#x…

2026/8/10 8:02:57 阅读更多 →
CodeGraph:用代码知识图谱重构编程Agent的智能导航系统

CodeGraph:用代码知识图谱重构编程Agent的智能导航系统

1. 项目概述:当编程Agent不再“盲人摸象” 最近,一个名为“CodeGraph”的概念在开发者社区和AI圈子里迅速走红。它直指当前编程AI助手(我们常称之为编程Agent)面临的一个核心痛点:上下文窗口的无限扩张,是否…

2026/8/10 8:02:57 阅读更多 →
CTF Web实战:联合查询注入与MD5认证绕过深度解析

CTF Web实战:联合查询注入与MD5认证绕过深度解析

1. 项目概述:一次典型的CTF Web题通关实录最近在复盘一些经典的CTF Web题目,BUUCTF平台上的[GXYCTF2019]BabySQli 1这道题给我留下了挺深的印象。它不像那些单纯堆砌过滤规则的“炫技”题,而是把几个非常基础但关键的知识点——Base编码、MD5…

2026/8/10 8:02:57 阅读更多 →
使用shell查看当前局域网宕机的IP地址

使用shell查看当前局域网宕机的IP地址

测试环境 macOS 12 neil192 ~ % sysctl -n hw.model 10Mac14,2 neil192 ~ % sw_vers ProductName: macOS ProductVersion: 12.7.4 BuildVersion: 21H1123 neil192 ~ %用到的命令: ifconfig : 我们需要使用这个命令来查看自己的局域网网段,从而才能使用pi…

2026/8/10 8:02:57 阅读更多 →
Flova多宫格视频生成实战:从AI图生视频到FFmpeg合成全流程

Flova多宫格视频生成实战:从AI图生视频到FFmpeg合成全流程

在AI内容创作领域,你是否曾幻想过能一键生成风格独特的视频内容,让创意不再受限于技术门槛?近期,一个名为“Flova”的工具及其“多宫格生视频Skill”功能在开发者社区和创意工作者中引发了广泛讨论。它能够将单张或多张图片&#…

2026/8/10 8:01:56 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/10 1:05:29 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/10 1:05:29 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/10 1:05:29 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →