[work] AI算法八股总结

 一、深度学习面试宝典

amusi/Deep-Learning-Interview-Book: 深度学习面试宝典(含数学、机器学习、深度学习、计算机视觉、自然语言处理和SLAM等方向) (github.com)icon-default.png?t=N7T8https://github.com/amusi/Deep-Learning-Interview-Book

深度学习八股icon-default.png?t=N7T8https://github.com/nxpeng9235/MachineLearningFAQ

1、逻辑回归(LR)

"对数几率回归"

知识点提炼

  • 分类,经典的二分类算法!
  • 逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏。
  • Logistic 回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)
  • 回归模型中,y 是一个定性变量,比如 y = 0 或 1,logistic 方法主要应用于研究某些事件发生的概率。
  • 逻辑回归的本质:极大似然估计
  • 逻辑回归的激活函数:Sigmoid
  • 逻辑回归的代价函数:交叉熵

逻辑回归的优缺点

优点:

1)速度快,适合二分类问题

2)简单易于理解,直接看到各个特征的权重

3)能容易地更新模型吸收新的数据

缺点:

对数据和场景的适应能力有局限性,不如决策树算法适应性那么强

逻辑回归中最核心的概念是 Sigmoid 函数,Sigmoid函数可以看成逻辑回归的激活函数。

Sigmoid

$y = \sigma (z) = \frac{1}{1+e^{-z}}$

  • Sigmoid函数的输出范围是 0 到 1。这是因为无论输入 x 的值多大或多小,函数的分母1 + e^{-x} 总是大于 1,因此值总是介于 0 和 1之间。
  • Sigmoid函数的导数非常重要,因为在训练神经网络时需要计算梯度。Sigmoid函数的导数是:
  • 优缺点

    • 优点:Sigmoid函数将输入值压缩到 000 和 111 之间,非常适合用于二分类问题的输出层。
    • 缺点:当输入值非常大或非常小时,函数的梯度会趋近于零,导致梯度消失问题。这使得深层神经网络的训练变得困难。

为什么 LR 要使用 sigmoid 函数

1. 将输出值限制在 [0, 1] 区间

逻辑回归的目标是进行二分类,即将输入分类到两个类别之一。Sigmoid 函数可以将任意实数输入转换为 [0, 1] 之间的概率值,这非常适合表示一个事件发生的概率。例如,输出 0.8 表示分类器认为某个输入属于类别 1 的概率是 80%。

2. 解释为概率

Sigmoid 函数的输出可以自然地解释为某个事件发生的概率,这使得逻辑回归模型的输出更加直观和易于理解。对于二分类问题,输出值接近 1 表示高概率属于正类,接近 0 表示高概率属于负类。

3. 导数的计算和梯度下降

Sigmoid 函数的导数有一个简洁的形式:

这种形式使得在计算梯度时非常方便,特别是使用梯度下降法来优化逻辑回归模型的参数时。导数的形式简化了计算过程,提高了训练效率。

4. 非线性变换

逻辑回归使用 Sigmoid 函数将线性模型的输出(即线性回归的结果)转换为非线性结果。这意味着逻辑回归能够处理一些线性不可分的数据,使得模型能够捕捉到更复杂的数据关系。

5. 理论基础

逻辑回归基于对数几率(log-odds)的概念。对于某个输入 xxx,逻辑回归模型计算线性组合 ,然后应用 Sigmoid 函数将其转换为概率:

这种基于对数几率的模型有坚实的统计学基础,使得逻辑回归模型在概率解释上有很强的理论支持。

6. 损失函数的凸性

逻辑回归通常使用交叉熵损失函数(log loss),这种损失函数在使用 Sigmoid 激活函数时具有良好的凸性。这意味着在优化过程中容易找到全局最优解,训练过程更稳定。

总结来说,逻辑回归使用 Sigmoid 函数是因为它可以将输出值限制在 [0, 1] 区间,方便解释为概率,简化导数计算,提供非线性变换,并且有坚实的理论基础和优化优势。

交叉熵损失函数

即对数损失函数。能够有效避免梯度消失.

二分类问题中的交叉熵损失

对于二分类问题,目标是预测一个样本属于正类(类1)的概率 ,给定实际标签 y(0 或 1)。交叉熵损失函数的公式如下:

直观理解:
  • 当实际标签 y为 1 时,损失函数主要关注。如果预测的概率 \hat{y}​ 越接近 1,损失越小;如果预测的概率\hat{y} 越接近 0,损失越大。
  • 当实际标签 y 为 0 时,损失函数主要关注\log(1 - \hat{y})。如果预测的概率 1 - \hat{y} 越接近 1,损失越小;如果预测的概率 1 - \hat{y}​ 越接近 0,损失越大。
多分类问题中的交叉熵损失

对于多分类问题(假设有 C 个类别),交叉熵损失的公式如下:

损失函数反向传播推导

摘自 线性回归和逻辑回归的比较_逻辑回归和线性回归相同点-CSDN博客

损失函数的由来

已知估计函数为:

由最大似然估计原理,我们可以通过m个训练样本值,来估计出值,使得似然函数值(所有样本的似然函数之积)最大

为什么 LR 用交叉熵损失而不是平方损失?

1. 概率解释和性质

  • 概率输出:逻辑回归的目标是预测概率值,表示某个事件发生的可能性。交叉熵损失函数直接衡量预测的概率分布和实际的分布之间的差异,这与逻辑回归的目标一致。平方损失函数通常用于回归问题,预测连续值,而不是概率。

2. 凸性和优化

  • 凸性:交叉熵损失函数对于逻辑回归是一个凸函数,这意味着它只有一个全局最优解,使用梯度下降等优化算法可以有效地找到最优解。而平方损失在逻辑回归中可能不是凸函数,可能会有多个局部最优解,使得优化过程不稳定。

3. 梯度的性质

  • 梯度的梯度消失问题:在逻辑回归中使用 Sigmoid 函数时,交叉熵损失函数的梯度与输入相关性更好。平方损失函数的梯度在 Sigmoid 函数输出接近 0 或 1 时会变得非常小,这会导致梯度消失问题,使得训练过程非常缓慢或无法收敛。

4. 损失函数的合适性

  • 针对分类问题的设计:交叉熵损失函数专门设计用于分类问题。它会对错误分类的预测进行更大的惩罚,特别是在预测概率与实际标签差距较大时,这有助于提高分类模型的性能。而平方损失函数对误差的处理是对称的,不区分分类错误的严重程度,因此不适合分类任务。

示例说明

假设我们有一个二分类问题,真实标签 y=1y = 1y=1,模型预测的概率 y^\hat{y}y^​ 分别为 0.9 和 0.1 时,使用交叉熵损失和平方损失的对比:

交叉熵损失:

平方损失:

逻辑回归使用交叉熵损失而不是平方损失,主要是因为交叉熵损失更适合概率输出的解释,更容易优化(凸性),可以避免梯度消失问题,并且对错误分类有更大的惩罚,从而提高分类模型的性能。

LR 能否解决非线性分类问题?

逻辑回归(Logistic Regression, LR)本质上是一个线性分类器,因此在处理复杂的非线性分类问题时,其能力是有限的。不过,通过一些扩展和技巧,可以增强逻辑回归的非线性分类能力。

1. 基本逻辑回归的局限性

基本的逻辑回归模型是线性的,它通过寻找一个线性决策边界来区分两个类别。如果数据集中的分类边界是非线性的,基本的逻辑回归模型可能无法很好地拟合数据,导致分类性能较差。

2. 增强逻辑回归非线性分类能力的方法

方法一:多项式特征(Polynomial Features)

通过增加输入特征的多项式项,可以将原始特征空间映射到更高维的空间,使得模型可以拟合非线性的决策边界。例如,对于二维输入特征 x1​ 和 x2​,可以扩展成以下多项式特征:

使用这些多项式特征进行逻辑回归,可以捕捉到数据中的非线性关系。

方法二:交互特征(Interaction Features)

交互特征是指两个或多个特征的组合,例如。这些特征可以帮助模型捕捉不同特征之间的交互作用,从而更好地处理非线性分类问题。

方法三:基函数扩展(Basis Function Expansion)

基函数扩展通过使用一些非线性函数(如高斯基函数、多项式基函数等)将原始特征映射到新的特征空间。例如,高斯基函数:

方法四:核方法(Kernel Trick)

核方法是支持向量机(SVM)中常用的一种技巧,但也可以应用于逻辑回归。核方法通过隐式地将输入特征映射到高维空间,而无需显式地计算这些高维特征。常见的核函数有线性核、径向基函数(RBF)核和多项式核。

虽然基本的逻辑回归模型是线性分类器,但通过扩展特征空间的方法,如多项式特征、交互特征、基函数扩展和核方法,可以增强逻辑回归处理非线性分类问题的能力。这些方法在实际应用中非常有效,使得逻辑回归不仅能处理线性分类问题,还能处理一定程度的非线性分类问题

2、线性回归

基本原理

线性回归的基本假设是,自变量和因变量之间存在线性关系,即因变量的期望值可以用自变量的线性组合来表示。这个关系通常用一个线性方程来表示:

线性回归的目标是找到最佳的参数估计值,使得模型的预测值与真实值之间的误差最小化。通常使用最小二乘法来估计参数,即通过最小化观测值与模型预测值之间的残差平方和来确定参数。

