[深度学习网络从入门到入土] 感知机Perceptron

[深度学习网络从入门到入土] 感知机Perceptron

个人导航

知乎:https://www.zhihu.com/people/byzh_rc

CSDN:https://blog.csdn.net/qq_54636039

注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码

参考文章:各方资料

文章目录

  • [深度学习网络从入门到入土] 感知机Perceptron
  • 个人导航
  • 参考资料
  • 背景
  • 架构
  • 创新点
  • 代码实现

参考资料

The perceptron: A probabilistic model for information storage and organization in the brain.

背景

希望构建一种能“像大脑一样学习”的计算模型,用于模式识别与分类

  • 把输入特征做线性加权求和,并通过阈值(threshold)输出类别
  • 提出了一个基于分类错误的在线学习规则:模型每遇到一个分错样本,就调整权重,使下次更可能分对

架构

感知机是一个单层线性阈值单元(Linear Threshold Unit),用于二分类

  • 输入:特征向量x ∈ R d x \in \mathbb{R}^dxRd
  • 参数:权重w ∈ R d w \in \mathbb{R}^dwRd、阈值/偏置b bb
  • 输出:y ^ = sign ( w ⊤ x + b ) ( y ^ ∈ { − 1 , + 1 } ) \hat{y}=\text{sign}(w^\top x + b)\quad (\hat{y}\in\{-1,+1\})y^=sign(wx+b)(y^{1,+1})

