(浅)机器学习综述入门

内容大纲:

1 什么是机器学习
2 为什么机器学习是趋势
3 机器学习方法
---3.1 有监督学习
------3.3.1 线性回归
------3.3.2 多项式回归
------3.3.3 Logistic回归
------3.3.4 神经网络
------3.3.5 svm

---3.2 无监督学习
------3.2.1 聚类
------3.2.2 主成分分析
------3.3.3 异常检测
---3.3 其他学习方法
------3.3.1 协同过滤
------3.3.2 增强学习
---3.4 在线学习
4 工具之外
---4.1 模型选取和评估
---4.2 欠拟合和过拟合
---4.3 瓶颈分析
5 机器学习与分布式
6 机器学习的局限 ——- Meta Learning

1. 什么是机器学习

机器学习并无严格正式的定义,我们从其学科定位和产生的应用能有个大致的感受和概念.
机器学习是AI学科的主要分支之一,所以不得不看下什么是AI. 我们会发现AI要难理解得多. AI故名思议就是使机器具有类比人类的智能,这个智能覆盖范围广而模糊,甚至包括如玩弄政权等高层综合活动。而机器学习则相对专注于具体的特定领域任务的实现,比如扫地、无人驾驶、医疗诊断、市场分析等. 不同领域内独立进行建模学习,其过程和结果往往差异较大,而AI的最终目标之一是像人类大脑一样,一次生长,到处运行. 因此机器学习离AI的目标还相差甚远,但是一个不错的开端.

那是不是把所有完美机器学习系统有机的结合到一起就能够逼近AI了呢?也不是,比如军师能从一盘棋中受到战略启发或者反过来,但很难想象一个会下棋的AlphaGo和一个会指挥打仗的AlphaGo能通过什么同构映射机制交流(暂且叫做迁移学习). 因此一种说法是,随着人们在AI领域的深入,理解的更多的却并非什么是AI,反而是什么不是AI. 比如多年前人们认为计算机能战胜人类顶级国际象棋棋手就算具备智能了,但深蓝过后又觉得这并不算什么而把目光转向了围棋,如今AlphaGo完胜人类后我们又觉得这也不能叫人类智能,或者说总觉得少了些什么,或者说真正的智能还是得归功于其创造者. 虽然AlphaGo完成了一个解空间异常巨大问题,但围棋是一个有着well-defined固定规则的问题,服务员端茶倒水并同时应对各类异常的解空间真的比它小吗?笔着觉得这个节奏可能还会持续下去,随着AI能力越来越强大,人们反倒越来越摸不准什么是AI, 甚至怀疑这个问题的意义.

尽管AI难以捉摸,机器学习相对还是比较好理解的,历史上有两个尝试给出的定义可以参考:
a. 机器学习是不通过显示的编码而让能够计算机获得学习能力的专门领域. (Arthur Samuel)
b. 如果一个计算机随着其处理的经验集E的增大,对执行相关任务T的效果衡量P也越来越好,我们就称计算机能从E中进行学习. (Tom Mitchell)

笔者认为虽然定义b看起来更加具体精确,但定义a包含了更深的意义,在文末尾进一步讨论.

2. 为什么机器学习是大趋势

除了表面上带来的各种明显的便利、以及能够把人们从一些底层的重复性劳动中解放出来从而让更多人从事科研、教育等更高层面的活动之外,其本质上也是真切的进步科技生产力,比如能源是文明进步的根基之一,如果我们能让AI去到一些人类无法进入的复杂地段开采新能源或者利用机器学习设计出一种利用率更高更安全的聚变反应堆结构,那么势必能够帮助加速整个文明进程.

虽然说起来有点大而缥缈,但很多行业确实都可以用这个角度来观察,至少长远上是没错的. 比如VR同样也很火,确实在娱乐休闲以及医疗培训等方面有较大潜力,但相比AI而言还是相对狭隘的,因此如果说VR和AI当下都存在行业泡沫的话,我相信VR的泡沫成分更严重一些. 泡沫本身有时候是不可避免的,并非一开始就是故意炒作,而是人们对新技术或现象的一个估价偏差,比如过于乐观从而带动跟风倾注了与其不匹配的资源,但尝试本身是必须要去做的. 又比如比特币,笔者了解其原理后自己的判断是从长远上看应该是符合历史趋势的:用实打实的分布式技术解决了一个信用体系问题,提升了整体运作效率,因而即使眼下有泡沫也是良性的,但绝不是什么骗局.