在线性回归模型中,输出一般是连续的, 对于每一个输入的x,都有一个对应的输出y。因此模型的定义域和值域都可以是无穷。

举例

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 数据
X = np.array([750, 800, 850, 900, 950]).reshape(-1, 1)
y = np.array([150, 180, 200, 220, 240])

# 创建线性回归模型并拟合数据
model = LinearRegression()
model.fit(X, y)

# 预测值
y_pred = model.predict(X)

# 绘图
plt.scatter(X, y, color='blue', label='实际数据')
plt.plot(X, y_pred, color='red', label='回归直线')
plt.xlabel('面积 (平方英尺)')
plt.ylabel('价格 (万美元)')
plt.title('房屋面积与价格的线性回归')
plt.legend()
plt.show()

与逻辑回归(LR)的区别

1. 目标变量的类型

  • 线性回归:用于预测连续型变量。也就是说,目标变量 yyy 是一个连续值,比如房价、温度等。
  • 逻辑回归:用于分类问题,特别是二分类问题。目标变量 yyy 是一个离散值,通常是0或1,表示两种类别。

2. 模型方程

  • 线性回归:模型方程是线性的,即

    其中 y 是预测的连续值。

  • 逻辑回归:模型方程是非线性的,通过逻辑函数(logistic function)将线性方程转化为概率,即

    这里,输出是一个概率值,表示样本属于类别1的概率。

3. 损失函数

  • 线性回归:最小化均方误差(MSE),即

  • 逻辑回归:最大化似然函数,通常转化为最小化对数损失(log loss),即

    其中,​ 是样本属于类别1的预测概率。

4. 预测输出

  • 线性回归:直接预测一个连续值。
  • 逻辑回归:预测的是类别的概率值,通过设定一个阈值(通常是0.5)将概率值转化为分类标签。

3、支持向量机(SVM)

基本原理

1. 线性可分性

SVM的目标是找到一个最优超平面将数据分开,尽可能使不同类别的样本点分离。对于二维数据,这个超平面就是一条直线,而对于三维数据,则是一个平面。对于更高维的数据,则是一个超平面。

2. 最大化间隔

SVM通过最大化超平面与各类别样本点之间的最小间隔来找到最优超平面。这个间隔被称为“边界”或“间隔”。最大化间隔可以提高分类器的泛化能力,减少过拟合的风险。

3. 支持向量

在找到的最优超平面上,只有一小部分数据点对确定超平面起关键作用,这些数据点称为“支持向量”。支持向量是离超平面最近的样本点,它们直接影响间隔的大小。

4. 非线性可分性

对于非线性可分的数据,SVM使用核函数(kernel function)将原始数据映射到高维空间,在高维空间中找到一个线性可分的超平面。常用的核函数有线性核、多项式核、高斯径向基核(RBF)等。

5. 损失函数和正则化

SVM通过优化以下目标函数来找到最优超平面:

其中,\|w\|是权重向量的范数,用于最大化间隔;C 是正则化参数,用于控制间隔最大化与误分类惩罚之间的平衡;\xi_i是松弛变量,允许部分样本点在间隔内,但要付出惩罚。

SVM分类器的数学表示

对于一个输入向量 xxx,SVM分类器的决策函数为:

其中,w 是权重向量,b 是偏置项,sign 函数用来确定 x 所属的类别。

当训练数据线性可分时,通过硬间隔最大化(hard margin maximization)学习一个线性的分类器,即线性可分支持向量机,又成为硬间隔支持向量机;

当训练数据近似线性可分时,通过软间隔最大化(soft margin maximization)也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机;

当训练数据不可分时,通过核技巧(kernel trick)及软间隔最大化,学习非线性支持向量机。

核方法的原理

  1. 数据映射到高维空间: 核方法通过一个非线性映射函数 将原始数据从低维空间映射到高维空间:

    在高维空间中,数据可能变得线性可分。

  2. 核函数的定义: 核函数 定义为在高维空间中映射后的内积:

    直接计算 的映射和内积可能非常复杂且计算量大。核函数的引入避免了显式计算高维映射,直接在低维空间计算内积。

  3. 常用的核函数

    1. 线性核

      适用于线性可分的数据。

    2. 多项式核

      其中 c 是一个常数,d 是多项式的度数。

    3. 高斯径向基函数(RBF)核

      其中 σ 是核函数的带宽参数。RBF核是最常用的核函数之一,适用于大多数非线性情况。

    4. Sigmoid核

      其中 α 和 c 是常数。

核方法在SVM中的应用

在SVM中,使用核方法的目标是最大化间隔,同时最小化误分类。优化问题可以表示为:

