感知学习算法
最近在看台大林轩田老师的课,这个感知学习算法(Perception Learning Algorithm)有点意思,好像也是现在比较火的深度学习的起源点,下面就来说一下我自己的理解. $ $
原理
pla(Perceptron Learning Algorithm)是一种二分类得方法.根据数据是否线性可分该方法又分为navie pla 和pocket pla.其实这个东西和逻辑回归很相似.问题也很简单,假设我们有这两类点,如何用一条直线把它们分开
我们看一下PLA是怎么做的吧:
其实它就是拟合了如下方程:
\[ h(x)=sign(\omega_{0}+\omega_{1}x_{1}+\omega_{2}x_{2})\\ \\ signx=\left\{\begin{matrix} -1& &x<0 \\ 0& &x=0 \\ 1& &x>0 \end{matrix}\right. \]
瞬间是不是回到逻辑回归了,就是映射函数不一样而已
这里想重点说一下它的迭代公式:
\[ \omega_{t+1}\leftarrow \omega_{t}+y_{n(t)}x_{n(t)} \]
以二维平面为例(该算法可以拓展到高维空间),\(\omega\)代表分类直线(其实是与分类直线的法向量相关的向量),后面那一项也是一个向量(就是某个点以及分类标签构成的一个向量),两者相加其实就是使得分类直线朝着使得该点分类正确的方向旋转和平移.
逻辑回归中我们是求偏导得到的迭代公式.
想要知道更加详细的证明还是去看林老师的课吧
这里说一下结论:
navie pla: 一定会收敛,使数据分开
pocket pla: 无法收敛,是个NP问题,只能求得相对好的分类结果
代码
|
|
还是给出图形结果吧!
navie pla:
pocket pla:
对于线性可分的数据,navie pla 完全可以分类正确,不过对于非线性可分的数据,pocket pla并没有给我们找到最优的结果(黑色的线是最好的结果).
还有就是navie pla与\(\omega\)的初始值无关,但是pocket pla却有关,因为我把\(\omega\)初始化为0,结果没有初始为1好
数据下载:Data