总之,AI/机器学习能够带给人们更好的生活和高效的社会生产结构,并且这一切正在发生!

扯完大话,我们具体来看一些经典机器学习方法的原理和大致过程。本文主要关注传统的浅层(shallow)机器学习,时下较热的深度学习等简单带过.

有一点先提前强调下:从应用角度来看各类机器学习方法本身只是一个tool box,更重要的如何正确的使用以及如何预处理输入、评估效果、优化分析经验和大数据下的分布式学习等工程问题 ,本文主要从工程师角色来讨论(当然基础研究和框架开发者是另一番视角了).

3. 机器学习方法

传统机器学习主要可以分为有监督学习、无监督学习、协同过滤等其他类学习算法.

几个基本概念:

样本/feature:包含一组数据Item集合,每个Item(即样本)一般由一个向量描述,向量的每个维度称为一个feature. 例如一座房屋的样本可以用向量(长度,宽度,年代,楼层,材质, ...)来描述,一副图片也可以看做由每个像素点描述的向量.

label:每个样本对应的标签,如房屋的价格(数值)、图片对应的是猫还是狗(类别). 仅在有监督学习场景中需要.

有监督学习:通过学习已知的一组 (样本、label), 预测 (新样本, x) 的未知label x的值. 例如根据历史数据预测一个新楼盘的市价,或者识别一副新图片中的动物是猫还是狗等.

无监督学习:给定一组样本,发现其中的结构特点.
例如数据集大致可以分为几类(聚类),数据的分布特点,哪些维度之间可能存在某种关联关系等.

符号约定:
m: 样本数量
n: feature数量,即样本有几个维度
x^{(i)}: 第i个样本
x_{k}^{(i)}: 样本x^{(i)}的第k个feature
y^{(i)}: 样本x^{(i)}对应的label值

3.1 有监督学习

有监督学习即利用已知样本-label数据来预测新样本label的各种学习方法,其算法核心是类似的,都可以简化为这样一个过程:
(1) 根据特定问题选择一个估值函数h_{\theta}(x),其定义域x为样本空间,值域为label空间. \theta是函数模型的参数集,也即我们要求的目标.
(2) 我们希望这个估值函数能精确代表x与其label的关系,即希望对每个样本,有:h_{\theta}(x^{(i)}) \approx y^{(i)}成立.
(3) 定义一个误差函数,用于衡量估值函数对每个样本估值的偏差大小:Cost(h_{\theta}(x^{(i)}), y^{(i)})
(4) 找到一个最合适的估值函数参数集\theta, 使得所有样本平均误差最小,即解决以下优化问题:

\min\limits_{\theta}\frac{1}{m}\sum_{i = 1}^{m}Cost(h_{\theta}(x^{(i)}), y^{(i)})


(5) 求得\theta即得到我们的估值模型h_{\theta}后,即可用于预测新样本的label值h_{\theta}(x_{new}).

接下来可以看到,除了svm细节上稍有不同外,线性回归、多项式回归、逻辑回归、神经网络、在线学习等有监督学习算法基本都是按照这个路子推导出来的.

道理是很直观的:平均总误差越小,代表我们在样本集上拟合得越好,那么一般情况下,我们对新样本的预测也应当越有信心. 因此问题转为话估值函数具体取什么参数集\theta时,总误差最小;注意这里目标函数自变量是某个固定模型的参数集\theta.

诸多学习算法不同的地方主要便是如何确定估值函数模型h_{\theta},采用什么误差函数Cost(h_{\theta}(x^{(i)}), y^{(i)}),以及对输入数据的要求、噪声数据和过拟合的处理、具体迭代优化过程等方面.

当样本label是离散值时比如图片猫狗分类我们称为分类问题(Classification),当label空间是连续值时我们成为回归问题(Regression),比如房价预测,但一般来说适用于分类的学习模型经过简单适配也能用于回归. 下面具体来看看几个经典的回归/分类学习模型.