目标函数的两个部分

  1. :这个部分是我们原来的目标,用来最大化间隔。这部分确保了我们的分类器具有良好的泛化能力。在支持向量机中,我们希望找到一个能最大化两个类别之间间隔的超平面。间隔定义为超平面到最近数据点的距离。在数学上,间隔可以表示为 。通过最小化 ,我们实际上是在最大化间隔。因为 \|w\| 越小,间隔越大。这样可以使分类器具有更好的泛化能力。

上述方程即给出了SVM最优化问题的约束条件。

支持向量上的样本点:

  1. :这部分是惩罚项,用来控制松弛变量的总和。松弛变量 表示第 i 个样本违反间隔的程度。C 是一个正则化参数,用来平衡间隔最大化和误分类样本之间的关系。

    • 如果 C 很大,模型会更加关注减少误分类,但可能会过拟合训练数据。
    • 如果 C 很小,模型会更关注最大化间隔,但可能会欠拟合。

其中,约束条件是:

引入对偶问题

为了解决这个优化问题,我们引入拉格朗日乘子并构建拉格朗日函数:

对 w 和 b 求偏导数并令其为零:

得到对偶问题:

约束条件:

对于非线性可分的数据,我们引入核函数 K(xi,xj)来计算高维空间中的内积,对偶问题变为:

通过序列最小优化(SMO)算法能得到α,再根据α,我们就可以求解出w和b,进而求得我们最初的目的:找到超平面,即"决策平面"。首先,权重向量 w 可以表示为

偏置 b 可以通过支持向量求得。对于任何一个支持向量 xk​:

我们可以通过求解这个方程来得到 b。通常通过取所有支持向量的平均值来计算 b:其中 S 是支持向量的集合

由于 w 可以用支持向量表示,决策函数可以写成:

更详细推导参考:机器学习实战教程(八):支持向量机原理篇之手撕线性SVM (cuijiahua.com)

为什么要将求解SVM的原始问题转换为其对偶问题?

  1. 对偶问题往往更易求解(当我们寻找约束存在时的最优点的时候,约束的存在虽然减小了需要搜寻的范围,但是却使问题变得更加复杂。为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点。)
  2. 自然引入核函数,进而推广到非线性分类问题

为什么SVM要引入核函数?

当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分

SVM中硬间隔和软间隔

硬间隔分类即线性可分支持向量机,软间隔分类即线性不可分支持向量机,利用软间隔分类时是因为存在一些训练集样本不满足函数间隔(泛函间隔)大于等于1的条件,于是加入一个非负的参数 ζ (松弛变量),让得出的函数间隔加上 ζ 满足条件。

SVM如何处理多分类问题?

支持向量机(SVM)最初是为二分类问题设计的,但它也可以扩展到多分类问题。主要有两种常见的方法来处理多分类问题:一对一(one-vs-one)和一对多(one-vs-rest)。

一对一(One-vs-One)

在一对一方法中,对于一个有 K 个类别的问题,构建 K(K−1)/2个分类器,每个分类器用于区分两个类别。每个分类器都只在两个类别的数据上进行训练。

步骤:
  1. 训练分类器:对每一对类别 (i,j) 训练一个 SVM 分类器
  2. 分类:对于一个新的输入样本,让每个分类器进行预测,并记录投票
  3. 投票:统计每个类别获得的投票数,选择投票最多的类别作为最终分类结果。
优点:
  • 每个分类器只需要处理两类数据,因此相对简单。
  • 训练时间和内存消耗相对较低。
缺点:
  • 需要训练大量的分类器。
  • 需要对每个分类器的输出进行投票统计,预测时间可能较长。

一对多(One-vs-Rest)

在一对多方法中,对于一个有 K 个类别的问题,构建 K 个分类器,每个分类器用于区分一个类别和其他所有类别。

步骤:
  1. 训练分类器:对每个类别 iii,训练一个 SVM 分类器 Ci,将该类别的数据作为正类,其他类别的数据作为负类。
  2. 分类:对于一个新的输入样本,让每个分类器进行预测,并得到每个分类器的得分。
  3. 选择最大得分:选择得分最高的分类器对应的类别作为最终分类结果。
优点:
  • 只需要训练 K 个分类器,相对简单。
  • 每个分类器处理的数据量较大,模型可能更稳定。
缺点:
  • 类别不平衡时,可能会影响分类器的性能。
  • 每个分类器需要处理多类数据,训练时间和内存消耗较大。

高斯径向基核函数(Gaussian Radial Basis Function, RBF)

定义

高斯RBF核函数的数学形式为:

其中:

  • xi​ 和 xj是输入样本的特征向量。
  • ∥xi−xj∥ 表示 xi 和 xj 之间的欧氏距离。
  • σ 是一个参数,称为带宽参数,控制核函数的“宽度”。
