神经网络(系统性学习二):单层神经网络(感知机)

此前篇章:

神经网络中常用的激活函数

神经网络(系统性学习一):入门篇


单层神经网络(又叫感知机)

单层网络是最简单的全连接神经网络,它仅有输入层和输出层,没有隐藏层。即,网络的所有输入直接影响到输出。

结构:输入层 → 输出层

特点

  • 只适用于线性可分问题。即,单层网络只能学习并解决线性可分的问题(例如,二维平面上的两类点可以通过一条直线分开)。

  • 单层感知机的输出由输入的加权和经过激活函数(如sigmoid)产生。

优点:结构简单,计算量较小。

缺点:无法解决非线性问题,如XOR问题(异或问题)。因为单层网络只能找到线性决策边界,无法处理更复杂的模式。


详细讲解

感知机最初设计用于二分类问题,用来判断输入样本属于正类还是负类。

1、模型结构:

感知机的输入:

  • 输入特征向量:\mathbf{x} = [x_1, x_2, \dots, x_n]^\top

  • 权重向量:\mathbf{w} = [w_1, w_2, \dots, w_n]^\top

  • 偏置:b

通常,我们还有一个0项权重,或者说常数项w_{0} ,即x_{0}=1对应的权重。这里我们忽略这一非重点的常数项。

加权和:感知机通过将输入特征与权重进行加权求和,再加上偏置项,得到一个总和值。

z = w_1 x_1 + w_2 x_2 + \cdots + w_n x_n + b

激活函数:通常是符号函数sign(z)

感知机模型的输出为:

2、基本步骤

感知机的学习过程是个迭代优化过程,通过不断调整权重和偏置,使模型能够正确分类训练数据。

1、初始化权重和偏置:

在训练开始前,感知机的权重 w1,w2,...,wn 和偏置 b 通常被初始化为小的随机值,或者初始化为零。学习率 η也是一个超参数,通常设置为一个小的正数,如 0.01 或 0.1。

2、对每一个样本计算加权和:

3、通过激活函数预测样本分类标签y_{\text{pred}}^{(i)}

4、误差计算与权重更新(反向传播):

对于每一个样本,如果预测分类结果正确,则不更新权重和偏置。否则利用预测误差更新权重和偏置:

这里的更新规则是通过误差(y^{(i)} - y_{\text{pred}}^{(i)})来调整权重和偏置。如果分类正确(即 y^{(i)} = y_{\text{pred}}^{(i)},则权重和偏置不发生变化。

5、迭代过程(epoch)

对于每个训练样本,逐个计算加权和、应用激活函数、更新权重和偏置。每一轮迭代,会对所有训练样本进行一次更新。通常需要多轮迭代才能训练出一个合适的模型。

停止条件为:

  • 达到最大迭代次数;

  • 在某一轮迭代中没有发生任何权重更新(即所以样本都分类正确)。


具体例子

假设我们有以下一个简单的训练数据集。

初始化时设定权重 w1=0.1,w2=0.2,偏置 b=0,学习率 η=0.01。

第一轮迭代:

对于样本1,计算加权和:z=0.1×2+0.2×3+0=0.8。 激活函数输出 y_{\text{pred}} = 1,与真实标签一致,因此不更新权重。

对于样本2,计算加权和:z=0.1×1+0.2×1+0=0.3。激活函数输出 y_{\text{pred}} = 1,但真实标签是 -1,所以发生分类错误。更新权重和偏置:

w_1 \leftarrow 0.1 + 0.01 \times (-1 - 1) \times 1 = 0.08

w_2 \leftarrow 0.2 + 0.01 \times (-1 - 1) \times 1 = 0.18

b \leftarrow 0 + 0.01 \times (-1 - 1) = -0.02

对于样本3,计算加权和:z=0.08×3+0.18×1−0.02=0.4。激活函数输出 y_{\text{pred}} = 1,与真实标签一致,因此不更新权重。

第二轮迭代:

...

一直迭代

直到所有样本分类正确或达到停止条件,得到了我们要的 w 和 b

#  若文章对大噶有帮助的话,点个赞支持一下叭!

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

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

相关文章

Linux 手动升级软件保姆级教程,适用所有软件,不限于麒麟等国产系统

1、检查软件版本,及是否安装 openssh为例 是否安装 rpm -qa|grep openssh 备份 mv /etc/ssh/ /home/ssh-bakmv /usr/bin/ssh /usr/bin/ssh.bakmv /usr/sbin/sshd /usr/sbin/sshd.bakmv /etc/pam.d/sshd /etc/pam.d/sshd.old2、机器如果不在身边,机器…

【大数据学习 | Spark-Core】Spark的改变分区的算子

当分区由多变少时,不需要shuffle,也就是父RDD与子RDD之间是窄依赖。 当分区由少变多时,是需要shuffle的。 但极端情况下(1000个分区变成1个分区),这时如果将shuffle设置为false,父子RDD是窄依赖关系&…

Go语言开发的源代码行数统计工具

目录 功能特点未来开发计划安装使用方法示例命令通用命令参数选项 示例分析特定目录仅包含特定语言排除特定扩展名的文件生成 JSON 格式的输出显示支持的语言 仓库地址 gcloc 是一个开源工具,用于统计各种编程语言的源代码文件数量和代码行数。它支持多种语言&…

java操作doc——java利用Aspose.Words操作Word文档并动态设置单元格合并

在实际工作中,如果业务线是管理类项目或者存在大量报表需要导出的业务时,可以借助第三方插件实现其对应功能。 尤其是需要对word文档的动态操作或者模板数据的定向合并,使用Aspose会相对来说容易一些,而且相关文档比较完整&#…

电商一件发货软件闲管家使用教程

闲鱼闲管家是一款专为闲鱼卖家设计的电脑版工作台,旨在帮助卖家更高效地管理其在闲鱼平台上的业务。以下是关于闲鱼闲管家的一些主要特点和功能: 主要特点: 多账号管理:支持同时管理多达30个闲鱼账号,方便大型卖家或…

Docker Seata分布式事务保护搭建 DB数据源版搭建 结合Nacos服务注册

介绍 Seata(Simple Extensible Autonomous Transaction Architecture)是一个开源的分布式事务解决方案,旨在为微服务架构中的分布式系统提供事务管理支持。Seata 通过提供全局事务管理,帮助开发者在分布式环境中保持数据一致性 …

HTB:WifineticTwo[WriteUP]

目录 连接至HTB服务器并启动靶机 信息搜集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机开放端口进行脚本、服务扫描 使用curl访问靶机8080端口 使用浏览器直接访问/login路径 漏洞利用 使用searchsploit搜索该WebAPP漏洞 Payload USER_FLAG:bb…

CSS浮动:概念、特性与应用

CSS浮动是网页设计和开发中常见的布局技术之一,以下是CSS浮动相关的所有重要知识点: 一、浮动的定义与语法 浮动(float)属性可以指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它。浮动属性最初只用…

【MySQL课程学习】:MySQL安装,MySQL如何登录和退出?MySQL的简单配置

🎁个人主页:我们的五年 🔍系列专栏:MySQL课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 MySQL在Centos 7环境下的安装: 卸载…

面向对象高级(7)注解

面向对象高级 注解(Annovation) 1、注解的概述 注解(Annotation)以“注解名”在代码中存在。例如: Override Deprecated SuppressWarnings(value”unchecked”) Annotation 可以像修饰符一样被使用,用…

oracle如何配置第二个监听优化数据传输

oracle如何配置第二个监听优化数据传输 服务器两个网卡,配置两个不同IP和端口的监听。 归档日志量每天很大,为了不影响业务,需要配置一个单独的万兆网络来专门的传输归档日志到DG库,这里就涉及到在19c中增加一个监听用来使用专门…

使用Redis生成全局唯一id

为了生成一个符合要求的分布式全局ID,我们可以使用 StringRedisTemplate 来实现。这个ID由三部分组成: 符号位(1 bit):始终为0,表示正数。时间戳(31 bit):表示从某个起始…

Feed流系统重构:架构篇

重构对我而言,最大的乐趣在于解决问题。我曾参与一个C#彩票算奖系统的重构,那时系统常因超时引发用户投诉。接手任务时,我既激动又紧张,连续两天几乎废寝忘食地编码。结果令人振奋,算奖时间从一小时大幅缩短至十分钟。…

【Linux驱动开发】驱动中的信号 异步通知开发

【Linux驱动开发】驱动中的信号 异步通知开发 文章目录 应用中的信号驱动中的信号应用程序接收驱动信号附录:嵌入式Linux驱动开发基本步骤开发环境驱动文件编译驱动安装驱动自动创建设备节点文件 驱动开发驱动设备号地址映射,虚拟内存和硬件内存地址字符…

【MySQL】mysql常用不常用法(持续更新)

注意:对数据做操作时做好备份 1、查询mysql数据表中某字段有重复的数据 适用场景,如: 用户表同名的有那些人,那些名称是重复出现的 SQL语法: SELECT t.*, COUNT(*) AS x_count FROM [table_name] t GROUP BY [检查…

C++设计模式:建造者模式(Builder) 房屋建造案例

什么是建造者模式? 建造者模式是一种创建型设计模式,它用于一步步地构建一个复杂对象,同时将对象的构建过程与它的表示分离开。简单来说: 它将复杂对象的“建造步骤”分成多部分,让我们可以灵活地控制这些步骤。通过…

单片机智能家居火灾环境安全检测-分享

目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 传统的火灾报警系统大多依赖于简单的烟雾探测器或温度传感器,…

Java开发经验——系统日志问题

摘要 本文讨论了Java开发中的系统日志设置问题,特别是性能优化。文章分析了使用占位符记录slowString的耗时问题,并提出了使用lambda表达式和Log4j2 API来延迟参数内容获取,以解决性能问题。同时,文章还提到了SLF4J适配器的好处&…

mysql | limit X, -1 早已不可使用,本身也是一个错误

一、背景 需求:使用 mysql 时,需要获取第 X 条数据之后的所有数据。 这时,首先想到的就是利用 limit 来实现。 早期的部分文章或者资料中,提到可以使用: limit X,-1 例如,获取第一条后的所有数据&…

使用Spring TestContext框架

Spring TestContext框架是Spring框架的一部分,旨在简化Spring应用程序的集成测试。它提供了一组注解和实用工具,帮助开发人员在测试中轻松加载和管理Spring应用程序上下文。以下是如何使用Spring TestContext框架进行集成测试的详细指南。 1. 添加依赖 …