您的位置:首页 > 其它

关于“机器学习算法”与《算法导论》中“算法”的讨论

2015-04-27 19:21 267 查看
  本人以生物背景切入生物信息学方向,在学习的过程中常与算法打交道,比如最为基础的序列匹配算法、基因组序列的组装算法等。零零散散学了很多,却没有仔细的对已学算法进行细致的区分和研究,以导致对“算法”本身的概念始终比较模糊。从13年末开始,由于研究方向的需要,开始更多的接触计算机的基础算法和机器学习算法,对二者有了进一步的理解。最近知乎有人提问:机器学习的算法和普通《算法导论》里的算法有什么本质上的异同?。答案中其中不乏精辟的论述。下面我会参考、结合这些回答,基于我的理解,对其稍作梳理。

  算法(algorithm,为了利于区分,姑且称之为“计算机算法”)的定义形式有多种,以《The Fundamentals of Data Structure in C》中的描述为例:算法是一组完成特定任务的有序指令序列。所有算法必须满足如下标准:

  (1)输入:有0个或者多个由外部提供的输入量;

  (2)输出:至少产生一个输出量;

  (3)确定性:每一条指令都有明确的语义;

  (4)有限性:算法的任何一条执行路线都能在有限步骤内结束;(这一条非必须)

  (5)有效性:每一条指令都必须足够简单,在原则上,只用纸、笔就能处理这些指令。

  

  机器学习的定义也有很多种,其中Tom Mitchell在其著作《Machine Learning》是指:Well-posed Learning Problem: A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.(Tom Mitchell, (1998) )这是一个足够严谨但是数学味道稍浓的定义,我见过的一个稍微平民化一点的翻译来自周志华老师:“利用经验来改善计算机系统自身的性能。”。那么显而易见,所谓的机器学习算法应该是指实现机器学习过程的方法

  那么根据定义并进行比较,我们会发现,这两种“算法”最显著的差异来自于确定性。算法导论里的算法主要用于解决有精确解的问题,而关注点在于如何更有效率地求得这个解,包括计算时间更短(时间复杂度),也可以是计算过程所需要的内存空间更少(空间复杂度)。机器学习要解决的问题一般没有精确解 (@董可人)(姑且这么说),关注点在于对规律学习,以实现预测。这里非常同意@于墨的观点:即“机器学习里的“算法”应该叫做“模型”更贴切”

  换句话说,二者的共同点是:都是借助计算机解决问题的方法。而区别在于问题起点和终点的“确定性”。对于计算机算法,我们通常确定的给出待操作对象和目标实现对象,需要做的完成这一过程;而对于机器学习算法,通常不会给出确定的“对象”,而只是代表不同“对象”的具体实例,然后建立起实例间的(统计)关系(通过学习实现)。

  个人认为这里才是导致二者“确定性”上差异的根本来源:算法的操作目标是“对象本身”还是”对象的实例“。机器学习算法处理的原材料是实例,因此有一个用实例反推对象的过程。而这个过程中无法排除随机因素的影响,因此反推的过程是一个”抓住主要矛盾、忽略次要矛盾的过程“。

  那么导致这种差异更深层次的原因是什么呢?个人认为,计算机算法是面向”计算机“的;而机器学习算法是面向“规律”的。计算机是建立于确定性基础之上的人造机器;而规律则则来自于充满不确定性(或者说是随机因素)的自然。

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: