b站学习链接:传送门学习视频第10 11章
学习目录索引:吴恩达2014课程简介

知识补充

线性和非线性

线性和非线性是描述数学函数、模型或关系的两个基本概念。

  1. 线性:
  • 线性是指一个函数、模型或关系满足线性性质。
  • 在数学上,线性表示一个函数的图像是一条直线或一个平面,它具有形如 y = mx + b 的形式,其中 m 和 b 是常数,x 和 y 是变量。
  • 线性函数具有以下性质:
    • 每个自变量的系数都是一次项(没有平方项、立方项等)。
    • 所有自变量的系数相乘后求和的结果是因变量。
    • 函数的图像是直线或平面。
  • 线性关系是一种简单和可解释的关系,其性质可以由直线或平面来描述。
  1. 非线性:
  • 非线性是指一个函数、模型或关系不满足线性性质。
  • 在数学上,非线性表示一个函数的图像不能用直线或平面来描述,它具有复杂的形状。
  • 非线性函数具有以下性质:
    • 可能包含自变量的高次项,如平方项、立方项等。
    • 自变量的系数可以相互乘以或除以。
    • 函数的图像可以是曲线、曲面或更复杂的形状。
  • 非线性关系通常更加灵活和复杂,可以描述更多种类的现象和模式。

总结:
线性和非线性是用于描述数学函数、模型或关系的术语。线性函数的图像是一条直线或平面,满足简单的线性性质;而非线性函数的图像是曲线、曲面或更复杂的形状,不满足线性性质。在实际应用中,线性关系适用于简单的线性问题,而非线性关系适用于更复杂的问题,其中特征和目标变量之间存在复杂的非线性关系。

特征规范化

特征规范化是一种数据预处理技术,用于将不同尺度和范围的特征转化为统一的标准范围。它有助于消除特征之间的量纲差异,使得特征在模型训练和预测过程中更具可比性和可解释性。
常见的特征规范化方法包括:

  1. 特征缩放(Feature Scaling):
  • 特征缩放是将特征值按比例缩放到一个特定的范围内,通常是[0, 1]或[-1, 1]。
  • 最常用的特征缩放方法是最小-最大缩放(Min-Max Scaling),将特征值线性转换到指定的范围。
  • 另一种特征缩放方法是标准化(Standardization),将特征值转换为均值为0,标准差为1的标准正态分布。
  1. 归一化(Normalization):
  • 归一化是将特征值按比例缩放到单位范数(向量的模为1)。
  • 最常用的归一化方法是L2归一化,也称为向量的长度归一化。

特征规范化的好处包括:

  • 帮助消除特征之间的量纲差异,防止某些特征对模型产生过大或过小的影响。
  • 改善模型的收敛速度和稳定性。
  • 使特征更具可解释性和可比性。

选择特征规范化方法的依据包括数据的分布情况、模型的要求和应用场景。在实际应用中,根据具体情况选择合适的特征规范化方法,以提高模型的性能和可解释性。
这个理解可以参考作业中的描述。

为什么分为训练集,交叉验证集和测试集

分为训练集、交叉验证集和测试集是为了评估机器学习模型的性能和泛化能力。这种划分有助于评估模型在新数据上的表现,并帮助我们选择最佳的模型。

下面是每个集合的作用:

  1. 训练集(Training Set):用于训练机器学习模型。模型通过使用训练集中的样本进行学习和参数调整,以使其能够预测或分类给定的输入。
  2. 交叉验证集(Cross-Validation Set):用于选择模型的超参数或进行模型选择。交叉验证集可以帮助我们评估模型在不同超参数设置下的性能,并选择最佳的模型。常见的交叉验证方法是k折交叉验证,将训练集分成k个子集,每次使用k-1个子集进行训练,然后用剩下的一个子集进行验证。重复这个过程k次,每次用不同的子集作为验证集,最后取平均得到性能评估指标。
  3. 测试集(Test Set):用于评估最终选择的模型在未见过的数据上的性能。测试集应该是模型在训练过程中没有接触到的样本。通过测试集的性能评估,我们可以估计模型在实际应用中的表现,并判断其是否具有良好的泛化能力。

将数据集分为这三个部分的目的是为了准确评估模型的性能,并避免过拟合(overfitting)的问题。过拟合是指模型在训练集上表现良好,但在新数据上表现较差的现象。通过使用独立的测试集来评估模型,我们可以更好地估计模型的泛化能力,即模型对未知数据的适应能力。

课堂笔记

应用机器学习的建议(Advice for Applying Machine Learning)

决定下一步做什么

参考视频: 10 - 1 - Deciding What to Try Next (6 min).mkv
到目前为止,我们已经介绍了许多不同的学习算法,如果你一直跟着这些视频的进度学习,你会发现自己已经不知不觉地成为一个了解许多先进机器学习技术的专家了。

然而,在懂机器学习的人当中依然存在着很大的差距,一部分人确实掌握了怎样高效有力地运用这些学习算法。而另一些人他们可能对我马上要讲的东西,就不是那么熟悉了。他们可能没有完全理解怎样运用这些算法。因此总是把时间浪费在毫无意义的尝试上。我想做的是确保你在设计机器学习的系统时,你能够明白怎样选择一条最合适、最正确的道路。因此,在这节视频和之后的几段视频中,我将向你介绍一些实用的建议和指导,帮助你明白怎样进行选择。具体来讲,我将重点关注的问题是假如你在开发一个机器学习系统,或者想试着改进一个机器学习系统的性能,你应如何决定接下来应该选择哪条道路?为了解释这一问题,我想仍然使用预测房价的学习例子,假如你已经完成了正则化线性回归,也就是最小化代价函数 J J J的值,假如,在你得到你的学习参数以后,如果你要将你的假设函数放到一组新的房屋样本上进行测试,假如说你发现在预测房价时产生了巨大的误差,现在你的问题是要想改进这个算法,接下来应该怎么办?

