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

此前篇章:

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

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


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

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

结构:输入层 → 输出层

特点

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

  • 单层感知机的输出由输入的加权和经过激活函数(如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是窄依赖关系&…

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…

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

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

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

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

Feed流系统重构:架构篇

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

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

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

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

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

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

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

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

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

C++:探索AVL树旋转的奥秘

文章目录 前言 AVL树为什么要旋转?一、插入一个值的大概过程1. 插入一个值的大致过程2. 平衡因子更新原则3. 旋转处理的目的 二、左单旋1. 左单旋旋转方式总处理图2. 左单旋具体会遇到的情况3. 左单旋代码总结 三、右单旋1. 右单旋旋转方式总处理图2. 右单旋具体会遇…

排序算法(选择排序、直接插入排序、冒泡排序、二路归并排序)(C语言版)

对数组进行排序,主要演示选择排序、直接排序、冒泡排序、二路归并排序算法,附上代码演示 一、编写好各类排序方法的函数 (1) s_sort(int e[],int n):选择排序。 (2)si_sort(int e[],int n):直接插人排序。…

当产业经济插上“数字羽翼”,魔珐有言AIGC“3D视频创作大赛”成功举办

随着AI技术的飞速发展,3D数字人技术已成为驱动各行各业转型升级的重要力量。在这一背景下,2024山东3D数字人视频创作大赛应运而生,并在一番激烈的角逐后圆满落幕,为科技与创意的交融写下浓墨重彩的一笔。 11月20日,一…

Unity-添加世界坐标系辅助线

如果你想在场景中更直观地显示世界坐标系,可以通过编写一个简单的脚本来实现。下面是一个基本的示例脚本,它会在场景中绘制出世界坐标系的三个轴: using UnityEngine;public class WorldAxesIndicator : MonoBehaviour {public float length…

解密自闭症儿童康复秘籍,让孩子重新展开羽翼

在广州这座繁华都市的一隅,隐藏着一片静谧而温暖的天地——星贝育园自闭症儿童寄宿制学校。这里,没有喧嚣与浮躁,只有爱与耐心交织的旋律,为自闭症儿童编织着一个又一个康复的奇迹。星贝育园,如同一盏明灯,…

豆包MarsCode算法题:三数之和问题

问题描述 思路分析 1. 排序数组 目的: 将数组 arr 按升序排序,这样可以方便地使用双指针找到满足条件的三元组,同时避免重复的三元组被重复计算。优势: 数组有序后,处理两个数和 target - arr[i] 的问题可以通过双指针快速找到所有可能的组…

计算机网络socket编程(5)_TCP网络编程实现echo_server

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络socket编程(5)_TCP网络编程实现echo_server 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交…