3.1.1 线性回归

线性回归是最简单的回归模型,适用于label与样本之间存在简单线性关系的场景,例如(假设一个feature,即n=1):

linear regression

linear regression

因而估值函数可以简单定义为:h(x) = \theta_{0} + \theta_{1}x_{1} + \theta_{2}x_{2} + ... + \theta_{n}x_{n} = \theta^{T}x, 即线性映射(引入bias feature x_{0}=1).
定义误差函数为平方差函数:Cost(h_{\theta}(x^{(i)}), y^{(i)}) = \frac{1}{2}(h_{\theta}(x^{(i)}) - y^{(i)})^{2}
平均误差函数:J(\theta) = \frac{1}{2m}\sum_{i = 1}^{m}Cost(h_{\theta}(x^{(i)}), y^{(i)}) = \sum_{i = 1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)})^{2} = \sum_{i = 1}^{m}(\theta^{T}x^{(i)} - y^{(i)})^{2}
优化目标:

\min\limits_{\theta}J(\theta) = \min\limits_{\theta}\sum_{i = 1}^{m}(\theta^{T}x^{(i)} - y^{(i)})^{2}

具体如何求得\theta呢,如果直接当做凸函数求最值问题,我们知道在最小值处函数J(\theta)在各个因变量分量\theta_{i}上的偏导为0,即有以下方程组:
\left\{\begin{matrix}\frac{\partial J(\theta)}{\partial \theta_{0}} = 0\\ \frac{\partial J(\theta)}{\partial \theta_{1}} = 0\\ ... \\\frac{\partial J(\theta)}{\partial \theta_{n}} = 0\end{matrix}\right.
对线性回归问题来说,该方程组恰好是线性方程组,因而的确存在一个一步到位解析解即Norm Equation: \theta = (X^{T}X)^{-1}X^{T}y
其中X是所有样本上bias项以行组成的矩阵,y是样本label向量. 但这个方法有几个问题:
(1). 矩阵求逆开销较大(O(n^3)),所以当样本数较大时计算会很慢.
(2). 该方法不够通用,仅适用于线性回归,因为方程组足够简单.

因而我们主要考察另一种相对通用和高效的方法,即梯度下降法(Gradient Descent),也是一种常用的求函数极值的数值迭代算法,我们简单复习下:
对于目标函数J(\theta),选择一个初值点\theta^{(0)},然后进行以下迭代运算:
\begin{align*}& \text{repeat until convergence:} \; \lbrace \\ \; & \theta_j := \theta_j - \alpha \frac{\partial J(\theta)}{\partial \theta_{j}}  & \text{for j := 0..n}\\ \rbrace\end{align*}
其中偏导项\frac{\partial J(\theta)}{\partial \theta_{j}}称为梯度(Gradient),取负号表示我们希望每个分量往函数下降的方向走,各个分量梯度的组合效果就是往当前\theta所在点函数下降得最快的方向走,最终收敛到全局最优(假设是凸函数). 常量参数\alpha是学习速率,大小需合理设置.

该方法的直观解释是,每次迭代都会严格往最优解方向靠近一步,如下示意图:

具体应用到线性回归的目标函数,迭代过程是:

\begin{align*}& \text{repeat until convergence:} \; \lbrace \\ \; & \theta_j := \theta_j - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)} \;  & \text{for j := 0..n}\\ \rbrace\end{align*}

关于梯度下降,有几个需要注意的点:
(1) 目标函数最好是凸函数,有全局唯一最小值,否则可能收敛到局部最优,以及不同的初始值可能收敛到不同的极值点.
(2) 各个梯度分量是同时计算的,每次迭代仅依赖上一次迭代输出的\theta参数.
(3) 学习速率参数\alpha设置太小则收敛缓慢,设置过大则可能不收敛甚至发散.
(4) 在凸函数并且学习速率设置合理的前提下,梯度下降会自动调整步伐大小(因为最值附近偏导数会趋近于0).
(5) 每一步迭代都需要遍历所有的样本,因此样本量巨大时会比较慢,后面会介绍如何优化.

线性回归的目标函数J(\theta)就是一个简单的凸函数,因而使用梯度下降性能较好.