性质
  • 非线性映射: RBF核函数通过非线性方式将输入样本映射到高维空间,在这个高维空间中,原本非线性可分的数据可能变得线性可分。

  • 局部性: RBF核函数的值取决于输入样本之间的距离。当两个样本距离较近时,RBF核函数值接近1;当两个样本距离较远时,RBF核函数值接近0。这种特性使得RBF核函数对局部模式更加敏感。

  • 参数选择: 参数 σ 的选择非常重要。如果 σ 值过大,核函数会变得过于平滑,无法捕捉数据的细节结构;如果 σ 值过小,核函数会变得过于敏感,可能导致过拟合

应用

高斯RBF核函数广泛应用于SVM分类器中,特别是在以下场景中:

  1. 非线性分类: RBF核函数可以处理复杂的非线性分类问题,通过将数据映射到高维空间,使得线性分类器在高维空间中能够有效工作。

  2. 缺少领域知识: 当对数据的分布和模式缺乏先验知识时,RBF核函数是一种默认且可靠的选择,因为它具有良好的适应性。

支持向量中的向量是指什么?

支持向量是指在支持向量机(SVM)算法中,靠近分类决策边界的数据点。这些点决定了决策边界的位置和方向。通过这些支持向量,SVM能够找到最优的分隔超平面,从而最大化两个类之间的间隔。这些点对分类结果有很大的影响,其他的点不会影响决策边界的选择

LR 与 SVM的区别

损失函数(loss function)不同

lr的损失函数是 cross entropy loss, adaboost的损失函数是 expotional loss ,svm是hinge loss,常见的回归模型通常用 均方误差 loss。

Hinge Loss 的定义

对于一个训练样本 ((x_i, y_i)),其中(x_i)是输入特征向量,(y_i)是标签(通常是 +1 或 -1),hinge loss 定义如下:

L(y_i, f(x_i)) = \max(0, 1 - y_i \cdot f(x_i))

其中( f(x_i) )是模型的预测结果,通常为:

f(x_i) = w \cdot x_i + b

Hinge Loss 的含义

    •    当预测正确且有足够的安全边界时(即 ( y_i \cdot f(x_i) \geq 1)),hinge loss 为 0。这意味着模型对该样本的分类是正确且信心足够高。
    •    当预测不正确或没有足够的安全边界时(即 (y_i \cdot f(x_i) < 1 )),hinge loss 会随着预测错误的程度而增加。这种情况下,hinge loss 会产生一个正值,表示模型需要调整以更好地分类这个样本。

数学表达和优化问题

在 SVM 的优化问题中,我们希望最小化以下目标函数:

\frac{1}{2} ||w||^2 + C \sum_{i=1}^{n} \max(0, 1 - y_i \cdot (w \cdot x_i + b))

    •   \frac{1}{2} ||w||^2 是正则化项,用于避免过拟合。
    •     C  是一个超参数,用于平衡正则化项和 hinge loss 之和。

为什么使用 Hinge Loss

    1.    最大化间隔:Hinge loss 鼓励模型不仅正确分类样本,还要使得样本离决策边界尽可能远,从而实现最大化间隔。
    2.    稀疏性:Hinge loss 使得只有靠近决策边界的支持向量对模型的参数更新有影响,这种特性有助于提高模型的效率和泛化能力。

支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用)

影响SVM决策面的样本点只有少数的结构支持向量,当在支持向量外添加或减少任何样本点对分类决策面没有任何影响;而在LR中,每个样本点都会影响决策面的结果。

线性SVM不直接依赖于数据分布,分类平面不受一类点影响;LR则受所有数据点的影响,如果数据不同类别strongly unbalance,一般需要先对数据做balancing

在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法。

这个问题理解起来非常简单。分类模型的结果就是计算决策面,模型训练的过程就是决策面的计算过程。通过上面的第二点不同点可以了解,在计算决策面时,SVM算法里只有少数几个代表支持向量的样本参与了计算,也就是只有少数几个样本需要参与核计算(即kernal machine解的系数是稀疏的)。然而,LR算法里,每个样本点都必须参与决策面的计算过程,也就是说,假设我们在LR里也运用核函数的原理,那么每个样本点都必须参与核计算,这带来的计算复杂度是相当高的。所以,在具体应用时,LR很少运用核函数机制。

线性SVM依赖数据表达的距离测度,所以需要对数据先做normalization,LR不受其影响

    1.    距离测度的依赖:线性 SVM 通过找到最大化两类样本之间间隔的超平面来进行分类。这个过程依赖于样本点之间的距离测度(例如欧氏距离)。
    2.    归一化的重要性:如果不同特征的量纲差异很大(例如一个特征的值在 1 到 10 之间,另一个特征的值在 1000 到 10000 之间),这种差异会导致某些特征在计算距离时对结果的影响过大,从而影响 SVM 的性能。归一化可以将所有特征缩放到相同的范围,常见的方法有 min-max 归一化和 z-score 归一化。
    3.    归一化方法:
    •    Min-Max 归一化:将数据缩放到 [0, 1] 的范围:

x{\prime} = \frac{x - \min(x)}{\max(x) - \min(x)}

    •    Z-score 归一化:将数据转化为均值为 0,标准差为 1 的标准正态分布:

x{\prime} = \frac{x - \mu}{\sigma}

逻辑回归和数据尺度

    1.    线性模型的特点:逻辑回归也是一种线性模型,它的目标是通过拟合一个逻辑函数(Sigmoid 函数)来预测二分类的概率。
    2.    梯度下降的影响:逻辑回归的损失函数通过梯度下降优化。在梯度下降中,虽然特征的尺度会影响收敛速度,但不会影响模型的最终系数的比值关系。因此,逻辑回归对特征的尺度不太敏感。
    3.    标准化的优势:虽然逻辑回归在理论上对不同特征的尺度不敏感,但在实际应用中,对特征进行标准化可以加快梯度下降的收敛速度,并提高模型的稳定性和性能。

特征尺度对梯度下降的影响

1. 梯度下降的基本原理

梯度下降是一种优化算法,用于最小化目标函数。更新规则通常为:

 \theta := \theta - \alpha \nabla J(\theta)

其中:

    •     \theta  是模型参数。
    •     \alpha  是学习率。
    •     \nabla J(\theta)是目标函数  J(\theta) 关于  \theta  的梯度。

2. 特征尺度对梯度的影响

    •    梯度的计算:梯度下降算法计算每个特征的梯度。如果特征的尺度差异很大,那么特征对应的梯度值也会有较大差异
    •    步长不均衡:由于学习率  \alpha  是相同的,如果特征的尺度不同,那么每一步更新的步长会受到特征尺度的影响。较大尺度的特征会导致较大的梯度,更新步长过大,可能导致跳过最优解;较小尺度的特征会导致较小的梯度,更新步长过小,收敛速度慢。

3. 特征尺度对收敛速度的具体影响

    •    不均衡收敛:不同尺度的特征会导致参数更新速度不均衡,使得某些参数更新过快,另一些更新过慢,整体收敛过程变得不稳定
    •    等高线图的形状:如果特征尺度不均衡,目标函数的等高线图会变成椭圆形,长轴和短轴的比例差异很大。梯度下降路径会像“之”字形,在长轴方向反复振荡,收敛速度慢。而如果特征经过归一化处理,等高线图会更接近圆形,梯度下降路径更直,收敛速度更快。

这里是两个图示,它们展示了特征尺度如何影响梯度下降的收敛路径:

未归一化时(左图):
   - 等高线图呈椭圆形,长轴和短轴的比例差异很大。
   - 梯度下降路径像“之”字形,在长轴方向反复振荡,收敛速度慢。

归一化后(右图):
   - 等高线图更接近圆形。
   - 梯度下降路径更直,更快地收敛到最优解。

这些图示直观地展示了特征归一化的重要性,可以显著加快梯度下降的收敛速度

4. 归一化和标准化的优势

    •    归一化:将特征缩放到相同的范围(如 [0, 1] 或 [-1, 1]),可以使各个特征对梯度的贡献相同,更新步长均衡,加速收敛。

x{\prime} = \frac{x - \min(x)}{\max(x) - \min(x)}

适用情况:

            •    特征范围差异大:如果特征的取值范围差异较大,归一化可以将它们缩放到相同范围,使其对模型的贡献均衡。
            •    距离度量敏感的算法:如 K-近邻(KNN)、支持向量机(SVM)和神经网络等,这些算法依赖于特征之间的距离,因此需要对特征进行归一化处理

    •    标准化:将特征转化为均值为 0,标准差为 1 的标准正态分布,可以减少特征之间的尺度差异,同样有助于加快收敛。

x{\prime} = \frac{x - \mu}{\sigma}

适用情况:

    •    特征服从正态分布:如果特征大致服从正态分布,标准化可以更好地处理这些特征。
    •    线性模型和逻辑回归:如线性回归、逻辑回归和线性判别分析(LDA),这些算法对特征的尺度不敏感,但标准化可以提高其收敛速度和稳定性。

SVM的损失函数就自带正则

这就是为什么SVM是结构风险最小化算法的原因,意思就是在训练误差和模型复杂度之间寻求平衡,防止过拟合,从而达到真实误差的最小化。达到结构风险最小化的目的,最常用的方法就是添加正则项

如何理解结构化风险最小

