机器学习笔记(一) 感知机算法 之 原理篇

简介: 机器学习笔记(一) 感知机算法 之 原理篇

这篇学习笔记强调几何直觉,同时也注重感知机算法内部的动机。限于篇幅,这里仅仅讨论了感知机的一般情形、损失函数的引入、工作原理。关于感知机的对偶形式和核感知机,会专门写另外一篇文章。关于感知机的实现代码,亦不会在这里出现,会有一篇专门的文章介绍如何编写代码实现感知机,那里会有几个使用感知机做分类的小案例。


感知机算法是经典的神经网络模型,虽然只有一层神经网络,但前向传播的思想已经具备。究其本质,感知机指这样一个映射函数:sign(wixi+b),将数据带进去计算可以得到输出值,通过比较输出值和数据原本对应的标签值是否正负号相同从而推断出模型训练的结果。

1. 何为感知机?


image.png

下面是一副经典的感知机模型图:

最左边的表示输入一个样本点的特征向量,通过各自的权重前向传播到神经元,在神经元有一个加法器,最后通过一个激活函数来决定是否激活。最下面的0是bias项,一般文献中记为b


2. 感知机可以解决什么问题?

这里我们可以看一个经典的例子,利用感知机模型来解决经典的OR问题


image.png

image.png

image.png

image.png


3. 感知机不能解决什么问题?

这里有一段经典的公案,《感知机》是这本书的出现,直接让神经网络这一流派的研究停止了二十年。因为书中在详尽介绍感知机原理的同时,还指出了感知机的致命缺陷:无法解决XOR问题。

XOR又称为异或,它的逻辑如下:

变量1 变量2 逻辑运算结果
0 0 0
0 1 1
1 0 1
1 1 0

这是个比较奇怪的逻辑,变量之间当且仅当不相等时为真。

凭着几何直觉,我们很快就能发现,不可能有这样的超平面,能准确的分开红色和蓝色两类样本。

这里小结一下:

感知机可以解决完全线性可分的问题。

这似乎是一句废话,但是感知机背后强大的思想确衍生出了支持向量机这个传统机器学习的巅峰。而对于线性不可分的样本,可以使用多层神经网络(Multi Layer Network  )或者使用核感知机,事实上两层的感知机就可以解决XOR问题


4. 感知机是如何工作的?

在上面这个略显啰嗦的例子,我们看到了感知机的工作方法。它的算法流程可以概括如下:

  1. 选取初始值w0,b00,0
  2. 在训练集中选取一个数据点(xi,yi)(,)
  3. 检查在这个样本点上,模型是否会错误分类,如果错误分类,则更新wi,bi,
  4. 回到第2步,直到整个训练集中没有误分类点

从上面的算法,我们至少能读出这么几层意思:

  1. 初始值是随机给的,赋值为0是一个简便的做法,但通常设置为一个很小的随机值,后面会详细讨论
  2. 每次训练其实只用到一个样本点,即使训练集中有很多数据点亦是如此。这和 wixi这个表达式的计算方式有关,详见上面的数值例子。
  3. 算法的重点在误分类这里,那么如何定义误分类就非常要紧了。
  4. 算法是一个迭代的过程,且要满足所有样本点都分类正确才停机。反过来理解,就是感知机算法只能运用于完全线性可分的数据集。如果数据集是不能完全线性可分的,感知机永远不会停机,除非训练之前先设置好停机条件,常见的比如设置训练次数或者误差上界(一旦误差小于$ \varepsilon $ 即可停机)。

显然,如何定义错误是感知机算法里的头等大事。


5. 该如何定义错误?


image.png

  1. 找到描述样本点到超平面距离的计算式
  2. 正确分类的样本点的距离和丢弃不看
  3. 定义误分类的距离和,对它求最小值


image.png


6. 知错后如何改错?

回顾微分学知识,我们知道一个全局的凸函数取得最小值是在导数为0处。但是,放在多元函数的观点来看,一元函数的导数本质上也是梯度。当一个函数沿着负梯度的方向运动是,函数值的减少是最快的;沿着正梯度方向运动时,函数值增加啊是最快的。下面我们就来求其梯度。


image.png


image.png


7. Novikoff 定理

先叙述一下这个定理。定理来自李航老师的《统计学习方法》第二版Page42。


image.png

先从直觉上理解下这个定理表述的意思。大意是对于可以找出线性超平面做分类的数据集,存在一个下界$ \gamma $,所有样本点到超平面的距离都至少大于这个 $ \gamma $,同时错误分类的次数有一个上界,第 k+1 次之后,分类都是正确的,算法最终是收敛的。

证明


image.png


image.png

这里R其实只是一个记号而已,它代表的意思是从所有误分类中找到模长最大的,而这个记号其实是从证明过程中产生的。


作为介绍感知机原理的文章,已经写得非常长啦,可以就此打住~

如果有任何纰漏差错,欢迎评论互动。

相关文章
|
1天前
|
机器学习/深度学习 数据采集 人工智能
机器学习算法入门与实践
【7月更文挑战第22天】机器学习算法入门与实践是一个既充满挑战又极具吸引力的过程。通过掌握基础知识、理解常见算法、注重数据预处理和模型选择、持续学习新技术和参与实践项目,你可以逐步提高自己的机器学习技能,并在实际应用中取得优异的成绩。记住,机器学习是一个不断迭代和改进的过程,保持好奇心和耐心,你将在这个领域走得更远。
|
12天前
|
算法 Java
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
21 1
|
15天前
|
存储 传感器 算法
「AIGC算法」近邻算法原理详解
**K近邻(KNN)算法概述:** KNN是一种基于实例的分类算法,依赖于训练数据的相似性。算法选择最近的K个邻居来决定新样本的类别,K值、距离度量和特征归一化影响性能。适用于非线性数据,但计算复杂度高,适合小数据集。应用广泛,如推荐系统、医疗诊断和图像识别。通过scikit-learn库可实现分类,代码示例展示了数据生成、模型训练和决策边界的可视化。
12 0
「AIGC算法」近邻算法原理详解
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习之深度学习算法概念
深度学习算法是一类基于人工神经网络的机器学习方法,其核心思想是通过多层次的非线性变换,从数据中学习表示层次特征,从而实现对复杂模式的建模和学习。深度学习算法在图像识别、语音识别、自然语言处理等领域取得了巨大的成功,成为人工智能领域的重要技术之一。
40 3
|
20天前
|
机器学习/深度学习 数据采集 人工智能
|
21天前
|
算法 PHP
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
14 1
|
2天前
|
算法 Java 调度
令牌桶算法的原理是什么
令牌桶算法的原理是什么
|
12天前
|
算法 Python
决策树算法详细介绍原理和实现
决策树算法详细介绍原理和实现
|
13天前
|
存储 算法 Java
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
11 0
|
17天前
|
设计模式 JavaScript 算法
vue2 原理【详解】MVVM、响应式、模板编译、虚拟节点 vDom、diff 算法
vue2 原理【详解】MVVM、响应式、模板编译、虚拟节点 vDom、diff 算法
24 0

热门文章

最新文章