梯度下降是一种十分通用强悍的方法,很多机器学习方法的优化目标都可以基于该方法实现. 该方法有很多成熟的数值优化实现,如BFGS、L-BFGS等等.

此外除梯度下降方法家族以外,有时还会见到一些启发式的算法如遗传算法(蚁群、粒子群)、模拟退火等等,但数学收敛性不是十分严格,个人认为带有随机和猜测的运气成分,但迭代过程也是有一个大致正确的方向的,因而更加适合复杂的非凸函数优化尝试求解.

3.1.2 多项式回归
有时候我们事先知道或者能分析出样本feature和label之间并不是一个简单的线性关系,例如(假如只有一个feature):

这时应当采用多项式回归而非线性回归,但通过做feature变换我们可以简单地将多项式回归转换为线性回归问题. 举个例子:
假设原始样本只有一个feature,对每个样本x和label y做以下变换:(x, y) \rightarrow ((x, x^{2}), y),即新增了一个feature项x^{2},然后再用上述线性回归模型求解,最终得到二次多项式模型J(\theta) = \theta_{0} + \theta_{1}x + \theta_{2}x^{2}.

人工处理feature自然有以下问题:
(1). 如何决定多项式最高次数d
(2). d太小或太大有什么后果

问题(1)属于模型选择问题,后面有一专门章节来介绍相应的诊断、评估等启发式方法,这里暂不讨论.
问题(2):假如d太小,例如上述二次关系假如我们不对feature做处理而直接用线性回归即直线来拟合,那么拟合的效果肯定不好,在已知样本集上的误差较大(更不用说预测新样本了),这种情况称为欠拟合(underfitting/high bias),我们需要增大d.

而假如d选取的太大,例如上述例子我们增加到4次曲线,那么有可能在已知样本上拟合得非常好,甚至没有误差,如图:

然而很明显,这样的模型拟合过头导致失真,即在新样本上的效果会很差,这种情况称为过拟合(overfitting/high variance). 过拟合产生的原因一般是模型比较复杂/表达能力较强(原始feature或内部产生的中间feature多),加上样本数量不够不足以反应现实情况.

举一个不太恰当但能类比理解的例子:假设有一个线性方程组(满秩),当方程的数量少于自由未知量的数量时,总能找到严格满足方程的解;同样的,当学习模型表达能力较强(自由参数较多),而样本数量不够丰富(尤其当比feature还少)或有噪声时,模型非常敏感,总能意淫出一个基本能满足所有样本label的解,但却很可能与现实不符,从而产生过拟合.

欠拟合和过拟合是机器学习最核心的两个问题,后面在介绍完基本模型本身后会再详细讨论。不过这里先介绍一个通过直接修改误差函数来解决或缓解过拟合的一个常用方法,即加入正则化项(Regularization),将优化目标函数J(\theta)修改为:

\min\limits_{\theta}\frac{1}{m}[\sum_{i = 1}^{m}Cost(h_{\theta}(x^{(i)}), y^{(i)}) + \lambda \sum_{j = 1}^{n}\theta_{j}^{2}]


直观上看,加入正则化的效果是,在拟合样本的同时,我们还希望各个\theta参数的绝对值尽可能的小.
其中常数参数\lambda用于控制拟合程度,其值越大可以防止过拟合,但可能造成欠拟合,极端情况下所有\theta_{j} >1都为0,模型输出为一常值与输入无关;反过来\lambda值越小则不容易欠拟合,但容易过拟合,极端情况下\lambda为0,即没有正则化项.

为什么正则项能够防止或缓解过拟合需要严格的分析论证,但结合多项式回归可以大致先这么帮助理解:
(a) 高次项的\theta参数绝对值越小比如趋近0时,相当于去掉了一些高次项
(b) \theta参数绝对值较小时曲线相对平滑,受噪声等不规则数据的影响也相对较小