实际上你可以想出很多种方法来改进这个算法的性能,其中一种办法是使用更多的训练样本。具体来讲,也许你能想到通过电话调查或上门调查来获取更多的不同的房屋出售数据。遗憾的是,我看到好多人花费了好多时间想收集更多的训练样本。他们总认为,要是我有两倍甚至十倍数量的训练数据,那就一定会解决问题的是吧?但有时候获得更多的训练数据实际上并没有作用。在接下来的几段视频中,我们将解释原因。

我们也将知道怎样避免把过多的时间浪费在收集更多的训练数据上,这实际上是于事无补的。另一个方法,你也许能想到的是尝试选用更少的特征集。因此如果你有一系列特征比如 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3等等。也许有很多特征,也许你可以花一点时间从这些特征中仔细挑选一小部分来防止过拟合。或者也许你需要用更多的特征,也许目前的特征集,对你来讲并不是很有帮助。你希望从获取更多特征的角度来收集更多的数据,同样地,你可以把这个问题扩展为一个很大的项目,比如使用电话调查来得到更多的房屋案例,或者再进行土地测量来获得更多有关,这块土地的信息等等,因此这是一个复杂的问题。同样的道理,我们非常希望在花费大量时间完成这些工作之前,我们就能知道其效果如何。我们也可以尝试增加多项式特征的方法,比如 x 1 x_1 x1的平方, x 2 x_2 x2的平方, x 1 , x 2 x_1,x_2 x1,x2的乘积,我们可以花很多时间来考虑这一方法,我们也可以考虑其他方法减小或增大正则化参数 λ \lambda λ的值。我们列出的这个单子,上面的很多方法都可以扩展开来扩展成一个六个月或更长时间的项目。遗憾的是,大多数人用来选择这些方法的标准是凭感觉的,也就是说,大多数人的选择方法是随便从这些方法中选择一种,比如他们会说“噢,我们来多找点数据吧”,然后花上六个月的时间收集了一大堆数据,然后也许另一个人说:“好吧,让我们来从这些房子的数据中多找点特征吧”。我很遗憾不止一次地看到很多人花了至少六个月时间来完成他们随便选择的一种方法,而在六个月或者更长时间后,他们很遗憾地发现自己选择的是一条不归路。幸运的是,有一系列简单的方法能让你事半功倍,排除掉单子上的至少一半的方法,留下那些确实有前途的方法,同时也有一种很简单的方法,只要你使用,就能很轻松地排除掉很多选择,从而为你节省大量不必要花费的时间。最终达到改进机器学习系统性能的目的假设我们需要用一个线性回归模型来预测房价,当我们运用训练好了的模型来预测未知数据的时候发现有较大的误差,我们下一步可以做什么?

  1. 获得更多的训练样本——通常是有效的,但代价较大,下面的方法也可能有效,可考虑先采用下面的几种方法。
  2. 尝试减少特征的数量
  3. 尝试获得更多的特征
  4. 尝试增加多项式特征
  5. 尝试减少正则化程度 λ \lambda λ
  6. 尝试增加正则化程度 λ \lambda λ

我们不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。

在接下来的两段视频中,我首先介绍怎样评估机器学习算法的性能,然后在之后的几段视频中,我将开始讨论这些方法,它们也被称为"机器学习诊断法"。“诊断法”的意思是:这是一种测试法,你通过执行这种测试,能够深入了解某种算法到底是否有用。这通常也能够告诉你,要想改进一种算法的效果,什么样的尝试,才是有意义的。在这一系列的视频中我们将介绍具体的诊断法,但我要提前说明一点的是,这些诊断法的执行和实现,是需要花些时间的,有时候确实需要花很多时间来理解和实现,但这样做的确是把时间用在了刀刃上,因为这些方法让你在开发学习算法时,节省了几个月的时间,因此,在接下来几节课中,我将先来介绍如何评价你的学习算法。在此之后,我将介绍一些诊断法,希望能让你更清楚。在接下来的尝试中,如何选择更有意义的方法。

评估一个假设

参考视频: 10 - 2 - Evaluating a Hypothesis (8 min).mkv
在本节视频中我想介绍一下怎样用你学过的算法来评估假设函数。在之后的课程中,我们将以此为基础来讨论如何避免过拟合和欠拟合的问题。
image.png
当我们确定学习算法的参数的时候,我们考虑的是选择参量来使训练误差最小化,有人认为得到一个非常小的训练误差一定是一件好事,但我们已经知道,仅仅是因为这个假设具有很小的训练误差,并不能说明它就一定是一个好的假设函数。而且我们也学习了过拟合假设函数的例子,所以这推广到新的训练集上是不适用的。

那么,你该如何判断一个假设函数是过拟合的呢?对于这个简单的例子,我们可以对假设函数 h ( x ) h(x) h(x)进行画图,然后观察图形趋势,但对于特征变量不止一个的这种一般情况,还有像有很多特征变量的问题,想要通过画出假设函数来进行观察,就会变得很难甚至是不可能实现。

因此,我们需要另一种方法来评估我们的假设函数过拟合检验。

为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用70%的数据作为训练集,用剩下30%的数据作为测试集。很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。
image.png
测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:

  1. 对于线性回归模型,我们利用测试集数据计算代价函数 J J J
  2. 对于逻辑回归模型,我们除了可以利用测试数据集来计算代价函数外:

KaTeX parse error: Expected group after '_' at position 47: …{m}_{test}}\sum_̲\limits{i=1}^{m…

误分类的比率,对于每一个测试集样本,计算:
image.png

然后对计算结果求平均。

模型选择和交叉验证集

参考视频: 10 - 3 - Model Selection and Train_Validation_Test Sets (12 min).mkv
假设我们要在10个不同次数的二项式模型之间进行选择:
image.png
显然越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型。我们需要使用交叉验证集来帮助选择模型。
image.png
关于为什么不是分为训练集和测试集上面的图中有提到。
即:使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集
image.png
模型选择的方法为:

  1. 使用训练集训练出10个模型
  2. 用10个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)
  3. 选取代价函数值最小的模型
  4. 用步骤3中选出的模型对测试集计算得出推广误差(代价函数的值)
    Train/validation/test error
    Training error:

在这里插入图片描述

诊断偏差和方差

参考视频: 10 - 4 - Diagnosing Bias vs. Variance (8 min).mkv
当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合问题。那么这两种情况,哪个和偏差有关,哪个和方差有关,或者是不是和两个都有关?搞清楚这一点非常重要,因为能判断出现的情况是这两种情况中的哪一种。其实是一个很有效的指示器,指引着可以改进算法的最有效的方法和途径。在这段视频中,我想更深入地探讨一下有关偏差和方差的问题,希望你能对它们有一个更深入的理解,并且也能弄清楚怎样评价一个学习算法,能够判断一个算法是偏差还是方差有问题,因为这个问题对于弄清如何改进学习算法的效果非常重要,高偏差和高方差的问题基本上来说是欠拟合和过拟合的问题。
image.png
我们通常会通过将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:
image.png在这里插入图片描述

image.png
对于训练集,当 d d d 较小时,模型拟合程度更低,误差较大;随着 d d d 的增长,拟合程度提高,误差减小。

对于交叉验证集,当 d d d 较小时,模型拟合程度低,误差较大;但是随着 d d d 的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。

如果我们的交叉验证集误差较大,我们如何判断是方差还是偏差呢?根据上面的图表,我们知道:
image.png
训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合

正则化和偏差/方差

参考视频: 10 - 5 - Regularization and Bias_Variance (11 min).mkv
在我们在训练模型的过程中,一般会使用一些正则化方法来防止过拟合。但是我们可能会正则化的程度太高或太小了,即我们在选择λ的值时也需要思考与刚才选择多项式模型次数类似的问题。
image.png
image.png
我们选择一系列的想要测试的 λ \lambda λ 值,通常是 0-10之间的呈现2倍关系的值(如: 0 , 0.01 , 0.02 , 0.04 , 0.08 , 0.15 , 0.32 , 0.64 , 1.28 , 2.56 , 5.12 , 10 0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10 0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10共12个)。 我们同样把数据分为训练集、交叉验证集和测试集。
image.png
图里面的正则化项应该是n
选择 λ \lambda λ的方法为:

  1. 使用训练集训练出12个不同程度正则化的模型
  2. 用12个模型分别对交叉验证集计算的出交叉验证误差
  3. 选择得出交叉验证误差最小的模型
  4. 运用步骤3中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和交叉验证集模型的代价函数误差与λ的值绘制在一张图表上:

image.png
上述的意思是:先让lamba取不同的值,用J(包含正则化项)求出theta,然后把theta带入不包含正则化的曲线中,看lamba对J的影响
image.png
• 当 λ \lambda λ 较小时,训练集误差较小(过拟合)而交叉验证集误差较大
• 随着 λ \lambda λ 的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加

学习曲线

参考视频: 10 - 6 - Learning Curves (12 min).mkv
学习曲线就是一种很好的工具,我经常使用学习曲线来判断某一个学习算法是否处于偏差、方差问题。学习曲线是学习算法的一个很好的合理检验sanity check)。学习曲线是将训练集误差和交叉验证集误差作为训练集样本数量( m m m)的函数绘制的图表。

即,如果我们有100行数据,我们从1行数据开始,逐渐学习更多行的数据。思想是:当训练较少行数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。
image.png
如何利用学习曲线识别高偏差/欠拟合:作为例子,我们尝试用一条直线来适应下面的数据,可以看出,无论训练集有多么大误差都不会有太大改观:
image.png
也就是说在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。

如何利用学习曲线识别高方差/过拟合:假设我们使用一个非常高次的多项式模型,并且正则化非常小,可以看出,当交叉验证集误差远大于训练集误差时,往训练集增加更多数据可以提高模型的效果。
image.png
也就是说在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。

决定下一步做什么

参考视频: 10 - 7 - Deciding What to Do Next Revisited (7 min).mkv
我们已经介绍了怎样评价一个学习算法,我们讨论了模型选择问题,偏差和方差的问题。那么这些诊断法则怎样帮助我们判断,哪些方法可能有助于改进学习算法的效果,而哪些可能是徒劳的呢?

让我们再次回到最开始的例子,在那里寻找答案,这就是我们之前的例子。回顾 1.1 中提出的六种可选的下一步,让我们来看一看我们在什么情况下应该怎样选择:

  1. 获得更多的训练样本——解决高方差
  2. 尝试减少特征的数量——解决高方差
  3. 尝试获得更多的特征——解决高偏差
  4. 尝试增加多项式特征——解决高偏差
  5. 尝试减少正则化程度λ——解决高偏差
  6. 尝试增加正则化程度λ——解决高方差

神经网络的方差和偏差:image.png

使用较小的神经网络,类似于参数较少的情况,容易导致高偏差和欠拟合,但计算代价较小使用较大的神经网络,类似于参数较多的情况,容易导致高方差和过拟合,虽然计算代价比较大,但是可以通过正则化手段来调整而更加适应数据。

通常选择较大的神经网络并采用正则化处理会比采用较小的神经网络效果要好。

对于神经网络中的隐藏层的层数的选择,通常从一层开始逐渐增加层数,为了更好地作选择,可以把数据分为训练集、交叉验证集和测试集,针对不同隐藏层层数的神经网络训练神经网络,
然后选择交叉验证集代价最小的神经网络。

好的,以上就是我们介绍的偏差和方差问题,以及诊断该问题的学习曲线方法。在改进学习算法的表现时,你可以充分运用以上这些内容来判断哪些途径可能是有帮助的。而哪些方法可能是无意义的。如果你理解了以上几节视频中介绍的内容,并且懂得如何运用。那么你已经可以使用机器学习方法有效的解决实际问题了。你也能像硅谷的大部分机器学习从业者一样,他们每天的工作就是使用这些学习算法来解决众多实际问题。我希望这几节中提到的一些技巧,关于方差、偏差,以及学习曲线为代表的诊断法能够真正帮助你更有效率地应用机器学习,让它们高效地工作。

机器学习系统的设计(Machine Learning System Design)

首先要做什么

