我用三个月时间,完成了Andrew NG的机器学习课程,跟随课堂进度,完成了所有课后测试选择题,也包括编程题目,当然编程题目借助了AI copilot。
学完课程我可能还不能完全手工撸一个算法,不过对于机器学习以及AI行业的许多术语,我理解深刻很多,因为跟着Andrew的电子白板,看他手推过所有算法公式,而很多算法公式基本是基础而会反复使用。
我尝试对自己学习的内容做个小总结,课程信息也放在结尾了,也希望对有兴趣学习这类课程的人有帮助。
克服恐惧 + 设定目标
我记得这个课程我曾经在几年前就注册了,当时一直停留在第一周的课程就没有往下了,后来因为每次基本都需要从头来,因为课程有很多连续的知识,没法中途开始,所以一直没学完。
这次终于跟上进度完成了课程。
所以,克服一开始的恐惧非常重要。我一开始有很多担心:
1. 会不会听不懂?
2. 需要编程能力要求很高吧。
其实课程简介中写的很清楚:
这是一个初学者级别的课程
它对课程参加者的要求是:
1. 基础代码能力(循环语句,函数,If/else 申明)
2. 高中水平的数学()
老师是非常专业的
andrew 的讲解非常通俗易懂,他会对每一个提到的内容进行讲解,如果需要额外知识他也会提醒。
代码能力要求并不高
第一点:其实只要在大学时代学过C语言(大部分专业应该是必修),即使你已经忘干净了,重新学习下也是很快的。并且最重要的是,学完课程我可以说,实际上课程上需要用到的代码能力都非常简单,虽然过程中我们也需要应用各种算法,例如手写一些图像识别算法等,但是,实际上算法的难点都不在编程上,在coding的角度如何利用程序语言去表达我们想要达到的目的,大部分作业的代码量都很少,每次作业代码基本平均在50行左右。而且如今有AI copilot,在编程方面咱们简直有如神助,它对于代码的理解和解释都非常清晰。
数学没那么重要
课程要求说只需要高中数学水平,其实我想说真正用得最多的应该是线性代数的矩阵和向量计算部分。Andrew非常照顾大家的数学能力,他大部分时候都会说:别担心,你不需要搞清楚这个公式如何计算,他也反复强调数学计算能力并不重要,理解算法比会计算公式重要得多,因为大部分公式都可以交给程序去计算。
而在课程当中针对线性代数部分,Andrew也准备了几节课来帮助大家回顾基础的知识,我也是在课程中通过那几节重新学习了矩阵和向量的计算,而学完这些,基本就够用了。
设置一个学习目标很重要
合理评估自己可以投入的时间,设置合理的学习目标对于完成学习非常重要。例如每周可以投入几个小时进行学习,在日程上设置个提醒。
提高兴趣,可以从动画视频开始
非常推荐3blue1brown的视频来通过动画来直观感受一下数学和它解释深度学习的乐趣。它很多视频非常直观向人解释了一些相对难理解的概念。非常有趣。
地址:https://space.bilibili.com/88461692
机器学习是什么?
传统编程 VS 机器学习
机器学习就是研究让机器像人一样自主学习的学科。它和传统计算机编程最大的区别就是,机器能够主动学习,而不是按照设置好的程序进行行动。
拿区分垃圾邮件举例说明:
传统编程:开发者告诉机器遇到每一封邮件检索其中是否包含一些敏感词进行判断(例如定义:“彩票”“免费”“领取”等),如果包含则标记为垃圾邮件,开发者需要不断更新判断规则。开发非常清楚判断规则,只是它们被代码执行了。
机器学习:开发者使用一个邮件集合(里面已经标记好哪些是正常邮件,哪些是垃圾邮件)来训练一个分类模型,机器自动从训练中学会了哪些是正常邮件,哪些是垃圾邮件,开发并不需要告诉机器怎么做,机器随着时间推移,即使遇到新邮件也能够区分是否垃圾邮件。开发并不清楚模型内部是如何区分理解邮件的。
问题,模型,算法 这三者是核心
问题:你希望利用机器学习来解决的。可能是预测什么,或者帮助决策
例如:一家公司希望预测用户是否会到期退订公司服务。
核心的问题一般是回归问题,或者分类问题。
回归问题指:用数学模型来预测一个连续的数值。
这里的“回归”就是指找到一种规律,让我们可以根据已知的信息来预测未知的数值。
为什么叫“回归”?
这个词来源于统计学,最早是用来描述预测连续数值的过程。在英文中,“回归”(regression)这个词来源于拉丁语“regressus”,意思是“回退”或“返回”。在数学上,它描述了一种从复杂现象中抽象出简单规律的过程。
预测气温就是一个回归问题。
我们根据已知的过往气温,日期,季节,湿度等信息来预测接下来的气温变化,找出其中的
分类问题指:用数学模型来预测一个事物的类别或标签(非连续数据)就像把事物按照正确的分类放到对应类别中。
例如图像识别就是典型的分类问题,自动驾驶的核心技术图像识别,就是需要汽车的摄像头可以识别图像中的各类物体,并且将他们正确地分类。
模型:解决问题所需要的数据之间的数学关系。
例如:是否退订公司服务,有关的数据包括:用户的注册时长,用户的过去每个月的退订行为,用户给过的反馈,用户以往的满意度等。这些因素和退订公司服务之间的函数关系。
算法:用于解决问题的一系列明确计算任务。
当然这个课程会介绍很多模型和算法,但是实际上最重要的是你要先想清楚使用他们解决什么问题,根据要解决的问题去选择或尝试模型算法才是最重要的。如果没有把问题弄清楚,选择模型和算法是没有意义的,而且只会走弯路。
当然如果你不了解模型和算法,可能也会缺乏一些工具箱来帮你思考或抽象化问题。
例如:如果是一个预测房价的问题(这是这门课中使用最多的例子)。面向买家提供参考,和面向开发商提供定价策略,这其实是两个完全不同的问题。两者在模型和算法的考虑上完全不同。
面向买家,模型的可解释性非常重要,因为需要让买家可以理解这个预测逻辑,那么一些相对简单,快速,易于理解的算法,例如线性回归/决策树就更合适。
面向开发商,模型的精确度和预测时间范围更重要,因为它需要用于基于不同时间段来定价,那么可能处理大规模数据能提供精确度和复杂特征,例如向量机SVM或深度学习算法。
训练机器学习模型的大致过程
我们依然可以用预测房价为例子说明训练一个模型的过程
1. 准备数据
这个步骤其实就是我们需要先收集大量的数据/题目以给后面的机器进行学习使用。然后把数据分为训练集和测试集。
这些数据包括:户型,朝向,楼层,交易时间,交易价格。
训练集,相当于小朋友的练习册。练习册每一题都有答案,小朋友每做一题都可以对答案。
测试集,则是模拟考试。模拟考试,只有全部做完题目,才可以对答案。
2. 构建模型
在我们做好了训练集/练习册,和 测试集/模拟考试后。我们会给机器一个学习方向,例如告诉它房价和户型,朝向,楼层及交易时间是一个回归问题,也就是房价(因变量)和这些因素(自变量)之间存在某种关系
3. 开始练习/使用训练集学习
这个练习册包含过往很多年这个城市许多房子的房价,当然还要包括其他我们认定会影响房价的因素,例如户型,朝向,楼层等等。
我们不会向机器传授基于户型、朝向、楼层信息等用以预测房价的方法(因为我们也不知道啊),仅为其提供此练习册和方向(也就是模型:回归问题),令其自行开展练习。机器可依据上述因素随意预测房价答案,且能够即刻查看答案,以明晰自身与正确答案之间的差距。机器持续进行尝试与探索,直至其认为自身每次的预测均与答案极为接近。
4. 开展一次模拟考试/使用测试集测试
此次,测试集中的数据皆为全新且未曾见过的,其需一次性完成并核对答案。由此,我们便能知晓其学习成效,进而了解此模型究竟怎样?是预测偏差极大,还是颇为准确,以便对模型的性能予以掌握。
5. 评估学习效果/模型评估
如果非常离谱,我们就可以去回顾过程中哪里出了问题,明明练习册/训练集做得挺好的,看看练习册/训练集做得如何?
过拟合:基本练习册所有题目它都对了,分毫不差,这其实是很离谱的,因为可能有一万道题,过拟合可能是作弊了,也就是说其实它并没有摸索出房价因素和房价之间的关系,它可能只是靠背答案。
欠拟合:也就是基本练习册所有题目都差得挺远,可能每道题都是乱答的,说明它也还没是没有摸索出房价因素和房价之间可能的关系模型。
我们还可以回顾练习册和模拟考试,是不是里面的题目选择有偏颇,例如练习册中某一类型房子过多,例如朝南向房子数据过多,导致机器的思维被南向房子影响过大,在碰到模拟考试,北向房子更多导致偏差过大。这就是数据集拆分不合理。可能需要尽可能两边数据都尽可能丰富。
6. 调整后再重复开始,直到满意
基于上一步的评估,我们调整模型算法,或者数据集的分配,再次进行数据准备以及训练测试,这个过程可能重复很多次,直到我们认为机器在模拟考试中总是取得不错的成绩,就可以把它放到真实考场测试啦。然后再根据真实考试结果进行调整反馈迭代算法。直到它成为学霸。
课程信息
我发现这个课程已经更新了,新的机器学习被拆成了三门课。我上的这门课目前对应的是:Supervised Machine Learning: Regression and Classification 监督式机器学习:回归与分类
课程地址:https://www.coursera.org/learn/machine-learning