吴恩达机器学习课程笔记week1
对于数学公式块无法显示的问题:目前blogger还在寻找方法解决:请先移步至csdn:https://blog.csdn.net/linjinshu1/article/details/144791241 带来不便请谅解
1 机器学习应用
消费者应用领域:
- 搜索引擎的排名机制。
- 社交软件为图片添加标签。
- 流媒体服务推荐机制,比如B站的“首页通知书”。
- 语音助手返回的答案,如问Siri附近的餐厅有哪些。
- 邮箱自动识别垃圾邮件。
工业领域:
- 优化风力涡轮机发电。
- AI医学影像诊断。
- Landing AI将计算机视觉应用到工厂中,帮助检查流水线产品质量等。
2 机器学习简介
2-1 机器学习的定义
“Field of study that gives computers ability to learn without being explicity programmed.” —Arthur Samuel(1959)
本节课将学习很多机器学习算法,内容包括:
- **有监督学习(Supervised learning)**:实际应用中,有监督学习使用最广泛,并取得了最快速的进步和创新。Course1、Course2聚焦于有监督学习。
- **无监督学习(Unsupervised learning)**:Course3聚焦于无监督学习。
- **强化学习(Reinforcement learning)**:由于应用没有前两者广泛,所以本课程没有简单介绍。
- 使用“学习算法”的实用建议(很重要):“学习算法”本身只是一种工具,比工具本身更重要的是 如何正确使用这些工具。即使是某些大公司中最熟练的机器学习团队,可能也会因为最开始找错了算法方向而导致多年的成果付诸东流。所以本课程不仅会讲解机器学习算法,同时也会介绍最熟练的机器学习工程师是如何构建系统的,以及一些机器学习应用的最佳案例。
- 注:学习算法(Learning Algorithm),是机器学习算法、深度学习算法等具备学习能力的算法的统称。
2-2 有监督学习
“有监督学习”指的是学习从 输入 x (一个或多个) 映射到 输出 y 的算法。有监督学习算法的关键在于首先要提供正确的样本示例供算法学习,然后算法便可以针对未见过的输入,输出相应的预测结果。下面是一些有监督学习的在现实生活中的示例
- 垃圾邮件过滤器:email –> 垃圾邮件?(0/1)
- 语音识别:语音 –> 文本
- 机器翻译:英文 –> 中文
- 广告投递:广告、用户信息 –> 用户点击?(0/1)
- 自动驾驶:图片、雷达信息 –> 其他车辆位置
- 视觉检测:手机图片 –> 有缺陷?(0/1)
回归问题示例:房价预测
“房价预测”就是根据房子的面积计算价格。下图中的“红叉”就是预先提供的有正确映射关系的样本,“蓝色拟合线”就相当于算法学习输入样本,最后通过拟合线得到房价便是“预测”,这便是“有监督学习”的完整流程。注意到这个回归问题的输出(房价)可以是任意数字,于是便有无穷种可能。
直线拟合:根据拟合直线,可以预测房屋面积750feet^2^ 对应的价格大约为 $$150k$$。
曲线拟合:根据拟合曲线,可以预测房屋面积 750 feet^2^ 对应的价格大约为200k
分类问题示例:乳腺癌检测
乳腺癌检测问题就是根据输入的一系列信息,如肿瘤块的大小、患者年龄、肿瘤块的厚度、细胞大小的均匀性、细胞形状的均匀性等,来判断是否为恶性肿瘤(0表示良性/1表示恶性)。下面给出“单输入的乳腺癌检测”、“两输入的乳腺癌检测”示意图:
单输入的乳腺癌检测:输入是“肿瘤的大小”,输出是“良性”、“恶性-类型1”、“恶性-类型2”。 两输入的乳腺癌检测:输入是“肿瘤的大小”、“患者年龄”,输出是“良性”、“恶性”。
单输入的乳腺癌检测问题
两输入的乳腺癌检测问题
2-3 无监督学习
无监督学习: Data only comes with inputs x, but not output labels y. Algorithm has to find structure in the data.
在“有监督学习”之后,“无监督学习”也被广泛应用起来。“无监督学习”不是要找映射关系,而是想要从 没有标记的数据集 中发现一些有趣的东西,比如这个数据集中有什么 可能的模式或结构。无监督学习的主要类型有:
聚类(Clustering):将相似的数据点分成一组。
异常检测(Anomaly detection):。有非常多的应用,比如在金融系统的诈骗检测中,异常时间、异常交易可能是欺诈。
降维(Dimensionality reduction):在尽可能丢失少的信息的前提下,将大数据集压缩成小得多的数据集。
Question: Of the following examples, which would you address using an unsupervised learning algorithm? × Given email labeled as spam/not spam, learn a spam filter. √ Given a set of news articles found on the web, group them into sets of articles about the same story. √ Given a database of customer data, automatically discover market segments and group customers into different market segments. × Given a dataset of patients diagnosed as either having diabetes or not, learn to classify new patients as having diabetes or not.
知识点:有监督学习给数据和标签,重点在于对新输入预测出标签;无监督学习只给数据,重点在于自行分组。
下面给出“聚类”的3个示例,后续会再介绍“异常检测”和“降维”这两种无监督学习的示例:
聚类算法示例1:新闻分类 “谷歌新闻”的任务就是将每天数十万的新闻进行聚类,找到提到相似词的文章并将其分组。很酷的是,聚类算法可以自己计算出哪些词暗示了这些文章属于同一个组,并且谷歌新闻的员工也没有事先告诉算法有哪些组。如下图所示,panda、twin、zoo都是相似的词,这些文章被归为一类。
聚类算法示例2:基因分类
下图所示的基因图谱,每一列表示一个人的全部基因,每一行表示一种基因,不同的颜色表示该基因的活跃程度,这些基因包括瞳孔颜色、身高、不爱吃西蓝花/包菜/莴苣等。聚类算法仅根据这些基因数据,将人进行分组,进而找出“基因上很相似的人”。
聚类算法示例3:客户分群
还有一个很常见的聚类算法示例就是,根据客户信息数据库,将不同的客户划分进不同的细分市场,以便更有效的服务客户。比如深度学习团队“dot AI” 想知道 dot AI社区 中的人们,参加课程、订阅通知、参加AI活动等的动机是什么。于是通过调研团队便发现了拥有不同动机的人,比如:提升技能、发展事业、紧随AI潮流、或者哪个都不是。这个例子中调研团队就相当于无监督学习算法。
3 线性回归模型
3-1 线性回归模型
- Training Set(数据集):用于训练模型的数据集。
- _x_:input variable(输入变量) / feature(特征) / input feature(输入特征),也就是“特征值”。
- _y_:output variable(输出变量) / target variable(目标变量),也就是“目标值”。
- _m_:表示训练样本的数量。
- (x,y):单个训练样本。
- (x^(i)^ ,y^(i)^) :第 i 个训练样本。上标加括号是为了和求幂次区别开来。
- $\hat{y}$:表示对 y 的估计或预测
- 以前把 f 叫做hypothesis(假设),但是老师不建议这种叫法,而是称之为function(函数)。
上图给出了整个“有监督学习”的流程,也就是“learning algorithm”根据输入的“训练集”得到一个 函数模型_f_,于是便可以通过 f 来对 输入_x_ 进行预测 输出$ \hat{y} $ 。而“线性回归模型”就是假设 函数模型_f_ 为一条直线,因为简单易用,这可能是世界上使用最广泛的学习算法,后续也会在其他机器学习模型中见到线性回归模型。 “线性回归”只是解决回归问题的方法之一,其他方法会在Course2中会介绍。现在以上一小节“房价预测”问题举例,若使用“线性回归模型”假设 f 就是一条直线,于是该模型就可以写成 $$ f_{w,b}(x)=wx+b $$
表示函数 f 以 x 为函数输入,其输出$\hat{y}$取决于_w_和_b_的值
- w、b:模型的参数(parameter)
- $f_{w,b}(x)$通常会简写为$f(x)$
3-2 代价函数
显然,虽然现在已经构建好了“线性回归模型”,但是过训练集的直线有无数种,如何找出 与训练数据最拟合的线 还不明确,于是本节就来介绍 代价函数(cost funtion)。在机器学习中,代价函数用于 衡量模型的好坏,最简单、最常用的代价函数是“平均误差代价函数”(Squared error cost function):
$$ J(w,b) = \frac{1}{2m} \sum_{i=1}^m (\hat{y}^{(i)} - \hat{y}^{(i)}) ^{2} = \frac{1}{2m} \sum_{i=1}^m (f_{w,b}(x^{(i)}) - y^{(i)})^2 $$
- $w$、$b$: 模型的参数
- $i$: 训练样本的标号
- $m$:训练样本的总数
- $y^{(i)}$ :第 i 的样本的真实目标值
- $\hat{y}^{(i)}$: 对$y^{(i)}$的预测目标值
- 除以 $2m$:按照惯例,机器学习中的平均代价函数会除以 2m 而非 m ,这是为了使后续的计算更加简洁。
现在来直观的看一下,最小化代价函数如何找到与训练数据最拟合的线。首先简化模型,设置参数 $b = 0$ ,并假设训练数据只有三个点。下图给出了不同的 $w$ 所对应不同的 代价$J (w)$,显然在 $w = 1$ 处代价最小,直线也最拟合: $$ \min_w J(w) = \frac{1}{2m} \sum_{i=1}^m (\hat{y}^{(i)} - \hat{y}^{(i)}) ^{2} = \frac{1}{2m} \sum_{i=1}^m (wx^{(i)} - y^{(i)})^{2} $$
通过尝试不同的w最终绘制出J(w)曲线
那回到刚才的问题中,同时将 $w$和$b$ 都考虑在内,并引入更多的训练数据,便可以得到下面的代价函数示意图。为了更好的将代价函数可视化,同时使用“等高线图”和“3D图”来展示不同的 $w$ 和 $b$ 所对应不同的 代价$J(w,b)$ 。“3D图”类似一个“碗”,显然在“碗”的底部,代价函数最小:
课程资料:https://github.com/kaieye/2022-Machine-Learning-Specialization
文件路径:Supervised Machine Learning Regression and Classification/week1/4.Regression Model
虽然现在距离完成“线性回归问题”非常接近了,但是上述是通过人眼来直观的寻找代价函数的最小点,实际上要画出有足够多细节的3D图需要计算大量的 $J(w,b)$,而很多 $J(w,b)$点 都是没用的,这显然不划算。下一节就来介绍如何通过计算有限的 $J(w,b)$点 来找到代价函数最小点。
4 梯度下降法
4-1 梯度下降法
梯度下降(Gradient Desent)常用于寻找某函数(比如代价函数)的最大值、最小值。梯度下降不仅用于线性拟合,也用于训练如神经网络(Course2)等深度学习模型、以及一些最大型、最复杂的人工智能模型。下面以前面的 $\min_{w,b} J(w,b)$ 来举例,梯度下降算法的步骤为:
选择初始点,一般在取值范围内选取简单的整数,如 $w = 1 , b = 0$。
沿着 $J$ 的“负梯度”方向,不断迭代计算 $w $、$b$。之所以沿着“负梯度”方向,是因为沿该方向下降速度最快(steepest descent, 最速下降)。如下:(注意这个等号是计算机语言的赋值符号) $$ w=w-\alpha \frac {\partial}{\partial w} J(w,b) $$
$$ b = b - \alpha \frac {\partial}{\partial b} J(w,b) $$
$\alpha$: 学习率(Learning rate),用于控制步长。通常为介于0~1之间的一个小的正数,如0.01。
$\frac {\partial}{\partial w} J(w,b)$ :代价函数对 $w $ 的偏导数(Partial Derivative),其取负值表明的方向可以使 $J$ 下降。
$\frac {\partial}{\partial b} J(w,b)$: 代价函数对 $b$ 的偏导数,意义同上.
注意:上面是 同时更新(Simultaneously update),也就是使用旧的 $(w,b)$ 直接分别计算出新的 $w $、$b $;而不是先更新 $w$,再使用这个新的$ w $计算新的 $b$。
- 直到 $w$和$b$的负梯度 都为0(或者0的邻域内),即可认为找到 $J$的最低点。
下面两张图很直观的给出了整个梯度下降法的过程。在下 图1 中,首先固定 b = 0,只分析 w 对代价函数 J ( w ) 的影响。可以发现,若当前 w 在最低点右侧,由于“负梯度”小于0,于是下一个 w 将向左移动;反之若当前 w 在最低点左侧,由于“负梯度”大于0,下一个w 将向右迭代。只要选择合适的学习率α,最终就可以找到最低点所在的w。在 图2 中,则进一步同时考虑 w 和b,可以发现每次也是沿着“负梯度”下降最快的方向,最终可以到达最低点所在处。这个迭代的过程就是“梯度下降”,类似于“下山”的过程
4-2 学习率α
学习率α 的选取会对梯度下降的效果产生影响,如果α选的不好,可能会导致无法实现梯度下降
α 选取的太小,会导致下降的速度非常慢(意味着需要计算很长时间),但最终也会收敛(converge)到最小值。
α 选取的太大,很可能会导致在极值点附近反复横跳甚至越来越远,也就是不会收敛甚至发散(diverge)。
α 选取的合适,越接近代价函数极小值,梯度越来越小,就会导致步长越来越小。
4-3 用于线性回归的梯度下降
介绍完梯度下降法,现在来总结一下,将前面的线性回归模型、代价函数、梯度下降算法结合起来,按照下面公式不断迭代直至其收敛:
到目前为止,在这个课程中,你已经开发了一个线性模型来预测 $f_{w,b}(x^{(i)})$: $$ Linears \ regression \ model:\ f_{w,b} = wx + b \tag{1}\ $$
在线性回归中,通过最小化我们的预测$f_{w,b}(x^{(i)})$, 和实际数据 $y^{(i)}$之间的误差来利用输入训练数据来拟合参数$w$,$b$。该方法被称为损失函数(代价函数) $J(w,b)$。在训练中,你测量所有训练样本的成本 $$ Cost \ function: \ J(w,b) = \frac{1}{2m} \sum_{i=1}^{m} (f_{w,b}(x^{(i)}) - y^{(i)})^2 \tag{2} \ $$
在课程中,梯度下降定义如下: $$ \begin{align_} \text{repeat}&\text{ until convergence:} \; \lbrace \newline \; w &= w - \alpha \frac{\partial J(w,b)}{\partial w} \tag{3} \; \newline b &= b - \alpha \frac{\partial J(w,b)}{\partial b} \newline \rbrace \end{align_} $$ 其中,参数$w,b$被同时更新,梯度定义为:
$$ \begin{align} \frac{\partial J(w,b)}{\partial w} &= \frac{1}{m} \sum\limits_{i = 0}^{m-1} (f_{w,b}(x^{(i)}) - y^{(i)})x^{(i)} \tag{4}\ \frac{\partial J(w,b)}{\partial b} &= \frac{1}{m} \sum\limits_{i = 0}^{m-1} (f_{w,b}(x^{(i)}) - y^{(i)}) \tag{5}\ \end{align} $$
可以通过在代价(w,b)的等高线图上绘制迭代代价来显示梯度下降的执行过程。
从“等高线图”的角度来看,梯度下降法的迭代过程可能如下图红色箭头所示,从起始点不断收敛到最小值,并且注意到这个过程也是越来越慢的:
放大后,我们可以看到梯度下降的最后步骤。注意,当梯度趋于零时,步骤之间的距离会缩小
最后说明一下,由于在使用梯度下降法求解问题的过程中,每次迭代都会使用到所有的训练集数据计算代价函数及其梯度,所以这个梯度下降的过程称为“**批量梯度下降(Batch gradient descent)**”。当然本问题较为简单,在其他数据更为复杂的模型中,为了简化梯度下降法的计算量,每次只使用训练集的子集。