参考视频: 11 - 1 - Prioritizing What to Work On (10 min).mkv
在接下来的视频中,我将谈到机器学习系统的设计。这些视频将谈及在设计复杂的机器学习系统时,你将遇到的主要问题。同时我们会试着给出一些关于如何巧妙构建一个复杂的机器学习系统的建议。下面的课程的的数学性可能不是那么强,但是我认为我们将要讲到的这些东西是非常有用的,可能在构建大型的机器学习系统时,节省大量的时间。

本周以一个垃圾邮件分类器算法为例进行讨论。

为了解决这样一个问题,我们首先要做的决定是如何选择并表达特征向量 x x x。我们可以选择一个由100个最常出现在垃圾邮件中的词所构成的列表,根据这些词是否有在邮件中出现,来获得我们的特征向量(出现为1,不出现为0),尺寸为100×1。
image.png
为了构建这个分类器算法,我们可以做很多事,例如:

  1. 收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本
  2. 基于邮件的路由信息开发一系列复杂的特征
  3. 基于邮件的正文信息开发一系列复杂的特征,包括考虑截词的处理
  4. 为探测刻意的拼写错误(把watch 写成w4tch)开发复杂的算法

在上面这些选项中,非常难决定应该在哪一项上花费时间和精力,作出明智的选择,比随着感觉走要更好。当我们使用机器学习时,总是可以“头脑风暴”一下,想出一堆方法来试试。实际上,当你需要通过头脑风暴来想出不同方法来尝试去提高精度的时候,你可能已经超越了很多人了。大部分人并不尝试着列出可能的方法,他们做的只是某天早上醒来,因为某些原因有了一个突发奇想:“让我们来试试用Honey Pot项目收集大量的数据吧。”

我们将在随后的课程中讲误差分析,我会告诉你怎样用一个更加系统性的方法,从一堆不同的方法中,选取合适的那一个。因此,你更有可能选择一个真正的好方法,能让你花上几天几周,甚至是几个月去进行深入的研究。

误差分析

参考视频: 11 - 2 - Error Analysis (13 min).mkv
在本次课程中,我们将会讲到误差分析(Error Analysis)的概念。这会帮助你更系统地做出决定。如果你准备研究机器学习的东西,或者构造机器学习应用程序,最好的实践方法不是建立一个非常复杂的系统,拥有多么复杂的变量;而是构建一个简单的算法,这样你可以很快地实现它。

每当我研究机器学习的问题时,我最多只会花一天的时间,就是字面意义上的24小时,来试图很快的把结果搞出来,即便效果不好。坦白的说,就是根本没有用复杂的系统,但是只是很快的得到的结果。即便运行得不完美,但是也把它运行一遍,最后通过交叉验证来检验数据。一旦做完,你可以画出学习曲线,通过画出学习曲线,以及检验误差,来找出你的算法是否有高偏差和高方差的问题,或者别的问题。在这样分析之后,再来决定用更多的数据训练,或者加入更多的特征变量是否有用。这么做的原因是:这在你刚接触机器学习问题时是一个很好的方法,你并不能提前知道你是否需要复杂的特征变量,或者你是否需要更多的数据,还是别的什么。提前知道你应该做什么,是非常难的,因为你缺少证据,缺少学习曲线。因此,你很难知道你应该把时间花在什么地方来提高算法的表现。但是当你实践一个非常简单即便不完美的方法时,你可以通过画出学习曲线来做出进一步的选择。你可以用这种方式来避免一种电脑编程里的过早优化问题,这种理念是:我们必须用证据来领导我们的决策,怎样分配自己的时间来优化算法,而不是仅仅凭直觉,凭直觉得出的东西一般总是错误的。除了画出学习曲线之外,一件非常有用的事是误差分析,我的意思是说:当我们在构造垃圾邮件分类器时,我会看一看我的交叉验证数据集,然后亲自看一看哪些邮件被算法错误地分类。因此,通过这些被算法错误分类的垃圾邮件与非垃圾邮件,你可以发现某些系统性的规律:什么类型的邮件总是被错误分类。经常地这样做之后,这个过程能启发你构造新的特征变量,或者告诉你:现在这个系统的短处,然后启发你如何去提高它。

构建一个学习算法的推荐方法为:

  1. 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法

2.绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
3.进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的样本,看看这些样本是否有某种系统化的趋势

以我们的垃圾邮件过滤器为例,误差分析要做的既是检验交叉验证集中我们的算法产生错误预测的所有邮件,看:是否能将这些邮件按照类分组。例如医药品垃圾邮件,仿冒品垃圾邮件或者密码窃取邮件等。然后看分类器对哪一组邮件的预测误差最大,并着手优化。

思考怎样能改进分类器。例如,发现是否缺少某些特征,记下这些特征出现的次数。

例如记录下错误拼写出现了多少次,异常的邮件路由情况出现了多少次等等,然后从出现次数最多的情况开始着手优化。

误差分析并不总能帮助我们判断应该采取怎样的行动。有时我们需要尝试不同的模型,然后进行比较,在模型比较时,用数值来判断哪一个模型更好更有效,通常我们是看交叉验证集的误差。

在我们的垃圾邮件分类器例子中,对于“我们是否应该将discount/discounts/discounted/discounting处理成同一个词?”如果这样做可以改善我们算法,我们会采用一些截词软件。误差分析不能帮助我们做出这类判断,我们只能尝试采用和不采用截词软件这两种不同方案,然后根据数值检验的结果来判断哪一种更好。

因此,当你在构造学习算法的时候,你总是会去尝试很多新的想法,实现出很多版本的学习算法,如果每一次你实践新想法的时候,你都要手动地检测这些例子,去看看是表现差还是表现好,那么这很难让你做出决定。到底是否使用词干提取,是否区分大小写。但是通过一个量化的数值评估,你可以看看这个数字,误差是变大还是变小了。你可以通过它更快地实践你的新想法,它基本上非常直观地告诉你:你的想法是提高了算法表现,还是让它变得更坏,这会大大提高你实践算法时的速度。所以我强烈推荐在交叉验证集上来实施误差分析,而不是在测试集上。但是,还是有一些人会在测试集上来做误差分析。即使这从数学上讲是不合适的。所以我还是推荐你在交叉验证向量上来做误差分析。

