赞
踩
本课程为李烨老师达人课课程,需要购买训练营课程的同学请点击下方链接:
本达人课针对机器学习初学者,从机器学习、深度学习最基本的原理及学习意义入手,以模型为驱动,带领大家吃透几个最经典的机器学习模型——学习这些模型的原理、数学推导、训练过程和优化方法。
本课为每个模型提供了极小数据量的“极简版”实例,方便读者从直观上了解模型的运行原理。借助这些例子,大家可以将自己变身为“人肉计算机”,通过口算/笔算每一步的推导,模拟算法全过程,进而彻底理解每个模型的运作方式。
此外,本课还介绍了构建数据集、特征选择、调参、验证模型的方法,以及如何同步进行编程语言学习。帮助您掌握进行机器学习产品开发的基本能力。
李烨,高级软件工程师,现就职于微软(Microsoft),曾在易安信(EMC)和太阳微系统(Sun Microsystems)任软件工程师。先后参与聊天机器人、大数据分析平台等项目的开发。微信公众号:yuesiyuedu;个人微信号:julia_li_2013
本课程大纲分为六大部分,共计 42 篇:
大家好,我是李烨。现就职于微软(Microsoft),曾在易安信(EMC)和太阳微系统(Sun Microsystems)任软件工程师。先后参与过聊天机器人、大数据分析平台等项目的开发。在未来的 10 周里,我将通过“机器学习极简入门课”与同学们分享机器学习相关知识。
首先,我们来看下当前机器学习领域招聘市场行情。
上面表格中所有带有“算法”、“人工智能”、“数据挖掘”、“视觉”字样的职位,都需要掌握机器学习相关知识。
在产品和服务中应用机器学习模型,已经逐步成为互联网行业的通行方法。甚至很多传统软件企业,也开始尝试应用机器学习。说得更直接些,人工智能正处在炙手可热的风口浪尖上,作为程序员不会机器学习都不好意思去找工作。
很多技术开发者迫切希望快速进入人工智能领域,从事工程或者算法等相关工作,这也是我推出这门课程的初衷。
本课程针对机器学习初学者,从机器学习、深度学习最基本的原理及学习意义入手,以模型为驱动,带领大家吃透几大最经典的机器学习模型——学习其原理、数学推导、训练过程和优化方法。配合精心设计的极小数据量的“极简版”实例,方便读者从直观上了解模型的运行原理,利用实例大家还可将自己变身为“人肉计算机”,通过口算/笔算每一步的推导,模拟算法全过程,进而彻底理解每个模型的运作方式。结合自身实践经验,我总结了多个构建数据集、特征选择、调参、验证模型的高效方法,并教授大家如何同步进行编程语言学习,助你快速拥有机器学习产品开发的基本能力。
本课程大纲分为六大部分,共计42篇。
第一部分:绪论
第二部分:基本原理
深谙其理,才能灵活应变。本部分带大家了解什么是机器学习、机器如何自己学习,以及机器学习三要素:数据、模型、算法之间的关系。
模型是机器学习的核心,那么模型是怎么得到的呢?本部分也将讲解模型的获取(训练)和评价(验证/测试)过程,相应数据集合的划分以及具体的评价指标。
这部分知识和后面讲述的具体模型结合起来,就可以实践了!
第三部分:有监督学习 I
第四部分:有监督学习 II
第五部分:无监督学习
第六部分:从机器学习到深度学习
整个课程以经典模型为驱动,讲述每一个模型所解决的问题域,模型原理和数学推导过程。作为课程的主体,第三部分和第四部分讲解的每个模型,都附有实例和相应的 Python 代码。每个例子的数据量都非常小——这样设计就是为了让读者可以用人脑模拟计算机,根据刚刚学到的模型算法对这些极小量数据进行“模拟训练/预测”,以此来加深对模型的理解。
AI 技术岗位求职知识储备
如果大家真的有意投身到人工智能领域,从事相关技术性工作,通过技术笔试、面试则是必要条件。在面试中被要求从头解释某一个机器学习模型的运行原理、推导过程和优化方法,是目前非常常见的一种测试方法。机器学习模型虽然很多,但是经典、常用的很有限。如果能学会本课程所讲解的经典模型,你将足以挑战这些面试题。
触类旁通各大模型与算法
各种机器学习模型的具体形式和推导过程虽然有很大差别,但在更基础的层面上有许多共性。掌握共性之后,再去学新的模型、算法,就会高效得多。虽然本课的第二部分集中描述了部分一般性共同点,但真要理解个中含义,还需要以若干具体模型为载体,从问题发源,到解决方案,再到解决方案的数学抽象,以及后续数学模型求解的全过程,来了解体味。这也就是本课以模型为驱动的出发点。
极简版实例体验实际应用
运用到实践中去,是我们学习一切知识的目的。机器学习本身更是一种实操性很强的技术,学习它,原本就是为了应用。反之,应用也能够促进知识的深化理解和吸收。本课虽然以原理为核心,但也同样介绍了:划分数据集、从源数据中提取特征、模型训练过程、模型的测试和评估等方法和工具。
配套数据+代码快速实操上手
本课程中各个实例的 Python 代码及相应数据,大家可以下载、运行、改写、参考。
我希望本课的读者在知识和技巧的掌握之外,能够将学习到的基本规律运用到日常生活中,更加理性地看待世界。
再遇到“人工智能产品”,能够根据自己的知识,去推导:How it works——
我们自己用来判断万事万物的“观点”、“看法”、“洞察”,实际上都是我们头脑中一个个“模型”对所闻所见(输入数据)进行“预测”的结果。这些模型自身的质量,直接导致了预测结果的合理性。
从机器学习认识客观规律的过程中,我们可以知道,模型是由数据和算法决定的。对应到人脑,数据是我们经历和见过的万事万物,而算法则是我们的思辨能力。
作为人类,我们不必被动等待一个外来的主宰者,完全可以主动训练自己的思维模型,通过改进算法和增大数据量及数据多样性来提升模型质量——如果能在这方面给读者朋友们带来些许启发,我实在不胜荣幸。
最后,预祝每一位订阅课程的朋友,能够通过学习找到心仪的工作,如果大家有任何疑问和建议,也欢迎通过读者圈与我交流,我们共同学习,共同进步。
我之前分享的一场 Chat 《入行 AI,选个脚踏实地的岗位》中曾提到,工业界所需的 AI 技术人员,更多集中在算法、工程、数据相关岗位之上,并全面总结了不同岗位角色所需要具备的素质、日常工作的状态及职业发展路径。这场 Chat 也将收录在课程中,作为福利供大家免费阅读,加油!
机器学习最直接的应用,就是利用模型解决实际业务中的问题。
本课所讲解的几个经典模型,均是前辈在机器学习发展的几十年间所总结出的、解决特定问题的固定模式,并且已在实践中得到很好证明。
学会这些模型,一则可以以它们为载体理解“机器学习”是一种怎样的机制;二则掌握了模型,也就掌握了当前许多实际问题的有效解决方案。
在实际工作中,我们要运用一种模型,其实有很多现成的算法库、学习框架。只要将相应的数据输入工具、框架中,用几行代码指定模型的类型和参数,就能自动计算出结果。
既然如此,何必再去学其中的原理,一步步推导让人头晕的数学公式?
对于这个问题,首先给出我的意见:
机器学习的原理和数学推导一定要学!
此处且举个直观的例子:
工具就像是武器,学会使用某种工具,只是学会了这种武器最基本的招式和套路。而理论学习即策略学习,决定了在未来真实对战中,遇到对手攻击时,你选取哪些招式套路,如何组合起来去迎敌。
反过来讲,如果根本不学模型原理,只是把一个个应用场景背诵下来,需要的时候直接把模型当黑盒使用——这样做我们能学到什么?
我们将学到:
这和调用任何一个封装好的 API(无论其功能)有什么区别?和调用同事撰写的模块接口又有什么不同?
学会这几件事能让你相对他人产生什么样的壁垒?作为一个原本非 AI 领域的开发者,难道因为会安装几个支持库,会调几个接口就身价倍增,就成为机器学习工程师了?
回过头来,我们从正面来看学习原理的必要性。
咱们先来看看最直接的用处。
最起码,找工作的时候,但凡稍微靠谱点的企业,在面试“机器学习工程师”时,一定会问到模型原理和推导过程!所问到的模型,随着时间推移会越来越复杂。
三四年前甚至更早,企业技术面试时,大多会问线性回归。这两年,已经基本从逻辑回归开始问了。再过一两年是否会问支持向量机,不得而知,但理论考察势必会越来越难。
真想入这行,为了面试也得学其中的原理。
在日常编码中,可能确实只是调 API 而已。
很多时候,在决定使用哪个工具、框架,调用哪个模型算法后,你还需要向老板、合作方甚至客户解释其中的缘由。
以前谁负责哪个模块都是自己搞定所有事,你怎么还想让别人给你标注数据呀?
花费这么多时间和人力训练出的模型,怎么连个 DSAT 都 Fix 不了啊?
既然再多投入几倍资源也达不到 95% 以上的正确率,为什么不干脆直接用 Rule-Base 来解决?
……
Manager、Tech Lead、PM 都有可能围绕机器学习/深度学习投入产出比,提出各种问题。要在工作中运用这些技术,首先要说服他们。这个时候,原理就派上用场了。
对你应用 ML/DL 的疑问,不仅来自上司,很多时候也来自于同级别的同事。
相对于老板对性价比的关注,同事可能更关心技术细节——质疑新框架/工具/模型/算法,与之前的实施方案相比,在功能、性能等方面的差异。
别人都用 TensorFlow,你为什么要用 Caffe 呢?
以前这个分类器,我们用逻辑回归挺好的,你为什么非要换成 RNN 呢?
用这个谱聚类做数据预处理,归根到底不还是利用词袋模型算词频,比直接计算 tf-idf 做排序能好多少呢?
……
到了这个层面,只简单概括说说原理已经不够了,需要深入细节做对比:
- 不同模型的特质、适用场景,对当前数据的匹配程度;
- 不同算法对算力和时间的消耗;
- 不同框架对软硬件的需求和并行化的力度;
了解了这些,才有资格讨论技术。
【文-1】
当然,在日常工作中可以完全不理会 Peer 的质疑,对于 Boss 的决定也可以照单全收绝无二话。Engineer 嘛,只要埋头干活就好了。但总得把活儿干好吧。
作为一个机器学习工程师,把活干好的基本标准是:针对技术需求,提供高质量模型。
再高一个层次则是:针对业务需求,提供高质量的解决方案。
机器学习工程师又被戏称为调参工程师。
其所要做的工作就是在限定的数据上、规定时间内,为具体技术需求(比如训练一个分类器)提供性能尽量高、消耗资源尽量少的模型。
选特征、调超参、换模型,称为调参工程师的三板斧,要想有章法地使用它们,理论基础还是必不可少的。
至此,上面 【文-1】 处所描述内容,不再是和他人论战的“弹药”,而成了工作步骤的指导。
- 评判模型性能的指标有哪些,如何计算?
- 正在使用的模型是怎么工作的?
- 这些超参数是什么含义,调整它们会产生哪些影响?
- 特征选取有哪些原则、方法可运用?
如果连以上问题都不了解,又怎么优化模型?
成为一名合格的调参工程师,固然可以在 AI 领域占据一席之地,但对于业务和团队而言,仍然是个可有可无的角色。
真正创造价值的,从来都是解决实际问题的人。
这些经典的模型、算法,是前人在解决实际问题中所研究出的、具备通行性的解决方案。它们被广泛应用,是因为所解决的目标问题总会持续出现。
然而,新问题也会随着新需求不断涌现,现有成果可能无法解决这些新问题,调参工程师这时将束手无策。
但对于理论知识扎实的机器学习工程师来说,他们完全有可能针对具体业务问题,构造出目标函数,甚至开发出符合自身软硬件资源特点的求解算法。
到了这一步,即使还使用现成工具,也不是靠 Google 一下 Best Practice,以及复制粘贴下代码就能解决的了。必须具备理论基础和数学层面的建模能力才行。
学习机器学习,除了上一篇提到的实实在在的好处外,在务虚方面同样受益。
学习模型运作原理,可以了解现实事物如何转化为数字并被计算,结果又如何映射回现实世界来影响我们的生活。
掌握机器学习相关知识,能为我们客观认识现实带来下面这些帮助。
在这个看起来人工智能要席卷一切的年代,不光是正在或立志于在 AI 领域做技术工作的人,任何人都有必要从原理角度了解机器学习、深度学习是干什么的,以及如何发挥作用。
作为一个带有神秘色彩的热点概念,人工智能(AI)被热炒、被歪曲、被妖魔化是难免的。
人工智能是一个学术研究领域,目前在工业界有一定的应用和探索。AI 归根到底是个技术问题,可学、可用、可研究亦可质疑,而不是只能顶礼膜拜的法术神功。
具备最基本的判断能力,才有可能不会被“神话”迷惑,不被“鬼话”恐吓。
知道 ML/DL 模型是如何工作的,总不至于看了篇《AI 专业毕业生年薪 50 万》就慌慌忙忙报个了 2 万块的培训班,学了
pip install tensorflow
,通过复制粘贴代码可运行几个习题数据集,就以为能够找份年薪 50 万的工作了。知道 AI 有哪些落地点和局限,就不至于瞟了几眼《XX 职业要消失了》,《XXX 岗位将被人工智能取代》之类的网文就骤然开始仇视社会,好像自己明天就没有活路了似的。
除了判断事,判断人可能更重要一些。
了解一件事的原理,自己有个基本的是非标准,再去看别人对它的评论,就不难看出评论者的“斤两”。也就不至于被其所说内容之外的语气、措辞,或者刻意的态度所误导。
人工智能从提出到现在已有几十年,几经沉浮。这些年间,模型、算法、实现技术已更迭了好几代,如今和当年已是天壤之别。
所有的发展都不是凭空出现的,新方法、技术均在原有基础上创新得来。每一个具体的进步,都仅仅是向前的一小步而已。
最容易创新的是技巧和细节,越“大”的创新,出现的频率越低。而原理所揭示的,就是这种“大”的、相对稳定的东西。
机器学习最经典的那几个模型,历史都不短,长则半世纪,短的也快 20 年了。
深度学习,早年是从属于机器学习的神经网络,因为运算能力不够而被束之高阁多年,近些年借助计算机硬件和分布式计算的发展而大放异彩。
虽然技术本身和应用结果产生了巨大的飞跃,但从根本的原理层面,却有着紧密的传承。
了解一件事是如何运行的,明晰事物发展的客观规律,知道从最简单的原理学着手逐层推进,比从一个已经很复杂的状态入手,一下子纠缠在各种不得要领的细节中要高效得多。
有了这样的认识,也就不会被一些名词所局限。不会仅仅因为人家做了一些细节改变,或者换了个说法就以为天翻地覆了。
具体到 AI 领域,真的了解了支柱技术的基本原理,总不至于:
看了一篇《当这位70岁的 Hinton 老人还在努力推翻自己积累了 30 年的学术成果……》,便宣布再也不学 CNN、DNN、RNN 了(好像真的学过一样)。
或者:
因为《深度学习已死,可微分编程万岁!》刷屏,就以为目前在视觉、语音、NLP 等领域已经在创造价值的 DL 工具瞬间消失无用了。
相较于仍然处于经验(“炼丹”)阶段的深度学习,传统的统计学习模型和方法已经具备了相对完善的理论基础。
我强烈建议:即使目标岗位是“深度学习工程师”,也应该从统计学习方法学起。
一方面深度学习与机器学习具有传承的关系,学习后者对于直观理解前者有极大帮助。
另一方面,统计学习方法建立在将概念“数字化”(向量化)的基础上,以数学公式和计算来表达概念之间的关联及转化关系。机器学习是一种认识世界的工具,借助它,我们可以从一个新的角度来看待世间万物。
换句话说,当我们知道机器是怎样通过学习事物特征的概率分布和转换来掌握事物规律的时候,我们就有可能反过来审视自己看待世界的方法,发现其中不合理的部分,并主动优化自己的思维模型。
比如,我在学习机器学习原理的过程中,对人类的思维方式产生了一些思考:
人类的道德标准实际是一种社会层面的极大似然估计。
遗忘是学习的一个步骤,是一种对信息的过滤方法,也是人类在脑力有限情况下对自身大脑的一种保护机制。
人类的偏见是一种长期训练的结果,在信息极其匮乏的情况下,对人们做决定往往是有正向帮助的。信息越丰富,偏见的负面影响也就越严重。
大多数人最常用的思维模型是 KV Pair,有些人似乎终身只有这一种思维模型。
一般人往往默认一类事物的所有个体在概率空间是均匀分布的。在考虑某一个事物个体时,对其在同类事物中所处的位置——是小概率事件还是常态?发生概率相对之前是稳定、上升还是下降?——通常毫不在意,而一概认为被提及的个体很重要。
对于原因和结果的关系,多数人根本没想过去探究其转换模型,而直接默认是线性关系。比如:A 地的年均 PM2.5 指数是 B 地的 10 倍,PM2.5 被认为与肺癌发病率有关,于是想当然以为 A 地肺癌发病率是 B 地 10 倍。
当一件事物比较复杂,涉及多个方面的时候,要对它有一个全面的评价,目前最常用的方法是构建一个线性回归模型:选定一些特征,针对每个特征独立打分,最终加权求和(例如大学排名之类)。
线性回归是一个非常简单的模型,往往无法达到很好的效果。但即使这样简单的模型,很多人还是无法掌握。
面对一项事物,既不能列举出其主要特征,也不知道如何评估每个特征,更不用提再加权求和了。多数人最常用的全面评价标准,如果是一手资料则一般以某(几)个个例的某个特征来代替全集;如果是二手资料,则一般选择相信自己最先接触到的他人结论。
以上这些仅是一些很初级的想法,并没有进一步的研究验证。
我分享出来只是想说明:学习机器学习原理和公式推导,并非只是做一些无聊的数字变换。很可能由此为我们打开一扇窗,让我们从新的角度看待世界,并为日常的思考过程提供更加可量化的方法。
学习“机器学习”这件事,我走过很长的一段弯路。有一些心得、体会和方法,在此和大家分享。
本课力图引导大家以模型为驱动,进行学习。
我选择了几种经典模型(例如:线性回归、逻辑回归、决策树、支持向量机、条件随机场、K 均值等),作为入门的进阶。
初次学习模型,不必贪多。但就这些选定的模型,一定要搞清楚其问题域、模型函数、目标函数、训练算法……潜入到数学公式推导的层面,对每一步的公式变换和对应的物理意义有所理解,然后再去实践。
这一个个的模型,就是机器学习的“肌肉”,我们要通过观察学习这一块块肌肉,以其为载体来了解机器学习的核心——将事物转化为数值,将关系、变换转化为运算,以事实(数据)为依据,以规章(算法)为准绳,通过计算来掌握事物的客观规律(模型)。
要知道,这些经典模型固然经典,但是到了实际应用中,它们并非神圣不可改变。也不是说机器学习就仅限于这些经典模型。
只有掌握了机器学习精髓的人,才可能灵活运用现有模型去解决实际问题,甚至进一步针对具体问题得出自己的模型和算法。
当然,达到这种程度并非一蹴而就,总要从最简单的模型开始。
根据我的经验,即使要真正掌握本课列出的这几个最常用且相对简单的模型,也需要反复学习。
有可能第一遍看完有点似懂非懂,或者感觉自己明白了,但要自己从头推导又卡壳了。
就像刚学完又忘掉的生字,或是背了一半后半部分怎么也想不起来的九九乘法口诀。这都是非常正常的现象。究其原因,就是还没有真正掌握。
多学几遍,从头到尾掌握整件事情的逻辑,知道一个模型是怎么从最初设定目标,到一步步实现目标的——当真正掌握了这个过程之后,再回头看一个个具体的模型,每一步都是顺理成章的。
掌握了事物内在的逻辑,再去记忆,就容易多了。
学习标准设置得不必太高,比如可以这样:
第一遍学,只要求自己能完全掌握机器学习数据、模型、算法相互作用的基本关系,训练过程和评价标准。具体的模型,掌握最简单的线性回归就可以。
只要从头到尾掌握了第一个模型,做到:能够从模型函数开始推导出目标函数,再用梯度下降算法求解,用(伪)代码实现梯度下降求解过程。
第一遍学习掌握一个模型;第二遍学习就不难掌握2-3个模型;第三遍就有可能掌握本课列出的大部分模型………如此由易到难,螺旋式推进。
对于一些本身就比较复杂的数学模型,比如条件随机场、隐马尔科夫这类涉及场论和势函数的模型,如果直接入手,往往会卡在模型函数本身上。但是当有了前面几个模型的基础,了解了更抽象层面的原理,掌握起来就容易多了。
很多同学,想学机器学习。但是一上来就看模型,看到一大堆炫酷的公式,往往感觉很吓人。
有些人也就因此萌生退意,要么放弃,要么只用现成工具把模型当作黑盒使用。
其实,学习经典模型,并不需要多么精深的数学功底,只要掌握大学理工科本科所教授的数学知识就基本够用了。
在学习的最初阶段,只要:
就可以对本课中的经典机器学习模型有一定深度的感性认识了。
本课中的公式都是经过精简的,务必要掌握。如果数学工具实在掌握得太少,最起码也要读懂一组公式推导中的第一个和最后一个式子:
读懂它们都针对哪些变量进行了怎么样的运算;
这些变量和运算的物理意义是什么;
第一个式子是对哪种真实场景的数学描述;
最后推导的结果又具备怎样的特征。
初次学习者,可以暂且掌握到这个深度。
当然,仅仅掌握到这种程度,勉强可以套用现成的模型,却不可能达到灵活运用的程度。
所以,同学们应力求理解每一步推导过程。
如果有可能,可以事先复习一下大学本科的高数(数学分析)、概率统计和线性代数。或者,在学习模型的过程中,一旦遇到了数学上的阻碍,就回头去查找相应知识。
很多数学问题,之所以让人头大,其实并不是真的有多难,而是符号系统比较复杂,运算繁复,或者运算所表达的物理意义多样。
很多时候造成困扰是因为想不起来这里用到什么定理,哪个公式,或者这样操作表达的含义是什么。
如果把常用的细小知识点都记录下来,按主题整理成速查手册(小字典),需要用的时候快速查找对应的知识点,这样我们的“机器学习”学习之路就顺畅不少。
下面两个是我自己制作的例子,供大家参考:
把新学到的东西和日常的工作、生活联系起来,进行思考。比如:将理论代入现实,不同领域间事物的类比,相似内容的对比等。
以身边的实例来检测理论。不仅能够加深理论知识的理解,而且有助于改进日常事物的处理方法。
准备一个笔记本,纸质版或电子版均可。有什么发现、感想、疑问、经验等等,全都记下来。
如果是对某个话题、题目有比较完整的想法,最好能够及时整理成文,至少记录下要点。
隔一段时间把笔记整理一下,把分散的点滴整理成块,一点点填充自己的“思维地图”。
知识技能这种东西,学了,就得“炫耀”——把学习到的新知识、理论、方法,分享给更多的人。如此一来,倒逼自己整理体系、记忆要点。这可以说是与人方便自己方便的最佳实例。
把自己的感想、体会、经验分享出来的同时,也锻炼了自己的逻辑思维能力和归纳总结能力。一举多得,何乐而不为?
阅读全文: http://gitbook.cn/gitchat/column/5ad70dea9a722231b25ddbf8
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。