再次说明正则化是一种通用的方法不仅仅用于多项式回归,同样的当目标函数发生变化后训练过程也需要相应调整,例如线性回归的梯度迭代在加入了正则化后变为:
\begin{align*} & \text{Repeat}\ \lbrace \\ & \ \ \ \ \theta_0 := \theta_0 - \alpha\ \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)} \\ & \ \ \ \ \theta_j := \theta_j - \alpha\ \left[ \left( \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} \right) + \frac{\lambda}{m}\theta_j \right] &\ \ \ \ \ \ \ \ \ \ j \in \lbrace 1,2...n\rbrace\\ & \rbrace \end{align*}

3.1.3 Logistic回归

虽然是叫做回归(Regression),但Logistic回归实际上是一种常用的分类学习方法.
例如对于0/1分类问题,我们的样本的label y 要么是0,要么是1. 如果我们还是采用类似h_{\theta} = \theta^{T} \cdot x这样的回归模型会产生以下一些问题,导致效果不佳:
(a) h_{\theta}能取<0 和 >1的所有值,不方便理解.
(b) 对一些离真实分类边界偏差较大的样本过于敏感,很容易分错类.

本质原因是分类的取值是离散的,因而直线等连续回归函数不再适用.

Logistic回归的做法是,对某个0/1分类问题,选取一个sigmoid函数(即S形状函数)作为估值函数h_{\theta}的输出,使得其取值在[0, 1]之间,并作出如下解释:对某个样本x,h_{\theta}(x)表示x属于分类1的概率. 例如一个常用的sigmoid函数是g(z) = \frac{1}{1 + e^{-z}},其形状如下:

当z >= 0时,g(z) >= 0.5
当z < 0时, g(z) < 0.5

定义

h_{\theta}(x) = g(\theta^{T}x) = \frac{1}{1 + e^{-\theta^{T}x}}

对新样本x如下预测分类:
h_{\theta}(x) \ge \frac{1}{2}\theta^{T}x \ge 0 时, x的类别为1
h_{\theta}(x) < \frac{1}{2}\theta^{T}x < 0时, x的类别为0

也就是说,关系式\theta^{T}x \ge 0决定了分类边界曲线,我们的目标依然是确定\theta使得该分类边界尽可能准确真实.

定义单个样本误差函数:Cost(h_{\theta}(x^{(i)}), y^{(i)}) = y^{(i)}\log (h_\theta (x^{(i)})) + (1 - y^{(i)})\log (1 - h_\theta(x^{(i)}))

从而优化目标即误差函数定义为:J(\theta) = - \frac{1}{m} \displaystyle \sum_{i=1}^m [y^{(i)}\log (h_\theta (x^{(i)})) + (1 - y^{(i)})\log (1 - h_\theta(x^{(i)}))]

可以验证,当预测存在偏差如h_{\theta} \rightarrow 0,而类别label为1时,Cost(h_{\theta}(x^{(i)}), y^{(i)}) \rightarrow \infty,反之亦然,符合最小化误差/惩戒的意图,但是:
(1) 为什么不能用别的目标函数如线性归回中的平方差函数来定义误差?
(2) 为什么是这样一个函数来表示误差?

问题(1)如果使用平方差函数即Cost(h_{\theta}(x^{(i)}), y^{(i)}) = (h_{\theta}(x^{(i)}) - y^{(i)})^{2},则最终的优化目标函数会变得比较复杂,不再是凸函数,不适合梯度等凸函数优化方法来求解. 而Logistic回归使用的这个函数恰好是凸函数.

问题(2)为什么是这样一个对数函数来表示误差,可以简单看下推导过程:
使用极大似然法,假设我们知道样本空间的概率分布函数即h_{\theta}(x),可以反过来计算当前参数\theta下样本集存在的概率P(\theta),那我们的目标可以自然地定为最大化P(\theta). 于是先看下怎么表达P(\theta). 根据h_{\theta}(x)的定义,有:
若样本x的分类label y = 1, 则样本x属于第1类的概率为:h_{\theta}(x)
若样本x的分类label y = 0, 则样本x属于第0类的概率为:1 - h_{\theta}(x)

综合为一个表达式,样本(x^{(i)}, y^{(i)})存在的概率p(x^{(i)}) = y^{(i)}h_{\theta}(x^{(i)}) + (1 - y^{(i)})(1 - h_{\theta}(x^{(i)}))
又假设样本之间相互独立,则 P(\theta) = \prod_{i=1}^{m} (y^{(i)}h_{\theta}(x^{(i)}) + (1 - y^{(i)})(1 - h_{\theta}(x^{(i)})))
接着,我们把上面连乘式求最大值目标等价地修改为取对数取负号后求最小值,取m均值,再做等式变换后得到:
J(\theta) = - \frac{1}{m}log(P(\theta)) = - \frac{1}{m} \displaystyle \sum_{i=1}^m [y^{(i)}\log (h_\theta (x^{(i)})) + (1 - y^{(i)})\log (1 - h_\theta(x^{(i)}))]
此外和线性回归一样考虑到过拟合应当再添加正则化项,得到最终的优化目标为:

J(\theta) = - \frac{1}{m} \displaystyle \sum_{i=1}^m [y^{(i)}\log (h_\theta (x^{(i)})) + (1 - y^{(i)})\log (1 - h_\theta(x^{(i)}))] + \frac{\lambda}{2m}\sum_{j=1}^n \theta_j^2

确定最终优化目标后,便可使用梯度下降等方法求解训练了,其过程和线性回归的过程是十分类似的,差别仅是估值模型h_{\theta}不同罢了.

同样的通过feature scaling可以拟合复杂的非线性分类边界情况.

3.1.4 神经网络
神经网络是一种模拟大脑神经元结构进行学习的模型,能够拟合十分复杂的非线性关系,其基本单元是一个神经元:

如图,每个神经元有多个信号输入,对每个输入做线性加权求和再通过激活函数加工产生一个信号输出,作为其他神经元的输入或最终输出.
这里的激活函数一般就是一个sigmoid函数,如上述logistic函数.

神经网络由多层多个神经元拼接而成,第一层输入层接收样本每个feature的值作为输入,中间隐含层做特征变换和计算,最终输出层输出结果(分类或回归). 如下图表示一个单输出神经网络:

因而神经网络的估值模型函数h_{\Theta}与其网络结构直接相关,计算的过程称为前向传播,其对应的参数集合\Theta便是所有神经元的输入边上的权重集合,也即我们要拟合的目标.

定义L层神经网络的目标误差函数:

\scriptsize J(\Theta) = -\frac{1}{m}\sum_{i=1}^m\sum_{k=1}^K[y^{(i)}_k\log((h_\Theta(x^{(i)}))_k) + (1 - y^{(i)}_k)\log (1 -(h_\Theta(x^{(i)}))_k)] + \frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_{l+1}}(\Theta_{j,i}^{(l)})^2

其中K表示输出神经元的个数,\Theta_{j,i}^{(l)}表示第l层第i个神经元到第l+1层第j个神经元的输入边权重,我们的目标是最优化所有权重参数:\min\limits_{\Theta}J(\Theta).

同样是用梯度下降法来求\Theta,但与求h_{\Theta}的正向传播过程类似,在具体计算实现上需要通过每个样本的label与其估值的误差做一个反向传播的过程,最终累计得到单步迭代的梯度调整,计算量相对较大.

这里简单解释下为什么神经网络的学习能力较强,能表达十分复杂的关系:
如果只看最后一层的某个输出神经元,形式上等同于一个Logistic回归,不同的是输入的不再是原始feature,而是中间层网络(倒数第二层)输出的信号,这个信号可以看做是原始feature经过多次组合+非线性变换得到的,因而层次越深神经元越多表达能力越强.

这也是深度学习(层数较深的神经网络模型)为什么强大的原因之一:可以不需要特征工程,直接在原始数据集上做训练,神经网络能自动提取中间特征模式,越靠近输入层表达的模式越基本,复用也越厉害,越靠近输出层表达的特征越复杂和高层. 举个例子:一个识别人脸的深度神经网络,低层网络识别出一些基本图形元素如横、竖边缘,皮肤纹路等,高层网络则通过基本元素的组合变换识别出眼、鼻、唇等高层抽象概念,最终组合成人脸.

3.1.5 SVM
svm是一种常用的最大边界距离分类算法,即在样本空间中找到这样一条分界直线/超平面,使得两边某范围内的样本到分界线的最小垂直距离最大,效果之一是对处在边界线附加的新样本类别能够尽可能公平、准确的分类:

假设要求的分界线为y = \theta^{T}x + b,经推导svm的模型目标可以表达为一个约束优化问题:

\min\limits_{\theta, b}\frac{1}{2}\sum_{i=1}^{n}\theta_{i}^{2} \\ s.t. \quad y^{(i)}(\theta^{T}x^{(i)} + b) \ge 1,  i = 1, ..., m

在新样本x上运行模式则是简单的通过判断关系(\theta^{T}x + b) \ge 1来决定在分类边界的哪一边.

解决约束优化问题常用的方法有拉格朗日乘子法,以其为基础出发,最终能导出一些有效quadratic programming算法,以及SMO快速迭代算法.

可以看出,原始svm的分类边界是直线/超平面,那对线性不可分的情况要怎么处理呢?我们可以像多项式回归那样手动增加一些feature(提高维度)再进行分类,但一般很难看出要增加多少以及怎样组合feature来达到一个较好的效果.

svm的最大特色是引入了核函数处理这一步骤,能够自动将原始样本从低维映射到高维,从而变为线性可分,再进行原始svm分类. 举个例子,假设有100个样本,每个样本3个feature,那么通过高斯距离核函数处理,可以最高将每个样本映射到100维空间!

常用核函数高斯距离函数

f(x, y) = \exp(-\dfrac{||x - y||^2}{2\sigma^2})


其中x、y是样本空间中两个点.

对每个样本做变换,使得变换后的每个样本有m(样本数)个feature,x^{(i)}变换后的第j个feature变为:f(x^{(i)}, x^{(j)}),最后在转换后的样本集上进行训练,训练出的模型再应用新样本时也要先进行核函数变换处理.

直观上看,高斯距离函数衡量的是样本空间内两个点的相似度,取值为[0, 1]. 通过将每个样本映射为与所有样本(地标)的相似度向量,能够让变换后的超平面参数在高维空间内拥有较大的选择空间,从而达到低维计算,高维分类的理想效果. 核函数除常用的高斯距离外还有多项式距离函数等,数学上只需要满足Mercer条件即可.

另外有一个笔者认为十分形象有趣的帮助理解核函数例子值得分享一下:假设有一批棋子洒落在棋盘平面上,这批棋子有铁做的有铜做的,我们希望快速区分出来,但棋子从外表维度如大小、形状、色泽等是一模一样的,无法区分,这时来了一个武林高手,他用特殊内力往棋盘上一拍,所有棋子都跳了起来,并且铜棋弹得高一些都在上面,铁棋弹得矮一些都在下方,接着高手眼疾手快拿块大白幕布插在中间,最后铜棋都落在了幕布里,铁棋落回棋盘,高效地完成了分类. 这里通核函数变换(灌入内力),使得样本(棋子)映射到了高维空间(从二维棋盘到三维空间),变成了线性可分,此时找一个分类超平面(幕布)就很容易了.

最后核函数并非是svm专有的,理论上核函数也可以单独应用于特征工程,但通常基于梯度的学习方法如逻辑回归等在核函数处理后会因为特征过多导致训练缓慢,而svm的SMO等计算方法和核函数能较好的结合从而高效实现,因而核函数常见于结合svm使用.

3.2 无监督学习
3.2.1 聚类
3.2.2 主成分分析
3.2.3 异常检测

3.3 其他学习方法
3.3.1 协同过滤
3.3.2 增强学习

3.4 在线学习

4. 工具之外
4.1 模型选取和评估
4.2 欠拟合和过拟合
4.3 瓶颈分析

5. 机器学习与分布式

6. 机器学习的局限 —— Meta Learning

总结来看,尽管机器学习随着软硬件的发展产生了相当多的成果,但其本质依然还是在一些特定领域做一些基本的拟合统计调优运算,甚至是比较暴力的过程:
(1) 专注于特定领域/数据集解决问题,尽管训练的原理是相通的,但结果模型和高层设施一般无法跨界使用.
(2) 模型结构还是过于简单,因而现在的趋势都是往大数据分布式发展.