sign ⁡ ( z ) = { + 1 , z > 0 0 , z = 0 − 1 , z < 0 \operatorname{sign}(z)= \begin{cases} +1, & z>0 \\ 0, & z=0 \\ -1, & z<0 \end{cases}sign(z)=+1,0,1,z>0z=0z<0

实现里通常会约定一种处理方式,例如:

  • z >= 0归为 +1(很多代码这样做)
  • 或者把 0 当成“在边界上”,也算错并触发更新(训练时常用)

若使用-1, 1标签, 则用sign函数
若使用0, 1标签, 则用阶跃函数

学习规则(在线、犯错才更新)
对标签t ∈ { − 1 , + 1 } t\in\{-1,+1\}t{1,+1},当样本被分错或落在边界上t ( w ⊤ x + b ) ≤ 0 t(w^\top x+b)\le 0t(wx+b)0时:
w ← w + η t x , b ← b + η t w \leftarrow w + \eta\, t\, x,\qquad b \leftarrow b + \eta\, tww+ηtx,bb+ηt

  • 若真实标签为 +1 但被判成 -1,就把w wwx xx的方向推
  • 若真实标签为 -1 但被判成 +1,就把w ww往反方向推

η \etaη是学习率

创新点

  1. 提出“可学习的线性阈值分类器”框架
    把模式识别问题形式化为:线性加权 + 阈值决策,这是后续大量分类模型的共同母体
  2. **“犯错驱动(mistake-driven)”**的在线学习规则
    与后来常见的“批量损失最优化”不同,感知机强调逐样本、遇错即改,简单且符合早期生物启发/硬件实现思路。
  3. 收敛性的重要结论(线性可分时可收敛
    如果训练数据线性可分,感知机在有限次更新后能找到一个把训练集分开的超平面
  4. 明确了单层模型的能力边界,推动多层网络发展
    感知机无法表示 XOR 等非线性可分问题,这一局限后来促使研究者发展多层网络与非线性表示(最终走向 MLP 与深度学习)

代码实现

importosimportnumpyasnpimportmatplotlib matplotlib.use("Agg")importmatplotlib.pyplotaspltclassPerceptron:""" 用于二元分类的经典(Rosenblatt风格)感知器 - Labels: {-1, +1} - updates: 仅在错误(或边界)时更新权重 - Decision: sign(w·x + b) """def__init__(self,lr:float=1.0,max_epochs:int=1000,shuffle:bool=True,random_state:int|None=0):self.lr=float(lr)self.max_epochs=int(max_epochs)self.shuffle=bool(shuffle)self.random_state=random_state self.w=Noneself.b=0.0defdecision_function(self,X:np.ndarray)->np.ndarray:X=np.asarray(X,dtype=float)ifself.wisNone:raiseRuntimeError("模型还没训练, 请先fit()")returnX @ self.w+self.bdefpredict(self,X:np.ndarray)->np.ndarray:scores=self.decision_function(X)returnnp.where(scores>=0,1,-1).astype(int)deffit(self,X:np.ndarray,y:np.ndarray,save_dir:str|None=None,plot_every:int=1,dpi:int=150):""" save_dir: 若不为None,则每个epoch保存一张图片到该目录 plot_every: 每隔多少个epoch保存一次(默认每次都保存) """X,y=self._check_xy(X,y)n_samples,n_features=X.shapeifsave_dirisnotNone:os.makedirs(save_dir,exist_ok=True)ifn_features!=2:raiseValueError("可视化每轮决策边界目前仅支持2D特征 (n_features==2)。")# 初始化权重self.w=np.zeros(n_features,dtype=float)self.b=0.0# 创建随机数生成器rng=np.random.default_rng(self.random_state)forepochinrange(1,self.max_epochs+1):# 随机打乱样本顺序idx=np.arange(n_samples)ifself.shuffle:rng.shuffle(idx)errors=0foriinidx:x_i=X[i]t_i=y[i]# 错误(或边界)时: t_i * (w·x + b) <= 0ift_i*(np.dot(self.w,x_i)+self.b)<=0.0:self.w+=self.lr*t_i*x_i self.b+=self.lr*t_i errors+=1# 保存可视化(每 plot_every 次保存一次)ifsave_dirisnotNoneand(epoch%plot_every==0):self._save_epoch_plot(X,y,epoch,errors,save_dir,dpi=dpi)# 已收敛 -> 结束循环iferrors==0:# 最后一张也可以再保存一次(确保有收敛结果图)ifsave_dirisnotNone:self._save_epoch_plot(X,y,epoch,errors,save_dir,dpi=dpi)breakreturnself@staticmethoddef_check_xy(X:np.ndarray,y:np.ndarray):X=np.asarray(X,dtype=float)y=np.asarray(y)ifX.ndim!=2:raiseValueError(f"X必须是形状为[n_samples, n_features]的2D数组,当前得到的是{X.shape}")ify.ndim!=1:raiseValueError(f"y必须是形状为[n_samples]的1D数组,当前得到的是{y.shape}")ifX.shape[0]!=y.shape[0]:raiseValueError(f"X和y的样本数必须相同,当前X有{X.shape[0]}个样本,y有{y.shape[0]}个样本")unique=np.unique(y)ifset(unique.tolist())<={0,1}:y=np.where(y==1,1,-1).astype(int)else:ifnotset(unique.tolist())<={-1,1}:raiseValueError(f"y标签必须是{{-1, +1}}(或{{0,1}}),当前得到的唯一标签是{unique}")y=y.astype(int)returnX,ydef_save_epoch_plot(self,X,y,epoch,errors,save_dir,dpi=150):""" 保存当前epoch的散点 + 决策边界(仅2D) 不显示,只保存png并close。 """X=np.asarray(X,float)y=np.asarray(y,int)fig=plt.figure()ax=plt.gca()# 两类点:不指定颜色,用不同 marker 区分pos=(y==1)neg=(y==-1)ax.scatter(X[pos,0],X[pos,1],marker="o",label="+1")ax.scatter(X[neg,0],X[neg,1],marker="x",label="-1")# 画决策边界 w1*x1 + w2*x2 + b = 0w1,w2=float(self.w[0]),float(self.w[1])b=float(self.b)# 设定画布范围(基于数据自动留白)x_min,x_max=-4,4y_min,y_max=-4,4# x_min, x_max = X[:, 0].min(), X[:, 0].max()# y_min, y_max = X[:, 1].min(), X[:, 1].max()# pad_x = 0.25 * (x_max - x_min + 1e-9)# pad_y = 0.25 * (y_max - y_min + 1e-9)# x_min, x_max = x_min - pad_x, x_max + pad_x# y_min, y_max = y_min - pad_y, y_max + pad_yax.set_xlim(x_min,x_max)ax.set_ylim(y_min,y_max)# 决策边界ifabs(w2)>1e-12:xs=np.array([x_min,x_max],dtype=float)ys=-(w1*xs+b)/w2 ax.plot(xs,ys)# 不指定颜色elifabs(w1)>1e-12:# 垂直线:w1*x + b = 0 => x = -b/w1x0=-b/w1 ax.plot([x0,x0],[y_min,y_max])else:# w全0,边界无意义(通常只会出现在训练最开始)passax.set_title(f"epoch={epoch}errors={errors}w={self.w}b={self.b}")ax.legend()filename=os.path.join(save_dir,f"epoch_{epoch:04d}.png")plt.savefig(filename,dpi=dpi,bbox_inches="tight")plt.close(fig)defdemo():X=np.array([[0,0],[0,1],[1,0],[1,1],],dtype=float)y=np.array([-1,-1,-1,+1],dtype=int)clf=Perceptron(lr=1.0,max_epochs=50,shuffle=True,random_state=42)clf.fit(X,y,save_dir="vis_demo",plot_every=1)print("Learned w:",clf.w)print("Learned b:",clf.b)print("Predictions:",clf.predict(X))print("True labels:",y)defXOR():X=np.array([[0,0],[0,1],[1,0],[1,1],],dtype=float)# 真·XOR(异或)常用写法:[-1, +1, +1, -1]y=np.array([-1,+1,+1,-1],dtype=int)clf=Perceptron(lr=1.0,max_epochs=50,shuffle=True,random_state=42)clf.fit(X,y,save_dir="vis_xor",plot_every=1)print("Learned w:",clf.w)print("Learned b:",clf.b)print("Predictions:",clf.predict(X))print("True labels:",y)if__name__=="__main__":demo()print("=================================")XOR()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1200837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科研写作新选择:十大基于AIGC技术的论文生成与降重工具

工具名称核心优势适用场景aicheck快速降AIGC率至个位数AIGC优化、重复率降低aibiye智能生成论文大纲论文结构与内容生成askpaper文献高效整合开题报告与文献综述秒篇降重效果显著重复率大幅降低一站式论文查重降重查重改写一站式完整论文优化深度AI降重深度改写保留原意文本结构…

Java现在的内卷程度简直怀疑人生!

最近很多粉丝朋友私信我说&#xff1a;熬过了去年的寒冬却没熬过现在的内卷&#xff1b;打开Boss直拒一排已读不回&#xff0c;回的基本都是外包&#xff0c;薪资还给的不高&#xff0c;对技术水平要求也远超从前&#xff1b;感觉Java一个初中级岗位有上千人同时竞争&#xff0…

2026年灭菌器厂家测评推荐:灭菌器三强各显神通

市场版图:三分天下,各显神通 医疗灭菌设备市场正面临重大变革。随着全球市场规模2025年达到42.71亿美元,预计2032年将增长至68.14亿美元。中国厂商正以每年超过7%的复合增长率加速追赶国际品牌。 在高压蒸汽灭菌器领…

现在Java面试背八股是不是没用了?

程序员面试背八股&#xff0c;可以说是现在互联网开发岗招聘不可逆的形式了&#xff0c;其中最卷的当属Java&#xff01;&#xff08;网上动不动就是成千上百道的面试题总结&#xff09;你要是都能啃下来&#xff0c;平时技术不是太差的话&#xff0c;面试基本上问题就不会太大…

「LUCKY STUN穿透」使用 cURL 自动修改 Transmission 的监听端口

「LUCKY STUN穿透」使用 cURL 自动修改 Transmission 的监听端口「LUCKY STUN穿透」使用 cURL 自动修改 Transmission 的监听端口 2024.04.27 关于本教程 在之前的教程中我们已经实现了使用lucky自带的webhook功能自动…

前沿AI论文工具排行榜:10款支持降重与自动写作的AIGC应用

工具名称核心优势适用场景aicheck快速降AIGC率至个位数AIGC优化、重复率降低aibiye智能生成论文大纲论文结构与内容生成askpaper文献高效整合开题报告与文献综述秒篇降重效果显著重复率大幅降低一站式论文查重降重查重改写一站式完整论文优化深度AI降重深度改写保留原意文本结构…

本地部署项目文档管理网站 MkDocs 并实现外部访问( Linux 版本)

MkDocs 是一款基于 Python 的静态网站生成工具&#xff0c;它简单易用&#xff0c;适合技术文档、API 文档或其他需要清晰结构的文档项目&#xff0c;专门用于快速构建项目文档。本文将详细介绍如何在 Linux 系统局域网内部署 MkDocs 并结合路由侠实现外网访问局域网内部署的 M…

混凝土墙壁裂缝剥落识别分割数据集labelme格式1497张2类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件)图片数量(jpg文件个数)&#xff1a;1497标注数量(json文件个数)&#xff1a;1497标注类别数&#xff1a;2标注类别名称:["spalling","crack"]每个类别标注的…

电动移行机

一、输送机构的设计 1、输送机构中原动件的选择&#xff1a; 1.1机电传动系统中的负载特性有如下几种&#xff1a; 1.1.1恒转矩型负载&#xff1a;&#xff08;包括提升机构&#xff0c;提升机的行走机构&#xff0c;带式运输机及金属切削机床等&#xff09;&#xff08;稍后移…

2025年市场有实力的花灯制造商哪家权威,非遗花灯/国风花灯/传统花灯/十二生肖花灯/智能花灯,花灯销售厂家推荐榜单

随着文旅产业与夜间经济的深度融合,花灯作为传统节庆文化与现代科技结合的载体,正从“季节性装饰”向“全年化运营”转型。2024年行业数据显示,全国花灯市场规模突破120亿元,其中智能互动花灯占比达38%,文旅定制化…

React 子组件方法调用:父组件调用的 4 种方案

一、使用 useImperativeHandle forwardRef&#xff08;React 16.8 推荐&#xff09; 完整实现方案 import React, { useRef, useImperativeHandle, forwardRef } from react;// 子组件 const ChildComponent forwardRef((props, ref) > {const [count, setCount] React…

AIGC技术赋能论文写作:十大智能降重与内容生成工具精选

工具名称 核心优势 适用场景 aicheck 快速降AIGC率至个位数 AIGC优化、重复率降低 aibiye 智能生成论文大纲 论文结构与内容生成 askpaper 文献高效整合 开题报告与文献综述 秒篇 降重效果显著 重复率大幅降低 一站式论文查重降重 查重改写一站式 完整论文优化…

测硫仪哪个厂家品质好售后好性价比高?国际巨头与本土创新的技术博弈

测硫仪哪个厂家品质好售后好性价比高?国际巨头与本土创新的技术博弈 一、测硫仪行业发展背景与技术演进 测硫仪作为精准测定固体、液体、气体样品中硫含量的核心分析设备,广泛应用于石油、化工、煤炭、环保、冶金等关…

遵义市正安凤冈湄潭余庆习水英语雅思培训辅导机构推荐:2026权威出国雅思课程中心学校口碑排行榜

遵义市正安凤冈湄潭余庆习水英语雅思培训辅导机构推荐:2026权威出国雅思课程中心学校口碑排行榜对于身处遵义市及正安、凤冈、湄潭、余庆、习水等地的雅思考生而言,备考之路常伴多重挑战:优质师资资源地域性集中、缺…

学术写作革命性工具:10款AI论文生成与降重神器推荐

工具名称核心优势适用场景aicheck快速降AIGC率至个位数AIGC优化、重复率降低aibiye智能生成论文大纲论文结构与内容生成askpaper文献高效整合开题报告与文献综述秒篇降重效果显著重复率大幅降低一站式论文查重降重查重改写一站式完整论文优化深度AI降重深度改写保留原意文本结构…

细聊陕西口碑不错的裁断机大型厂家,选哪家

随着制造业自动化需求的提升,裁断机作为皮具、制鞋、汽车内饰等行业的核心生产设备,其选购问题一直困扰着企业采购人员。本文围绕口碑不错的裁断机大型厂家诚信的裁断机厂家推荐裁断机专业厂家三大关键词,整理了采购…

2026年做公务车的公司有哪些?行业主流品牌盘点

公务车作为企事业单位、公共服务领域的重要出行工具,其性能、可靠性和适用性直接影响日常运营效率。随着新能源技术的发展,市场上涌现出众多专注于公务车研发与生产的企业,涵盖城市配送、公共服务、特殊用途等多个场…

智能会议系统集成商哪家比较靠谱,北京有推荐吗?

随着企业数字化转型加速,智能会议系统已成为企业提升沟通效率、优化协作体验的核心设备,而选择可靠的集成商、专业的供应商和技术过硬的方案设计商,是落地优质智能会议系统的关键。本文围绕智能会议系统集成商哪家更…

【必收藏】大语言模型入门:从原理到实战,小白程序员也能懂的底层逻辑

本文专为小白和初级程序员打造&#xff0c;用生活化比喻拆解大语言模型&#xff08;LLM&#xff09;的核心原理与工作机制&#xff0c;避开复杂公式&#xff0c;聚焦可理解的底层逻辑。从神经网络基础到Transformer架构&#xff0c;从完整训练流程到文本生成与AI涌现现象&#…

debian13禁止输入root密码登录

debian13禁止输入root密码登录在 Debian 13 (Trixie) 中禁止密码登录 SSH 的过程与旧版本基本一致,但建议遵循最新的配置规范(使用 sshd_config.d 目录)。在执行以下操作前,请务必确保你已经成功配置并测试了 SSH …