总结一下,当你在研究一个新的机器学习问题时,我总是推荐你实现一个较为简单快速、即便不是那么完美的算法。我几乎从未见过人们这样做。大家经常干的事情是:花费大量的时间在构造算法上,构造他们以为的简单的方法。因此,不要担心你的算法太简单,或者太不完美,而是尽可能快地实现你的算法。当你有了初始的实现之后,它会变成一个非常有力的工具,来帮助你决定下一步的做法。因为我们可以先看看算法造成的错误,通过误差分析,来看看他犯了什么错,然后来决定优化的方式。另一件事是:假设你有了一个快速而不完美的算法实现,又有一个数值的评估数据,这会帮助你尝试新的想法,快速地发现你尝试的这些想法是否能够提高算法的表现,从而你会更快地做出决定,在算法中放弃什么,吸收什么误差分析可以帮助我们系统化地选择该做什么。

类偏斜的误差度量

参考视频: 11 - 3 - Error Metrics for Skewed Classes (12 min).mkv
在前面的课程中,我提到了误差分析,以及设定误差度量值的重要性。那就是,设定某个实数来评估你的学习算法,并衡量它的表现,有了算法的评估和误差度量值。有一件重要的事情要注意,就是使用一个合适的误差度量值,这有时会对于你的学习算法造成非常微妙的影响,这件重要的事情就是偏斜类(skewed classes)的问题。类偏斜情况表现为我们的训练集中有非常多的同一种类的样本,只有很少或没有其他类的样本。

例如我们希望用算法来预测癌症是否是恶性的,在我们的训练集中,只有0.5%的实例是恶性肿瘤。假设我们编写一个非学习而来的算法,在所有情况下都预测肿瘤是良性的,那么误差只有0.5%。然而我们通过训练而得到的神经网络算法却有1%的误差。这时,误差的大小是不能视为评判算法效果的依据的。
image.png

正样本和负样本的数量比差别很大的时候我们成为skewed classes(偏斜类),对于这类问题用分类精确度并不能很好的衡量算法,因为如上图的从99.2%提升到99.5%精确率提高了,但是我们不能说这个模型很好,因为直接令y=0精确率就映99.5%了。

查准率Precision)和查全率Recall) 我们将算法预测的结果分成四种情况:

precision:预测为真的值中真正为真的值所占的比例
recall:真正为真的值中有多少被预测出来了。

  1. 正确肯定True Positive,TP):预测为真,实际为真

2.正确否定True Negative,TN):预测为假,实际为假

3.错误肯定False Positive,FP):预测为真,实际为假

4.错误否定False Negative,FN):预测为假,实际为真

则:查准率=TP/(TP+FP)。例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。
查全率=TP/(TP+FN)。例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。
这样,对于我们刚才那个总是预测病人肿瘤为良性的算法,其查全率是0。

预测值
PositiveNegtive
实际值PositiveTPFN
NegtiveFPTN

查准率和查全率之间的权衡

参考视频: 11 - 4 - Trading Off Precision and Recall (14 min).mkv
在之前的课程中,我们谈到查准率和召回率,作为遇到偏斜类问题的评估度量值。在很多应用中,我们希望能够保证查准率和召回率的相对平衡。

在这节课中,我将告诉你应该怎么做,同时也向你展示一些查准率和召回率作为算法评估度量值的更有效的方式。继续沿用刚才预测肿瘤性质的例子。假使,我们的算法输出的结果在0-1 之间,我们使用阀值0.5 来预测真和假。
image.png
查准率**(Precision)=TP/(TP+FP)**
例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。

查全率**(Recall)=TP/(TP+FN)**例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。

如果我们希望只在非常确信的情况下预测为真(肿瘤为恶性),即我们希望更高的查准率,我们可以使用比0.5更大的阀值,如0.7,0.9。这样做我们会减少错误预测病人为恶性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况。

如果我们希望提高查全率,尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地检查、诊断,我们可以使用比0.5更小的阀值,如0.3。

我们可以将不同阀值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数据的不同而不同:
image.png
我们希望有一个帮助我们选择这个阀值的方法。一种方法是计算F1 值F1 Score),其计算公式为:

F 1 S c o r e : 2 P R P + R {{F}_{1}}Score:2\frac{PR}{P+R} F1Score:2P+RPR

我们选择使得F1值最高的阀值。

机器学习的数据

参考视频: 11 - 5 - Data For Machine Learning (11 min).mkv
在之前的视频中,我们讨论了评价指标。在这个视频中,我要稍微转换一下,讨论一下机器学习系统设计中另一个重要的方面,这往往涉及到用来训练的数据有多少。在之前的一些视频中,我曾告诫大家不要盲目地开始,而是花大量的时间来收集大量的数据,因为数据有时是唯一能实际起到作用的。但事实证明,在一定条件下,我会在这个视频里讲到这些条件是什么。得到大量的数据并在某种类型的学习算法中进行训练,可以是一种有效的方法来获得一个具有良好性能的学习算法。而这种情况往往出现在这些条件对于你的问题都成立。
并且你能够得到大量数据的情况下。这可以是一个很好的方式来获得非常高性能的学习算法。因此,在这段视频中,让我们一起讨论一下这个问题。

