赞
踩
本文参考 Google 谷歌官网机器学习的快速入门课程,整体课程比较好理解,供大家学习参考;文章也会结合自己的理解进行优化。看到官网的消息2021/7之后就不提供中文版的机器学习快速入门课程了,英文版还有的。
目录
参考谷歌官网对机器学习术语的解释,进行总结并加以描述。
https://guo-pu.blog.csdn.net/article/details/117442581
训练模型表示通过有标签样本学习模型中所有权重w和偏差b的最优值。在监督学习中,机器学习算法通过以下方式构建模型:检查多个样本并尝试找出可最大限度地减少模型的损失;这一过程称为经验风险最小化。
损失是对糟糕预测的惩罚;损失是之歌数值,表示对个单个样本而言模型预测的准确程度。如果模型的预测完成准确,则损失为零,否则损失会较大。
训练模型的目标是从所有样本中找到一组平均损失“较少”的权值和偏差。
红色箭头表示损失;蓝线表示预测。左侧曲线图中的红色箭头比右侧曲线图中的对应红色箭头长得多;即实际点和模型预测相差的距离比较远,差异更大。
左侧显示的是损失较大的模型;右侧显示的是损失较小的模型。
平方损失是一种常见的损失函数。线性回归模型使用的是一种称为平方损失(又称损失)的损失函数。单个样本的平方损失如下:
- = the square of the difference between the label and the prediction
- = (observation - prediction(x))2
- = (y - y')2
均方误差(MSE)是指每个样本的平均平方损失。计算MSE,需要求出各个样本的所有平方损失之和,然后除以样本数量:
其中:
MSE常用语回归任务中;分类任务常用交叉熵损失函数。
参考:https://developers.google.cn/machine-learning/crash-course/descending-into-ml/training-and-loss
经验风险最小化(ERM,empirical risk minimization),用于选择函数,选择基于训练集的损失降至最低的函数。与结构风险最小化相对。
均方误差(MSE,Mean Squared Error),每个样本的平均平方损失。MSE的计算方法是平方损失除以样本数。
平方损失函数(squared loss)在线性回归中使用的损失函数(也称为L2损失函数)。改行可计算模型为有标签样本预测的值,和标签的真实值之差的平方。 由于取平方值,该损失函数会放大不佳预测的影响。与L1损失函数相对,平方损失函数对离群值的反应更强烈。
训练(training)构建模型的理想参数的过程。
损失(Loss)一种衡量指标,用于衡量模型的预测偏离其标签程度。要确定此值,模型需要定义损失函数。例如:线性回归模型参与均方误差MAS损失函数,分类模型采用交叉熵损失函数。
在训练机器学习模型时,首先对权重和偏差进行初始化猜测,然后反复调整这些猜测参数(权重和偏差),直到获得损失可能最低时的,权重和偏差。
机器学习算法用于训练模型的迭代试错过程:
“模型”部分将一个或多个特征作为输入,然后返回一个预测()作为输出。
为了进行简化,不妨考虑采用一个特征,并返回一个预测的模型:
需要考虑为和设置哪些初始值?对于线性回归问题,事实证明初始值并不重要。(注意:如果是其他模型初始化值可能很重要,具体模型具体处理)。我们可以随机初始化,或者采用以下这些无关紧要的值:
假如第一个特征值是10,将该特征值代入预测函数会得到以下结果:
- y' = 0 + 0(10)
- y' = 0
然后需要计算损失,上图中的“计算损失”部分是模型使用损失函数,比如:平方损失函数。
损失函数将采用两个输入值:
最后,到图中“计算参数更新”部分。机器学习系统就是在此部分检查损失函数的值,并更新和,即为 和生成新值。
假设这个神秘的绿色框会产生新值,而该值又产生新的参数。这种学习过程会持续迭代,直到该算法发现损失已经降到最低,此时得到一个较好的模型,保存此时的模型参数。
通常,可以不断迭代,直到总体损失不再变化或变化极其缓慢为止,此时模型已经收敛。
训练(training)构建模型的理想参数的过程。
收敛(convergence)收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失,在每次迭代中的变化都非常小或不再变化。在深度学习中,损失值有时会最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。参阅早停法。参阅 Boyd 和 Vandenberghe 合著的 Convex Optimization(《凸优化》)
损失(Loss)一种衡量指标,用于衡量模型的预测偏离其标签程度。要确定此值,模型需要定义损失函数。例如:线性回归模型参与均方误差MAS损失函数,分类模型采用交叉熵损失函数。
在训练模型的迭代中,“计算参数更新”部分,可以使用梯度下降法实现。
假设我们有时间和计算资源来计算的所有可能值的损失。对于我们一直在研究的回归问题,所产生的损失与的图形始终是凸性,如下图所示:
回归问题产生的损失与权重为凸形。
凸形问题只有一个最低点;即只存在一个斜率正好为0的位置。这个最小值就是损失函数收敛之处。
通过计算整个数据集中每个可能值的损失函数来找到收敛点,这种方法效率太低了。我们来研究一种更好的机制,这种机制在机器学习领域非常热门,称为梯度下降法。
梯度下降法的第一个阶段是为选择一个初始值(起点),下图显示的是我们选择了一个稍大于0的起点:
然后,梯度下降法会计算损失曲线在起点处的梯度。梯度是偏导数的矢量;它可以让模型了解那个方向距离目标“更近”或“更远”。
详细了解的偏导数和梯度
这里主要用到微积分的知识,通常开源的机器学习框架已经帮我们计算好梯度了,比如像TensorFlow。
偏导数
多变量函数值的是具有多个参数的函数,例如:
想对于 的偏导数表示为:,也是的导数。
要计算,必须使y保持固定不变(因此 现在是只有一个变量的函数),然后取 相对于的常规导数。例如,当固定为1时,前面的函数变为:
这只是一个变量的函数,其导数为:
一般来说,假设保持不变,对的偏导数的计算公式如下:
同样,如果我们使保持不变,对的偏导数为:
直观而言,偏导数可以让我们了解到,当略微改动一个变量时,函数会发送多大的变化?在前面的示例中:
因此,如果我们将起点设为(0,1),使保持固定不变,并将移动一点,的变化量是变化量的7.4倍左右。
在机器学习中,偏导数主要与函数的梯度一起使用。
梯度
函数的梯度是偏导数相当于所有自变量的矢量,表示为:∇,诶,CSDN编辑器打不∇
需要注意的是:
∇ | 指向函数增长速度最快的方向。 |
-∇ | 指向函数下降速度最快的方向。 |
该矢量中的维度个数等于公式中的变量个数;该矢量位于该函数的域空间内。
例如,在三维空间中查看下面的函数时:
就像一个山谷,最低点为(2,0,4):
的梯度是一个二维矢量,可让我们了解向那个方向移动时,高度下降得最快;即:梯度矢量指向谷底。
在机器学习中,梯度用于梯度下降法。我们的损失函数通常具有很多变量,而我们尝试通过跟随函数梯度的负方向来尽量降低损失函数。
需要注意,梯度是一个矢量,因此具有以下两个特征:
梯度始终指向损失函数中增长最为迅猛的方向。梯度下降法会沿着负梯度的方向走一步,以便尽快降低损失。梯度下降法依赖于负梯度:
为了确定损失函数曲线上的下一个点,梯度下降法会将梯度大小的一部分与起点相加,如下图所示:
一个梯度步长将我们移动到损失曲线上的下一个点。然后,梯度下降法会重复此过程,逐渐接近最低点。
梯度下降法(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
在梯度下降法中,批量指的是用于单次迭代中计算梯度的样本总数;即,梯度下降法中批量是指整个数据集。
如果使用大数据集,数据集包含百万级、千万级或亿级的样本;包含海量特征。因此,一个批量可能相当巨大,单次迭代就可能花费很长时间进行计算。
通常,批量大小越大,出现冗余的可能性就越高。一些冗余可能有助于消除杂乱的梯度,但超大批量所具备的预测价值往往并不比大型批量高。
背景
梯度下降法在大数据集,会出现费时、价值不高等情况。如果我们可以通过更少的计算量得出正确的平均梯度,效果更好。通过从数据集中随机选择样本,来估算出较大的平均值。
原理
它每次迭代只使用一个样本(批量大小为1)。
如果进行足够的迭代,SGD也可以发挥作用,但过程会非常杂乱。“随机”这一术语表示构成各个批量的一个样本都是随机选择的。
它是介于全批量迭代与随机选择一个迭代的折中方案。全批量迭代(梯度下降法);随机选择一个迭代(随机梯度下降)。
它从数据集随机选取一部分样本,形成小批量样本,进行迭代。小批量通常包含10-1000个随机选择的样本。BGD可以减少SGD中的杂乱样本数量,但仍然波全批量更高效。
梯度下降、随机梯度下降、批量梯度下降法,三种方法中,通常采用批量梯度下降法类迭代模型。
梯度矢量具有方向和大小;梯度下降算法用梯度乘以一个称为学习率(有时也称为步长)的标量,以确定下一个点的位置。
例如,如果梯度大小为2.5,学习率为0.01,则梯度下降算法会选择距离前一个点0.025的位置作为下一个点。
超参数是编程人员在机器学习算法中用于调整的旋钮。大多数机器学习编程人员会花费相当多的时间来调整学习率。
如果选择的学习率过小,就会花费太长的学习时间:
如果选择的学习率过大,下一个点将永远在U形曲线的底部随意弹跳,无法找到全局最低点:
如果选择的学习率恰恰好:
学习率与损失函数的平坦程度相关。如果知道损失函数的梯度较小,则可以尝试更大的学习率,以补偿较小的梯度并获得更大的步长。
一维空间中的理想学习率是,对的二阶导数的倒数。
二维或多维空间中的理想学习率是 Hessian matrix(由二阶偏导数组成的矩阵)的倒数。
广义凸函数的情况则更为复杂。
详细的Hessian matrix参考维基百科: https://en.wikipedia.org/wiki/Hessian_matrix
参数(parameter),机器学习系统自行训练的模型变量。例如,权重。它们的值是机器学习系统通过连续的训练迭代逐渐学习到的;与超参数相对。
超参数(hyperparameter),在模型训练的连续过程中,需要人工指定和调整的;例如学习率;与参数相对。
学习率(learning rate),在训练模型时用于梯度下降的一个标量。在每次迭代期间,梯度下降法都会将学习速率与梯度相乘;得出的乘积称为梯度步长。
参考:https://developers.google.cn/machine-learning/crash-course/reducing-loss/learning-rate
本文重点介绍泛化与过拟合模型。
为了能理解泛化这一概念,首先观察3张图。假设这些图中的每个点代表一棵树在森林中的位置。
图中的两种颜色分别代表以下含义:
上图中有生病和健康的树,分别对应蓝点、橙点。
需要设计一个模型来区分出那些是生病的树,那些是健康的树。模型的效果如下:
表面一看,感觉该模型能很出色地区分出那些是生病的树,那些是健康的树。
实际上该模型有些过拟合了!!
如果用该模型预测一些新数据,效果如下:
该模型在处理新数据方面效果很差,对大部分新数据的分类都不正确。
简介
过拟合模型在训练过程产生的损失很低,但在预测新数据时表现得很差。
产生原因
过拟合是训练数据太小,模型的复杂程度超出所需程度而造成,即:模型结构太过复杂,但任务本来需要表达的规律或含义不需这么复杂。
机器学习的目标
机器学习的目标是对真实概率分布中抽取的新数据做出良好的预测;即:对未见过的新数据做出良好预测。
奥卡姆的威廉是 14 世纪一位崇尚简单的修士和哲学家。他认为科学家应该优先采用更简单(而非更复杂)的公式或理论。奥卡姆剃刀定律在机器学习方面的运用如下:
机器学习模型越简单,良好的实证结果就越有可能不仅仅基于样本的特征。
现今,我们已将奥卡姆剃刀定律正式应用于统计学习理论和计算学习理论领域。这些领域已经形成了泛化边界,即统计化描述模型根据以下因素泛化到新数据的能力:
虽然理论分析在理想化假设下可提供正式保证,但在实践中却很难应用。
例如,上面的模型,如果是简单拟合数据,用一根线简单地区分那些是生病的树,那些是健康的树,模型不再过拟合;虽然没有很精准地区分,但大部分的都能区分正确了。
机器学习模型旨在根据以前未见过的新数据做出良好预测。但是,如果要根据数据集构建模型,如何获得以前未见过的数据呢?一种方法是将数据集分成两个子集:
一般来说,在测试集上表现是否良好是衡量能否在新数据上表现良好的有用指标,前提是:
以下三项基本假设阐明了泛化:
在实践中,我们有时会违背这些假设。例如:
参考:https://developers.google.cn/machine-learning/crash-course/generalization/peril-of-overfitting
泛化(generalization),是指模型依据训练时采用的模型,针对未见过的新数据做出争取预测的能力。
过拟合(overfitting),创建的模型与训练数据过于匹配,以至于模型无法根据新数据做出正确的预测。
预测(perdition),模型在收到数据样本后的输出。
平稳性(stationarit),数据集中数据的一种属性,表示数据分布在一个或多个维度保持不变。这种维度最常见的是时间,即:表明平稳性的数据不随时间而变化。
训练集(training set),数据集的子集,用于训练模型。与验证集和测试集相对。
验证集(validation set),数据集的一个子集,从训练集分离而来,用于调整超参数。与训练集和测试集相对。
测试集(test set),数据集的子集,用于在模型经过验证集的初步验证后,进行测试模型。与训练集和验证集相对。
机器学习中可以将数据集分为两个子集,即训练集、测试集。更好的方式是将数据集分为三个子集,即训练集、验证集、测试集。
数据集划分为两个子集的概念:
训练集—用于训练模型;
测试集—用于测试训练后模型
比如,将数据集划分为一个训练集、一个测试集:
使用此方案时,需要确保测试集满足以下两个条件:
当测试集满足上述两个条件,通常能得到一个能够较好泛化到新数据的模型。
使用训练集、测试集训练模型的过程
“调整模型”是指调整模型相关的参数、超参数、模型结构,比如:学习率、添加或移除特征,或从小设计全新模型等等。
将数据集划分为三个子集,如下图所示,可以大幅降低过拟合的发送几率:
使用训练集、验证集、测试集训练模型的过程
首先选择早验证集上获得最佳效果的模型。然后使用测试集再次检查该模型。
这个方法训练出来的模型通过会更好,是因为暴露给测试集的信息更少。
划分为训练集、验证集、测试集方法中,通过测试集调整模型效果,从中不断学习测试集的规律;从而使得测试集和新数据有区别,模型对测试集有些认识了,对新数据还是完全不认识的情况下预测的
注意
不断适应测试集和验证集会使其逐渐失去效果。适应相同数据来决定超参数设置或其它模型改进的次数越多,对于这些结果能够真正泛化到未见过的新数据的效果就越低。
建议:收集更多数据来“刷新”测试集和验证集。重新开始是一种很好的重置方式。
训练集(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
传统编程的关注点是代码。在机器学习项目中,关注点变成了特征表示;即,开发者通过添加和改善特征来调整模型。
特征工程是指将原始数据转换为特征矢量;进行特征工程预计需要大量时间。
下图中左侧表示来自输入数据源的原始数据,右侧表示特征矢量,也就是组成数据集中样本的浮点值集。
特征工程将原始数据映射到机器学习特征。
整数和浮点数据不需要特殊编码,因为它们可以与数字权重相乘。
下图中,将原始整数值6转换为特征值6.0并没有多大的意义。
分类特征具有一组离散的可能值。例如,可能有一个名为street_name的特征,其中的选项包括:
{'Charleston Road', 'North Shoreline Boulevard', 'Shorebird Way', 'Rengstorff Avenue'}
由于模型不能将字符串与学习到的权重相乘,因此我们使用特征工程将字符串转为数字值。
实现思路
可以定义一个从特征值(称为可能值的词汇表)到整数的映射。
世界上的每条街道并非都会出现在我们的数据集中,因此我们可以将所有其他街道分组为一个全部包罗的“其他”类别,称为OOV分桶(词汇表外)。
实现过程
通过上面的方法,我们可以按照以下方式将街道名称映射到数字:
但是,如果我们将这些索引数字直接纳入到模型中,将会造成一些限制:
1)我们将学习适用于所有街道的单一权重。
例如,如果我们学习到street_name 的权重为6,那么对于Charleston Road,将其乘以0;对于North Shoreline Boulevard 则乘以1;对于Shorebird Way 则乘以2,依次类推。
以某个使用street_name 作为特征来预测房价的模型为例。根据街道名称对房价进行线性调整的可能性不大,此外,这些假设我们已经根据平均房价对街道怕徐。
我们的模型需要灵活地为每条街道学习不同的权重,这些权重将添加到使用其他特征估算的房价中。
2)我们没有将street_name 可能有多个值的情况考虑在内。例如,许多房屋位于两条街道的拐角处,因此如果模型包括单个索引,则无法再street_name 值中对该信息进行编码。
去除以上两个限制,我们可以为模型中的每个分类特征创建一个二元向量来表示这些值:
该向量的长度等于词汇表中的元素数。当只有一个值为1 时,这种表示法称为独热编码;当有多个值为1时,这种表示法称为多热编码。
下图是通过独热编码映射街道地址,为街道Shorebird Way 的独热编码。
在此二元矢量中,代表Shorebird Way 的元素的值为1,而代表所有其他街道的元素的值为0.
小结
该方法能够有效为每个特征值创建布尔变量。采用这种方法时,如果房屋位于Shorebird Way街道上,则只有Shorebird Way的二元值为1.因此,该模型仅使用Shorebird Way 的权重。
如果房屋位于两条街道的拐角处,则将两个二元值设为1,并且模型将使用它们各自的权重。
背景
假设数据集中有100万个不同的街道名称,您希望将其包含为street_name 的值。
如果直接创建一个包含100万个元素的二元向量,其中只有1或2个元素为true,则是一种非常低效的表示法,在处理这些向量时会占用大量的存储空间并耗费很长的计算时间。
简介
在这种情况下,一种常用的方法是使用稀疏表示法,其中仅存储非零值。在稀疏表示法中,仍然为每个特征值学习独立的模型权重。
我们探索了将原始数据映射到适合特征矢量的方法,但这只是工作的一部分。然后需要探索什么样的值才算这些特征矢量中良好的特征。
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,则数据集可能使用如下特殊值来表示不存在该值:
quality_rating: -1
为了解决特殊值的问题,需将该特征转换为两个特征:
5.4)考虑上游不稳定性
特征的定义不应随时间变化。例如,下列值是有用的,因为城市名称一般不会改变。
city_id: "br/sao_paulo"
但收集由其他模型推理的值会产生额外成本。可能值“219”目前代表圣保罗,但这种表示在未来运行其他模型时可能轻易发送变化:
inferred_city_cluster: "219"
特征工程(feature engineering),是指确定哪些特征可能在训练模型方面非常有用,然后将日志文件及其他来源的原始数据转换为所需的特征。特征工程有时称为特征提取。
离散特征(discrete feature),一种特征,包含有限个可能值。例如,某个值只能是“动物”、或“蔬菜”的特征,这是都能将类别列举出来的。与连续特征相对。
独热编码(one-hot-encoding),一种稀疏二元向量,其中:
独热编码常用语表示拥有 有限个可能值的字符串或标识符。
表示法(representation),将数据映射到实用特征的过程。
参考:https://developers.google.cn/machine-learning/crash-course/representation/feature-engineering
参考:https://developers.google.cn/machine-learning/crash-course/representation/qualities-of-good-features
通过降低模型复杂度来防止过拟合,这种原则称为正则化。
训练模型时,并非只是以最小损失(经验风险最小化)为目的
而是以最小化损失和复杂度为目标,这称为结构风险最小化:
现在,我们的训练优化算法是一个由两项内容组成的函数:
常见的两种衡量模型复杂度的常见方式:
如果模型复杂度是权重的函数,则特征权重的绝对值越高,对模型复杂度的贡献就越大。
我们可以使用正则化公式来量化复杂度,该公式将正则化项定义为所有特征权重的平方和:
这个公式中,接近于0的权重对模型复杂度几乎没有影响,而离群值权重则会肯呢个产生巨大的影响。
例子,某个线性模型具有以下:
结合公式,计算得 正则化项为26.915:
上面的案例中的平方值为25,几乎贡献了全部的复杂度。其他5个权重的平方和的值仅为1.915,在正则化项的贡献小。所以, 正则化项,接近于0的权重对模型复杂度几乎没有影响,而离群值权重则会肯呢个产生巨大的影响。
模型开发者通过以下方式来调整正则化项的整体影响:用正化项的值乘以名为lambda(又称为正则化率)的标量。模型开发者会执行以下运行:
其中是指lambda;
执行正则化对模型具有以下影响
添加lambda值将增强正则化效果。例如,lambda值较高的权重直方图可能如下图所示:
如果降低lambda的值往往会得出比较平缓的直方图:
在选择lambda值时,目标是在简单化和训练数据拟合之间达到适当的平衡:
注意:
将lambda设为0可彻底取消正则化。这种情况下,训练的唯一目的是最小化损失,而这样做会使得过拟合的风险达到最高。
理想的lambda值生成的模型可以很好地泛化到之前没有见过的新数据;通常,理想的lambda值取决于数据,需要手动或自动进行一些调整。
学习率和lambda之间存在密切关联。
强 正则化值往往会使得特征权重更接近于0。较低的学习率(使用早停法)通常会产生相同的效果。因此,同时调整学习率和lambda可能会产生令人混淆的效果。
早停法是指模型完全收敛之前就结束训练。在实际操作中,我们经常在以连续方式进行训练,采取一些隐式早停法。
如上所述,更改正则化参数产生的效果,可能会与更改学习率或迭代次数产生的效果混淆。有一种方式,在训练一批固定的数据时,执行足够多次迭代,这样早停法便不会起作用。
参考:https://developers.google.cn/machine-learning/crash-course/regularization-for-simplicity/lambda
许多问题需要将概率估算值作为输出。逻辑回归是一种极其高效的概率计算机制。
按原样使用概率;假设我们创建一个逻辑回归模型来预测狗在半夜发出叫声的概率。我们将此概率称为:
如果逻辑回归模型预测的值为0.05,那么一年内(365天),主人被狗惊醒约18次:
即:18 = 0.05 * 365
转换为二元类别
在很多情况下,将逻辑回归输出映射到二元分类问题的解决方案,该二元分类问题的目标是正确预测两个可能的标签中的一个。
逻辑回归模型如何确保输出值始终落在0和1之间呢?S型函数生成的输出值正好具有这些特征,其定义如下:
S型函数会产生以下曲线:
如果z表示使用逻辑回归训练的模型的线性层的输出,则S型函数会生成一个介于0和1之间的值(概率)。用数学方法表示为:
其中:
请注意,z也称为对数几率,因为S型函数的反函数表明:z可定义为标签“1”的概率除以标签“0”的概率,得出的值的对数:
以下是具有机器学习标签的S型函数:
假设我们的逻辑回归模型具有学习了下列偏差和权重的三个特征:
进一步假设给定样本具有以下特征:
因此,对数几率:
代入公式计算得:(1)+(2)(0)+(-1)(10)+(5)(2)=1
因此,此特定样本的逻辑回归预测值将是0.731:
概率输出为0,731,即73.1%的概率:
线性回归的损失函数是平方损失。逻辑回归的损失函数是对数损失函数,定义如下:
其中:
对数损失函数的方程式,是似然函数的负对数。
正则化在逻辑回归建模中极其重要。如果没有正则化,逻辑回归的逐渐性会不断促使损失在搞维度空间内达到0.因此,大多数逻辑回归模型会使用一下两个策略之一来降低模型复杂性:
假设向每个样本分配一个唯一ID,且将每个ID映射到其自己的特征。如果未指定正则化函数,模型会变得完成过拟合。
这是因为模型会尝试促使所有样本的始终损失达不到0,从而使每个特征的权重接近正无穷或负无穷。当大量罕见的特征组合的高纬度数据就会出现这种情况。正则化或早停法可以防止此类问题。
逻辑回归模型生成概率。
对数损失函数使逻辑回归的损失函数。
逻辑回归被很多从业者广发使用。
本案例观察蟋蟀鸣叫的规律,训练一个模型,预测鸣叫与温度的关系。
蟋蟀在较为炎热的天气里鸣叫更为频繁,数十年来,专业和业余昆虫学者已将每分钟的喵叫和温度方面的数据编入目录。
温度与蟋蟀鸣叫的数据,先了解数据的分布情况:
上图表示每分钟的鸣叫与温度的关系。
此曲线图中能看到随着温度的升,蟋蟀鸣叫次数特增加。鸣叫声与温度之间的关系是线性关系。
可以绘制一条直线来近视地表示这种关系,如下图所示:
虽然图中的每个点不是完全分布在直线上,但基本都在直线附近;线性关系用公式表示如下:
其中:
按照机器学习的方式,写一个模型方程式:
其中:
要根据新的每分钟的鸣叫声值推断(预测)温度,只需将值代入此模型即可。
下标(例如和)预示着可以用多个特征来表示更复杂的模型。例如,具有三个特征的模型可以采用以下方程式:
参考:https://developers.google.cn/machine-learning/crash-course/descending-into-ml/linear-regression
关键词
偏差(bias),距离原点的截距或偏移。偏差(也称为偏差项)在机器学习模型中用b或表示。例如,在下面的公式中,偏差为b:
推断(inference),在机器学习中,推断通常指以下过程:通过将训练过的模型应用于无标签样本来做出雨雪。在统计学中,推断是指在某些观察数据条件下拟合分布参数的过程。(请参阅维基百科中有关统计学推断的文章。)
线性回归(linear regression),一种回归模型,通过将输入特征进行线性组合输出连续值。
权重(weight),模型中特征的系数,或深度网络中的边。训练模型的目标是确定每个特征的理想权重。如果权重为0,则相应的特征对模型来说没有任何影响。
参考:https://developers.google.cn/machine-learning/crash-course/logistic-regression/model-training
正则化,也称稀疏性正则化。
创建特征组合会导致包含更多维度;由于使用此类高纬度特征矢量,因此模型可能会非常庞大,并且需要大量的RAM。
在高纬度稀疏矢量中,最好尽可能使权重正好降至0。正好为0的权重基本会使相应特征从模型中移除。将特征设为0可节省RAM空间,且可以减少模型中的噪点。
L1正则化(L1 regularization),一种正则化,根据权重的绝对值的总和来惩罚权重。在以来稀疏特征的模型中,L1正则化有助于使不相关或几乎不相关的特征的权重正好为0,从而将这些特征从模型中移除。与L2正则化相对。
对比:正则化可以使权重变小,但是并不能使它们正好为0.0。
和 采用不同的方式降低权重:
采用平方的方式降低权重的,即
因此, 和 具有不同的导数:
导数的作用理解为:每次从权重中减去一个常数。不过,由于减去的是绝对值,在0处具有不连续性,这会导致与0相交的减法结果变为0。例如,如果减法使权重从+0.1变为-0.2,便会将权重设为0。就这样,使权重变为0了。
的导数作用理解为:每次移除权重的x%。对于任意数字,即使按每次减去x%的幅度执行数十亿次减法计算,最后得出的值也绝不会正好为0。即,通常不会使权重变为0。
小结:正则化,减少所有权重的绝对值,对宽度模型非常有效。
下面是比较 L1 和 L2 正则化对权重网络的影响:
能看到L1正则化会把很小的权重变为0;
L1正则化(L1 regularization),一种正则化,根据权重的绝对值的总和,来惩罚权重。在以来稀疏特征的模型中,L1正则化有助于使不相关或几乎不相关的特征的权重正好为0,从而将这些特征从模型中移除。与L2正则化相对。
L2正则化(L2 regularization),一种正则化,根据权重的平方和,来惩罚权重。L2正则化有助于使离群值(具有较大正值或较小负责)权重接近于0,但又不正好为0。在线性模型中,L2正则化始终可以进行泛化。
本文主要介绍神经网络。有些分类问题是属于非线性问题:
“非线性”意味着无法使用这样的形式: 的模型精准预测标签。即:“决策面”不是直线。
如果数据集如下所示(更难的非线性分类问题):
上图的数据集问题,无法使用线性模型解决。
或者可以考虑一个可行方法,对非线性问题进行建模——特征组合。
或者使用神经网络解决非线性问题,通常效果较好;它不一定始终比特征组合好,但它确实可以提供适用于很多情形的灵活代替方案。
单层神经网络,其实也是一个线性模型,模型结构如下:
每个蓝色圆圈均表示一个输入特征,绿色圆圈表示各个输入的加权和。
这里明明有输出层、输出层,为什么叫单层神经网络呢?
通常,统计神经网络层数时,对有权重参数的层,才进行统计。输入层只负责特征数据输入,没有参数,所以不纳入统计层数的。
在输入层和输出层之间,添加多一层网络,其称为隐藏层。如下图所示:
隐藏层中的每个黄色节点均是,蓝色输入节点值的加权和。输出时黄色节点的加权和。
两层神经网络,其输出仍是其输入的线性组合。
由输出层、隐藏层1、隐藏层2、输出层组成;在输入层和输出层之间的都可以称为隐藏层。:
此模型仍是线性的;当将输出表示为输入的函数并进行简化时,只是获得输入的另一个加权和而已。
该加权和无法对非线性问题,进行有效建模。
要对非线性问题进行建模,我们可以直接引入非线性函数。我们可以使用非线性函数将每个隐藏节点享管道一样连接起来。
在下图所示的模型中,在隐藏层1中各个节点的只传递到一下层,进行加权求和之前;我们采用一个非线性函数对其进行了转换。这种非线性函数成为激活函数。
包含激活函数的三层模型:
现在,我们已经添加了激活函数,如果添加层,将会产生更多影响。通过在非线性上堆叠非线性,我们能够对输入和预测输出之间极其复杂的关系进行建模。
每一层均可通过原始输入有效学习更复杂、更高级别的函数。
常见激活函数
1、S型激活函数,将加权和转换为介于0和1之间的值。
曲线图如下:
2、修正线性单元激光函数,简称ReLU,相对于S型函数等平滑函数,它的效果通常要好一点,同时还非常易于计算。
ReLU的优势在于它基于实证发现,拥有更实用的响应范围。S型函数的响应性在两端相对较快地减少。ReLU激活函数如下所示:
实际上,所有数学函数均可作为激光函数。假设表示我们的激活函数(ReLuck、S型函数等等)。因此,网络中节点的值由以下公式指定:
现在,我们的模型拥有了人们通常所说的“神经网络”的所有标准组件:
参考:https://developers.google.cn/machine-learning/crash-course/introduction-to-neural-networks/anatomy
协同过滤是一项可以预测用户兴趣的任务。一影片推荐的任务为例,假设有100万个用户,以及每位用户观看过的列表,其中可供观看的影片共有50万部。目标是向用户推荐影片。
要解决这个问题,我们需要使用某种方法来确定哪些影片是相似的。我们可以通过将影片嵌套到低维空间,是的相似的影片彼此邻近,俩实现这个目标。
在介绍如果学习嵌套之前,我们先来了解一下,我们希望嵌套具备的特质类型,以及我们将如何表示训练数据以供学习嵌套。
在一维数轴上排列影片
为了更直观地了解嵌套过程,下面列举了一些数据;试着在一维数轴上排列以下影片,让越相关的影片考得越近。
影片 | 分级 | 说明 |
---|---|---|
《蓝》 | R | 一位法国妇人在丈夫与爱女丧命于一场车祸后悲痛欲绝。 |
《蝙蝠侠:黑暗骑士崛起》 | PG-13 | 这部影片是《黑暗骑士》的续集,以 DC 漫画的宇宙空间为背景,讲述蝙蝠侠尽力保护高谭市免遭核毁灭的故事。 |
《哈利·波特与魔法石》 | PG | 一个失去双亲的男孩发现自己会巫术,于是前去霍格沃茨魔法学校学习魔法,在这里他与邪恶的伏地魔展开了第一场激斗。 |
《超人总动员》 | PG | 被迫在郊区过着平民生活的超人一家重出江湖,拯救超人家族免遭辛拉登及其杀手机器人的迫害。 |
《怪物史莱克》 | PG | 可爱的怪物史莱克和他的伙伴驴子,启程营救被火龙囚禁在城堡的菲奥娜公主。 |
《星球大战》 | PG | 卢克·天行者和汉·索洛与两个义军机器人结成一队,共同拯救莱娅公主并保卫星球。 |
《疯狂约会美丽都》 | PG-13 | 专业骑行者查宾在环法自行车大赛期间被挟持,他的奶奶带着他家的胖狗漂洋过海,并在爵士歌手三姐妹的帮助下救出了他。 |
《记忆碎片》 | R | 一位短期记忆丧失症患者将线索纹在身上,竭尽全力寻找杀害自己妻子的凶手。 |
一个可行(但极不完善)的解决方案:把所以影片一行排列
虽然中嵌套有助于捕获影片的适宜观赏年龄段,但在推荐影片时还需要考虑影片的许多其它方面。我们进一步分析此示例,在添加一个嵌套维度。
在二维空间中排列影片
使用这种二维嵌套,我们可以定义影片之间的距离,从而是得在适宜儿童或成人的相近程度上影片,以及属于大片或艺术影片的程度上相近的影片,位于相近的位置。当然,这是影片诸多重要特征中的两个。
简单来说,我们所做的是将这些影片映射到一个嵌套空间,其中的每个字词都有一组二维坐标来表示。例如,在这个空间中,《怪物史菜克》映射到了(-1.0 , 0.95);而《蓝》映射到了(0.65 , -0.2)。
通常情况下,在学习d维嵌套时,每部影片都由d个实值数字表示,其中每个数字都分别表示在一个维度中的坐标。
在此示例中,我们为每个维度指定了名称。在学习嵌套时,每个维度的学习跟它们的名字无法。有时我们可以查看嵌套并为维度赋予语义,但有时则无法做到这一点。
通常,每个此类维度都称为一个潜在维度,因为它代表的特征没有明确显示在数据中,而是需要根据数据推断得出。
最终,真正有意义的是嵌套空间中各个影片之间的距离,而不是单个影片在任意指定维度上的坐标。
分类数据是指用于表示一组有限选项中的,一个或多个离散项的输入特征。例如,它可以是某用户观看过的一组影片,某文档中使用的一系列单词,或某人从事的职业。
分类数据的最高效表示方式是使用稀疏张量(一种含有极少非零元素的张量)。例如,如果要构建一个影片推荐模型,可以为每部的影片分别分配一个唯一的ID,然后通过用户已观看影片的稀疏张量来表示每位用户,如图下图所示。
在上图中,每行都是一个样本,这个样本显示用户的影片观看记录;上图以稀疏张量的形式表示,因为每个用户只会观看所有可能的影片中的一小部分。
根据影片图标上方所示的索引,最后一行对应于稀疏张量[1,3,999999]。
类似地,我们还可以将字词、句子和文档表示为稀疏矢量;在这种情况下,词汇表内每个字词所扮演的角色类似于推荐示例中的影片。
为了能够在机器学习系统中使用这类表示法,我们需要将每个稀疏矢量表示为数字矢量,从而使语义上相识的项(影片或字词),在矢量空间中具有相似的距离。
但如何将字词的稀疏矢量表示为数字矢量呢?
最简单的方法是:
【1】定义一个巨型输入层,并在其中为词汇表的每个字词设定一个节点,或者只是为数据中出现的每个字词设定一个节点。
如果我们的数据中出现了50万个独一无二的单词,可以使用长度为50万的矢量来表示每个单词,将每个字词分配到相应矢量中对应的索引位置。
如果为“马”分配的索引是1247,当“马”输入到网络中,可以将第1247个输入节点设成1,其余节点设成0。这种表示法称为独热编码(one-hot encodering),因为只有一个索引具有非零值。
【2】更常见的是,使用一个包含各个单词在大块文本中出现次数的向量。这杯称为“词袋”(bag of words)表示法。在一个词袋矢量中,50万个节点中的若干个节点将具有非零值。
不过,无论我们如何确定非零值,若将节点与字词一一对应,我们得到的输入矢量就会比较稀疏:矢量很大,但非零值相对较少。
稀疏表示法会使模型很难高效地学习。
巨型输入矢量意味着神经网络的对应权重数目会机器庞大。
如果我们的词汇表找那个有M个字词,而神经网络输入层上方的第一层有N个节点,需要为该层训练MxN个权重。权重数目过大会进一步引发以下问题:
如果将RGB通道的像素值输入到图片分类器中,分析“邻近”值是可行的。不过是从语义上来看,还是从矢量之间的几何距离来看,红蓝色与纯蓝色都是邻近对的。
不过,对于在索引1247处设为1,来表示“马”的矢量而言;如果说它在索引238处设为1,来表示“电视机”的矢量不够邻近;那么它与在索引50430处设为1,来说表示“羚羊”的矢量依然。
上述问题的解决方案是使用嵌套,也就是将大型稀疏矢量映射到一个保留语义关系的低维空间。
背景
要解决稀疏输入数据的核心问题,我们可以将高维度数据映射待低维度空间。
分析
即便是小型多维空间,也能自由地将语义上相似的项归到一起,并将相异项分开。
矢量空间中的位置(距离和方向)可以良好的嵌套中的语义进行编码。
例如,下面的真实嵌套可视化图展示的几何关系图捕获了国家与首都之间的语义关系。
嵌套可以产生精彩的模拟;借助这种有意义的空间,机器学习系统能够检测出对学习任务可能有帮助的模式。
收缩网络
尽管我们需要足够的维度来编码丰富的语义关系,但我们也需要足够小的嵌套空间来更快速地训练我们的系统。
使用嵌套的量级大致有数百个维度,这可能比我们在自然语言任务中使用的词汇规模要小好几个数量级。
嵌套充当查询表
嵌套是一个矩阵,每列表示我们词汇中一项所对应的矢量。要获得某个词汇项的密集矢量,可以检索该项所对应的列。
但是,如何转换字词矢量的稀疏包呢?
要获得表示多个词汇项;例如,一句或一段中的所有字词,的稀疏矢量的密集矢量,可以检索各项的嵌套,然后将它们相加。
稀疏矢量包含词汇项的计数?
如果稀疏矢量包含词汇项的计数,则可以将每项嵌套与其对应项的计算相乘,然后再求和。
嵌套查询充当矩阵乘法
查询、乘法和加法程序等效于矩阵乘法。假设有一个1xN的稀疏表示S和一个NxM的嵌套表E,矩阵乘法SxE可以得出密集矢量1xM。
但如果获取E呢?下一节介绍如何获取嵌套。
我们可以通过多种方式来获取嵌套,包括Google研发的一流算法。
目前有很多在低维空间 捕获 高维空间重要结构 的数学技术。理论上,这些技术都可以用来创建于机器学习系统的嵌套。
例如,主成分分析(PCA)已用于创建字词嵌套。在给定一组实例的情况下,例如字词矢量包,PCA会尝试查找高度相关且可以合并的维度。
简介
Word2Vec 是 Google 为了训练字词嵌套而研发的一种算法。
原理
Word2vec基于分布假设,将语义上相似的字词 映射到 几何图形上邻近的嵌套矢量。
分布假设,是指经常具有相同邻字词的字词,往往在语义上相似。简单来说,就是分布相互邻近的字词,往往语义也相似。
例如,“狗”和“猫”这两个词经常靠近“兽医”一词,这就可以说明这两个字词在语义上相似。
结构
Word2Vec 通过训练神经网络来区分,实际共同出现的多组字词与随机出现在一起的字词,从而充分利用此类上下文信息。
输入层采用一种稀疏表示法用于,组合一个目标字词 与一个或多个上下文字词。这一输入层会连接到一个较小的隐藏层。
在训练模型后,我们得到的是一组嵌套,借助将输入层连接到隐藏层的权重;可以将字词的稀疏表示映射到小型矢量。这类嵌套可在其他分类中重复使用。
简介
我们可以将 嵌套 作为目标任务的神经网络的一部分,然后进行学习训练。通过这个方法,可以为自己的特定系统量身定制嵌套,不过耗费的时间可能比单独训练嵌套的时间长。
应用
一般来说,当我们有稀疏数据时,可以创建一个嵌套单元。
或者当我们想要嵌套的密集数据时,也可以创建一个嵌套单元。
这个嵌套单元其实是大小为d的一个特殊类型的隐藏单元;此嵌套层可与任何其它特征和隐藏层组合。和任何DNN中一样,最终层将是要进行优化的损失函数。
案例1
假设我们正在执行协同过滤,目标是根据其他用户的兴趣,预测某位用户的兴趣。
我们可以将这个问题作为监督学习问题进行建模,具体做法是随机选择用户看过的一小部分影片作为正类标签,然后再优化Softmax损失。
根据协同过滤数据学习影片嵌套的DNN架构示例:
案例2
如果想在DNN中针对房地产广告词,创建嵌套层来预测房价,则可以将训练数据中的已知房屋价用作标签来优化来L2损失。
在学习d维嵌套时,每一项都会映射到d为空间中的一个点,这样相似项就会在该空间内彼此邻近。
嵌套层权重的几何视图:
上图说明了在嵌套层中学到的权重与几何视图之间的关系;输入节点与d维嵌套层中的节点之间的边的权重,对应于d维坐标轴中每一维的坐标值。
比如,d = 3,把每一项,映射到3位空间汇总的一个点,比如是(0.9,0.2,0.4)。
参考:https://developers.google.cn/machine-learning/crash-course/embeddings/obtaining-embeddings
加油加油~
本文供大家学习参考,欢迎交流~
如有错误,欢迎指出,谢谢。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。