关于(1)反观生物脑学习是一个统一的整体而非割裂的,这里不仅仅指生物大脑可以同时在多个领域进行学习并且相互启发(模型互通),脑结构本身也具备一些共性(infrastructure互通). 例如有存在一系列著名的生物rewire实验:将动物视神经切断,然后接到负责听觉的神经中枢,一段时间后,听觉神经中枢也能处理视觉信号了,即动物可以恢复真正的视觉!

关于(2)反观生物神经网络构成非常复杂,单一神经细胞动辄上十万的输入输出信号,而神经细胞的数量是天文数字,复杂结构使得中间过程难以理解:即使假设我们彻底清楚了底层的生物神经元机制,依然无法解释高层智能的产生,只能当做黑盒来处理。目前流行的深度学习也正试图这样处理.

因而可以说,在特定基础领域上机器学习/AI已经能表现得比较强大了. 但是想要真正跟强AI扯上关系,下一步必须开始具备笔者称为Meta Learning的能力,例如:

(1) 迁移学习能力,即人们常说的触类旁通、灵感启发等. 这样机器才能真正具备"自主"学习能力,举一反三
(2) 识别、跳出当前范式并对其理论、变更的能力,能够自动context lift up,表现为人的创新/适应能力

关于(2)也解释了为什么人们不用担心AI会对就业等社会各方面造成多大影响,反观历史,每次出现一类新的技术革命,虽然会淘汰掉一些就职业,但势必也会产生相应的新职业(如电话员取代马夫、互联网运营取代电报员等),因为适应和提升所处环境是人的基本智能.

又如在思维上我们也会很习惯做meta thinking,比如拿到一个问题,如果经过简单尝试发现不好处理,我们会先思考应当怎样对这个问题进行思考等等,从而一旦我们解决了一个陌生的问题,往往也就解决了一类新问题.

因而真正的AI也应当具备自主进化抽象、甚至自行设计AI系统的Meta Learning能力.

再回过头来看下机器学习的定义a:让计算机在没有显示编码的情况下进行学习. 这个定义虽然笼统模糊,但从某个层面上的确反应了我们的精确需求:不要我来指导你怎么做,只需要给你一个第一推动力(原始范式),你自己开始进化学习吧.

具体要怎么做呢,或者说怎么造一个机器人,使其具备人的"智能",大概能想到2个方向:
(a) 继续分治监督学习,将各个领域的学习系统做到极限,最后通过某种有机结合产生meta learning的能力加载到机器人核心,并具备实时动态调整能力(参考SGD).
(b) 走类似增强学习的路子,找一个大一统模型,像人脑的自然生长过程一样不断的刺激调整.

(a)的结果将会是一个强大的机器人,某种程度拥有相当的"智能",例如任何决策都比人要周全和高明,但可能并不能让人感觉到具备"人性",而更像是职场专家;(b)的结果可能更接近真人,但困难也大得多,可能从成本角度看甚至不如直接进行生物生产和训练、过滤(开个玩笑).

最后,为什么我们确信强人工智能一定能实现呢?除了乐观信念以外,在可计算性理论中有一条称为Church–Turing thesis的理论指出,一切图灵可计算的都是机械(计算机)可计算的,而(一般认为)人脑是图灵可计算的,因而理论上人脑能做的机械都能做出来,即Everything that is human computable is machine computable. 这里摘录两段讨论感受下:

Can the operations of the brain be simulated on a digital computer? ... The answer seems to me ... demonstrably ‘Yes’ ... That is, naturally interpreted, the question means: Is there some description of the brain such that under that description you could do a computational simulation of the operations of the brain. But given Church's thesis that anything that can be given a precise enough characterization as a set of steps can be simulated on a digital computer, it follows trivially that the question has an affirmative answer. (Searle 1992: 200.)

Church's Thesis says that whatever is computable is Turing computable. Assuming, with some safety, that what the mind-brain does is computable, then it can in principle be simulated by a computer. (Churchland and Churchland 1983: 6.)

所以我们有信心强人工智能够达成,人们正在寻找/开辟这条路,在此向所有在此道路上越走越远的科学家和工程师们表达致敬!

参考资料
1. wikipedia
2. Machine Learning, stanford
3. https://plato.stanford.edu/entries/church-turing/
4. Gödel, Escher, Bach: An Eternal Golden Braid

发表评论

电子邮件地址不会被公开。