很多很多年前,我认识的两位研究人员Michele BankoEric Brill进行了一项有趣的研究,他们尝试通过机器学习算法来区分常见的易混淆的单词,他们尝试了许多种不同的算法,并发现数据量非常大时,这些不同类型的算法效果都很好。
image.png
比如,在这样的句子中:早餐我吃了__个鸡蛋(to,two,too),在这个例子中,“早餐我吃了2个鸡蛋”,这是一个易混淆的单词的例子。于是他们把诸如这样的机器学习问题,当做一类监督学习问题,并尝试将其分类,什么样的词,在一个英文句子特定的位置,才是合适的。他们用了几种不同的学习算法,这些算法都是在他们2001年进行研究的时候,都已经被公认是比较领先的。因此他们使用了一个方差,用于逻辑回归上的一个方差,被称作"感知器"(perceptron)。他们也采取了一些过去常用,但是现在比较少用的算法,比如 Winnow算法,很类似于回归问题,但在一些方面又有所不同,过去用得比较多,但现在用得不太多。还有一种基于内存的学习算法,现在也用得比较少了,但是我稍后会讨论一点,而且他们用了一个朴素算法。这些具体算法的细节不那么重要,我们下面希望探讨,什么时候我们会希望获得更多数据,而非修改算法。他们所做的就是改变了训练数据集的大小,并尝试将这些学习算法用于不同大小的训练数据集中,这就是他们得到的结果。
image.png
这些趋势非常明显,首先大部分算法,都具有相似的性能,其次,随着训练数据集的增大,在横轴上代表以百万为单位的训练集大小,从0.1个百万到1000百万,也就是到了10亿规模的训练集的样本,这些算法的性能也都对应地增强了。

事实上,如果你选择任意一个算法,可能是选择了一个"劣等的"算法,如果你给这个劣等算法更多的数据,那么从这些例子中看起来的话,它看上去很有可能会其他算法更好,甚至会比"优等算法"更好。由于这项原始的研究非常具有影响力,因此已经有一系列许多不同的研究显示了类似的结果。这些结果表明,许多不同的学习算法有时倾向于表现出非常相似的表现,这还取决于一些细节,但是真正能提高性能的,是你能够给一个算法大量的训练数据。像这样的结果,引起了一种在机器学习中的普遍共识:“取得成功的人不是拥有最好算法的人,而是拥有最多数据的人”。

那么这种说法在什么时候是真,什么时候是假呢?因为如果我们有一个学习算法,并且如果这种说法是真的,那么得到大量的数据通常是保证我们具有一个高性能算法的最佳方式,而不是去争辩应该用什么样的算法。

假如有这样一些假设,在这些假设下有大量我们认为有用的训练集,我们假设在我们的机器学习问题中,特征值 x x x包含了足够的信息,这些信息可以帮助我们用来准确地预测 y y y,例如,如果我们采用了一些容易混淆的词,如:twototoo,假如说它能够描述 x x x,捕捉到需要填写的空白处周围的词语,那么特征捕捉到之后,我们就希望有对于“早饭我吃了__鸡蛋”,那么这就有大量的信息来告诉我中间我需要填的词是“两个”(two),而不是单词 totoo,因此特征捕捉,哪怕是周围词语中的一个词,就能够给我足够的信息来确定出标签 y y y是什么。换句话说,从这三组易混淆的词中,我应该选什么词来填空。

那么让我们来看一看,大量的数据是有帮助的情况。假设特征值有足够的信息来预测 y y y值,假设我们使用一种需要大量参数的学习算法,比如有很多特征的逻辑回归或线性回归,或者用带有许多隐藏单元的神经网络,那又是另外一种带有很多参数的学习算法,这些都是非常强大的学习算法,它们有很多参数,这些参数可以拟合非常复杂的函数,因此我要调用这些,我将把这些算法想象成低偏差算法,因为我们能够拟合非常复杂的函数,而且因为我们有非常强大的学习算法,这些学习算法能够拟合非常复杂的函数。很有可能,如果我们用这些数据运行这些算法,这种算法能很好地拟合训练集,因此,训练误差就会很低了。

现在假设我们使用了非常非常大的训练集,在这种情况下,尽管我们希望有很多参数,但是如果训练集比参数的数量还大,甚至是更多,那么这些算法就不太可能会过度拟合。也就是说训练误差有希望接近测试误差。

另一种考虑这个问题的角度是为了有一个高性能的学习算法,我们希望它不要有高的偏差和方差。

因此偏差问题,我么将通过确保有一个具有很多参数的学习算法来解决,以便我们能够得到一个较低偏差的算法,并且通过用非常大的训练集来保证。
image.png
我们在此没有方差问题,我们的算法将没有方差,并且通过将这两个值放在一起,我们最终可以得到一个低误差和低方差的学习算法。这使得我们能够很好地测试测试数据集。从根本上来说,这是一个关键的假设:特征值有足够的信息量,且我们有一类很好的函数,这是为什么能保证低误差的关键所在。它有大量的训练数据集,这能保证得到更多的方差值,因此这给我们提出了一些可能的条件,如果你有大量的数据,而且你训练了一种带有很多参数的学习算法,那么这将会是一个很好的方式,来提供一个高性能的学习算法。

我觉得关键的测试:首先,一个人类专家看到了特征值 x x x,能很有信心的预测出 y y y值吗?因为这可以证明 $ y$ 可以根据特征值 x x x被准确地预测出来。其次,我们实际上能得到一组庞大的训练集,并且在这个训练集中训练一个有很多参数的学习算法吗?如果你不能做到这两者,那么更多时候,你会得到一个性能很好的学习算法。

作业练习

知识补充

作业描述

在本练习中,您将实现正则化线性回归,并使用它来研究具有不同偏差-方差特性的模型。在开始编程练习之前,我们强烈建议您观看视频讲座并完成相关主题的复习问题。
ex5data1.mat-数据集

正则化线性回归

在练习的前半部分,您将使用水库水位的变化来实现正则化线性回归,以预测从大坝流出的水量。在下半部分中,您将进行一些调试学习算法的诊断,并检查偏差与方差的影响。

数据可视化

我们将从可视化数据集开始,该数据集包含水位x和流出大坝的水量y变化的历史记录。
该数据集分为三个部分:

  • 您的模型将学习的训练集:X,y
  • 用于确定正则化参数的交叉验证集: X v a l Xval Xval y v a l yval yval
  • 用于评估性能的测试集。这些都是“看不见的”例子,你的模型在训练中没有看到:Xtest,ytest

在在接下来的部分中,您将实现线性回归,并使用它来拟合直线到数据并绘制学习曲线。之后,您将实现多项式回归以找到更好的数据拟合。
image.png

