感知机 Perceptron

机器学习   2023-12-27 09:36   45   0  

感知机

· 感知机的主要作用是用于二分类

· 之前学习逻辑回归的时候我们的标签都是用{0,1},在感知机里,我们把标签换成{-1,+1}

· 注意:因为标签只有2个,距离一致,故不需要转为独热向量

举例:与问题(AND Problem)

· 我们用与问题来说明感知机这个算法。

· 既然是与问题,那给出的数据集就只有:

42548_5pti_8895.png42718_h2qi_7284.png

小插曲:回归任务和分类任务的最大特点是啥?

· 回归任务的标签y的取值是连续的,如image.svg?y%5Cin%20R

· 分类任务的标签y的取值是离散的,如这里的image.svg?y%5Cin%20%5C%7B-1%2C1%5C%7D

模型

· 我们的模型依然是一个线性模型image.svg?z%3D%5Ctextbf%7Bw%7D%5ET%5Ctextbf%7Bx%7D%2Bb。即下方斜的平面。

52883_chtu_4218.png

· 把模型降维到x1和x2的平面上就是:

53041_djpk_6699.png

· 其实这条线的方程就是image.svg?%5Ctextbf%20%7Bw%7D%5E%7BT%7D%5Ctextbf%20%7Bx%7D%2Bb%3D0,即模型和z=0进行联立

· 所以最终我们要训练的就是这条线,其实就是w和b,所以我们的模型是image.svg?%5Ctextbf%20%7Bw%7D%5E%7BT%7D%5Ctextbf%20%7Bx%7D%2Bb%3D0

· 有一个小点,如果我给模型的两边乘一个image.svg?%5Clambda,即一个系数,最终对我们的分类是没有影响,因为其实联立之后是没变的,因为右边是0,只是切的陡一点还是平一点而已,但还是那条线。

image.svg?%5Clambda(%5Ctextbf%7Bw%7D%5ET%5Ctextbf%7Bx%7D%2Bb)%3D%5Clambda%20z

· 然后,我们计算一个样本点到决策面(超平面)的距离,公式如下:

· 有意思的是,我们发现,距离公式里面没有绝对值,即d有正负

· 因为我们需要通过大于0还是小于0来区分两类,只需要简单的过一个符号函数即可

· 这里有一个点,我们算出来d,只是想要它的正负罢了,对于值我们不在乎,因此理论上来说可以乘一个任意正数。

· 因此我们给d乘一个||w||,这样做的好处就是简化计算

3139_ugii_5609.png

· 这样我们就只用算w^Tx+b就好了。

· 或者从另一个角度理解这个点,我们刚刚说了,给模型乘一个image.svg?%5Clambda不会影响我们后面的决策,其实,d的公式不就是给模型乘了一个image.svg?%5Cfrac%7B1%7D%7B%7C%7C%5Comega%7C%7C%7D而已嘛,现在我们又乘了一个||w||,只是变回去了而已,无论如何都不影响最后的决策。

· 乘完了||w||之后,d又变回了模型z了,所以最后殊途同归。

· 最终的模型如下:

4113_mgly_7349.png

损失函数

· 因为模型是从距离上定义的,所以我们的损失函数也是从距离上定义的。

· 我们把损失定义为,所有做错了的点的到决策面的距离

4354_hnpd_1650.png

· 所以我们的公式为:

4450_0afp_2394.png

· 其中M是所有做错了点,值得注意的是,这里的“距离”是乘了||w||之后的,并且需要加绝对值,因为损失不关心哪边错,只关心错多少。

· 虽然看上去没什么问题,但是实际上却很麻烦,首先,我们要如何界定一个点是否做错?其次,后面梯度下降的时候绝对值求导很痛苦,这都不是我们所希望的。

· 这个时候,我们把标签改为{-1,1}的好处就来了。我们让标签y hat去乘上距离,如果结果小于0,就肯定是分错了的!

4769_bjlu_1970.png

· 同理,我们的损失函数就能重新定义为:

· 注意要加一个负号才是正的哦!

· 这样我们的代价函数就是:

4836_vbys_4305.png

优化

· 最后就是通过梯度下降来优化。

· 有意思的是,感知机并不使用Full Batch去梯度下降,而是随机选一个,使用随机梯度下降

· 对损失L去求偏导,dL/dw,对于某一个wi,最终求得的偏导很简单,就是image.svg?-y%5E%7B(i)%7D%5Ctextbf%7Bx%7D%5E%7B(i)%7D,同理对b求偏导就只有-y,所以参数更新就是:

5358_zwhg_6100.png

· 注意,每次只选一个点去判断,所以是随机梯度下降。

· 一直更新,直到没有错误达到迭代次数就停止。

总结

· 虽然感知机可以分出两类来,但是不一定能找到最优解,如果希望在这么多种可能的结果里面找到最优解,就需要使用支持向量机SVM。

· 或者我们也可以加入非线性元素,即使用神经网络去进行激活。

博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。