打算写点关于Machine Learning的东西, 正好也在cnBlogs上新开了这个博客, 也就更新在这里吧。
这里主要想讨论的是统计学习, 涵盖SVM, Linear Regression等经典的学习方法。 而最近流行的基于神经网略的学习方法并不在讨论范围之内。 不过以后有时间我会以Deep Learning为label新开一个系列, 大概写写我的理解。 总之Machine Learning的label下都是和一些数学上比较清晰的东西, 不会像deep learning一样要等着Brain Science那群人做实验, 找出新东西才能确定方向。
第一篇本来觉得从Linear Regression开始比较好, 引入问题后导入MP一般逆就能解决。 最后还是不打算这么写。 我们先从Logistic Regression开始, 最后再倒回Linear Regression。
最后, 刚刚设置了latex的代码, 不知能不能用, 不行的话事后再修改。
- Logistic Classification
首先来考虑一个问题, 我们有一组数据$X$, 现在打算将它分类成$k$个类$C$, 那么应该怎么办?
我们这么考虑, 对于每一个数据$x$, 显然都有$P(C_i|x)$, 代表了每个数据属于这个类的分布, 我们的目的就是找出一个最好的分界线, 让每个数据能有最大概率属于某个类。 (说句闲话, 当然我们也有$P(x)$, 并且有联合分布$P(C_i,x)$, 我们会在今后用这个结合bayesian的想法去做些更有意思的事情。 不过因为不是这次的主题, 下面不再提及。) 解决这个问题虽然有很多方法, 为了导出logistic, 这里我们用log-odds来解决这个问题。
$log(frac{P(C_i|x)}{P(C_k|x)}) = eta x + alpha$
在这里, 对于每个类$C_i$, 我们都选择一个固定的类$C_k$作为参考, 同时只用linear model。 最终显然会有$k-1$个分界。现在我们来求每个$P(C_i|x)$:
$P(C_i|x) = frac{e^{eta x + alpha}P(C_k|x)}{Z( heta)}$
这里凭空多了个$Z$, 这是归一化项, 它是所有$P$的总和$Z( heta)=P(C_k|x)+sum_i{e^{eta x + alpha}P(C_i|x)}$, 注意到因为$C_k$我们已经单独拿了出来, 所以单独加上。
现在试着将$Z( heta)$带进去, 看看发生了什么? $P(C_k|x)$消失了, 我们得到了一个新的式子:
$P(C_i|x) = frac{e^{eta x + alpha}}{1+sum_i{e^{eta x + alpha}}}$
看起来是不是很眼熟? 这个其实就是multi-class下面的logistic的形式。 当然, 在neural network里面, 他有个很唬人的名字, 叫做SoftMax Layer。 但值得注意的是这里我为了简单, 省略了$eta$和$alpha$的下标, 显然对不同的clas需要不同的曲线。
当然, 如果$k=2$, 他自然会回到我们熟悉的形式:
$P(C_i|x) = frac{e^{eta x + alpha}}{1+e^{eta x + alpha}}$
这就是我们熟悉的logistic function。 虽然导出的过程多少有点不太令人满意, 但最终还是得到了这个结果。实际上完全不必拘泥于这个方法, 随着深入, 我们会看到各种各样的方法里都能够自然地导出logistic function, 比如在RBM里, 我们就能发现$P(1|x)$是logistic function。 这也是为什么很多方法都倾向于选择这个非线性方程。
- 在最开始我提到了linear regression, 在logistic function的推到过程里也不加说明的用了线性边界, 这里应该有必要简单的介绍下这个问题。
首先是问题设定, 我们依然有一组数据$X,Y$, 我们想找出这组数据的特征。 所谓特征, 你可以想象有一堆点, 它们排成直线, 那显然我们如果有$eta x + alpha$的话, 特征就是两个参数$eta$和$alpha$, 有时我们也会称这个为数据的结构, 它们表达的意义差别不太大。
简单的说, 我们就是想用直线拟合这组数据, 如果没记错, 中学生都学过如何用最小二乘法拟合一组数据, 并且给出误差。 不过中学生的知识水平还很难把这个问题写成简单的形式, 我们这里当然不会出现$sum_{ij}|x_i-x_j|^2$这种形式。
当然, linear regression的应用范围很广, 分类问题也可以处理。比如我们将每个类都设置为$e_i$, 然后自然就可以用linear model去找一个平面进行分类。 过程跟这里是完全一样的。
为了后面更容易解释, 我们稍微换个方向看这个问题, 我们有一组数据$x$, 如果它有什么结构, 那么一定就有这么一个函数能生成它, $f(x)=y$, {x,y}就是现在我们看到的。 因此我们的目标自然就是尝试找到$f$.
对于linear model, 这个问题非常简单
$Bx=Y$
只要有$B$, 一切就解决了。 不过这个事情没有想象中那么简单, 因为很多时候这个等式是无解的, 直接去求显然不合适。 因此我们转而去尝试最小化下面这个式子:
$f=|Bx-Y|^2$
这里我们加了L-2范数来保证能够最小化。 或许你会怀疑为什么没有偏移项, 这是因为为了简单, 我们把偏移项放进了B和x里, 从而不再需要求两次导数了。
到这里一切就显得很清晰了, 虽然很多时候不能保证误差为0(实际上是所有情况下, 因为实际问题的观测数据总和真值有偏移, 我们需要$E(Y)$才能推测真值), 但总是可以最小化这个误差。取导数, 令$f’ = 0$, 我们可以得到:
$B=(x’x)^{-1}x’Y$
这个结果很容易推导, 我也不给出详细的过程。 但这个结果很有意思。你可能已经注意到了, 这个形式满足M-P逆的四个条件, 也就是说这是M-P逆的表达形式。
虽然我们并没有引入vec算符, 也没有引入固有向量分界后空间的意义, 从数学上讲可能很难。 不过可以想像一下这个函数干了什么。 首先, 如果我们能够找到一个完美的$f$, 显然这个曲线会和点完全重合。 但首先我们的模型可能太过简单, 那么我们就用了直线上距离观测点最近的地方作为预测结果, 相当于一个投影过程, 这也是MP逆的定义所导出的东西。
当然, linear regression也会有很多变形和优化方法。 不过今天就到此为止, 今后我们会讲讲LASSO, 局域权重等一些实际中常用的东西。 或许还会补补数学上的一些东西。 总之, 以后有机会再见。