本系列专栏属于完全没接触过机器学习的纯小白的自习过程,属于从零开始的养成。顶多有那么一neinei的小科普作用(或许没有(bushi))。
原书有一些公式的推导,还是需要一定的数学基础的。具有一定的数学基础后,再读此书,时常有“哇哦,原来我之前学到的xx内容竟然在这里能用到”的奇妙感受。这样的感受实在是令人愉悦,更有再读下去的信心。难怪本书开篇直言“本书更适合大学三年级以上的理工科本科生和研究生,以及具有类似背景的对机器学习感兴趣的人士。”
这学期专业课四选二选了个“大数据科学与应用技术”,课本竟然用的周志华《机器学习》。
笔者自知代码以及算法水平极其低下,而且前八周课还少(后八周直接多了3门一周两节的课(悲),别人都是后八周课少,就俺多(再悲)),提前自己看一看这个课本,全当看着玩了。
这个系列因为后面得开始准备考研,不一定会有很多更新。(nnd,刚在这敲着字呢,又出一门。这下更新不了了。)不过倘若万里有一,幸运下学期有空闲时间的话,希望还会继续学习更新。不过,这系列也可能无疾而终(希望不会)。如果真无疾而终,那这篇专栏就作为历史的武器,狠狠地拷打我。
1.1 引言
机器学习致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。在计算机系统中,“经验”通常以“数据”的形式存在,因此,机器学习所研究的主要内容,是关于在计算机上从数据中产生“模型”(modle)的算法,即“学习算法”。有了学习算法,我们把经验提供给它,它就能基于数据产生模型。可以说,机器学习是关于“学习算法”的学问。
1.2 基本术语
进行机器学习要现有数据。例如收集了一批关于西瓜的数据(色泽=青绿;根蒂=硬挺;敲声=浊响),(色泽=乌黑;根蒂=稍蜷;敲声=沉闷)...
这些记录的集合称为“数据集”(data set),其中的每条记录是关于一个事件或对象(西瓜)的描述,称为一个“示例”(instance)或“样本”(sample)。反映事件或对象在某个方向上的表现或性质的事项,称为“属性”(attribute)或“特征”(feature);属性上的取值称为“属性值”(attribute value)。属性张成的空间称为“属性空间”(attribute space),或“样本空间”(sample space)或“输入空间”。(就像向量的x,y,z一样)。描述每个样本用到的属性个数称为样本的“维数”。
从数据中学得模型的过程称为“学习”(learning)或“训练”(training),学习过程通过执行某个学习算法来完成。训练过程中用到的数据称为“训练数据”(training data),其中的每个样本称为“训练样本”(training sample),训练样本的集合称为“训练集”(staining set)。学得模型对应了关于数据的某种潜在规律,因此也称为“假设”(hypothesis);这种潜在规律自身称为“真相”或“真实”(ground-truth),学习过程就是为了找出或者是逼近真相。
表示第i个样例。所有标记的集合称为“标记空间”或“输出空间”。
对于预测值是离散值的学习任务,例如“好瓜” “坏瓜”,此类任务称为“分类”(classification);而预测值是连续值的学习任务,称为“回归”。
我们还可以对样本进行“聚类”(clustering),即将训练集中的样本分成若干组,每组称为一个“簇”(cluster);这些自动形成的簇可能对应一些潜在概念的划分,例如“浅色瓜” “深色瓜”,甚至“本地瓜” “外地瓜”。这样的学习过程有助于我们了解数据的内在规律,能够为更深入地分析数据建立基础。
根据训练数据是否含有标记信息,学习任务大致分为两大类:“监督学习”(supervised learning)和“无监督学习”(unsupervised learning),分类和回归是前者代表,聚类是后者的代表。
,我们获得的每个样本都是独立同分布的。(这个假设是后面很多分析的概率论基础)
1.3 假设空间
归纳(induction)和演绎(deduction)是科学推理的两大基本手段。前者是从特殊到一般的“泛化”过程,即从具体的事实种归纳总结出一般性规律;后者则是从一般到特殊的“特化”过程,即从基础原理推演出具体情况。例如,在数学证明中由基础的公理和推理规则,推导出与之相洽的定理,这就是一种演绎过程;而“从样例中学习”,则是一个归纳的过程,因此也称为“归纳学习”。
归纳学习有狭义和广义之分,广义的归纳学习大体相当于从样例中学习,而狭义的归纳学习,则要求从训练数据中学得概念(concept),因此也称为“概念学习”。要学得泛化性能好且语义明确的概念实在是太困难了,所以概念学习技术目前研究、应用都比较少。但对概念学习有所了解,有助于理解机器学习的一些基础思想。
概念学习中,最基本的是布尔概念学习,即对“是”或“不是”这样可表示为0/1布尔值的目标概念学习。
例如,我们要利用这个训练数据集来进行学习,判断什么样的瓜是好瓜。
(根蒂=?)(敲声=?)”的可能取值构成。假设色泽(例如青绿/乌黑/浅白)、根蒂、敲声均各有三种可能值。
那么,对于一个可能的“好瓜判断定理”:
(色泽=x)(根蒂=y)(敲声=z) ”
。
所有这些4×4×4+1=65种可能的“好瓜判断定理”,构成了这个学习任务的假设空间。
可以有很多种策略对这个假设空间进行搜索,例如自顶向下、从一般到特殊,或是自底向上、从特殊到一般,搜索过程种可以不断删除与正例不一致的假设和(或)与反例一致的假设。最终获得与训练集一致(对所有训练样本能够正确判断)的假设。这样满足与训练集一致的假设可能存在不止一个,对于存在的一个与训练集一致的假设,我们称之为“版本空间”。
这样从假设空间中找路径进行学习的过程,给我的感觉很像给定几个点,画出过这些点的函数图像。在没有严格给定要求的情况下,这样的函数图像当然不止一个,也就对应着学习结果的多个版本空间。
1.4 归纳偏好
通过学习得到的模型对应了假设空间中的一个假设(也就是“版本空间”),不同的版本空间面对新的测试集的数据时会有不同的结论,对于同一个瓜,在一个版本空间中,可能是一个“好瓜”,而在另一个版本空间中,可能就不是一个好瓜。就像两个人去卖瓜,小猪同学觉得“我今天宁缺毋滥,我今天一定要买到严格要求的好瓜”,而大猪同学觉得“今天有比较不错的瓜就可以了,能吃到就行”。
像这样机器学习算法在学习过程中对某种假设类型的偏好,称为“归纳偏好”(inductive bias)。
任何一个有效的机器学习算法都必然有其归纳偏好,否则它将被假设空间中看似在训练集上“等效”的假设所迷惑,而无法产生确定的学习结果。就这个瓜,今天必须告诉我它是好瓜还是坏瓜,不许说不知道!
归纳偏好的作用在数学图像上更容易观察,过样本点,可以画出较为平滑的曲线,也可以画出崎岖的曲线。
归纳偏好可看作学习算法自身在一个可能很庞大的假设空间中对假设进行选择的启发式或“价值观”。有一个一般性的原则在引导算法确立“正确的”偏好:“奥卡姆剃刀”原则:“若有多个假设与观察一致,则选择最简单的那个”。这里的“简单”是由我们自己选择的,例如如果这里我们认为“平滑”对应“简单”。那么我们就选择A曲线。而当我们不容易判断什么是“更简单”时,这样的“剃刀”也就无法给我们提供有效的帮助了。
事实上,归纳偏好对应了学习算法本身所做出的关于“什么样的模型更好”的假设。在具体的显示问题中,这个假设是否成立,即算法的归纳偏好是否与问题本身匹配,大多数直接决定了算法能否取得更好的性能。
那么,从上面我们知道:判断一个模型的“好坏”,需要看它是否与实际相匹配。那么,我们好像有一种朴素的直觉:是不是在某种意义上,所有的模型都是“没有区别”呢?
是的。所有针对同一训练集的模型,都有一个一致的特性:每个算法的总误差都相等。
利用公式表示如下:
和假设空间都是离散的。令代表算法基于训练数据X产生假设的概率,再令代表我们所希望学习的真实目标函数。则,此算法在训练集之外的所有样本上的误差为:
为指示函数,若为真则取1,否则取0。
,函数空间为.对所有可能的按均匀分布误差求和,有:
我们可以看到,上面的这个总误差公式与算法无关。也就是说,无论一个学习算法多聪明,另一个学习算法多笨拙,它们的期望性能都相同!这就是“没有免费的午餐”定理(No Free Lunch Theorem,简称NFL定理)。
那所有的算法的期望性能都相等,我们还有什么好研究的呢?
的均匀分布,而实际情况并非如此。实际生活中,真实的目标函数并不一定是均匀分布的,例如在现实中,一个高手是憨蛋的可能性和一个憨蛋是高手的可能性是并不能一概而论的。
所以NFL定理最重要的寓意,是让我们认识到,脱离具体问题,空泛地谈论“什么学习算法更好”是没有意义的。如果考虑所有潜在的问题,那么所有的学习算法都一样好。要谈论算法的相对优劣,必须要针对具体的学习问题;在某些问题上表现好的学习算法,在另一些问题上可能不尽人意。学习算法自身的归纳偏好是否与问题匹配,往往起到决定作用。
以上就是“西瓜书”里第一章绪论的大致内容。
最后,既然这一章是绪论,那我们最后再从究极萌新的角度聊一些有的没的,下面的这些内容几乎一定有一些不足乃至错误。仅属于我这个只看了这一点点绪论和网上各种奇妙解释的门外汉的闲言碎语,大家看一乐呵。
这本《机器学习》的序言第一句话是这样的:“在人工智能界有这样一种说法,认为机器学习是人工智能领域中最能够体现智能的一个分支。从历史来看,机器学习似乎也是人工智能中发展最快的分支之一。”机器学习最能够体现“智能”,那么所谓“智能”是什么含义呢?
单从我读完这个绪论来看,机器学习的内容似乎就只是从训练集里学习,得到模型,并将这个模型应用到新的样本。这的确是挺“智能”的:从训练集里学到的内容能够较为精确地应用到没见过的样本中。但这样的“智能”似乎局限在了人工智能的工具属性,学习器仅作为一个工具来实现我们想要的功能,就像洛芙莱斯命妇(尽管我并不知道这个人是谁)在传记里写到:“分析机并不自称能创造任何东西。它能做任何我们知道怎样命令它去做的事情”(黑体是她用的)。
即使这样的工具能够完成我们意想不到的任务(加粗是我用的)。如果一个人工智能程序想出了一个主意、或一个下棋的策略(例如围棋比赛中产生的“柯洁·AlphaGo”定式;以及围棋被调侃从棋手间的斗智斗勇,变为了和AI对答案),而这是其设计者所从未想到的————那该归功于谁呢?一个程序如何才有独创性呢?
著名的例子之一是一个为初等欧氏几何中的定理寻找证明的程序。这个程序的设计者是赫伯特·吉伦特。有一天,这个程序为一个基本的几何定理找到了一个精妙绝伦的证明。这个定理就是所谓的“驴桥定理——等腰三角形的两个底角相等”。它得到这个诨名,是因为头脑简单的人很难通过它。
。
虽然在公元300年,帕普斯已经发现了这个证明,但这并没有使这项成就黯然失色。程序发现这个证明该归功于谁呢?这算不算一个智能行为呢?还是说这个证明本来藏在吉伦特心里,只是程序使它浮到表面上来了?
似乎完全可以这样说:如果我们能把程序的行为归因于其中某些被迫踪的操作,那在某些意义上,程序所做的只不过使揭示出那些本质上使埋藏在—虽然并不很深—程序设计者头脑中的想法。相反地,如果对程序的追踪无助于说明为什么这个特定的发现得以产生,那么,程序的“头脑”也许就应当和其设计者的头脑加以区别了。程序的构造归功于人,但不能说他在头脑里已经有了程序所产生的那些想法。在这种情况下,人可以被说成是“元作者”——即作者的作者,而程序是(普通的)作者。
在这个“驴桥定理”的例子中,程序产生这个证明的机制离程序表面还是太近了。这使我们难以毫不犹豫地认为这个程序本身就有资格被称为一个几何学家。如果它能够一而再、再而三地提出机智地令人吃惊的新证明,而且其中的每一个看起来都是基于天才的思想火花,而不是基于某种标准方法,那时候我们会坦然地把这个程序称为一个几何学家————但这种情况尚未出现。
那么,我们再来看现在比较出圈的Alphago以及OpenAI-GPT,目前我觉得他俩只算是一种工具,它们并没有产生那种机智得令人吃惊的想法,也没有产生像小说中“550w”那样“延续人类文明的最优选择是毁灭人类”的令人惊骇的判断与自我意识。所以,他俩只算是“元作者”手下的优秀作者。
图灵假想了这样一小段对话:
问:请以福斯大桥为题写一首十四行诗。
答:这可把我难倒了。我从来不会作诗
问:把34975和70764相加。
答:(停了大约30秒然后给出答案)105621。
问:你会下国际象棋吗?
答:会。
问:我就剩一个国王在K1,没有别的子了,而你有一个国王在K6,一个车在R1,该你走棋, 你怎么走?
答:(听了大概15秒),车到R8,将军!
可能很少有人注意到,在那个算术问题中,不但反应时间出奇地长,而且连答案也是错的!如果回答者是人,那这很容易解释,不过是计算错了而已。但如果回答者是机器,就可能有许多不同的解释,例如:
(1).一个硬件层次上地运行偶然失误(即不可再现地以外故障);
(2).一个无意中出现的硬件或软件故障,它可能造成计算错误(可再现的);
(3).一个该机器的程序员有意插入的花招,它可能不时造成算数运算的错误,以此来迷惑提问人。
(4).一个不可预测的旁效现象:程序由于长期艰苦的抽象思维,偶然出了点错误,下次就不会出现了。
(5).一个机器自己想出来的玩笑,故意戏弄询问人。
不妨做一个大胆的想象,有没有可能在庞大的数据集与训练量下,某些我们人类察觉不到的数据(或许在人类眼中八竿子打不着的东西)在机器中经过训练、结合,让机器产生了奇特的“超意识”,甚至已经凌驾于人类之上,在人机交互中戏弄人类呢?
这似乎就要追溯到“心智是如何产生”以及“大脑和思维”有关内容了。关于那些内容,我这个纯萌新、门外汉也就完全不了解了。不过我觉得,机器的“自我意识”是会出现的,只不过应该在比较遥远的未来了(可恶,难道机器老婆只能留给后人了吗!)。
最后放一个有关人工智能的进展相关的“定理”:一旦某些心智功能被程序化了,人们很快就不再把它看作“真正的思维”的一种本质成分。智能所固有的核心永远是存在于那些尚未程序化的东西之中。或者说:“人工智能是尚未做到的东西”。
不得不说,这个绪论内容似乎有点杂乱(李老C锐评:useless!不值当花费如此时间!)。不过,在写这个绪论的过程中,的确引起了我对机器学习以及人工智能的好奇,尽管我现在还是一个完全没有算力的菜狗萌新。但一篇绪论的一个意义不就是引起读者对一门学科的兴趣和初步了解,不是吗?所以,我认为这本书的绪论是一篇成功的绪论。