感知机 Perceptron

感知机(perceptron)是机器学习(machine learning)-监督学习(supervised learning)-判别模型(discriminative model)的一种.

监督学习就是说已知一组训练集X_t及其对应的结果集Y_t,训练出一个模型,然后出现一个新的测试集合X_p,我们可以得到预测结果Y_p.

判别模型是区别于基于贝叶斯的生成模型(generative model),它假定你有一组参数X = x_1,x_2,x_3...,这组X的值按照某个公式计算后得到结果Y

现在假定有这样一个模型,X,Y关系为 Y = w_0 + w_1 x_1 + w_2 x_2 + w_3 * x_3 ...,X是一组实数集,Y自然也是一个实数结果.

但我们在实际使用中,假定这是一个二分类问题,那么设类别a为-1,类别b为+1.训练后得到结果当然不太可能是准确的+1或者-1,我们将>0设定为+1,也就是b,否则设为a.

那么,我们的问题就很清楚了:我们要根据已有的X到Y的联系(也就是训练数据),训练出一组W,这组W代入上述公式后,可以得到一个预测的Y.

我们得到如上这么一组分布,蓝点表示x的散列,绿线表示实际上y的趋势.

现在,我们尝试在每个点调试这组Y参数,让绿线尽可能靠近所有蓝点.

对单个点,我们尝试计算该点和当前W下曲线的距离,如红线.

我们构造一个Loss Function如下:
L(w) =\frac{1}{2} \sum_{i=1}^{N} {(f(x_i,w) - y_i)^2}
当这个Loss Function的值越小,那么点和线的距离就越小.那么我们的目标就是寻找符合这个公式的,能让L(w)最小的W.

梯度下降(gradient descent)在这个时候就可以派上用场了.对于W的每个元素w,我们可以更新如下:
w_j = w_j - \Delta \frac{ \partial L(w)}{ \partial w_j}
\Delta 表示learn rate, \frac{ \partial L(w)}{ \partial w_j}

L(w)对当前w求偏导,就是对数据集W来说当前第j个元素需要更新的比率.

然后我们求\frac{ \partial L(w)}{ \partial w_j} 过程如下:
\frac{ \partial L(w)}{ \partial w_j} = \frac{ \partial }{ \partial w_j} \frac{1}{2} (f(x,w)-y)^2 \\ =(f(x,w) - y) \frac{ \partial }{ \partial wj}( \sum{j=0}^{M} x^j -y ) \\ =(f(x,y) -y) x^j
因此w_j = w_j - \Delta(f(x,y) -y)x^j

以上是大致的理论,在实际使用中,梯度下降有两种,一种是BGD(batch gradient descent),和SGD(stochastic gradient descent).因为我急着去吃饭,以后有空再详细填坑.

然后照着实现一下,在这儿有个简单的实现.各位有兴趣可以过来看看.虽然其实在实际使用中没啥鸟用.

总之,这个就是个有很强假设前提的模型,若你确定因素a,b,c对结果的影响是一阶的话,用这个没啥问题,但可惜实际上这是很罕见的理想的情况下才有.

参考

统计学习方法，李航，北京：清华大学出版社，2012

高级机器学习讲义，唐杰，朱军