1. 经验风险与结构化风险

    •    经验风险(Empirical Risk):是模型在训练集上的错误率或损失。在机器学习中,通常希望最小化经验风险,但单纯追求经验风险最小化可能导致过拟合,即模型在训练集上表现很好,但在测试集上表现较差。
    •    结构化风险(Structural Risk):在经验风险的基础上,加入了对模型复杂度的惩罚项。目标是同时最小化经验风险和模型复杂度,从而提高模型的泛化能力。

2. SVM 的结构化风险最小化

SVM 通过优化一个目标函数来实现结构化风险最小化:

\min_{w, b} \frac{1}{2} ||w||^2 + C \sum_{i=1}^{n} \max(0, 1 - y_i (w \cdot x_i + b))

其中:

    •   \frac{1}{2} ||w||^2 是模型复杂度的度量,用于控制模型的复杂度,防止过拟合。
    •     C  是一个超参数,用于平衡经验风险和模型复杂度。
    •   \sum_{i=1}^{n} \max(0, 1 - y_i (w \cdot x_i + b))  是经验风险的度量,即 hinge loss。

3. 正则化项的作用

    •    正则化项:\frac{1}{2} ||w||^2是模型复杂度的度量,用于控制超平面的复杂度,使其尽可能简单、平滑。通过控制正则化项的大小,可以避免模型过于复杂而导致的过拟合问题。
    •    超参数 (C):控制经验风险和结构化风险之间的权衡。较大的 (C) 值会使模型更关注经验风险,可能导致过拟合;较小的 (C) 值会使模型更关注模型复杂度,可能导致欠拟合。通过选择合适的 (C) 值,可以找到经验风险和模型复杂度之间的最佳平衡

4. 凸优化问题

SVM 的目标函数是一个凸优化问题,具有唯一的全局最优解。这个优化问题的求解保证了在训练集上风险最小化的同时,控制模型复杂度,从而实现结构化风险最小化。

5. 泛化能力

通过结构化风险最小化,SVM 在训练过程中不仅关注训练集的表现,还通过正则化项控制模型的复杂度。这使得 SVM 能够更好地泛化到未见过的测试数据上,提高模型的泛化能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/672929.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatTTS:开源最强文本转真人语音工具

目录 1.前言 2.详细介绍 2.1 什么是ChatTTS 2.2 项目地址: 2.3 应用特点: 3.如何安装和使用 3.1.谷歌colab 3.1.1.点击链接 3.1.2 进行保存 3.1.3 按照流程依次点击运行 3.1.4 填写自己需要转的文字 3.2 本地运行 3.2.1 下载或克隆项目源码到本地 3.2.2 …

JAVA多线程与IO流知识总结

文章目录 IO流体系字节流FileOutputStreamFileInputStreamtry-catch处理 字符流FileReaderFIleWriter原理分析 使用场景字节缓冲流BufferedInputStreamBufferedOutputStream 字符缓冲流BufferedReaderBufferedWriter 转换流InputStreamReaderOutputStreamWriter 序列化流Object…

SQL刷题笔记day8——SQL进阶——表与索引操作