正则化线性回归成本函数

回想一下,正则化线性回归具有以下成本函数:
image.png
其中λ是控制正则化程度的正则化参数(因此,有助于防止过拟合)。正则化项对总体成本 J J J施加惩罚。随着模型参数 θ j θ_j θj的大小增加,惩罚也增加。请注意,不应该正则化 θ 0 θ_0 θ0项。
您的任务是编写一个函数来计算正则化线性回归成本函数。如果可能的话,尽量将代码向量化,避免编写循环。
完成后,ex5.m的下一部分将使用在[1;1]初始化的theta运行成本函数。您应该期望看到303.993的输出。

正则化线性回归梯度

相应地,正则化线性回归的代价对 θ j θ_j θj的偏导数定义为
image.png
在linearRegCostFunction.m中,添加代码来计算梯度,并以变量grad形式返回。完成后ex5.m将使用在[1;1]处初始化的theta来运行梯度函数。您应该预计会看到[-15.30;598.250]的坡度。

拟合线性回归

一旦成本函数和梯度正确工作,ex5.m的下一部分将运行trainLinearReg.m中的代码来计算θ的最佳值。该训练函数使用fmincg来优化成本函数。
在本部分中,我们将正则化参数λ设置为零。因为我们目前线性回归的实现是试图拟合二维θ,正则化对于如此低维的θ并没有令人难以置信的帮助。在练习的后面部分,您将使用带正则化的多项式回归。
最后,ex5.m脚本还应该绘制出最佳拟合线,从而得到类似于图2的图像。最佳拟合线告诉模型是这不是对数据的良好拟合,因为数据具有非线性模式。虽然可视化所示的最佳拟合是调试学习算法的一种可能方法,但可视化数据和模型并不总是那么容易。在下一节中,您将实现一个生成学习曲线的函数,该函数可以帮助您调试学习算法,即使数据不容易可视化。
image.png

偏差方差

机器学习中的一个重要概念是偏差-方差权衡。具有高偏差的模型对于数据来说不够复杂,并且往往不足,而具有高方差的模型则过度拟合训练数据。
在练习的这一部分中,您将在学习曲线上绘制训练和测试错误图,以诊断偏差-方差问题。

学习曲线

