从 Rosenblatt 感知机到十类数字识别:单层神经网络原理、Python 实现与 MNIST 实战(AI for Beginners)
教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载导读本篇文章围绕 AI for Beginners 课程第 3 章「03-Perceptron」展开系统讲解感知机Perceptron这一最基础的神经网络模型——从 1957 年 Frank Rosenblatt 的 Mark-1 硬件原型到二分类模型的数学定义、基于感知机准则与梯度下降的训练算法再到在 MNIST 手写数字识别上的真实应用最后给出 one-vs-all 多分类扩展的实验方案。读完本文你将掌握感知机的完整数学原理、可直接运行的 Python 实现以及如何用 10 个感知机组合解决十类数字识别问题。感知机的历史1957 年的 Mark-1感知机是历史上最早尝试实现现代神经网络的方案之一。1957 年康奈尔航空实验室Cornell Aeronautical Laboratory的Frank Rosenblatt完成了名为Mark-1的硬件实现其设计目标是识别三角形、正方形、圆形等基本几何图形。Mark-1 的结构在今天看来非常朴素一张输入图像被表示为 20x20 的光电池阵列因此网络有400 个输入和1 个二值输出。整个网络只包含一个神经元——这种结构也被称为阈值逻辑单元Threshold Logic Unit。更特别的是网络权重在当时扮演着类似**电位器potentiometer**的角色训练阶段需要人工转动电位器来手动调节电路电阻从而改变每个输入的权重。Frank RosenblattMark-1 感知机当时的《纽约时报》对感知机寄予厚望称其为一台电子计算机的胚胎[海军]期望它能够行走、说话、看见、书写、自我复制并意识到自身的存在。这段历史细节完整记录在课程文档 03-Perceptron/README.md 中它提醒我们感知机虽然简单却是整个神经网络发展史的逻辑起点。感知机模型二分类与阶跃激活模型定义假设模型中有 N 个特征输入向量即为一个 N 维向量。感知机是一个二分类模型——它只能在输入数据的两类之间做出判别。对每个输入向量 x感知机输出 1 或 -1取决于该样本属于哪一类。输出按如下公式计算y(x) f(wᵀx)其中 w 是权重向量f 是阶跃激活函数step activation functionf(x) 1, 当 x ≥ 0 f(x) -1, 当 x 0阶跃函数直观地体现了感知机的开关特性输入特征与权重的加权和大于等于 0 时输出正类小于 0 时输出负类。公式与函数图像对应关系如下偏差项的简化技巧在 Perceptron.ipynb 中课程作者进一步指出一个完整的线性模型理论上还应该包含偏置项 b即理想计算式为 y f(wᵀx b)。但为了让实现更简洁可以在输入特征中额外增加一维该维的值恒为 1从而把偏置吸收进权重向量。这样做之后原本的 (w₁, w₂) 权重向量就变成了 (w₁, w₂, b) 三个参数训练代码无需特殊处理偏置。pos_examples np.array([ [t[0], t[1], 1] for i,t in enumerate(train_x) if train_labels[i]0]) neg_examples np.array([ [t[0], t[1], 1] for i,t in enumerate(train_x) if train_labels[i]0])这一增广特征手法在后续神经网络与线性模型的实现中会反复出现值得重点掌握。训练感知机感知机准则与梯度下降感知机准则Perceptron Criterion训练感知机的目标是找到一个权重向量 w使其能正确分类大多数样本也就是使误差 E 最小。误差由感知机准则定义E(w) -Σ wᵀxᵢtᵢ其中求和针对被错误分类的训练数据点 ixᵢ 是输入数据tᵢ 对负例和正例分别取 -1 或 1。这个准则的巧妙之处在于对错误分类的样本wᵀxᵢ 与 tᵢ 符号相反乘积为负因此 −Σ 取正值——错误越多、错得越离谱误差 E 越大全部正确分类时 E 趋近于 0甚至为负。梯度下降更新规则由于 E 是权重 w 的函数我们需要对其求极小值。课程采用经典的**梯度下降Gradient Descent**方法从一个初始权重 w⁽⁰⁾ 出发每一步按梯度的反方向更新权重w⁽ᵗ⁺¹⁾ w⁽ᵗ⁾ - η∇E(w)其中η 称为学习率learning rate∇E(w) 表示 E 关于 w 的梯度。对感知机准则求梯度后更新公式化简为w⁽ᵗ⁺¹⁾ w⁽ᵗ⁾ Σ η·xᵢ·tᵢ也就是说每遇到一个被错误分类的样本就把权重向修正该样本的方向推进一步——正例被误判为负例时加上 η·x负例被误判为正例时减去 η·x。这正是感知机学习规则的直觉本质。Python 实现课程讲义README中给出了简化示意版而 Perceptron.ipynb 中的完整实现更严谨、可直接运行其核心逻辑如下def train(positive_examples, negative_examples, num_iterations 100, learning_rate 0.01): num_dims positive_examples.shape[1] # 初始化权重这里用全 0随机初始化也是好主意 weights np.zeros((num_dims,1)) pos_count positive_examples.shape[0] neg_count negative_examples.shape[0] report_frequency 10 for i in range(num_iterations): # 每次随机挑一个正例和一个负例 pos random.choice(positive_examples) neg random.choice(negative_examples) z np.dot(pos, weights) if z 0: # 正例被误判为负例 weights weights learning_rate * pos.reshape(weights.shape) z np.dot(neg, weights) if z 0: # 负例被误判为正例 weights weights - learning_rate * neg.reshape(weights.shape) # 周期性打印当前分类正确率 if i % report_frequency 0: pos_out np.dot(positive_examples, weights) neg_out np.dot(negative_examples, weights) pos_correct (pos_out 0).sum() / float(pos_count) neg_correct (neg_out 0).sum() / float(neg_count) print(Iteration{}, pos correct{}, neg correct{}.format(i,pos_correct,neg_correct)) return weights学习率收敛速度与稳定性learning_rate默认 0.01控制每一步训练对权重的调整幅度直接实现梯度下降更新式 w⁽ᵗ⁺¹⁾ w⁽ᵗ⁾ η·xᵢ·tᵢ。课程对学习率的取值给出了明确的经验说明较大的学习率如 1.0感知机学得更快但可能越过overshoot最优解导致权重在最优解附近震荡较小的学习率如 0.001收敛更慢但可能更精确地逼近最优解可以尝试train(pos_examples, neg_examples, learning_rate0.1)观察差异。在 notebook 的实验中作者对比了[0.001, 0.01, 0.1, 1.0]四档学习率下训练 100 轮后的决策边界并提供了 ipywidgets 交互式滑块允许拖动学习率实时观察决策边界与最终权重w₀、w₁、偏置的变化。这是理解学习率是影响收敛的关键超参数的最佳直观实验。玩具问题实战二维数据上的线性可分构造数据先用 SciKit Learn 的make_classification生成一个双特征玩具分类问题课程以医学中依据肿瘤大小和年龄判断良性/恶性作类比并将原始 0/1 标签转换为 -1/1按 8:2 划分训练集与测试集n 50 X, Y make_classification(n_samples n, n_features2, n_redundant0, n_informative2, flip_y0) Y Y*2-1 # 将初始 0/1 值转换为 -1/1 X X.astype(np.float32); Y Y.astype(np.int32) # 划分训练集与测试集 train_x, test_x np.split(X, [ n*8//10]) train_labels, test_labels np.split(Y, [n*8//10])训练过程观察在训练集上运行train(pos_examples, neg_examples)后每 10 轮打印一次正确率。从 notebook 的实际输出可以看到初始正确率约 50%随后很快提升到接近 90% 的水平——这直观地展示了感知机在线性可分数据上的快速收敛能力。决策边界感知机的分类依据是 wᵀx 的符号因此两类样本的分隔线就是wᵀx 0。在二维情形下记增广维 x₂1分隔线方程为 w₀x₀ w₁x₁ w₂ 0。将训练后的权重代入即可在散点图上画出绿色的决策边界正例蓝点与负例红点被一条直线清晰分开。测试集评估将测试集同样补上一维常数 1乘上权重矩阵检查预测符号是否与标签符号一致即可得到准确率def accuracy(weights, test_x, test_labels): res np.dot(np.c_[test_x,np.ones(len(test_x))],weights) return (res.reshape(test_labels.shape)*test_labels0).sum()/float(len(test_labels)) accuracy(wts, test_x, test_labels)这个accuracy函数与实验 notebook 中评估多分类模型时使用的口径一致可以作为通用的评估模板。感知机的局限XOR 问题与线性可分性感知机本质上是线性分类器只有当两类数据线性可分能被一条直线分开时训练过程才能收敛否则训练将一直无法稳定。最经典的失败案例是XOR异或问题。XOR 布尔函数的真值表为01001110把四个输入点按标签分为正负两类后运行训练pos_examples_xor np.array([[1,0,1],[0,1,1]]) neg_examples_xor np.array([[1,1,1],[0,0,1]]) snapshots_xor train_graph(pos_examples_xor,neg_examples_xor,1000)无论训练多少轮准确率始终无法超过 75%——因为在二维平面上不存在一条能同时正确分开这四点的直线。XOR 问题是感知机局限的经典例子1969 年 Marvin Minsky 与 Seymour Papert 在著作《Perceptrons》中正式指出了这一点并一度抑制了神经网络领域近十年的研究。而正如课程后续内容所示**多层感知机MLP**完全有能力解决这类非线性问题——这也为课程的后续章节埋下了伏笔。MNIST 实战手写数字的二分类尽管感知机无法解决 XOR它仍能胜任许多更复杂的任务例如手写字符识别。数据集MNISTModified National Institute of Standards and Technology是机器学习入门最常用的数据集包含60000 张训练手写数字图采集自该研究所约 250 名学生与员工和10000 张测试图来自不同个体所有图像均为28x28 像素的灰度图。仓库已内置数据文件 data/mnist.pkl.gznotebook 中通过以下方式加载with gzip.open(../../../data/mnist.pkl.gz, rb) as mnist_pickle: MNIST pickle.load(mnist_pickle, encodinglatin1)MNIST[Train][Features]为样本矩阵MNIST[Train][Labels]为对应数字标签。构造二分类数据由于感知机是二分类器先把它限制在识别两个数字的问题上。set_mnist_pos_neg函数从数据集中筛出指定两个数字的图像作为正负样本def set_mnist_pos_neg(positive_label, negative_label): positive_indices [i for i, j in enumerate(MNIST[Train][Labels]) if j positive_label] negative_indices [i for i, j in enumerate(MNIST[Train][Labels]) if j negative_label] positive_images MNIST[Train][Features][positive_indices] negative_images MNIST[Train][Features][negative_indices] return positive_images, negative_images pos1, neg1 set_mnist_pos_neg(1, 0) # 数字 1 vs 数字 0 pos2, neg2 set_mnist_pos_neg(2, 5) # 数字 2 vs 数字 5训练结果与权重可视化对 1 vs 0 训练 1000 轮准确率很快逼近 100%。notebook 提供滑块控件让你穿越训练过程并可视化 28x28 的权重矩阵权重矩阵中间位置数值高对应数字 1 通常占据的像素两侧数值低/为负对应数字 0 的竖向笔画区域。因此当输入确实是 1 时中间像素乘以高权重产生正值输入是 0 时相应像素乘以负值。这个可视化是理解感知机到底学到了什么的最佳窗口——它学到的就是一张模板。值得注意的是这种判别方式依赖 MNIST 数字居中且位置规整的特性如果数字 1 水平偏移到 0 的竖向笔画位置感知机就可能给出错误结果。这一局限在后续课程中会通过更强大的网络结构来克服。而对 2 vs 5 的训练中尽管准确率可超过 85%但可以明显看到感知机在某一点后停止学习——因为这两类数字并不线性可分。用 PCA主成分分析把 784 维像素降维到 2 维后可以直观验证0 和 1 能被直线清晰分开而 2 和 5 找不到好的投影方向投影点相互交叠这正是误分类的来源。相关分析代码见 Perceptron.ipynb 的pca_analysis函数。实验从二分类走向十类数字识别one-vs-all课程配套的 lab/README.md 给出了一个完整的进阶实验将本课的二分类感知机扩展为能识别任意数字的多分类器并在训练集与测试集上计算分类准确率、打印混淆矩阵。任务要点如下构造 10 个 one-vs-all 数据集对每个数字 d0-9构造数字 d vs 其余所有数字的二分类数据集。实验起点 notebook PerceptronMultiClass.ipynb 中提供的set_mnist_pos_neg(positive_label, negative_label)只支持两两数字对比需要将其改造为 one-vs-all 版本训练 10 个感知机每个数字训练一个二分类感知机复用本课train函数的逻辑该 notebook 已内置了课程版的train代码定义分类函数对输入图像分别用 10 个感知机打分取得分最高的类别。实验还给出了一个关键优化提示如果把 10 个感知机的权重向量拼成一个矩阵就能通过一次矩阵乘法同时完成 10 个感知机的前向计算随后只需在输出上执行argmax即可得到最可能的数字。这个权重合并、一次矩阵乘法 argmax的技巧在本质上已经非常接近现代神经网络输出层的 softmax 分类思想——它是从感知机迈向真实深度学习框架的重要一步。小结本课要点通过本课可以总结出以下几点核心认知与 Perceptron.ipynb 的 Takeaway 一致感知机是最简单的神经网络架构——单层、单神经元感知机可以手工实现其训练过程基于梯度下降的朴素推导代码不过几十行尽管简单单层感知机能解决手写数字识别这类相当复杂的问题二分类场景下单层感知机是线性分类器其分类能力与 logistic 回归等价在样本空间中感知机用一个超平面分隔两类输入数据因此对线性不可分数据如 XOR、2 与 5 的判别无能为力这需要靠后续课程中的多层网络来解决。配套的 Perceptron.ipynb 与 PerceptronMultiClass.ipynb 是完整的可运行实验环境建议在 Jupyter 中逐单元执行并拖动交互滑块亲自体验训练过程。课程还配套了课前/课后在线测验用于自测以及基于 Azure ML 设计器的扩展挑战可在课程页面的 03-Perceptron/README.md 中找到入口。理解好感知机——包括它的模型、学习规则和线性可分边界——是继续学习反向传播、多层感知机与各类深度学习模型的必要基础。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐从感知机到现代神经网络AI-For-Beginners 单层感知机原理与 Python 实战指南从感知机到现代神经网络AI For Beginners 单层感知机原理与 Python 实战指南 本篇技术指南以 AI For Beginners 课程体系中教程人工智能机器学习深度学习AI-For-Beginners 感知机实战指南从单层神经元的数学原理到 MNIST 手写数字分类AI For Beginners 感知机实战指南从单层神经元的数学原理到 MNIST 手写数字分类 本指南以 AI For Beginners 课程中第 03教程人工智能机器学习深度学习AI for Beginners 感知机多类分类实战从 MNIST 二分类到 One-vs-All 十类数字识别AI for Beginners 感知机多类分类实战从 MNIST 二分类到 One vs All 十类数字识别 本指南围绕《AI for Beginners教程人工智能机器学习深度学习上一篇AWS MCP Servers云市场在AWS Marketplace中部署MCP的快速通道下一篇5个实用技巧用Taste-Skill打造独具品味的AI设计作品创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

OpenShell:用开源工具找回Windows经典开始菜单与高效操作体验

OpenShell:用开源工具找回Windows经典开始菜单与高效操作体验

如果你和我一样,从Windows 7一路用到现在,大概率在Windows 8/10上会有那么一段特别别扭的适应期。系统把开始菜单改了又改,手势、磁贴、新式界面统统招呼上来,但普通用户要的其实就三样:快速启动程序、快速搜索文件、不…

2026/10/8 7:49:00 阅读更多 →
docker-selenium 固定浏览器版本镜像的打标签与发布全流程解析:以 Selenium Grid 4.32.0 + Chrome 98 为例

docker-selenium 固定浏览器版本镜像的打标签与发布全流程解析:以 Selenium Grid 4.32.0 + Chrome 98 为例

测试后端云原生容器编排可观测性 【免费下载链接】docker-selenium Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale 项目地址: https://gitcode.…

2026/10/8 7:48:58 阅读更多 →
k3d 入门指南:在 Docker 中一键运行 CNCF k3s 集群

k3d 入门指南:在 Docker 中一键运行 CNCF k3s 集群

云原生容器编排 【免费下载链接】k3d Little helper to run CNCFs k3s in Docker 项目地址: https://gitcode.com/gh_mirrors/k3/k3d 点击查看 免费下载 k3d 是围绕 Rancher Labs 的轻量级 Kubernetes 发行版 k3s 构建的 Docker 封装工具,它把 k3s 集群…

2026/10/8 7:48:58 阅读更多 →

最新新闻

php正则表达式学习笔记

php正则表达式学习笔记

前言 先说一件容易混淆的事:PHP 里的「正则表达式」其实分两套历史,一套是已经消失的 POSIX 扩展,一套是现在唯一在用的 PCRE。POSIX 那套函数(ereg()、eregi()、ereg_replace()、eregi_replace()、split()、spliti()、sql_regcas…

2026/10/9 9:54:17 阅读更多 →
php框架Phpbean说明

php框架Phpbean说明

前言 先说清楚一件事:Phpbean 是一个非常早期(PHP 5 时代)的轻量级 MVC 框架,早已停止维护,它的官方站点和官方文档如今都很难找到。网上关于它的说明文章内容高度雷同,基本是同一份文本被反复转抄&#xf…

2026/10/9 9:54:17 阅读更多 →
Honeywell EPKS SafeView配置实战:只读视图安全加固指南

Honeywell EPKS SafeView配置实战:只读视图安全加固指南

简介:本资源是一份面向工业自动化领域DCS操作员与系统工程师的Honeywell EPKS SafeView专项技术指南,聚焦解决传统Windows多窗口环境在工业监控场景中画面混乱、关键信息易被覆盖、操作不可控等核心痛点。文档基于Honeywell官方标准文档(如GS…

2026/10/9 9:54:17 阅读更多 →
从信息到Element:WSaiOS-SI结构智能体系的信息结构化理论研究

从信息到Element:WSaiOS-SI结构智能体系的信息结构化理论研究

从信息到Element:WSaiOS-SI结构智能体系的信息结构化理论研究摘要:信息如何进入结构智能体系,是WSaiOS-SI理论建设中必须回答的基础问题。本文提出,信息不等于Element,字符不等于Element,Token不等于Elemen…

2026/10/9 9:54:17 阅读更多 →
拆解MES基础考核试题:从ISA-95到BOM与生产模式的制造执行系统核心知识

拆解MES基础考核试题:从ISA-95到BOM与生产模式的制造执行系统核心知识

简介:MES基础业务考核试题(含答案)是一份面向制造企业信息化新员工、MES运维实施人员及生产管理实习生的考核型资料,内容围绕制造执行系统在车间层的应用展开,系统覆盖ISA-95标准、四个重点功能、物料批管控与单体管控…

2026/10/9 9:54:17 阅读更多 →
ARM架构本质:不是指令集背诵,而是硬件契约与系统权衡

ARM架构本质:不是指令集背诵,而是硬件契约与系统权衡

1. 为什么“搞懂ARM架构”这件事,90%的人从一开始方向就错了很多人点开一篇叫《一文深入搞懂ARM处理器架构》的文章,心里想的是:“我只要记住Cortex-A78比A55快、Neoverse是服务器用的、Thumb指令集更省电”——然后合上页面,觉得…

2026/10/9 9:53:15 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/9 6:17:20 阅读更多 →