HanLP — 感知机(Perceptron)

简介: HanLP — 感知机(Perceptron)

HanLP — 感知机(Perceptron) -- Python

感知机(Perceptron)是一个二类分类的线性分类模型,属于监督式学习算法。最终目的: 将不同的样本分类

感知机饮食了多个权重参数,输入的特征向量先是和对应的权重相乘,再加得到的积相加,然后将加权后的特征值送入激活函数,最后得到输出

激活函数的前面部分,是线性方程 wx+b

线性方程输出的是连续的值,但对于分类来说,最终需要的类别信息是离散的值,这时候,激活函数就派上用场了,激活函数的存在,是将连续回归值,转变成1 -1 这样的离散值,从而实现类别划分

激活函数

激活函数有很多种,在深度学习中,有着非常重要的作用,在感知机中使用的激活函数是 sin(),

假如输入到模型中的是一个二维的特征向量(x1,x2),则整个过程可以表示为如下:

输入的特征向量(x1,x2)先分别和权重(w1,w2)相乘,再将两者相加,最后加上偏置 b ,最终得到的值,和阈值 0 做比较,如果值大于0 则输出1,否则则输出 -1

(X1W1+X2W2+...X1∗W1+X2∗W2+...) + b => np.dot(X,W) + b

这样一来,就会划分到了线性方程 wx+b=0 两侧的样本,就分成了正、负两类,用感知机进行二分类,需要先找到能够将正、负样本完全区分开的决策函数 wx+b=0,如下图

因此就需要确定一个学习策略,也就是定义一个损失函数,再通过训练样本,通过减小损失值,不断迭代模型参数,最终找到最优参数 w 和 b ,

损失函数的作用: 用来衡量模型的输出结果,和真实结果之间的偏差,然后根据偏差,修正模型,

回归任务

在回归任务中,标签和模型输出都是连续的数值,很容易就能衡量出二者之间的差异。

可对于感知机的分类问题来说,我们又该如何衡量差异呢?一个直观的想法,就是去统计误分类样本的个数作为损失值,误分类的样本个数越多,说明这个该样本空间下的表现越差,但是这样的函数是非连续的,对 w 和 b 不可导,所以我们无法使用这样的损失函数来更新 w 和 b.

为了得到连续可导的损失函数,感知机选择用误分类样本到决策函数的距离,来衡量偏差

这里是单个样本点到决策函数的距离公式

1||w|||wx0+b|1||w|||w∗x0+b|

其中 x0x0 表示样本点的输入 ||w||||w||等于权重向量 ww 的模长 ||w||=(w21+w22+...+w2n)||w||=(w12+w22+...+wn2)

对于感知机分类问题来说,可以用 y0(wx0+b)−y0(w∗x0+b) 来代替 |wx0+b||w∗x0+b|

y0y0 表示样本点 x0x0 对应的标签值。

为什么可以这样代替呢?

假设有两个误分类样本

样本1 (x1,y1)(x1,y1) 样本2 $(x_2,y_2) 1,样本1的真实类别为正样本,即:y_1 = 1$,但是在模型中,样本1 却被误分类为了负样本,也就是计算得到的 wx1+b0wx1+b≤0,那么 y1(wx1+b)=1(wx1+b)−y1(w∗x1+b)=−1(w∗x1+b) 最终的结果变成了正值,大小等于 |wx1+b||w∗x1+b|

样本2 的真实类别为负样本,y2=1y2=−1 即在模型中被误分类为了正样本。也就是计算得到的 wx2+b>0w∗x2+b>0,那么 y2(wx2+b)−y2(w∗x2+b) 就等于 1(wx2+b)1(w∗x2+b) ,结果仍为正值,大小等于 |wx2+b||w∗x2+b|

因此:所有误分类的样本到决策函数的距离和就可以表示为如下

感知机所关心的,是怎么能将两类样本正确地区分开,对样本点到决策函数距离的大小并不关心,如下图,红线和绿线都能将两类样本正确地区分开,所以对感知机来说,这两条线的分类效果是一样的

因此,可以把1||w||1||w|| 去掉

最终,感知机的函数就是L(w,b)=xiMyi(wxi+b)L(w,b)=−∑xi∈Myi(w∗xi+b)

感知机适用于样本特征简单,且线性可分的二分类问题,因为运算简单,所以计算效率高。

