《人工智能的基础数学》读书笔记16:第三章拟合数据的函数(6)

《人工智能的基础数学》读书笔记16:

第三章拟合数据的函数(6)

养成好习惯

你想养成一个好习惯,跟踪有多少未知的ω’s, 最终出现在你的训练函数公式中。回想一下,这些是我们通过最小化损失函数找到的ω’s。另一个好习惯是有一个有效和一致的方法在你的模型中组织它们(在向量、矩阵等中)。在 softmax 的情况下,当我们有 k 个类,每个数据点有 n 个特征时,我们最终得到k×nω’s 的线性组合,然后是 k×n+k 个偏差,总共是未知ω’s。例如,如果我们使用 softmax 回归模型对手写数字的 MNIST 数据集中的图像进行分类,每张图像都有 28×28 像素,这意味着 784 个特征,我们想把它们分成 10 类,所以我们最终不得不针对 7850ω 进行优化。对于线性和逻辑回归模型,我们只有未知需要优化。

接下来,我们将这 k 个结果中的每一个传递给 softmax 函数,它将逻辑函数从两个类推广到多个类,我们也将其解释为概率。softmax 函数的公式如下所示:

这样,同一个数据点将得到 k 个概率分数,每个类对应一个分数。最后,我们将数据点分类为属于它获得最大概率分数的类。

将上述所有内容汇总,我们得到了现在可以用于分类的训练函数的最终公式(也就是说,在我们通过最小化适当的损失函数找到最佳 ω 值之后):使得

是最大的。

请注意,对于这个训练函数,我们所要做的就是输入数据特征(x 值),它返回一个类号:j

Logistic 和 Softmax 函数和统计力学

如果您熟悉统计力学,您可能已经注意到逻辑函数和 softmax 函数计算概率的方式与统计力学领域的配分函数计算在某种状态下找到系统的概率相同。

损失函数

我们在逻辑回归的情况下推导了交叉熵损失函数:

使用了:

现在我们将相同的逻辑推广到多个类。让我们使用符号某个数据点是否属于第i类,否则为零。然后我们有与错误分类某个数据点相关的成本

平均训练集中的所有m个数据点,我们得到广义交叉熵损失函数,将其从只有两个类的情况推广到多个类的情况:

优化

现在我们有了损失函数的公式,我们可以搜索它的最小化ω’s。与我们将遇到的大多数损失函数一样,就训练集及其目标标签,所以我们满足于用数值方法找到最小化器,标准的:梯度下降、随机梯度下降或小批量梯度下降(见第4章)。同样,广义交叉熵损失函数的凸性在最小化过程中对我们有利,因此我们保证能找到我们广受欢迎的ω’s。

交叉熵与信息论

交叉熵的概念是从信息论中借来的。我们将在本章后面讨论决策树时详细说明这一点。现在,记住以下数量,其中P是事件发生的概率:

当P较小时,这个量很大,因此,它量化了概率较小的事件的更大惊喜。

将这些模型整合到神经网络的最后一层

线性回归模型通过适当线性组合数据特征,然后添加偏差来进行预测。逻辑回归和softmax回归模型通过适当线性组合数据特征,添加偏差,然后将结果传递给概率评分函数来进行分类。在这些简单的模型中,数据的特征只是线性组合的,因此,这些模型在发现数据特征之间潜在重要的非线性相互作用方面很弱。神经网络模型将非线性激活函数纳入其训练函数,在多层上执行此操作,因此能够更好地检测非线性和更复杂的关系。神经网络的最后一层是其输出层。最后一层之前的层吐出一些高阶特征并将它们输入到最后一层。如果我们希望我们的网络将数据分类为多个类,那么我们可以将最后一层设为softmax层;如果我们希望它分类为两类,那么我们的最后一层可以是逻辑回归层;如果我们希望网络预测数值,那么我们可以将其最后一层设为回归层。我们将在第5章中看到这些示例。

其他流行的机器学习技术和技术集成

在回归和 Logistic 回归之后,重要的是要扩展到机器学习社区,并了解一些最流行的分类和回归任务技术背后的理念。支持向量机、决策树和随机森林非常强大且受欢迎,并且能够执行分类和回归任务。那么自然而然的问题是,我们何时使用特定的机器学习方法,包括线性回归和逻辑回归,以及后来的神经网络?我们如何知道使用哪种方法以及我们的结论和预测基于哪种方法?这些是机器学习模型的数学分析有帮助的问题类型。

由于每种方法的数学分析,包括它通常最适合的数据集类型,只有在最近增加对 AI、机器学习和数据科学研究的资源分配后才得到认真关注,因此目前的做法是在同一数据集上尝试每种方法,并使用效果最好的一种方法。也就是说,假设我们拥有尝试不同机器学习技术所需的计算和时间资源。更好的是,如果您确实有时间和资源来训练各种机器学习模型(并行计算在这里是完美的),那么最好使用集成方法。这些结合了不同机器学习模型的结果,无论是通过平均还是投票,具有讽刺意味的是,但在数学上是合理的,给出了比最佳个体表现者更好的结果,即使表现最好的人是表现不佳的人!

融合的一个示例是随机森林:它是决策树的融合。

当我们基于集成进行预测时,会出现 bagging(或 bootstrap 聚合)、粘贴、提升(例如 ADA 提升和梯度提升)、堆叠和随机补丁等行业术语。装袋和粘贴在训练集的不同随机子集上训练相同的机器学习模型。使用替换对训练集中的样本实例进行 baging ,以及从训练集中粘贴样本实例而不进行替换。随机补丁也从特征空间采样,一次在特征的随机子集上训练机器学习模型。当数据集具有很多很多特征时,例如图像(其中每个像素都是一个特征),这非常有用。Stacking 学习 ensemble 的预测机制,而不是简单的投票或平均。

支持向量机

支持向量机是一种极其流行的机器学习方法,能够使用线性(平面)和非线性(曲线)决策边界执行分类和回归任务。

在分类方面,该方法试图使用尽可能宽的边界来分离标记数据,从而产生一个最优的分离 “高速公路”,而不是一条细线。让我们在本章的训练函数、损失函数和优化的结构背景下,解释支持向量机如何对标记数据实例进行分类。

训练函数:我们再次将数据点的特征与未知权重线性组合,并添加偏差 。然后将结果通过符号函数。如果特征的线性组合加上偏差是正数,则返回 1(或分类为第一类),如果是负数,则返回 -1(或分类为另一类)。因此,训练函数的公式变为:

损失函数:我们必须设计一个损失函数来惩罚错误分类的点。对于逻辑回归,我们使用了交叉熵损失函数。对于支持向量机,我们的损失函数基于一个称为铰链损失函数:

让我们看看铰链损失函数如何惩罚分类错误。首先,回想一下

要么是 1 要么是 -1,这取决于数据点属于正类还是负类。

  1. 如果对于某个数据点, 是 1 ,但 ,
  2. 训练函数将错误分类并给出 ,铰链损失函数的值将是 ,这在目标是最小化时是一个高惩罚。
  3. 另一方面,如果 是 1 且 ,训练函数将正确分类并给出 。然而,铰链损失函数的设计方式是,如果 ,它仍然会惩罚我们,其值为 ,现在小于 1 但仍然大于 0。
  4. 只有当 是 1 且 (训练函数仍将正确分类此点并给出 )时,铰链损失函数值才为 0,因为它将是 0 和一个负数之间的最大值。
  5. 当 是 -1 时,同样的逻辑适用。铰链损失函数会对错误预测进行大量惩罚,而对于正确预测,如果它距离零分界线(大于 1 的边界)不够远,也会进行一点惩罚。只有当预测正确且点距离 0 分界线的距离大于 1 时,铰链损失函数才会返回 0。

注意,0 分界线的方程是

,边界边缘的方程是

边界边缘之间的距离很容易计算为

。因此,如果我们想要增加这个边界宽度,就必须减小

;因此,这个项必须与铰链损失函数一起进入损失函数,铰链损失函数惩罚错误分类的点和边界内的点。

现在,如果我们对训练集中的所有m个数据点求铰链损失的平均值,并加上 ,

我们就得到了支持向量机常用的损失函数公式:

优化

我们现在的目标是搜索使损失函数最小化的。让我们观察一下这个损失函数:

?它有两个术语:

。每当我们在一个最佳化问题中有多个术语时,它们很可能是相互竞争的术语,因为使第一项小而快乐的相同ω值可能会使第二项大而悲伤。因此,当我们搜索优化它们总和的时,这是两个术语之间的推拉游戏。

项一起出现的λ是模型超参数计的一个例子,我们可以在训练过程的验证阶段进行调整。请注意,控制λ的值有助于我们以这种方式控制边距的宽度:如果我们选择一个大λ值,优化器将忙于选择

非常低的,以补偿那个大λ,损失函数的第一项将得到较少的关注。但是请记住,较小的

意味着较大的边距!

术语也可以被认为是正则化术语,我们将在第4章讨论。

这个损失函数是凸的,在0以下有界,所以它的最小化问题还不算太糟糕:我们不必担心卡在局部最小值。第一项有奇点,但如前所述,我们可以在奇点定义它的次梯度,然后应用下降方法。

一些优化问题可以重新表述,而不是解决最初的原始问题,我们最终解决了它的对偶问题!通常,一个比另一个更容易解决。我们可以把对偶问题想象成生活在原始问题平行宇宙中的另一个最佳化问题。宇宙在优化器相遇。因此,解决一个问题会自动给出另一个问题的解决方案。当我们研究优化时,我们研究对偶性。特别感兴趣和巨大应用的是线性和二次优化,也称为线性和二次规划。我们目前面临的最小化问题:

是二次规划的一个例子,它有一个对偶问题公式,结果证明比原始问题更容易优化(尤其是当特征数量很高时):

受制于

的约束。当我们学习原始问题和对偶问题时,编写公式通常很简单,所以我们跳过推导,以免中断我们的流程。

二次规划是一个非常发达的领域,有许多软件包可以解决这个问题。一旦我们找到最大化,我们就可以找到使用

最小化原始问题的向量。一旦我们有了,我们就可以使用我们现在训练的函数对新的数据点进行分类:

如果您想避免二次规划,还有另一种非常快速的方法称为坐标下降,它可以解决对偶问题,并且非常适用于具有大量特征的大型数据集。

内核技巧

我们现在可以将相同的想法转换为非线性分类。让我们首先观察一下关于 Dual 问题的重要说明:数据点仅成对出现,更具体地说,仅出现在标量乘积中,即

。同样,它们仅在训练函数中显示为标量积。这个简单的观察带来了奇迹:

? 如果我们找到一个函数

作用于成对数据点,并且它恰好输出了数据点变换到某个 t 个高维空间的标量积,即

脚趾甚至不必知道实际转化为更高维度是什么),那么我们可以通过替换对偶问题公式中的标量积来解决更高维度的相同精确对偶问题使用

? 这里的直觉是,在较低维度上非线性可分的数据 ? 在较高维度中几乎总是线性可分的。因此,将所有数据点转换为更高的维度,然后分离。核技巧解决了更高维度的线性分类问题,而无需变换每个点。内核本身会评估已转换数据的点积,而不转换数据。很酷的东西。

内核函数的示例包括(请注意,转换 无处可见):

? 多项式内核:

? 高斯内核: