机器学习的基本原理
文章来源: 欧洲联盟2023-03-17 15:27:56

近日的ChatGPT很是火爆,让人问起了人类何时将会灭亡。还有什么是计算机做不到的吗?以前的Google应答器就无所不能了!现在,人们已经开发出了很多机器自主作为、自我完善的应用程序了:(1)符合个人喜好的搜索引擎(广告推送),(2)检测欺诈信息的数据挖掘程序, (3) 信息过滤系统,(4)自动驾驶程序,(5)用于人脸识别的数字摄像头,(6)AlphaGo下棋机器人,打遍人类棋手无敌手,(7)医生机器人,(8)教师机器人,等等。

这些都只不过是机器学习的应用程序而已,而机器学习仅仅是人工智能的一个领域。有人把人工智能称为人类的最后发明,机器统治人类只是时间问题。我一直担忧,一个人如果不学习,迟早会沦为机器的奴隶。现在就来看看,机器是怎么学习和思考的吧!还不算太晚。

什么是机器学习?

机器学习(Machine Learning)这个词是IBM的一个雇员,Arthur Samuel,在1959年提出的;他是计算机游戏和人工智能的开拓者之一。机器学习指的是,在人工的反复训练之下,机器能够识别一些有意义的固定模式,并且能够改正错误的格式。最早被制造出来的学习机器叫 ”CyberTron”, 使用打孔的磁带存储,去记录、分析声纳信号、电磁波信号,以及语音格式。

机器学习是人工智能的一部分,专注于设计一些计算机程序/算法,能够自动检测数据中有意义的格式,并且还能随着经验的积累而完善。Tom M. Mitchell如此定义能够学习的算法:它针对特定的任务集T,通过经验E(训练数据集)的模式识别,按照某种优异性度量P,对T中各项任务的认知及操作技能有所改善。也就是说,机器学习中的程序设计是面向任务的。

机器学习程序还必须与人互动。传统的工程设计并不需要反映人类或生物的习性:飞机并不需要理解鸟类;但机器学习的程序必须与其使用者互相沟通,机器所获得的概念和技能必须要为使用者所理解,程序也要模拟人或动物的认知过程。机器学习作为一门科学,还需要从理论上探索新的学习方法、以及各种学习方法的分析比较。

Allan Turing 在他的文章《Computing Machinery and Intelligence》中提出了这么一个问题:机器能够思考吗?有了机器学习的概念,就等于在问:机器能做人类所做吗?答案是肯定的,尽管这会让许多人感到恐惧。有机分子都可以人工合成,会思考的机器自然也可以人工造出。

为什么要搞机器学习?

今天的计算机系统并不能真正地通过例子、类比、过去的任务等去学会如何执行一项任务,也不不会基于过去的错误而改善,更不会通过观察或者模仿而获得新的能力。为了让计算机或者计算机控制的机器人去执行一项任务,必须由一个人先去制定一套完整的、准确无误的算法,再编制成可由机器执行的程序;这是耗时耗力的苦差事。如果能够让机器自行获取知识,就可以减轻手工编程的重负。

即使有了各种程序,机器也不知道何时何情执行何种程序;必须由人事先编制一套择优而行的评估标准。学习样本或者训练数据集其实是随机的,作出的决定也是随机的,这就需要风险评估;概率模型就登堂了。机器学习作为一门科学,还需要探讨各种可能的学习模型,以及模型的相容性(无矛盾性)、完备性(无限收敛性)、紧致性(有限可行性),这是一门科学的必要设制及最终目的。

如何实现系统的自我完善?其实这就是机器的性能提升。对于人来说,就是通过练习,逐步改善操作和认知的技巧;比如,弹琴,书画,驾车等等。获取如何动作的知识是提升技能的第一步,通过反复练习、不断纠正偏差(与预定目标的差距),才是学习的目的。获取知识是有意识的行为,提升技能则是下意识的行为。如果能够通过逻辑推理,突破原定的目标,那就是创造出新的知识了:这也是机器学习的终极目标。

怎样搞机器学习?

要让机器能够学习,首先要搞清什么是学习。动物(尤其是人类)学习的过程通常包括(1)新知识的获取,(2)总结/归纳、纠正偏差,(3)认知、操作技能的提高,(4)通过试验发现新的理论/经验,等。学习的方式/方法有:(1)通过观察和记忆,(2)通过例子或者过往经历(3)他人的指导,(4)书本、词典,(5)网络,(6)通过类比、反思等思维技巧,等等。

知识和技能的表述多种多样,常见的有:(1)代数化的表达式,(2)决策树,(3)形式逻辑表达式,(4)条件-行动规则,(5)框架和计划,(6)图形和网络,(7)随机过程,(8)计算机程序,或其它过程编码,(9)生成算法,(10)分类与回归分析,等等。

目前,机器学习研究的焦点有三个:(1)面向任务的研究,开发各种学习系统及其性能评估,(2)人类学习过程的研究和计算机模拟,(3)独立于应用领域(任务)的算法/学习方法的理论分析。这三个方面是相辅相成的。

机器学习的目标有两个:一是搞清基本概念:什么是学习?机器能够学习吗?怎么知道学习是否成功?怎么量化知识?二是要针对各种任务,提出优良的算法。现在的许多软件如Mathematica、Matlab,都包含了机器学习的一些算法,但其性能未知,也决不是最优的,更不是全部[也不是免费的,软件开发者是有劳动代价的] 。要想有一部完善的、针对所有任务的算法集,还非得一个数理化生机的全才才能办到,这决不是几个专业的专才加在一起就能办到的。

我有了计算一切的方法,有谁能够教教我,把它们都变成可以机器执行的程序吗?我自学过、也教过C语言、汇编语言,可是,程序写起来太费时费力,有不有快一点的高级语言?Python吗?太笨;HMTL吗?没有逻辑。大概需要有人去另创一门语言才行?