机器学习——Google 快速入门课程(综合版)
Posted 一颗小树x
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习——Google 快速入门课程(综合版)相关的知识,希望对你有一定的参考价值。
前言
本文参考 Google 谷歌官网机器学习的快速入门课程,整体课程比较好理解,供大家学习参考;文章也会结合自己的理解进行优化。看到官网的消息2021/7之后就不提供中文版的机器学习快速入门课程了,英文版还有的。
目录
一、机器学习—主要术语(整合版)
参考谷歌官网对机器学习术语的解释,进行总结并加以描述。
https://guo-pu.blog.csdn.net/article/details/117442581
二、训练与损失
2.1 前言
训练模型表示通过有标签样本学习模型中所有权重w和偏差b的最优值。在监督学习中,机器学习算法通过以下方式构建模型:检查多个样本并尝试找出可最大限度地减少模型的损失;这一过程称为经验风险最小化。
损失是对糟糕预测的惩罚;损失是之歌数值,表示对个单个样本而言模型预测的准确程度。如果模型的预测完成准确,则损失为零,否则损失会较大。
2.2 训练模型
训练模型的目标是从所有样本中找到一组平均损失“较少”的权值和偏差。
红色箭头表示损失;蓝线表示预测。左侧曲线图中的红色箭头比右侧曲线图中的对应红色箭头长得多;即实际点和模型预测相差的距离比较远,差异更大。
左侧显示的是损失较大的模型;右侧显示的是损失较小的模型。
2.3 损失函数
平方损失是一种常见的损失函数。线性回归模型使用的是一种称为平方损失(又称损失)的损失函数。单个样本的平方损失如下:
= the square of the difference between the label and the prediction
= (observation - prediction(x))2
= (y - y')2
均方误差(MSE)是指每个样本的平均平方损失。计算MSE,需要求出各个样本的所有平方损失之和,然后除以样本数量:
其中:
- (x,y)是指样本;x是指模型进行预测时使用的特征集(比如:温度、年龄等)y是指样本的标签(比如:蟋蟀每分钟的鸣叫次数)
- prediction(x)是指权重和偏差与特征集x结合的函数。
- D是指包含多个有标签样本的数据集。
- n是指D中的样本数量。
MSE常用语回归任务中;分类任务常用交叉熵损失函数。
参考:https://developers.google.cn/machine-learning/crash-course/descending-into-ml/training-and-loss
2.4 关键词
经验风险最小化(ERM,empirical risk minimization),用于选择函数,选择基于训练集的损失降至最低的函数。与结构风险最小化相对。
均方误差(MSE,Mean Squared Error),每个样本的平均平方损失。MSE的计算方法是平方损失除以样本数。
平方损失函数(squared loss)在线性回归中使用的损失函数(也称为L2损失函数)。改行可计算模型为有标签样本预测的值,和标签的真实值之差的平方。 由于取平方值,该损失函数会放大不佳预测的影响。与L1损失函数相对,平方损失函数对离群值的反应更强烈。
训练(training)构建模型的理想参数的过程。
损失(Loss)一种衡量指标,用于衡量模型的预测偏离其标签程度。要确定此值,模型需要定义损失函数。例如:线性回归模型参与均方误差MAS损失函数,分类模型采用交叉熵损失函数。
三、模型迭代
3.1 前言
在训练机器学习模型时,首先对权重和偏差进行初始化猜测,然后反复调整这些猜测参数(权重和偏差),直到获得损失可能最低时的,权重和偏差。
3.2 训练模型的迭代方法
机器学习算法用于训练模型的迭代试错过程:
“模型”部分将一个或多个特征作为输入,然后返回一个预测()作为输出。
为了进行简化,不妨考虑采用一个特征,并返回一个预测的模型:
需要考虑为和设置哪些初始值?对于线性回归问题,事实证明初始值并不重要。(注意:如果是其他模型初始化值可能很重要,具体模型具体处理)。我们可以随机初始化,或者采用以下这些无关紧要的值:
- = 0
- = 0
假如第一个特征值是10,将该特征值代入预测函数会得到以下结果:
y' = 0 + 0(10)
y' = 0
然后需要计算损失,上图中的“计算损失”部分是模型使用损失函数,比如:平方损失函数。
损失函数将采用两个输入值:
- :模型对特征x的预测
- y:特征x对应的正确标签。
最后,到图中“计算参数更新”部分。机器学习系统就是在此部分检查损失函数的值,并更新和,即为 和生成新值。
假设这个神秘的绿色框会产生新值,而该值又产生新的参数。这种学习过程会持续迭代,直到该算法发现损失已经降到最低,此时得到一个较好的模型,保存此时的模型参数。
通常,可以不断迭代,直到总体损失不再变化或变化极其缓慢为止,此时模型已经收敛。
3.3 关键词(训练、收敛、损失)
训练(training)构建模型的理想参数的过程。
收敛(convergence)收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失,在每次迭代中的变化都非常小或不再变化。在深度学习中,损失值有时会最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。参阅早停法。参阅 Boyd 和 Vandenberghe 合著的 Convex Optimization(《凸优化》)
损失(Loss)一种衡量指标,用于衡量模型的预测偏离其标签程度。要确定此值,模型需要定义损失函数。例如:线性回归模型参与均方误差MAS损失函数,分类模型采用交叉熵损失函数。
3.4 梯度下降法
在训练模型的迭代中,“计算参数更新”部分,可以使用梯度下降法实现。
假设我们有时间和计算资源来计算的所有可能值的损失。对于我们一直在研究的回归问题,所产生的损失与的图形始终是凸性,如下图所示:
回归问题产生的损失与权重为凸形。
凸形问题只有一个最低点;即只存在一个斜率正好为0的位置。这个最小值就是损失函数收敛之处。
通过计算整个数据集中每个可能值的损失函数来找到收敛点,这种方法效率太低了。我们来研究一种更好的机制,这种机制在机器学习领域非常热门,称为梯度下降法。
3.5 梯度下降法实现流程
梯度下降法的第一个阶段是为选择一个初始值(起点),下图显示的是我们选择了一个稍大于0的起点:
然后,梯度下降法会计算损失曲线在起点处的梯度。梯度是偏导数的矢量;它可以让模型了解那个方向距离目标“更近”或“更远”。
详细了解的偏导数和梯度
这里主要用到微积分的知识,通常开源的机器学习框架已经帮我们计算好梯度了,比如像TensorFlow。
偏导数
多变量函数值的是具有多个参数的函数,例如:
想对于 的偏导数表示为:,也是的导数。
要计算,必须使y保持固定不变(因此 现在是只有一个变量的函数),然后取 相对于的常规导数。例如,当固定为1时,前面的函数变为:
这只是一个变量的函数,其导数为:
一般来说,假设保持不变,对的偏导数的计算公式如下:
同样,如果我们使保持不变,对的偏导数为:
直观而言,偏导数可以让我们了解到,当略微改动一个变量时,函数会发送多大的变化?在前面的示例中:
因此,如果我们将起点设为(0,1),使保持固定不变,并将移动一点,的变化量是变化量的7.4倍左右。
在机器学习中,偏导数主要与函数的梯度一起使用。
梯度
函数的梯度是偏导数相当于所有自变量的矢量,表示为:∇,诶,CSDN编辑器打不∇
需要注意的是:
∇ | 指向函数增长速度最快的方向。 |
-∇ | 指向函数下降速度最快的方向。 |
该矢量中的维度个数等于公式中的变量个数;该矢量位于该函数的域空间内。
例如,在三维空间中查看下面的函数时:
就像一个山谷,最低点为(2,0,4):
的梯度是一个二维矢量,可让我们了解向那个方向移动时,高度下降得最快;即:梯度矢量指向谷底。
在机器学习中,梯度用于梯度下降法。我们的损失函数通常具有很多变量,而我们尝试通过跟随函数梯度的负方向来尽量降低损失函数。
需要注意,梯度是一个矢量,因此具有以下两个特征:
- 方向
- 大小
梯度始终指向损失函数中增长最为迅猛的方向。梯度下降法会沿着负梯度的方向走一步,以便尽快降低损失。梯度下降法依赖于负梯度:
为了确定损失函数曲线上的下一个点,梯度下降法会将梯度大小的一部分与起点相加,如下图所示:
一个梯度步长将我们移动到损失曲线上的下一个点。然后,梯度下降法会重复此过程,逐渐接近最低点。
3.6 关键词-梯度下降法
梯度下降法(gradient descent)一种通过计算梯度,并且将损失将至最低的技术,它以训练数据位条件,来计算损失相对于模型参数的梯度。梯度下降法以迭代方式调整参数,逐渐找到权重和偏差的最佳组合,从而将损失降至最低。
参考:https://developers.google.cn/machine-learning/crash-course/reducing-loss/an-iterative-approach
参考:https://developers.google.cn/machine-learning/crash-course/reducing-loss/gradient-descent
四、随机梯度下降、批量梯度下降法
4.1 前言
在梯度下降法中,批量指的是用于单次迭代中计算梯度的样本总数;即,梯度下降法中批量是指整个数据集。
如果使用大数据集,数据集包含百万级、千万级或亿级的样本;包含海量特征。因此,一个批量可能相当巨大,单次迭代就可能花费很长时间进行计算。
通常,批量大小越大,出现冗余的可能性就越高。一些冗余可能有助于消除杂乱的梯度,但超大批量所具备的预测价值往往并不比大型批量高。
4.2 随机梯度下降(SGD)
背景
梯度下降法在大数据集,会出现费时、价值不高等情况。如果我们可以通过更少的计算量得出正确的平均梯度,效果更好。通过从数据集中随机选择样本,来估算出较大的平均值。
原理
它每次迭代只使用一个样本(批量大小为1)。
如果进行足够的迭代,SGD也可以发挥作用,但过程会非常杂乱。“随机”这一术语表示构成各个批量的一个样本都是随机选择的。
4.3 批量梯度下降法(BGD)
它是介于全批量迭代与随机选择一个迭代的折中方案。全批量迭代(梯度下降法);随机选择一个迭代(随机梯度下降)。
它从数据集随机选取一部分样本,形成小批量样本,进行迭代。小批量通常包含10-1000个随机选择的样本。BGD可以减少SGD中的杂乱样本数量,但仍然波全批量更高效。
梯度下降、随机梯度下降、批量梯度下降法,三种方法中,通常采用批量梯度下降法类迭代模型。
五、学习率
5.1 前言
梯度矢量具有方向和大小;梯度下降算法用梯度乘以一个称为学习率(有时也称为步长)的标量,以确定下一个点的位置。
例如,如果梯度大小为2.5,学习率为0.01,则梯度下降算法会选择距离前一个点0.025的位置作为下一个点。
5.2 学习率
超参数是编程人员在机器学习算法中用于调整的旋钮。大多数机器学习编程人员会花费相当多的时间来调整学习率。
如果选择的学习率过小,就会花费太长的学习时间:
如果选择的学习率过大,下一个点将永远在U形曲线的底部随意弹跳,无法找到全局最低点:
如果选择的学习率恰恰好:
5.3 选择学习率
学习率与损失函数的平坦程度相关。如果知道损失函数的梯度较小,则可以尝试更大的学习率,以补偿较小的梯度并获得更大的步长。
一维空间中的理想学习率是,对的二阶导数的倒数。
二维或多维空间中的理想学习率是 Hessian matrix(由二阶偏导数组成的矩阵)的倒数。
广义凸函数的情况则更为复杂。
详细的Hessian matrix参考维基百科: https://en.wikipedia.org/wiki/Hessian_matrix
5.4 关键词
参数(parameter),机器学习系统自行训练的模型变量。例如,权重。它们的值是机器学习系统通过连续的训练迭代逐渐学习到的;与超参数相对。
超参数(hyperparameter),在模型训练的连续过程中,需要人工指定和调整的;例如学习率;与参数相对。
学习率(learning rate),在训练模型时用于梯度下降的一个标量。在每次迭代期间,梯度下降法都会将学习速率与梯度相乘;得出的乘积称为梯度步长。
参考:https://developers.google.cn/machine-learning/crash-course/reducing-loss/learning-rate
六、泛化与过拟合
6.1 前言
本文重点介绍泛化与过拟合模型。
为了能理解泛化这一概念,首先观察3张图。假设这些图中的每个点代表一棵树在森林中的位置。
图中的两种颜色分别代表以下含义:
- 蓝点代表生病的树
- 橙点代表健康的树
上图中有生病和健康的树,分别对应蓝点、橙点。
需要设计一个模型来区分出那些是生病的树,那些是健康的树。模型的效果如下:
表面一看,感觉该模型能很出色地区分出那些是生病的树,那些是健康的树。
实际上该模型有些过拟合了!!
如果用该模型预测一些新数据,效果如下:
该模型在处理新数据方面效果很差,对大部分新数据的分类都不正确。
6.2 过拟合
简介
过拟合模型在训练过程产生的损失很低,但在预测新数据时表现得很差。
产生原因
过拟合是训练数据太小,模型的复杂程度超出所需程度而造成,即:模型结构太过复杂,但任务本来需要表达的规律或含义不需这么复杂。
机器学习的目标
机器学习的目标是对真实概率分布中抽取的新数据做出良好的预测;即:对未见过的新数据做出良好预测。
6.3 奥卡姆的威廉
奥卡姆的威廉是 14 世纪一位崇尚简单的修士和哲学家。他认为科学家应该优先采用更简单(而非更复杂)的公式或理论。奥卡姆剃刀定律在机器学习方面的运用如下:
机器学习模型越简单,良好的实证结果就越有可能不仅仅基于样本的特征。
现今,我们已将奥卡姆剃刀定律正式应用于统计学习理论和计算学习理论领域。这些领域已经形成了泛化边界,即统计化描述模型根据以下因素泛化到新数据的能力:
- 模型的复杂程度
- 模型在处理训练数据方面的表现
虽然理论分析在理想化假设下可提供正式保证,但在实践中却很难应用。
例如,上面的模型,如果是简单拟合数据,用一根线简单地区分那些是生病的树,那些是健康的树,模型不再过拟合;虽然没有很精准地区分,但大部分的都能区分正确了。
6.4 数据集拆分
机器学习模型旨在根据以前未见过的新数据做出良好预测。但是,如果要根据数据集构建模型,如何获得以前未见过的数据呢?一种方法是将数据集分成两个子集:
- 训练集 - 用于训练模型的子集。
- 测试集 - 用于测试模型的子集。
一般来说,在测试集上表现是否良好是衡量能否在新数据上表现良好的有用指标,前提是:
- 测试集足够大。
- 不会反复使用相同的测试集来作假。
6.5 机器学习--泛化细则
以下三项基本假设阐明了泛化:
- 我们从分布中随机抽取独立同分布 (i.i.d) 的样本。换言之,样本之间不会互相影响。(另一种解释:i.i.d. 是表示变量随机性的一种方式)。
- 分布是平稳的;即分布在数据集内不会发生变化。
- 我们从同一分布的数据划分中抽取样本。
在实践中,我们有时会违背这些假设。例如:
- 想象有一个选择要展示的广告的模型。如果该模型在某种程度上根据用户以前看过的广告选择广告,则会违背 i.i.d. 假设。
- 想象有一个包含一年零售信息的数据集。用户的购买行为会出现季节性变化,这会违反平稳性。
参考:https://developers.google.cn/machine-learning/crash-course/generalization/peril-of-overfitting
6.6 小结
- 如果某个模型尝试紧密拟合训练数据,但却不能很好地泛化到新数据,就会发生过拟合。
- 如果不符合监督式机器学习的关键假设,那么我们将失去对新数据进行预测这项能力的重要理论保证。
6.7 关键词
泛化(generalization),是指模型依据训练时采用的模型,针对未见过的新数据做出争取预测的能力。
过拟合(overfitting),创建的模型与训练数据过于匹配,以至于模型无法根据新数据做出正确的预测。
预测(perdition),模型在收到数据样本后的输出。
平稳性(stationarit),数据集中数据的一种属性,表示数据分布在一个或多个维度保持不变。这种维度最常见的是时间,即:表明平稳性的数据不随时间而变化。
训练集(training set),数据集的子集,用于训练模型。与验证集和测试集相对。
验证集(validation set),数据集的一个子集,从训练集分离而来,用于调整超参数。与训练集和测试集相对。
测试集(test set),数据集的子集,用于在模型经过验证集的初步验证后,进行测试模型。与训练集和验证集相对。
七、数据集划分
7.1 前言
机器学习中可以将数据集分为两个子集,即训练集、测试集。更好的方式是将数据集分为三个子集,即训练集、验证集、测试集。
7.2 划分为训练集、测试集
数据集划分为两个子集的概念:
训练集—用于训练模型;
测试集—用于测试训练后模型
比如,将数据集划分为一个训练集、一个测试集:
使用此方案时,需要确保测试集满足以下两个条件:
- 规模足够大,可产生具有统计意义的结果。
- 能代表整个数据集。即,挑选的测试集的特征应该与训练集的特征相同。
当测试集满足上述两个条件,通常能得到一个能够较好泛化到新数据的模型。
使用训练集、测试集训练模型的过程
“调整模型”是指调整模型相关的参数、超参数、模型结构,比如:学习率、添加或移除特征,或从小设计全新模型等等。
7.3 划分为训练集、验证集、测试集
将数据集划分为三个子集,如下图所示,可以大幅降低过拟合的发送几率:
使用训练集、验证集、测试集训练模型的过程
首先选择早验证集上获得最佳效果的模型。然后使用测试集再次检查该模型。
这个方法训练出来的模型通过会更好,是因为暴露给测试集的信息更少。
划分为训练集、验证集、测试集方法中,通过测试集调整模型效果,从中不断学习测试集的规律;从而使得测试集和新数据有区别,模型对测试集有些认识了,对新数据还是完全不认识的情况下预测的
注意
不断适应测试集和验证集会使其逐渐失去效果。适应相同数据来决定超参数设置或其它模型改进的次数越多,对于这些结果能够真正泛化到未见过的新数据的效果就越低。
建议:收集更多数据来“刷新”测试集和验证集。重新开始是一种很好的重置方式。
7.4 关键词
训练集(training set),数据集的子集,用于训练模型。与验证集和测试集相对。
验证集(validation set),数据集的一个子集,从训练集分离而来,用于调整超参数。与训练集和测试集相对。
测试集(test set),数据集的子集,用于在模型经过验证集的初步验证后,进行测试模型。与训练集和验证集相对。
过拟合(overfitting),创建的模型与训练数据过于匹配,以至于模型无法根据新数据做出正确的预测。
参考:https://developers.google.cn/machine-learning/crash-course/training-and-test-sets/splitting-data
参考:https://developers.google.cn/machine-learning/crash-course/validation/another-partition
八、特征工程
8.1 前言
传统编程的关注点是代码。在机器学习项目中,关注点变成了特征表示;即,开发者通过添加和改善特征来调整模型。
特征工程是指将原始数据转换为特征矢量;进行特征工程预计需要大量时间。
8.2 将原始数据映射到特征
下图中左侧表示来自输入数据源的原始数据,右侧表示特征矢量,也就是组成数据集中样本的浮点值集。
特征工程将原始数据映射到机器学习特征。
8.3 映射数值
整数和浮点数据不需要特殊编码,因为它们可以与数字权重相乘。
下图中,将原始整数值6转换为特征值6.0并没有多大的意义。
8.4 映射分类值
分类特征具有一组离散的可能值。例如,可能有一个名为street_name的特征,其中的选项包括:
{'Charleston Road', 'North Shoreline Boulevard', 'Shorebird Way', 'Rengstorff Avenue'}
由于模型不能将字符串与学习到的权重相乘,因此我们使用特征工程将字符串转为数字值。
实现思路
可以定义一个从特征值(称为可能值的词汇表)到整数的映射。
世界上的每条街道并非都会出现在我们的数据集中,因此我们可以将所有其他街道分组为一个全部包罗的“其他”类别,称为OOV分桶(词汇表外)。
实现过程
通过上面的方法,我们可以按照以下方式将街道名称映射到数字:
- 将Charleston Road 映射到0
- 将North Shoreline Boulevard 映射到1
- 将Shorebird Way 映射到2
- 将Rengstorff Avenue 映射到3
- 将所有其他街道(OOV)映射到4
但是,如果我们将这些索引数字直接纳入到模型中,将会造成一些限制:
1)我们将学习适用于所有街道的单一权重。
例如,如果我们学习到street_name 的权重为6,那么对于Charleston Road,将其乘以0;对于North Shoreline Boulevard 则乘以1;对于Shorebird Way 则乘以2,依次类推。
以某个使用street_name 作为特征来预测房价的模型为例。根据街道名称对房价进行线性调整的可能性不大,此外,这些假设我们已经根据平均房价对街道怕徐。
我们的模型需要灵活地为每条街道学习不同的权重,这些权重将添加到使用其他特征估算的房价中。
2)我们没有将street_name 可能有多个值的情况考虑在内。例如,许多房屋位于两条街道的拐角处,因此如果模型包括单个索引,则无法再street_name 值中对该信息进行编码。
去除以上两个限制,我们可以为模型中的每个分类特征创建一个二元向量来表示这些值:
- 对于使用样本的值,将相应向量元素设为1.
- 将所有其他元素设为0;
该向量的长度等于词汇表中的元素数。当只有一个值为1 时,这种表示法称为独热编码;当有多个值为1时,这种表示法称为多热编码。
下图是通过独热编码映射街道地址,为街道Shorebird Way 的独热编码。
在此二元矢量中,代表Shorebird Way 的元素的值为1,而代表所有其他街道的元素的值为0.
小结
该方法能够有效为每个特征值创建布尔变量。采用这种方法时,如果房屋位于Shorebird Way街道上,则只有Shorebird Way的二元值为1.因此,该模型仅使用Shorebird Way 的权重。
如果房屋位于两条街道的拐角处,则将两个二元值设为1,并且模型将使用它们各自的权重。
8.5、稀疏表示法
背景
假设数据集中有100万个不同的街道名称,您希望将其包含为street_name 的值。
如果直接创建一个包含100万个元素的二元向量,其中只有1或2个元素为true,则是一种非常低效的表示法,在处理这些向量时会占用大量的存储空间并耗费很长的计算时间。
简介
在这种情况下,一种常用的方法是使用稀疏表示法,其中仅存储非零值。在稀疏表示法中,仍然为每个特征值学习独立的模型权重。
8.6 良好特征的特点
我们探索了将原始数据映射到适合特征矢量的方法,但这只是工作的一部分。然后需要探索什么样的值才算这些特征矢量中良好的特征。
- 避免很少实用的离散特征值
- 最好具有清晰明确的含义
- 实际数据内不要掺入特殊值
- 考虑上游不稳定性
5.1)避免很少使用的离散特征值
良好的特征值应该在数据集中出现大约5次以上。这样一来,模型就可以学习该特征值与标签是如何关联的。大量离散值相同的样本可让模型有机会了解不同设置中的特征,从而判断何时可以对标签很好地做出预测。例如,house_type特征包含大量样本,其中它的值为victorian:
house_type: victorian
如果某个特征值仅出现一次火灾很少出现,则模型就无法根据该特征进行预测。例如,unique_house_id 就不适合作为特征,因为每个值只使用一次,模型无法从中学习任何规律:
unique_house_id: 8SK982ZZ1242Z
5.2)最好具有清晰明确的含义
每个特征对于项目中的任何人,来说都应该具有清晰明确的含义。例如,房龄适合作为特征,可立即识别是以年为单位的房龄:house_age: 27
相反,对于一些特征值的含义,除了创建它的工程师,其他人恐怕辨识不出:house_age: 851472000
在某些情况下,混乱的数据会导致含义不清晰的值。例如,user_age的来源没有检查值是正确:user_age: 277
5.3)实际数据内不要掺入特殊值
良好的浮点特征不包含超出范围的异常断点或特征的值。例如,假设一个特征具有0到1 之间的浮点值。那么,如下值是可以接受的:
quality_rating: 0.82
quality_rating: 0.37
不过,如果用户没有输入quality_rating,
以上是关于机器学习——Google 快速入门课程(综合版)的主要内容,如果未能解决你的问题,请参考以下文章