目录 1 创建一张新表 2 修改表 3 删除表 4 创建索引 5 删除索引 1 创建一张新表 我的答案 create table if not exists user_info_vip (id int(11) primary key auto_increment Comment自增ID, # 有了主键就不用写not nul了 uid int(11) unique not null Comment用户ID, …

MMPose-RTMO推理详解及部署实现(下)

目录 前言一、RTMO推理(Python)1. RTMO预测2. RTMO预处理3. RTMO后处理4. RTMO推理 二、RTMO推理(C)1. ONNX导出2. RTMO预处理3. RTMO后处理4. RTMO推理 三、RTMO部署1. 源码下载2. 环境配置2.1 配置CMakeLists.txt2.2 配置Makefile 3. ONNX导出4. engine生成5. 源码修改6. 运行…

Git 恢复已删除的branch

六一节晚上改了点code, 做完之后commit, 然后误删了这个branch, 并且新建了branch. 那么怎样恢复已删除的branch呢&#xff1f; 网上查询一番&#xff0c;找到了答案&#xff1a; 1. git reflog 找到被删的branch中最后一笔commit, 记录它的SHA1。 怎么看SHA1是被删除的bra…

Mac修改Mysql8.0密码

转载请标明出处&#xff1a;http://blog.csdn.net/donkor_/article/details/139392605 文章目录 前言修改密码Step1:修改my.conf文件Step2:添加配置skip-grant-tablesStep3:重启mysql服务Step4:进入mysqlStep5:刷新权限Step6:修改密码Step7:再次刷新权限Step8:删除/注释 skip-…

本地安装AI大模型

使用ollmam安装llmama3等模型 1.打开ollmam下载对应系统的软件&#xff0c;安装即可 官网&#xff1a;Ollama&#xff0c; 安装直接点就就行了&#xff0c;没有其他操作 2.安装模型 在官网找到对于的模型下载命令 记录命令:ollama run llama3 打开一个cmd窗口&#xff0c;输…

opencv-python(三)

马赛克 face img[162:428,297:527] # 人脸坐标区域face face[::10,::10] # 每10个中取出一个像素&#xff0c;马赛克face np.repeat(face, 10, axis0) # 行方向重复10次face np.repeat(face, 10, axis1) # 列方向重复10次img[162:428,297:527] face[:266,:230] # 填充&a…

54. 螺旋矩阵【rust题解】

题目 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 示例 1 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2 输入&#xff1a;matrix [[1,2,3,4],[5,6,…

贴片和直插型IRM红外遥控接收头引脚定义和规格参数及使用注意事项

红外遥控接收头使用注意事项 引脚定义存在不同 红外遥控接收头大量使用在家用电器的遥控中&#xff0c;属于价廉物美的一种光电接收器件&#xff0c;批量价格约0.3元左右。 多数遥控接收头的引脚定义是OUT,GND,VCC&#xff0c;另有引脚定义不同为OUT,VCC,GND&#xff0c;记住…

基于STM32的水库预警系统的Proteus仿真

文章目录 一、水库预警系统1.题目要求2.思路2.1 OLED显示汉字2.2 水质传感器等等2.3 步进电机2.4 驱动水泵 3.仿真图3.1 未仿真时3.2 开始仿真&#xff0c;OLED开始显示3.3 提高水位&#xff0c;开启阀门和预警3.4 通过按键增大水位阈值&#xff0c;取消报警 4.仿真程序4.1 程序…

车联网安全入门——ICSim模拟器使用

文章目录 车联网安全入门——ISCim模拟器使用介绍主要特点&#xff1a;使用场景&#xff1a; 安装使用捕获can流量candumpcansnifferwiresharkSavvyCAN主要特点&#xff1a;使用场景&#xff1a; 重放can报文cansendSavvyCAN 总结 车联网安全入门——ISCim模拟器使用 &#x1…

前端表单校验完成之后,点击确认功能无反应FormInstance, FormRules

**产生原因&#xff1a;可能是在el-form 中添加的ref 前面加了“&#xff1a;”&#xff0c;也可能是ref中的值写错了** FormInstance, FormRules

Unity + 雷达 粒子互动(待更新)

效果预览: 花海(带移动方向) VFX 实例 脚本示例 使用TouchScript,计算玩家是否移动,且计算移动方向 using System.Collections; using System.Collections.Generic; using TouchScript; using TouchScript.Pointers; using UnityEngine; using UnityEngine.VFX;public …

装饰器,状态管理和if判断(HarmonyOS学习第六课)

Builder装饰器-自定义构建函数 前面介绍了如何创建一个自定义组件。该自定义组件内部UI结构固定&#xff0c;仅与使方法进行数据传递。ArkUI还提供了一种更轻量的UI 元素复用机制Builder&#xff0c;Builder 所装饰的函数遵循build( )函数语法规则&#xff0c;开发者可以将重…

网页安全登陆的设计思路

对于Web网站来讲,不管是企业内容信息化系统,还是公共站点(博客、音视频站等),都有需要用户注册和登录的功能。用以识别用户、信息交互、信息隔离以及商业行为等场景。用户数据已成为网站的重要资产。保护用户信息(数据)是网站安全运行的关键任务。本文以用户安全登录的场…

AI产品导航站

1、AI产品导航站 (chat2ai.cn)

自然语言处理(NLP)—— 神经网络语言处理

1. 总体原则 1.1 深度神经网络&#xff08;Deep Neural Network&#xff09;的训练过程 下图展示了自然语言处理&#xff08;NLP&#xff09;领域内使用的深度神经网络&#xff08;Deep Neural Network&#xff09;的训练过程的简化图。 在神经网络的NLP领域&#xff1a; 语料…

mybatis异常:Invalid bound statement (not found): com.lm.mapper.ArticleMapper.list

现象&#xff1a; 原因&#xff1a; 无效绑定&#xff0c;应该是mybatis最常见的一个异常了&#xff0c;接口与XML文件没绑定。首先&#xff0c;mapper接口并没有实现类&#xff0c;所以框架会通过JDK动态代理代理模式获取接口的代理实现类&#xff0c;进而根据接口全限定类名…

高清矩阵是什么?

在数学中&#xff0c;矩阵是一个按照长方阵列排列的复数或实数集合&#xff0c;最早来自于方程组的系数及常数所构成的方阵。如图为m行n列的矩阵&#xff1a; 由此延伸可以想到矩阵图片是把一个三维空间分切成多个行和列的区域进行图像捕获&#xff0c;将捕获图像再进行拼合成为…