一个人和另一个人的相遇是很奇妙的。人生若只如初见,Wi全都是0。有的人之间自带化学反应,初次见面就噼里啪啦更新权重,经过激活函数得出——1:看你顺眼;-1:负分滚粗(原谅群主的简单粗暴)。所谓权重,深藏于生活的每个细节中。曾经看过一篇文章,说即使关系亲密的人之间也是自带评分表的:今天你做了一件事让我开心,score++;明天你惹到我让我不爽,score--。所以无论和关系多好的人相处我们都需要反省,不断调整自己的行为,且行且珍惜。机器学习也是有温度的,你可以把它看作一个活生生的人,感觉触角多且灵敏。所谓“学习”,不过是不断修正自己的错误,让自己长点记性,从而更好地与他人及外界相处。
今天介绍的是神经网络的最简单形式——感知机。它告诉我们一种朴素的生活哲学:不要怕犯错,有错就改,大错大改,小错小改,没错就可以休息了。想起多少个因为害怕犯错而裹足不前的时刻,才明白这样的哲学理解起来没问题,执行起来却不容易。人生真应该多一些adapt on the fly的勇气。
1什么是感知机
最简单形式的前馈神经网络,是一种二元线性分类器, 把矩阵上的输入x(实数值向量)映射到输出值 f(x)上(一个二元的值)。
感知机的几何解释是,线性方程 w*x+b=0 将特征空间划分为正负两个部分:
这个平面(2维时退化为直线)称为分离超平面。其中w是平面的法向量(关于平面法向量的证明可参考:https://www.zybang.com/question/9bf56901b08949c0660ae85cf4d3791a.html)。
2学习策略
核心:极小化损失函数。
如果训练集是可分的,感知机的学习目的是求得一个能将训练集正实例点和负实例点完全分开的分离超平面。为了找到这样一个平面(或超平面),即确定感知机模型参数w和b,我们采用的是损失函数,同时并将损失函数极小化。
对于损失函数的选择,我们采用的是误分类点到超平面的距离(可以自己推算一下,这里采用的是几何间距,就是点到直线的距离):
其中M为误分类的集合。这个损失函数就是感知机学习的经验风险函数。
【为什么不考虑,我想是因为平面方程w*x+b=0的系数可以按一定倍数缩放,且并不影响平面位置,我们可以选一个w为单位法向量的平面方程,这样就可以只关注了。】
可以看出,损失函数L(w,b)是非负的。如果没有误分类点,则损失函数的值为0,而且误分类点越少,误分类点距离超平面就越近,损失函数值就越小。同时,损失函数L(w,b)是连续可导的。
3学习算法
感知机学习转变成求解损失函数L(w,b)的最优化问题。最优化的方法是随机梯度下降法(stochastic gradient descent),这里采用的就是该方法。关于梯度下降的详细内容,参考wikipedia Gradient descent。下面给出一个简单的梯度下降的可视化图:
首先,任选一个超平面,然后使用梯度下降法不断地极小化目标函数:
极小化过程不是一次使M中所有误分类点的梯度下降,而是一次随机的选取一个误分类点使其梯度下降。使用的规则为。
假设误分类点集合M是固定的,那么损失函数L(w,b)的梯度通过偏导计算:
然后,随机选取一个误分类点,根据上面的规则,计算新的w, b然后进行更新:
其中η是步长,大于0小于1,在统计学习中称之为学习率(learning rate)。这样,通过迭代可以期待损失函数L(w,b)不断减小,直至为0。
感知机学习算法原始形式:
解释:当一个实例点被误分类时,调整w,b,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面的距离,直至超越该点被正确分类。
这次我们学习了感知机的理论部分,下周会来点干货:如何在大名鼎鼎的鸢尾花数据集上训练一个感知机模型,来判断鸢尾花的种类。敬请期待:)