现在,您将实现生成学习曲线的代码,这些学习曲线在调试学习算法时非常有用。回想一下,学习曲线将训练和交叉验证误差绘制为训练集大小的函数。您的工作是填写learningCurve.m,以便它返回训练集和交叉验证集的错误向量。
为了绘制学习曲线,我们需要不同训练集大小的训练和交叉验证集误差。要获得不同的训练集大小,您应该使用原始训练集X的不同子集。具体而言,对于大小为i的训练集,应使用前i个示例(即X ( 1 : i , : ) (1:i,:) 1:i,: y ( 1 : i ) ) y(1:i)) y1:i))
您可以使用trainLinearReg函数来查找θ参数。注意λ作为参数传递给learningCurve函数。在学习θ参数后,您应该计算训练集和交叉验证集上的误差。回想一下,数据集的训练错误定义为
image.png
特别要注意的是,训练误差不包括正则化项。计算训练误差的一种方法是使用现有的成本函数,并且仅当使用它来计算训练误差时才将λ设置为0以及交叉验证错误。当您计算训练集错误时,确保在训练子集上计算它(即 X ( 1 : n ,:) X(1:n,:) X1:n,:) y ( 1 : n ) y(1:n) y1:n)(而不是整个训练集)。但是对于交叉验证错误,您应该在整个交叉验证集上计算它。你应该储存矢量误差序列中的计算误差和误差值。
完成后,ex5.m将打印学习曲线并生成类似于图3的图。
image.png
在图3中,您可以观察到训练错误和交叉验证。当训练示例的数量增加时,误差是高的。这反映了模型中的一个高偏差问题{线性回归模型太简单,无法很好地拟合我们的数据集。在下一节中,您将实现多项式回归,为该数据集拟合更好的模型。

多项式回归

我们的线性模型的问题是,它对数据来说过于简单,导致拟合不足(高偏差)。在练习的这一部分中,您将通过添加更多功能来解决此问题。
对于使用多项式回归,我们的假设具有以下形式:
image.png
请注意,通过定义 x 1 = (水位) , x 2 = (水位 ) 2 , . . . . , x p = (水位 ) p x1=(水位),x2=(水位)^2,....,x_p=(水位)^p x1=(水位),x2=(水位2,....,xp=(水位p,我们得到了一个线性回归模型,其中特征是原始值(水位)的各种幂。
现在,您将使用数据集中现有特征x的更高幂添加更多特征。您在本部分中的任务是在中完成代码x使得函数将大小为m×1的原始训练集X映射为其更高的幂。具体来说,当一个大小为m×1的训练集X被传递到函数中时,函数应该返回一个m×p矩阵X_poly,其中第1列包含X的原始值,第2列包含X.2的值,第3列包含X.3的值,依此类推。注意,在这个函数中,你不必考虑零次方。
现在您有了一个函数,可以将特征映射到更高的维度,ex5.m的第6部分将其应用于训练集、测试集和交叉验证集(您尚未使用)。

学习多项式回归

完成polyFeatures.m后,ex5.m脚本将使用线性回归成本函数来训练多项式回归。
请记住,即使我们的特征向量中有多项式项,我们仍然在解决线性回归优化问题。多项式项已经简单地变成了我们可以用于线性回归的特征。我们使用的成本函数和梯度与您在本练习前面部分所写的相同。
对于练习的这一部分,您将使用一个8次多项式。事实证明,如果我们直接在投影数据上运行训练,将不会很好地工作,因为特征将被严重缩放(例如,x=40的示例现在将具有特征 x 8 = 4 0 8 = 6.5 × 1 0 12 x_8=40^8=6.5×10^{12} x8=408=6.5×1012)。因此,您将需要使用特征规范化。
在学习多项式回归的参数θ之前,ex5.m将首先调用featureNormalize并归一化训练集的特征,分别存储mu、sigma参数。我们已经为您实现了这个功能,它与第一个练习中的功能相同。
学习参数θ后,您应该看到为λ=0的多项式回归生成的两个图(图4,5)。
从图4中,您应该看到多项式拟合能够很好地跟踪数据点,从而获得较低的训练误差。然而,多项式拟合非常复杂,甚至在极端情况下会下降。这表明多项式回归模型过拟合训练数据,不会很好地推广。
为了更好地理解非正则化(λ=0)模型的问题,可以看到学习曲线(图5)显示了相同的效果,其中低训练误差较低,但交叉验证误差较高。训练误差和交叉验证误差之间存在差距,这表明存在高方差问题。image.png
image.png
解决过拟合(高方差)问题的一种方法是将正则化添加到模型中。在下一节中,您将尝试不同的λ参数,看看正则化如何产生更好的模型。

可选(未分级)练习:调整正则化参数

在本节中,您将观察正则化参数如何影响正则化多项式回归的偏差方差。现在,您应该修改ex5.m中的lambda参数,并尝试λ=1,100;对于这些值中的每一个,脚本应该生成数据的多项式拟合,以及学习曲线。
对于λ=1,您应该看到一个很好地遵循数据趋势的多项式拟合(图6)和一条学习曲线(图7),表明交叉验证和训练误差都收敛到一个相对较低的值。这表明λ=1正则化多项式回归模型不存在高偏差或高方差问题。实际上,它实现了偏差和方差之间的良好权衡。
对于λ=100,您应该看到多项式拟合(图8),它没有很好地遵循数据。在这种情况下,存在太多的正则化,并且模型无法拟合训练数据。
image.png
image.png
image.png

使用交叉验证集选择λ

在练习的前几部分中,您观察到λ的值会显著影响训练集和交叉验证集上正则化多项式回归的结果。特别地,没有正则化的模型(λ=0)很好地拟合训练集,但不能推广。相反,具有过多正则化(λ=100)的模型不能很好地拟合训练集和测试集。λ的良好选择(例如,λ=1)可以提供对数据的良好拟合。
在本节中,您将实现一种自动方法来选择λ参数。具体来说,您将使用交叉验证集来评估每个λ值的好坏。在使用交叉验证集中选择最佳λ值后,我们可以在测试集上评估模型,以估计模型在实际看不见的数据上的表现。
您的任务是完成validationCurve.m中的代码。具体而言,您应该使用trainLinearReg函数使用不同的λ值来训练模型,并计算训练误差和交叉验证误差。您应该在以下范围内尝试λ: { 0 , 0.001 , 0.003 , 0.01 , 0.03 , 0.1 , 0.3 , 1 , 3 , 10 } \{0,0.001,0.003,0.01,0.03,0.1,0.3,1,3,10\} {00.001,0.003,0.01,0.03,0.1,0.3,1,3,10}
image.png
完成代码后,ex5.m的下一部分将运行。您的函数可以绘制误差v.s。λ的交叉验证曲线允许您选择要使用的λ参数。您应该看到类似于图9的图。在这个图中,我们可以看到λ的最佳值在3左右。由于数据集的训练和验证拆分的随机性,交叉验证误差有时可能低于训练误差。

可选(未分级)练习:计算测试集错误

在练习的前一部分中,您实现了计算正则化参数λ的各种值的交叉验证误差的代码。然而,为了更好地指示模型在现实世界中的性能,重要的是在训练的任何部分都没有使用的测试集上评估“最终”模型(即,它既没有用于选择λ参数,也没有用于学习模型参数θ)。
对于这个可选(未分级)练习,您应该使用您找到的λ的最佳值来计算测试误差。在我们的交叉验证中,对于λ=3,我们获得了3.8599的测试误差。

可选(未分级)练习:用随机选择的示例绘制学习曲线

在实践中,尤其是对于小的训练集,当您绘制学习曲线来调试算法时,在多组随机选择的示例之间进行平均通常有助于确定训练误差和交叉验证误差。
具体来说,要确定i个示例的训练错误和交叉验证错误,您应该首先从训练集中随机选择i个示例,从交叉验证集中随机选择i个示例。然后,您将使用随机选择的训练集学习参数θ,并在随机选择的培训集和交叉验证集上评估参数θ。然后应多次重复上述步骤(例如50),并且应使用平均误差来确定i个示例的训练误差和交叉验证误差。
对于这个可选的(未分级的)练习,您应该执行上面的策略来计算学习曲线。作为参考,图10显示了我们在λ=0:01的多项式回归中获得的学习曲线。由于示例的随机选择,您的数字可能略有不同。
image.png

作业提交路径

总结

问题一

image.png
在模型选择那里讲到我们用训练集计算了特征参数,然后把特征参数放进损失函数,在测试集中寻找损失函数的最优值,有一个和上述箭头一样的疑问:为什么不在训练集中寻找模型呢?
:::info
通常情况下,超参数的选择是在交叉验证集上进行的,而不是在训练集上进行。
超参数是在机器学习算法中设置的参数,而不是由模型自动学习得到的。它们决定了模型的结构和学习过程,例如学习率、正则化参数、网络层数等。选择合适的超参数对于模型的性能和泛化能力至关重要。
在训练集上选择超参数容易导致过拟合。因为模型可以通过多次尝试不同的超参数来“记忆”训练集,从而得到过于乐观的性能评估。这样的模型在新数据上的表现可能会较差。
相反,通过在交叉验证集上进行超参数选择,可以更好地评估模型在未见过的数据上的性能。交叉验证集提供了一个独立的样本集,可以用于比较不同超参数设置下的模型性能。通过使用交叉验证集进行超参数调优,可以更好地选择最佳的超参数组合。
因此,常见的做法是将训练集分为训练集和交叉验证集两部分,用于模型的训练和超参数选择。最后,在选择好超参数后,使用测试集进行最终的性能评估。这样可以更准确地估计模型在实际应用中的性能。
:::

相关内容

Logo

分享最新、最前沿的AI大模型技术,吸纳国内前几批AI大模型开发者

更多推荐