不过在复杂的场景中,感知机往往不能胜任,所以我们在感知机的基础上,又诞生了多层感知机神经网络

https://www.bilibili.com/video/BV19h4y1w7WL


目录
相关文章
|
虚拟化 数据中心 异构计算
GPU 虚拟化技术MIG简介和安装使用教程
使用多实例GPU (MIG/Multi-Instance GPU)可以将强大的显卡分成更小的部分,每个部分都有自己的工作,这样单张显卡可以同时运行不同的任务。本文将对其进行简单介绍并且提供安装和使用的示例。
1014 0
|
10月前
|
机器学习/深度学习 人工智能 监控
AutoTrain:Hugging Face 开源的无代码模型训练平台
AutoTrain 是 Hugging Face 推出的开源无代码模型训练平台,旨在简化最先进模型的训练过程。用户无需编写代码,只需上传数据即可创建、微调和部署自己的 AI 模型。AutoTrain 支持多种机器学习任务,并提供自动化最佳实践,包括超参数调整、模型验证和分布式训练。
887 4
AutoTrain:Hugging Face 开源的无代码模型训练平台
|
数据库 Java 数据库连接
Struts 2 与 Hibernate 的完美邂逅:如何无缝集成两大框架,轻松玩转高效 CRUD 操作?
【8月更文挑战第31天】本文通过具体示例介绍了如何在 Struts 2 中整合 Hibernate,实现基本的 CRUD 操作。首先创建 Maven 项目并添加相关依赖,接着配置 Hibernate 并定义实体类及其映射文件。然后创建 DAO 接口及实现类处理数据库操作,再通过 Struts 2 的 Action 类处理用户请求。最后配置 `struts.xml` 文件并创建 JSP 页面展示用户列表及编辑表单。此示例展示了如何配置和使用这两个框架,使代码更加模块化和可维护。
374 0
|
机器学习/深度学习 人工智能 监控
一文读懂deepSpeed:深度学习训练的并行化
DeepSpeed 是由微软开发的开源深度学习优化库,旨在提高大规模模型训练的效率和可扩展性。通过创新的并行化策略、内存优化技术(如 ZeRO)及混合精度训练,DeepSpeed 显著提升了训练速度并降低了资源需求。它支持多种并行方法,包括数据并行、模型并行和流水线并行,同时与 PyTorch 等主流框架无缝集成,提供了易用的 API 和丰富的文档支持。DeepSpeed 不仅大幅减少了内存占用,还通过自动混合精度训练提高了计算效率,降低了能耗。其开源特性促进了 AI 行业的整体进步,使得更多研究者和开发者能够利用先进优化技术,推动了 AI 在各个领域的广泛应用。
|
API 调度 C语言
互斥锁,自旋锁,原子操作的原理,区别和实现
v互斥锁,自旋锁,原子操作的原理,区别和实现
312 0
|
测试技术 索引
Elasticsearch咱们单节点数据量多大?
Elasticsearch咱们单节点数据量多大?
432 3
【逆向】使用x64dbg实现qq私聊与群消息防撤回
使用x32dbg调试32位QQ,通过附加QQ进程并禁用断点。搜索im.dll,找到消息撤回函数,设断点。发测试消息并观察中断点,定位到0X0F01D112C。用NOP替换疑似撤回函数的CALL指令,测试成功后保存为补丁,替换原IM.dll文件,完成防撤回。群聊防撤回类似,需单独找对应函数。注意仅防本地撤回,服务器上仍会显示撤回。
【逆向】使用x64dbg实现qq私聊与群消息防撤回
|
Kubernetes 异构计算 容器
Kubelet之Topology Manager分析
Topology Manager是kubelet的一个组件,在kubernetes 1.16加入,而kubernetes 1.18中该feature变为beta版。本篇文档将分析Topology Manager的具体工作原理。1.为什么需要Topology Manager现代计算机的CPU架构多采用NUMA(Non-Uniform Memory Access,非统一内存)架构。NUMA就是将cpu
4562 0
|
安全 Ubuntu
metasploitable2安装实战
metasploitable2安装实战
910 0
|
SQL 缓存 Java
JDBC中PreparedStatement常用操作实践
JDBC中PreparedStatement常用操作实践
541 1