本人美国top50统计学就读,有一定编程背景,大四这一年准备往人工智能方向发展,对于机器学习,尤其是计算机视觉Computer Vision部分比较感兴趣。在经过自学加参与一些课程的学习之后,最终取得了哥伦比亚大学的硕士学位。希望下面的分享能够对大家有所帮助。
根据我这几年的学习经验来说, 机器学习相对于人工智能领域下的其他分支来说,是更加漫长的一个过程。它需要大量的时间和耐心去处理各种各样复杂棘手的项目。机器学习主要是关于解决 “信息困惑”,并跳出思维禁锢,以从前从未想过的方式看待这些问题。同时,机器学习在很大程度上是关于了解人类如何学习,特别是了解最有效的学习过程,并将其 "编入 "机器学习脚本/代码/算法中。
背景知识
不管是什么领域的学习,开始前的了解都是必不可少的。尤其是对于人工智能这样对技术有一定要求的专业,拥有相关的背景知识是开始学习的重要前提。
对于大部分人来说,虽然这个领域不需要你成为一个专业的数学家或资深的程序员来学习,不过对于这些领域的核心技能还是需要掌握的。好消息是,一旦你拥有了这些基础,剩下的学习就会相当容易。事实上,几乎所有的ML都是关于将统计学和计算机科学的概念应用于数据。关于学前的背景知识,大致可以分为三类:
线性代数和微积分→原始算法研究需要有线性代数和多变量微积分,尤其是导数,链式和乘积规则的基础。线性代数主要研究的是向量、向量空间,在数学、物理和技术学科中都是一门重要的课程。线性代数是绝大多数工科的基础,如果这部分的基础没有打好,那么在学习机器学习领域很多更为深入的专业课时,也会举步维艰。在这里,我所说的基础是指对于概率和线性代数等概念浅层的理解。不一定需要掌握这些科目,但如果接触到一些算法,比如子空间、基础、i.i.d、独立、相关这些术语,要能明白它们的意思。而针对于这部分,很多大学内的高数课程都有涉及到。这一部分的教材就不给大家详细推荐了。
统计学→学好机器语言的第二大基础就是要了解统计学,特别是贝叶斯概率,这对于许多机器学习算法来说都是必不可少的。统计数据是发挥统计的信息、咨询、监督功能的主要手段。比方说,你想预测股票市场。你让计算机在数十万个数据趋势中进行搜索,看看在市场崩溃之前有什么变化,并挑选出最佳的因素组合。如果你这样做,你肯定能找到看起来能很好预测市场崩溃的因素。然而,数字是一直在上升和下降的,如果在数十万个数字中搜索,你会发现在过去所有的崩溃之前就下降的数字,只是随机的巧合。
所以除了理论知识,在学习统计学时,还要留意你所学的理论如何为特定类型的情况提供一个机会模型,而这些模型主要可以分为:
· 一个非数字变量的
· 两个非数字变量的
· 一个数字变量和一个非数字变量的
· 两个数字变量的
下面给大家附上我本科在美国学习统计时做的一些笔记:
而关于这些图表的学习,除了熟能生巧,没有别的办法。相较于死记硬背每个表格的特点,我比较推荐大家从练习中掌握,这样理解比较简单,印象也能比较深刻。我也给大家推荐几个我学习时使用的资源:
· Coursera上的Statistics: Making Sense of Data
这节课程帮我了解了很多基础知识,网站上有很多视频存档,但是整体课程没有很多进阶的内容
· Data Analysis and Statistical Inference - DataCamp
相信有编码基础的小伙伴对于DataCamp是很了解的。这是一个很有用的,教你R语言和统计的优秀。它的练习是OpenIntro的互动版本。我在学习的时候,在上面找到很多可练习的例子,但是这款教材主要为英语,可能不太适合有语言障碍的人。
Python→编程可以说是机器学习一大基础,没有编程就无法学习机器学习。我个人在学习的时候主要使用R语言,搭配前面提到的Datacamp学起来真的很方便。针对刚入门的人,我会更推荐Python,操作简单也好上手。关于编程部分,我建议大家花几个月时间同时学习Python代码和不同的机器学习概念。在学习Python代码的同时,大家可以练习使用一些数据科学工具,如Jupyter和Anaconda,主要了解它们的用途以及为什么要使用它们。关于程序语言的学习,网上的资源有很多,coursera和网易公开课都有很多可以选择。学习Python有很多方法–MOOCs、高等教育中的学位项目、文章、在线课程等。而对于代码语言的学习来说,练习是唯一的出路。下面也给大家附上我平时的一些练习截图。
针对Python的学习,给大家推荐两套教材:
· Fluent Python: Clear, Concise, and Effective Programming
这套的作者是Luciano Ramalho。现在市面上有太多Python学习的资源,但没有什么比一本好的经典的教材更能为你打好基础了。这本书可以帮助你更清楚地掌握理论概念,是一本完美的实践指南。它可以帮助你了解Python的工作原理以及如何编写有效的Python代码。我自己在数据科学项目学习时,经常使用这套教材提供的库。
· Deep Learning with Python
这套教材应该更适合想往人工智能、深度学习方向发展的同学。使用Python学习深度学习或机器学习的最好方法是通过编程与理论相结合。这就是Francois
Chollet在’Deep Learning with Python’一书中所遵循的方法。所有的概念都是通过使用流行的Keras库来教授的,弗朗索瓦是Keras的创造者。
除此之外,如果你希望参加Python课程,我个人比较建议你去参加IIM SKILLS Python课程,这是完全在线的。对于任何想学习Python的初学者来说,这也是最有用的课程之一。在这之中,我也比较推荐其中一个叫Learnbay的平台。Learnbay是由IBM认证的数据科学培训。在机器学习模块下,你将学习很多我前面提到的基础概念,如,监督学习,线性回归,逻辑回归,决策树。你还有机会参与各种实时项目。
数据科学(机器学习)理论学习
在这边,给大家整理了一下机器学习可能会涉及到的理论:
· 过度拟合 – 机器学习的一个核心概念是过度拟合。粗略的说,当你训练的模型能够捕捉到训练数据的特异性时,就会发生过度拟合。一个过度适应训练数据的模型不能很好地概括新的未见过的测试例子,而这正是我们希望大多数机器学习模型能够做到的。
· 泛化错误 – 量化过拟合的一种方法是通过泛化错误。粗略地说,泛化误差衡量的是训练集与测试集的误差之间的差距。因此,泛化误差越大,模型的过拟合程度就越高。
· 偏倚-变异权衡 – 有时,只要泛化误差不是太大,你训练的模型过度拟合也是可以的。例如,如果你训练一个复杂的模型,在训练集上达到0.2的误差,在测试集上达到0.5的误差,这可能比在训练集上达到0.5的误差,在测试集上达到0.6的误差的简单模型要好。偏差-变异权衡是对这个问题的一种推理方式:什么时候使用更复杂的模型是有意义的,即使它过拟合得更多?
· 经验性风险最小化 – 当大多数人想到机器学习时,他们可能会想到经验性风险最小化。也就是说,他们想要一个在某些训练集上实现低误差的模型。然而,重要的是要记住经验性风险最小化的假设是什么。最值得注意的是,训练集与你真正关心的测试分布是独立采样的。如果违反了这一假设,你可以得到的机器学习模型的行为并不符合你的要求。
· 交叉验证(统计学)–通常情况下,我们不能在训练过的数据上进行测试,我们必须将现有数据分成训练集和测试集。然而,这在统计学上是浪费的,同时也增加了变异性,因为你并不是在你所掌握的每一个数据点上进行测试。交叉验证是通过轮换训练集和测试集的内容来解决这个问题的方法。
· 信心区间 – 比较两个模型的最直接的定量方法是看它们各自的测试误差(例如,通过交叉验证)。然而,我们如何知道两个数字是否真正反映了两个模型之间有意义的差异,或者只是由于有限的样本量造成的一些虚假的影响?置信区间是处理这个问题的最常见的方法。
· 统计假设检验 – 与置信区间相关的一个概念是统计假设检验。最常见的用途是回答两个模型是否有统计学上可区分的准确性。统计假设检验的实现方式通常包括使用置信区间,并将置信区间的大小设置为适当的宽度,即所需的统计显著性水平。
· 引导法(统计学)–评估模型变异性的另一种方法是通过引导法,它有效地从训练集中取样,并进行替换,生成与原始训练集在统计学上相似的新训练集。
这部分的学习,个人不太建议自学,一旦遇到一些困难,很容易掉进死循环。而且像机器学习这样实践大于理论的领域来说,单单从书本获得的理论知识,往往不能满足于实际生活的应用。而这一部分的理解往往需要具体例子的搭配,一些书本内容涵盖的实例早已过时,市面上现在有很多很好的课程,都能带领大家系统性地学习机器学习。针对这一部分,给大家推荐几套我在机器学习时使用的课程:
贪心学院这套课程,是面向泛AI、AI群体提供专业的系列课程,整套课程将以上提及的内容根据难易程度分为基础和进阶两个阶段,需要付费使用。根据具体所学项目不同,课程的价格在7000到20000之间不等。这套课程吸引我的其中一点就是它涵盖的知识面广。不仅涉及了AI领域内的深度学习、NLP,机器学习,还有很多更细的分支。其中机器学习中的基本算法如分类算法、集成算法、聚类算法、降维算法等,在这套课程内也有大篇幅重点讲解。
课程设置
这套课程是线上课程,这种模式灵活性较高,随时打开就可以上课,比较适合上班族或者学生党利用碎片化时间进行学习。课件和PPT模式类似,左边显示的小标题方便进度查找。由于是近几年新出的课程,和之前提及的书籍教材相比,实例都比较新,也都具有代表性。每节课程中还会配有一定的题目,帮助大家巩固知识点概念。我自己在做这些题目的时候,感受很好的是,这些题目的设定与每小节的课程内容结合的很好,能做到即时的巩固,也能为后面的学习做铺垫。
课程内容
贪心科技这套课程可以说是很全面地涵盖了我上面提到的关于机器学习的各种概念,如随机森林、逻辑回归、线性回归等。通过将机器学习放进人工智能的大框架里学习,能帮助学生更好的理解一些概念,将所学知识串联起来,掌握综合性的技能。
像我之前提及的必不可缺的python基础,在这套教材里也有涵盖。为了那些无编程经验者,除了理论性的内容之外,贪心科技AI还提供了多个机器学习领域代表性案例,如广告点击率预测、情感分析项目、信用卡欺诈预测、零售场景用户分层、意图识别等,供学生参考练习。
教研团队
课程的核心团队由海内外AI专家组建而成,多位合伙人及主讲老师都是业内资深工程师。其教研人员包括前金融独角兽首席科学家、美国google科学家、ALBERT第一作者、美国微软AI总监等专家;多位合伙人及主讲老师都是业内资深工程师,并多次在ICML、AAAI、IJCAI、ICDM等会议发表数十篇论文,被数百次引用。
我在上这节课的时候的导师就是亚马逊的工程师,李文哲老师。他对于每一个问题的讲解都十分细致,尤其是遇到运算问题,都会一步步手写出具体公式。除此之外,他还经常会举一反三,举出同样类型的例子,加深我们的记忆。课后的助教对教学也都十分认真负责,每次我提出的问题都会及时解答,就算现在已经结课了,我们也会经常沟通一下最近遇到的问题。
课后
课后的练习根据难易程度和知识点的不同有所区分,如身高体重预测、A股股价预测、客户是否开设定期银行账户预测、成绩是否及格预测、判断新闻真实性等项目,每一个练习的都是不同的知识点,学生可以在jupyter上自己进行代码的编写,还能得到助教一对一的反馈,及时纠正错误。
除了课程中提供的练习和案例,这套课程课后还配有github使用权限和专门的系统进行学习、练习。我在进行ML学习时,就经常会从github上找各种大神的代码和他们新开发的新奇的程序,如随机文章生成器等,这些内容完全可以拿来当成是实践项目进行练习。有时候遇到棘手的问题,我也会上去发帖求助。总之github对于人工智能领域的学生和职场人都是一个不可多得的好资源。
· 吴恩达机器学习
吴恩达这套机器学习课涵盖了监督和非监督学习的许多不同部分。这也是一套比较著名的课程,是由该领域的领先研究人员编写的。这套教材也为很多人提供了机器学习入门的基础。
具体来说,这套课程的内容包括:第一部分第2-5章:应用数学和机器学习基础(包括线性代数、概率和信息论、数值计算和机器学习基础);以及第二部分,第6-8章:现代实用深度网络(深度前馈网络和深度学习的正则化,训练深度学习的优化)。尤其是这一部分对神经网络学习很有帮助,这也被公认为是Coursera课程中要求最高的部分。
吴恩达是一位了不起的老师,他的实力也是毋庸置疑的。他非常了解现在人工智能的趋势以及机器学习是如何解决这些问题的。这套课程能让你在没有数学背景的情况下,学习机器学习,同时coursera上的课程还搭配了很精细的笔记。但这也是这套教材被诟病的一点。所以我建议,这套教材最好的学习方法是在他的一些课后搭配额外的数学学习。
· P.-N. Tan, M.
Steinbach, and V. Kumar. 数据挖掘简介
Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 2005
这是我之前的一位教授撰写的,一套"数据挖掘 "的入门书(数据挖掘本质上是关于从数据中提取知识,主要使用机器学习算法)。我强烈推荐这本书因为它能为你提供一个机器学习和数据挖掘的宏观的框架。在这本书里,你不仅能学习到不同的机器学习技术,还可以学习如何 “理解”、"处理 "和解释数据。没有好的信息数据,机器学习算法实际上是没有价值的。除此之外,你还将学习替代技术,因为机器学习并不总是解决问题的唯一和最佳方案。
这本教材整体编写的逻辑性比较强,能够帮助大家进行系统性的学习,但是某些部分不够深入,细节不足。所以可以当作了解或者拓展的资源来参考学习。
实践
如果你的目标是在机器学习领域工作,你可以先试着参与一些ML/DM项目。在这里不一定是指Kaggle或个人的项目,而是可以与一些教授一起,这样你就可以获得一些编写ML代码和使用标准ML软件的经验,如WEKA、LibSVM等。和教授一起做项目可以让你把这样的项目添加到你的简历中。
除了这些项目,如果你在Kaggle上工作,或者为个人的宠物项目写一些ML代码,并把它放在比如github等网站上,还会赢得很多geek积分。
如果你试图进入一个处理机器学习和数据挖掘相关问题的工作。应该先花时间提高的编程技能—无论你是否从事ML的工作,良好的编程技能是任何软件开发人员的必需品。