跳到主要内容

线性回归

线性回归是什么?

线性回归(Linear Regression)是统计学和机器学习中常用的一种回归分析方法,用于建立连续数值输出与一个或多个自变量之间的关系。线性回归假设因变量(输出)与自变量(输入)之间存在线性关系,通过拟合一条直线(在一维情况下)或超平面(在多维情况下)来描述这种关系。

线性回归的目标是找到最佳拟合线(或平面),使得该线性模型最能够解释观测数据点之间的关系。最常见的线性回归模型可以表示为:

y=β0+β1x1+β2x2++βpxp+ϵy = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_p x_p + \epsilon

在这个方程中:

  • yy 是因变量(输出)。
  • x1,x2,,xpx_1, x_2, \ldots, x_p 是自变量(输入)。
  • β0,β1,β2,,βp\beta_0, \beta_1, \beta_2, \ldots, \beta_p 是模型的参数,分别对应截距(intercept)和自变量的系数。
  • ϵ\epsilon 表示随机误差项,用于捕捉因变量中未被模型解释的随机变化。

线性回归的目标是通过估计参数 β0,β1,β2,,βp\beta_0, \beta_1, \beta_2, \ldots, \beta_p 来找到最佳拟合线,使得观测数据与模型的预测值之间的残差平方和最小化。这一过程通常使用最小二乘法(Least Squares Method)来实现。

线性回归有两种主要类型:

  1. 简单线性回归:当只有一个自变量时,称为简单线性回归。方程变为 y=β0+β1x+ϵy = \beta_0 + \beta_1 x + \epsilon,其中 xx 是单个自变量。
  2. 多元线性回归:当有多个自变量时,称为多元线性回归。方程包含多个自变量,形式如上述公式中的多维情况。

线性回归在许多领域中有广泛应用,包括经济学、社会科学、自然科学、工程学以及机器学习。它用于建立预测模型、分析变量之间的关系、识别影响因素、探索数据集等任务。虽然线性回归具有简单性和解释性的优点,但它也有一些假设,如线性关系的假设和误差项的正态分布假设,因此在某些情况下可能需要考虑更复杂的模型。

什么是回归分析

回归分析是统计学中研究两个或多个变量间关系的方法,特别是当我们考虑一个变量(因变量)随着另一个或多个变量(自变量或解释变量)的变化而变化时。回归分析可以帮助我们理解这种关系,预测未知的情况,或评估某种干预或策略可能的效果。

例子1: 假设你想知道学生的学习时间与其考试成绩之间的关系。在这里,学习时间是自变量,而考试成绩是因变量。通过回归分析,你可能会发现学习时间越长,考试成绩越好(当然,也有可能存在其他影响成绩的因素)。

例子2: 你想了解一个城市的空气质量(如PM2.5指数)与人们的呼吸道健康问题发病率之间的关系。在这里,PM2.5是自变量,而呼吸道健康问题的发病率是因变量。回归分析可以帮助确认这两者之间是否存在统计上的相关性。

例子3: 一个公司想知道广告支出和产品销售额之间的关系。广告支出是自变量,产品销售额是因变量。回归分析可以帮助公司预测,如果增加一定数量的广告支出,他们可以预期多少的销售增长。

为什么叫“回归”分析: “回归”的名字起源于一个历史上的研究。19世纪,Francis Galton(查尔斯·达尔文的表亲)在研究父子身高的关系时,发现高大的父亲往往会有相对较矮的儿子,而矮小的父亲则往往会有相对较高的儿子。换句话说,儿子的身高似乎“回归”(或者说趋向)于一个普遍的平均身高。Galton称这种现象为“回归”(regression)。后来,这个词被用来描述预测因变量的值基于自变量的值的整体过程。尽管现代回归分析远远超出了Galton的原始研究,但这个名字仍然被保留了下来。

线性回归的基本元素

线性回归是一个用于建立连续数值输出与一个或多个自变量之间线性关系的统计模型。它包括以下基本元素:

  1. 因变量(Dependent Variable):也称为响应变量,通常表示我们希望预测或解释的连续数值。在线性回归中,这是模型的输出。

  2. 自变量(Independent Variables):也称为解释变量或特征,它们是用来预测因变量的一个或多个输入变量。自变量可以是连续的、离散的,或者二进制的。

  3. 回归方程(Regression Equation):线性回归模型的核心是一个线性方程,用于描述因变量与自变量之间的关系。通常表示为:

    y=β0+β1x1+β2x2++βpxp+ϵy = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_p x_p + \epsilon

    • yy 是因变量。
    • x1,x2,,xpx_1, x_2, \ldots, x_p 是自变量。
    • β0,β1,β2,,βp\beta_0, \beta_1, \beta_2, \ldots, \beta_p 是模型的参数,分别对应截距(intercept)和自变量的系数。
    • ϵ\epsilon 表示误差项,用于捕捉因变量中未被模型解释的随机变化。
  4. 参数估计(Parameter Estimation):线性回归的目标是估计参数 β0,β1,β2,,βp\beta_0, \beta_1, \beta_2, \ldots, \beta_p,以找到最佳拟合线,使得观测数据与模型的预测值之间的残差平方和最小化。通常使用最小二乘法来估计参数。

  5. 拟合评估(Model Evaluation):一旦模型被训练和拟合,需要评估模型的性能。常见的评估指标包括均方误差(Mean Squared Error,MSE)、决定系数(Coefficient of Determination,R2R^2)、残差分析等。

  6. 预测(Prediction):线性回归模型可以用于对新的自变量数据进行预测,从而得到因变量的估计值。

示例

假设我们想建立一个线性回归模型来预测学生的考试成绩(因变量,yy)与他们每天学习的小时数(自变量,xx)之间的关系。我们收集了一组学生的数据,并拟合了以下线性回归方程:

考试成绩=β0+β1×学习小时数+ϵ\text{考试成绩} = \beta_0 + \beta_1 \times \text{学习小时数} + \epsilon

在这个方程中:

  • 考试成绩\text{考试成绩} 是因变量。
  • 学习小时数\text{学习小时数} 是自变量。
  • β0\beta_0 是截距,表示当学习小时数为零时的预测考试成绩。
  • β1\beta_1 是学习小时数的系数,表示每增加一小时学习时间对考试成绩的影响。
  • ϵ\epsilon 表示随机误差。

通过收集学生的学习小时数和考试成绩数据,并使用最小二乘法拟合模型,我们可以估计出 β0\beta_0β1\beta_1 的值,从而建立了一个线性回归模型。这个模型可以用于预测新学生的考试成绩,根据他们的学习小时数。

使用机器学习的术语介绍

当使用机器学习的术语来介绍线性回归时,我们可以将其描述如下:

  1. 任务:线性回归是一种监督学习任务,其中我们试图学习一个模型,以便根据输入特征来预测一个连续的目标变量(因变量)。

  2. 数据集:我们有一个包含多个示例的数据集,每个示例都有一个目标变量(因变量)的真实值和一组相关的特征(自变量)。

  3. 模型:线性回归模型可以表示为一个线性函数,其目标是最小化预测值与真实值之间的误差。模型可以表示为:

    y=β0+β1x1+β2x2++βpxp+ϵy = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_p x_p + \epsilon

    其中 β0,β1,β2,,βp\beta_0, \beta_1, \beta_2, \ldots, \beta_p 是模型的权重参数,x1,x2,,xpx_1, x_2, \ldots, x_p 是特征,yy 是目标变量,ϵ\epsilon 是误差项。

  4. 目标:我们的目标是通过训练模型来学习最佳的权重参数 β0,β1,β2,,βp\beta_0, \beta_1, \beta_2, \ldots, \beta_p,以使模型的预测尽可能接近真实值。这通常通过最小化损失函数(例如均方误差)来实现。

  5. 训练:使用训练数据集,我们通过迭代优化算法来估计模型参数,以便使模型的预测尽可能拟合训练数据中的真实值。

  6. 评估:一旦模型训练完成,我们需要使用评估数据集或交叉验证来评估模型的性能。常见的评估指标包括均方误差(MSE)、均方根误差(RMSE)、决定系数(R2R^2)等。

  7. 预测:在模型训练和评估之后,我们可以使用训练好的模型来进行新数据点的预测。给定一组特征值,模型可以生成目标变量的估计值。

示例

在机器学习术语中,考虑一个线性回归任务,我们想建立一个模型来预测房屋价格(目标变量,yy)基于房屋的大小(自变量,xx)。我们有一个包含多个房屋示例的数据集,每个示例包括房屋的大小和相应的价格。我们的线性回归模型可以表示为:

房屋价格=β0+β1×房屋大小+ϵ\text{房屋价格} = \beta_0 + \beta_1 \times \text{房屋大小} + \epsilon
  • 任务:回归任务,预测连续值。
  • 数据集:包含房屋大小和价格的数据集。
  • 模型:线性回归模型。
  • 目标:学习最佳的权重参数 β0\beta_0β1\beta_1
  • 训练:使用训练数据集来估计参数。
  • 评估:使用测试数据集来评估模型性能,例如计算均方误差。
  • 预测:使用训练好的模型来预测新房屋的价格。

这个示例使用了机器学习的术语来描述线性回归,强调了监督学习任务、模型、参数学习、评估和预测等关键概念。

线性模型

线性模型是一类机器学习模型,用于建模输入特征与输出之间的线性关系。在线性模型中,输出是通过将输入特征与一组权重相乘并加上偏置(截距)来进行预测的。线性模型的基本形式可以表示为:

输出=β0+β1特征1+β2特征2++βp特征p\text{输出} = \beta_0 + \beta_1 \cdot \text{特征}_1 + \beta_2 \cdot \text{特征}_2 + \ldots + \beta_p \cdot \text{特征}_p

其中:

  • 输出\text{输出} 表示模型的预测输出。
  • 特征1,特征2,,特征p\text{特征}_1, \text{特征}_2, \ldots, \text{特征}_p 是输入特征。
  • β0\beta_0 是截距(intercept)也称为偏置(bias)、偏移量(offset)。
  • β1,β2,,βp\beta_1, \beta_2, \ldots, \beta_p 是权重参数,表示每个特征对输出的影响程度。
提示

偏置是指当所有特征都取值为 0 时,预测值应该为多少。 即使现实中不会有任何房子的面积是 0 或房龄正好是 0 年,我们仍然需要偏置项。 如果没有偏置项,我们模型的表达能力将受到限制。

线性模型的目标是找到最佳的权重参数 β0,β1,β2,,βp\beta_0, \beta_1, \beta_2, \ldots, \beta_p,以最好地拟合训练数据并对新数据进行预测。通常,这些参数是通过最小化损失函数(例如均方误差)来估计的。最小二乘法是一种常用的方法,它寻找一组参数,使模型的预测值与训练数据中的真实值之间的残差平方和最小化。

下面以房屋价格预测为例来说明线性模型的应用:

房屋价格预测的线性模型

假设我们有一个数据集,其中包含房屋的特征(如房屋大小、卧室数量、浴室数量)以及相应的房屋价格。我们可以使用线性模型来建立一个房屋价格的预测模型。模型的表达式如下:

房屋价格=β0+β1房屋大小+β2卧室数量+β3浴室数量++ϵ\text{房屋价格} = \beta_0 + \beta_1 \cdot \text{房屋大小} + \beta_2 \cdot \text{卧室数量} + \beta_3 \cdot \text{浴室数量} + \ldots + \epsilon

在这个线性模型中,β0\beta_0 是截距,β1,β2,β3,\beta_1, \beta_2, \beta_3, \ldots 是权重参数,分别对应于特征(房屋大小、卧室数量、浴室数量等),ϵ\epsilon 是误差项。

通过使用训练数据集,我们可以估计模型的参数 β0,β1,β2,β3,\beta_0, \beta_1, \beta_2, \beta_3, \ldots,使模型最好地拟合训练数据。一旦模型训练完成,我们可以使用它来对新房屋的价格进行预测。模型的预测能力将依赖于参数估计的质量以及模型的特征选择。

线性模型是一个简单而强大的工具,适用于许多预测和回归任务。它具有直观性,容易解释,但也有一些限制,因为它假设输出与特征之间的关系是线性的,这在某些复杂问题上可能不适用。对于非线性问题,可以考虑使用其他类型的模型,如多项式回归或非线性回归模型。

使用点积来表示线性模型

线性模型可以用点积形式来简洁地表示。在点积形式中,模型的输出是输入特征向量与权重向量的点积,再加上截距项。这使得模型表示更加紧凑和数学上的简单。

点积形式的线性模型表示如下:

输出=wTx+b\text{输出} = \mathbf{w}^T \mathbf{x} + b

其中:

  • 输出\text{输出} 是模型的预测输出。
  • w\mathbf{w} 是权重向量(包含每个特征对应的权重参数)。
  • x\mathbf{x} 是输入特征向量(包含每个特征的取值)。
  • bb 是截距项。

这个表达式的要点是,模型的输出是权重向量 w\mathbf{w} 与输入特征向量 x\mathbf{x} 的点积,再加上截距项 bb

使用点积形式的线性模型,我们可以更简洁地表示模型的数学表达式,同时也更容易理解模型的内部工作原理。在训练模型时,我们通过最小化损失函数来估计权重向量 w\mathbf{w} 和截距项 bb 的值,使模型能够最好地拟合训练数据。

对于房屋价格预测的示例,点积形式的线性模型可以表示为:

房屋价格=wTx+b\text{房屋价格} = \mathbf{w}^T \mathbf{x} + b

其中 w\mathbf{w} 是包含特征权重的向量,x\mathbf{x} 是包含特征值的向量,bb 是截距项。这个表达式清晰地表示了模型的预测是由特征权重与输入特征的点积加上截距项得出的。

在开始寻找最好的模型参数(model parameters)w\mathbf{w}bb 之前, 我们还需要两个东西:

  • 一种模型质量的度量方式;
  • 一种能够更新模型以提高模型预测质量的方法。

损失函数

损失函数(Loss Function),也称为成本函数(Cost Function)或目标函数(Objective Function),是在机器学习和统计建模中的一个关键概念。它用于衡量模型的预测值与实际观测值之间的差距或误差,是用来评估模型性能和指导模型参数优化的函数。

提示

在机器学习和数学中,通常使用符号 LL 来表示损失函数(Loss Function)或成本函数(Cost Function)。这个符号的含义是用来衡量模型预测值与真实观测值之间的差距或误差的函数。

LL 通常是一个关于模型参数(例如权重和偏置)的函数,其目标是最小化这个函数,以使模型的预测尽可能接近实际观测值。损失函数是机器学习模型训练和优化的核心概念,它指导着参数的更新和模型的改进过程。

具体来说,对于回归问题,LL 可以表示为均方误差(Mean Squared Error,MSE)或其他回归损失函数。对于分类问题,LL 可以表示为交叉熵损失(Cross-Entropy Loss)、对数损失(Log Loss)等分类损失函数。

使用 LL 作为符号来表示损失函数有助于数学表达式的简洁性和一般性,因为损失函数的具体形式可以根据不同的问题和模型而变化,但符号 LL 始终表示损失的概念。

损失函数的作用包括以下几个方面:

  1. 模型评估:损失函数用于衡量模型对训练数据的拟合程度,它提供了一个数值指标来评估模型的性能。较低的损失值表示模型预测较准确。

  2. 参数优化:在训练机器学习模型时,损失函数在训练过程中被最小化,以调整模型参数,使模型在给定任务上表现最佳。

  3. 正则化:损失函数可以结合正则化项,帮助控制模型的复杂度,防止过拟合。正则化损失包含了模型参数的惩罚项,鼓励参数值较小,以提高模型的泛化性能。

不同的机器学习任务和问题通常需要不同的损失函数,因为损失函数的选择取决于任务的性质和数据的分布。以下是一些常见的损失函数示例:

  1. 平方误差损失(Mean Squared Error,MSE):适用于回归问题,衡量模型预测值与实际值之间的平方差。MSE是最小二乘法中使用的典型损失函数。

  2. 平均绝对误差损失(Mean Absolute Error,MAE):也适用于回归问题,衡量模型预测值与实际值之间的绝对差距。

  3. 交叉熵损失(Cross-Entropy Loss):适用于分类问题,衡量模型对类别概率分布的拟合程度。在二元分类中,它通常被称为二元交叉熵损失。

  4. 对数损失(Log Loss):用于二元或多类别分类问题,与交叉熵损失相关,通常用于衡量分类模型的性能。

  5. Hinge Loss:主要用于支持向量机(SVM)中,衡量模型对样本的分类边界的拟合程度。

  6. Huber Loss:一种鲁棒回归损失,对离群值不敏感,介于均方误差和平均绝对误差之间。

  7. KL 散度(Kullback-Leibler Divergence):用于测量两个概率分布之间的差异,常用于生成模型的训练。

  8. 自定义损失函数:根据特定问题的需求,可以定义自己的损失函数。

选择合适的损失函数对于机器学习任务的成功至关重要,因为不同的损失函数会导致不同的模型行为和性能。通常,损失函数的设计需要根据任务的特点来权衡模型的准确性和泛化能力。

平方误差函数

平方误差函数(Mean Squared Error,MSE)是一种常用的损失函数,主要用于回归问题中,用于衡量模型的预测值与实际观测值之间的平方差。MSE的数学表达式如下:

对于一个数据集,包含 nn 个样本,每个样本的真实值为 yiy_i,模型的预测值为 y^i\hat{y}_i,则MSE可以表示为:

MSE=1ni=1n(yiy^i)2\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2

MSE的计算步骤如下:

  1. 对于每个样本 ii,计算真实值 yiy_i 与模型预测值 y^i\hat{y}_i 之间的差,即残差(residual),表示为 (yiy^i)(y_i - \hat{y}_i)
  2. 将每个残差平方,得到 (yiy^i)2(y_i - \hat{y}_i)^2
  3. 对所有样本的平方差进行平均,得到MSE。

MSE的特点和应用包括:

  • MSE总是非负的,且当且仅当所有样本的真实值等于模型的预测值时,MSE为零。
  • MSE越小表示模型对训练数据的拟合越好,即模型的预测值与实际观测值之间的差距越小。
  • MSE对异常值(离群值)敏感,因为它会放大异常值的平方差,因此在处理可能包含异常值的数据时,需要谨慎使用MSE。
  • 在线性回归等许多回归算法中,通常使用MSE作为损失函数,目标是最小化MSE以找到最佳拟合模型参数。
  • 除了回归问题,MSE还可以在其他一些任务中用作评估指标,但要确保任务的性质与MSE的适用性相符。

虽然MSE是一种常用的损失函数,但它并不适用于所有情况。例如,当数据包含离群值时,MSE可能不是最佳选择,因为它对离群值过于敏感。在这种情况下,可以考虑使用其他损失函数或正则化方法来改进模型的稳健性。

一般使用下面的这种方式表示

使用 L(w,b)L(\mathbf{w}, b) 来表示平方误差函数(Mean Squared Error,MSE)。在这种情况下,L(w,b)L(\mathbf{w}, b) 表示 MSE 的数学表达式。

具体来说,对于一个数据集,包含 nn 个样本,每个样本的真实值为 yiy_i,模型的预测值为 y^i\hat{y}_i,MSE可以表示为:

L(w,b)=1ni=1n(yiy^i)2L(\mathbf{w}, b) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2

在这个表达式中,L(w,b)L(\mathbf{w}, b)是关于权重向量 w\mathbf{w} 和截距项 bb 的函数,表示为损失函数。它的目标是最小化损失函数,即找到最佳的 w\mathbf{w}bb 来使模型的预测尽可能接近真实值。

使用L(w,b)L(\mathbf{w}, b)的表示方式可以更清晰地描述MSE损失函数,并强调了它是一个关于模型参数 w\mathbf{w}bb 的函数。在模型训练中,通常通过优化算法来寻找最小化 L(w,b)L(\mathbf{w}, b) 的参数值,从而调整模型以获得更好的拟合和预测性能。

解析解

线性回归刚好是一个很简单的优化问题。 线性回归的解可以用一个公式简单地表达出来,这类解叫作解析解(analytical solution),它表示通过代数运算或数学方法精确地找到问题的解决方案。

在线性回归中,我们试图找到最佳拟合直线,以描述自变量和因变量之间的线性关系。线性回归问题可以使用解析解来求解,即通过代数方法得到最佳拟合直线的斜率和截距。

考虑以下线性回归问题的示例:

问题:假设我们有一个数据集,其中包含房屋的大小(自变量,XX)和对应的房屋价格(因变量,YY)。我们希望找到一条直线,以最佳方式拟合这些数据,以便根据房屋的大小来预测价格。

线性模型:线性回归模型的一般形式为 Y=β0+β1XY = \beta_0 + \beta_1X,其中 β0\beta_0 是截距,β1\beta_1 是斜率。

解析解:为了找到最佳的 β0\beta_0β1\beta_1,我们可以使用解析解。最小化均方误差(Mean Squared Error,MSE)作为损失函数,我们可以得到以下解析解:

  1. 求偏导数:首先,我们对MSE关于 β0\beta_0β1\beta_1 的偏导数分别设置为零。

    MSEβ0=0\frac{\partial MSE}{\partial \beta_0} = 0 MSEβ1=0\frac{\partial MSE}{\partial \beta_1} = 0

  2. 解方程组:通过解这个方程组,我们可以得到最佳的 β0\beta_0β1\beta_1

    这些方程的解析解形式为:

    β1=i=1n(XiXˉ)(YiYˉ)i=1n(XiXˉ)2\beta_1 = \frac{\sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y})}{\sum_{i=1}^{n} (X_i - \bar{X})^2}

    β0=Yˉβ1Xˉ\beta_0 = \bar{Y} - \beta_1 \bar{X}

    其中,nn 是样本数量,XiX_iYiY_i 是样本数据,Xˉ\bar{X}Yˉ\bar{Y} 分别是 XXYY 的均值。

这里的解析解是精确的,它给出了最佳拟合直线的斜率和截距的精确值。通过代数运算,我们可以精确地找到线性回归问题的解,而不需要使用迭代优化算法。

虽然解析解在一些问题上非常有用,但并非所有问题都具有解析解,特别是在复杂或非线性问题、高维问题以及数值模拟中,解析解可能难以获得。在这些情况下,人们通常使用数值方法来近似求解问题,并得到数值解。数值解在实际应用中非常常见,因为它们可以应对各种复杂的问题。

随机梯度下降

随机梯度下降(Stochastic Gradient Descent,简称SGD)是一种用于训练机器学习模型的优化算法。它是梯度下降算法的一种变体,主要用于大规模数据集和高维特征空间中的模型训练。与传统梯度下降不同,SGD使用随机抽样的小批量数据来估计梯度,从而减少计算开销,但引入了一些随机性。

下面是随机梯度下降的工作原理和一个具体的示例:

工作原理

  1. 随机梯度下降首先随机选择一个小批量(通常是一小部分)训练样本。
  2. 使用这个小批量数据来计算损失函数关于模型参数的梯度(即损失函数对参数的导数)的估计值。这个梯度估计通常只是整个训练集的梯度的近似。
  3. 使用梯度的估计值来更新模型参数,以减小损失函数的值。
  4. 重复上述步骤,每次迭代都随机选择不同的小批量数据,直到满足停止条件(例如达到最大迭代次数或收敛到足够小的损失值)。

示例: 假设我们要使用随机梯度下降来训练一个线性回归模型,目标是找到最佳的权重 w\mathbf{w} 和截距 bb,以拟合一个包含大量数据点的数据集。

  1. 初始化权重 w\mathbf{w} 和截距 bb 的值。
  2. 随机选择一个小批量数据,例如选择一小部分数据点。
  3. 计算这个小批量数据上的平均损失关于 w\mathbf{w}bb 的梯度。
  4. 使用梯度的估计值来更新权重和截距,例如按照以下规则更新:
    • wwα梯度w\mathbf{w} \leftarrow \mathbf{w} - \alpha \cdot \text{梯度}_w
    • bbα梯度bb \leftarrow b - \alpha \cdot \text{梯度}_b 其中,α\alpha 是学习率,控制了更新步长的大小。
  5. 重复上述步骤,不断选择新的小批量数据并更新参数,直到满足停止条件。

随机梯度下降的主要优势在于它的计算效率,特别是在大规模数据集上。它的随机性可以帮助算法跳出局部极小值,并且通常不需要计算整个训练集的梯度,因此更快。但它也可能会引入一些噪声,导致训练过程中损失函数的震荡。为了解决这个问题,可以使用学习率调度策略或采用其他随机梯度下降的变体。

使用数学公式来表达

当使用随机梯度下降(Stochastic Gradient Descent,SGD)来更新模型参数时,可以使用以下数学公式来表示更新过程:

假设我们要最小化损失函数 LL,其中 θ\theta 表示模型参数(可能包括权重和截距),L(θ)\nabla L(\theta) 表示损失函数关于参数的梯度。

SGD的参数更新过程如下:

  1. 随机选择一个小批量数据(通常用 BB 表示),这个小批量包含 mm 个样本。

  2. 计算损失函数在这个小批量数据上的平均梯度估计(即损失函数对参数的导数的估计值):L(θ;B)=1mi=1mL(θ;(xi,yi))\nabla L(\theta; B) = \frac{1}{m} \sum_{i=1}^{m} \nabla L(\theta; (x_i, y_i)) 这里,(xi,yi)(x_i, y_i) 表示小批量数据中的第 ii 个样本。

  3. 使用梯度估计值来更新参数,通常按照以下规则: θθαL(θ;B)\theta \leftarrow \theta - \alpha \cdot \nabla L(\theta; B) 其中,α\alpha 是学习率(learning rate),控制了更新步长的大小。

  4. 重复上述步骤,不断选择新的小批量数据并更新参数,直到满足停止条件(例如达到最大迭代次数或收敛到足够小的损失值)。

这个更新过程中,L(θ;B)\nabla L(\theta; B) 表示在当前小批量数据 BB 上损失函数关于参数 θ\theta 的梯度估计。通过不断迭代,模型的参数逐渐调整,以最小化损失函数,从而拟合数据。

需要注意的是,SGD的随机性体现在每次迭代中选择不同的小批量数据,这有助于跳出局部极小值,并且可以在大规模数据集上提高计算效率。学习率 α\alpha 的选择很重要,它影响了参数更新的步长,通常需要进行调整以确保算法的收敛性和性能。

提示

数学符号 \nabla 表示了向量微分算子(Vector Differential Operator),通常称为“nabla”或“德尔符号”。它在数学、物理和工程领域中广泛用于描述矢量和标量函数的梯度、散度和旋度等运算。具体来说,\nabla 可以表示为一个矢量,其分量表示了函数在不同方向上的偏导数。

梯度是 \nabla 的常见应用,用于描述标量函数的变化率和方向。对于标量函数 f(x)f(\mathbf{x}),其梯度表示为 f(x)\nabla f(\mathbf{x}),是一个矢量,其中每个分量是函数在相应坐标方向上的偏导数。

例如,如果 f(x)f(\mathbf{x}) 是一个二维函数,梯度 f(x)\nabla f(\mathbf{x}) 表示为 (fx,fy)(\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}),其中 fx\frac{\partial f}{\partial x} 表示函数在 xx 方向上的变化率,fy\frac{\partial f}{\partial y} 表示函数在 yy 方向上的变化率。

矢量化加速

在训练我们的模型时,我们经常希望能够同时处理整个小批量的样本。为了实现这一点,需要我们对计算进行矢量化, 从而利用线性代数库,而不是在 Python 中编写开销高昂的 for 循环。

import math
import time
import numpy as np
import torch
from d2l import torch as d2l

为了说明矢量化为什么如此重要,我们考虑对向量相加的两种方法。 我们实例化两个全为 1 的 10000 维向量。 在一种方法中,我们将使用 Python 的 for 循环遍历向量; 在另一种方法中,我们将依赖对+的调用。

n = 10000
a = torch.ones([n])
b = torch.ones([n])

这里定义一个计时器,以方便后面的实验。

class Timer:  #@save
"""记录多次运行时间"""
def __init__(self):
self.times = []
self.start()

def start(self):
"""启动计时器"""
self.tik = time.time()

def stop(self):
"""停止计时器并将时间记录在列表中"""
self.times.append(time.time() - self.tik)
return self.times[-1]

def avg(self):
"""返回平均时间"""
return sum(self.times) / len(self.times)

def sum(self):
"""返回时间总和"""
return sum(self.times)

def cumsum(self):
"""返回累计时间"""
return np.array(self.times).cumsum().tolist()

首先,我们使用for循环,每次执行一位的加法。

c = torch.zeros(n)
timer = Timer()
for i in range(n):
c[i] = a[i] + b[i]
f'{timer.stop():.5f} sec'
'0.07939 sec'

或者,我们使用重载的 + 运算符来计算按元素的和。

timer.start()
d = a + b
f'{timer.stop():.5f} sec'
'0.00000 sec'

结果很明显,第二种方法比第一种方法快得多。 矢量化代码通常会带来数量级的加速。

正态分布与平方损失

正态分布是什么?

正态分布,也称为高斯分布(Gaussian distribution),是统计学和概率论中最重要的概率分布之一。它具有许多重要的性质,因此在自然界和社会科学中经常出现。正态分布的特点包括:

  1. 钟形曲线:正态分布的概率密度函数呈现出典型的钟形曲线形状。这个曲线是对称的,最高点位于均值处。曲线两侧逐渐下降,但永不触及横轴。

  2. 均值和标准差:正态分布由两个参数完全描述:均值(μ)和标准差(σ)。均值决定了曲线的中心位置,标准差决定了曲线的宽度。标准差越大,曲线越宽,分布越分散;标准差越小,曲线越窄,分布越集中。

  3. 68-95-99.7法则:正态分布具有一个重要的性质,即约 68% 的数据点落在均值的一个标准差范围内,约 95% 的数据点落在两个标准差范围内,约 99.7% 的数据点落在三个标准差范围内。这个法则有助于理解正态分布的数据分布情况。

  4. 无记忆性:正态分布没有记忆性,也就是说,每个数据点的概率分布不受前面数据点的影响。这使得正态分布在建模许多现实世界现象时非常有用。

正态分布在自然界和科学研究中广泛应用,例如:

  • 许多生物特征,如身高和体重,可以近似地服从正态分布。
  • 测量误差通常具有正态分布,因此正态分布在测量和实验中很常见。
  • 在金融领域,股票价格的日收益率通常具有接近正态分布的性质。
  • 在统计假设检验和参数估计中,正态分布常常被用来对数据进行建模。

正态分布在统计学和数据分析中具有重要的地位,因为许多统计方法都基于对数据的正态性假设。如果数据近似服从正态分布,那么可以使用正态分布的性质进行推断和分析。如果数据不服从正态分布,一些统计方法可能不适用,需要考虑其他方法。

正态分布的概率密度函数

正态分布(Normal Distribution)的概率密度函数(Probability Density Function,PDF)通常用符号 f(x)f(x) 表示,其数学形式如下:

f(x)=1σ2πe12(xμσ)2f(x) = \frac{1}{\sigma \sqrt{2\pi}} \cdot e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2}

其中:

  • xx 是随机变量的值。
  • μ\mu 是分布的均值(期望值),表示分布的中心位置。
  • σ\sigma 是分布的标准差,表示分布的扩展或分散程度。
  • ee 是自然对数的底数,约等于 2.71828。
  • π\pi 是圆周率,约等于 3.14159。

这个概率密度函数描述了正态分布的概率分布情况。正态分布的曲线呈钟形,中心在均值 μ\mu 处,标准差 σ\sigma 控制了曲线的宽度。标准差越大,曲线越宽,分布越分散;标准差越小,曲线越窄,分布越集中。

提示

当涉及到自然常数 "e" 时,可以将其简单地理解为一个特殊的数值(就是一个用于辅助计算的数值,就像 π\pi 一样 ),约等于 2.71828。虽然它的具体值可能看起来很奇怪,但它在数学和科学中出现得非常频繁,因为它具有一些特殊的数学性质和应用。以下是一些简单的解释:

  1. 指数增长和衰减:自然常数 "e" 是指数函数的底数。指数函数 exe^x 具有特殊的性质,它表示随着 xx 增加,函数值以 "e" 为底数指数级地增加。这在金融中用于复利计算、在自然科学中用于描述某些物理现象的增长和衰减。

  2. 微积分:自然常数 "e" 在微积分中起着重要作用。它与导数和积分等概念密切相关。当你对 exe^x 求导时,结果仍然是 exe^x,这是很多微积分定理的基础。因此,它帮助我们理解函数的变化率和积分面积等概念。

  3. 复数和振荡:在复数领域,自然常数 "e" 在复数指数函数 eixe^{ix} 中发挥作用,其中 ii 是虚数单位。这个函数与振荡、波动和信号处理等有关,用于描述周期性变化。

  4. 概率和统计:在概率和统计学中,自然常数 "e" 在描述概率分布函数时有应用。它帮助我们理解随机事件的分布和概率密度。

虽然 "e" 的确切值是一个无理数,但它的特殊性质使得它在数学和科学研究中非常有用,帮助我们更好地理解和描述自然现象和数学关系。

正态分布的概率密度函数具有一些重要性质:

  • 曲线在均值 μ\mu 处达到最大值,最高峰为 1σ2π\frac{1}{\sigma \sqrt{2\pi}}
  • 曲线关于均值 μ\mu 对称,即 f(x)f(x) 关于 μ\mu 对称。
  • xx 远离均值 μ\mu 时,概率密度逐渐减小,趋近于零。

下面我们定义一个Python函数来计算正态分布。

def normal(x, mu, sigma):
"""
计算正态分布的概率密度函数值。

参数:
x (float):随机变量的值。
mu (float):分布的均值(期望值)。
sigma (float):分布的标准差。

返回值:
float:x 对应的概率密度函数值。
"""
coefficient = 1 / (sigma * math.sqrt(2 * math.pi))
exponent = -((x - mu) ** 2) / (2 * sigma ** 2)
pdf = coefficient * np.exp(exponent)
return pdf

我们现在可视化正态分布。

# x 是一个 NumPy 数组,包含了横坐标的取值范围,表示要绘制概率密度函数的 x 值。
# 这里的 0.01 表示横坐标的步长或间隔
x = np.arange(-7, 7, 0.01)

# 均值(期望值)和分布的标准差
params = [(0, 1), (0, 2), (3, 1)]

# [normal(x, mu, sigma) for mu, sigma in params] 创建了一个列表,
# 其中包含了多个正态分布的概率密度函数曲线。
# 这个列表使用列表推导式计算,对于每组 (mu, sigma) 参数,都计算了对应的概率密度函数值。
d2l.plot(x, [normal(x, mu, sigma) for mu, sigma in params], xlabel='x',
# figsize 是 Matplotlib 中用于设置图形尺寸的参数。
# 它用于指定图形的宽度和高度,以英寸为单位。具体来说:
ylabel='p(x)', figsize=(4.5, 2.5),
legend=[f'mean {mu}, std {sigma}' for mu, sigma in params])

svg

正态分布与线性回归的关系

就像我们所看到的,改变均值(μ\mu)或增加方差(σ\sigma)时,会对正态分布的概率密度函数产生影响,这与均方误差损失函数和线性回归之间的关系有一定联系。让我来详细解释这一点:

  1. 正态分布的概率密度函数: 正态分布(或高斯分布)的概率密度函数(Probability Density Function,PDF)如下所示:

    p(x)=12πσexp(12(xμσ)2)p(x) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{1}{2}\left(\frac{x - \mu}{\sigma}\right)^2\right)

    其中:

    • p(x)p(x) 表示随机变量 xx 取值为 xx 的概率密度。
    • μ\mu 是分布的均值(期望值),表示分布的中心位置。
    • σ\sigma 是分布的标准差,表示分布的分散程度。
  2. 线性回归模型: 在线性回归中,我们建立一个线性模型,其中 yy(目标变量)与 xx(特征变量)之间的关系可以表示为:

    y=wx+b+ϵy = wx + b + \epsilon

    其中:

    • yy 是目标变量(实际观测值)。
    • xx 是特征变量。
    • ww 是线性回归模型的权重(斜率)。
    • bb 是线性回归模型的偏置(截距)。
    • ϵ\epsilon 是误差项,表示了模型无法完美预测的部分。
  3. 正态分布与线性回归的关系: 在线性回归中,通常假设误差项 ϵ\epsilon 是独立同分布的,并且服从正态分布。也就是说,我们假设每个观测值的误差都是来自相同的正态分布,且均值为 00(即 μ=0\mu = 0),标准差为 σ\sigma 的正态分布。这个假设可以表示为:

    ϵN(0,σ2)\epsilon \sim \mathcal{N}(0, \sigma^2)

    这个假设意味着误差项的分布是以均值为 00 的正态分布,且其标准差由模型的参数 σ\sigma 控制。

  4. 最小二乘法: 为了估计线性回归模型中的参数 wwbb,我们通常使用最小二乘法,目标是最小化观测数据与模型预测之间的均方误差(MSE)。均方误差的最小化假设了观测数据的误差项服从正态分布,因此与正态分布的假设相吻合。

提示

在数学和统计学中,符号 "~" 通常用来表示"服从于"或"分布于"的意思。所以,当我们写下 ϵN(0,σ2)\epsilon \sim \mathcal{N}(0, \sigma^2) 时,它表示随机变量 ϵ\epsilon 服从均值为 00、方差为 σ2\sigma^2 的正态分布(或高斯分布)。这个表达式描述了随机变量 ϵ\epsilon 的概率分布,具体来说:

  • ϵ\epsilon 是一个随机变量,代表了线性回归模型中的误差项(残差)。
  • "\sim" 表示服从,即随机变量 ϵ\epsilon 的分布服从某个特定的概率分布。
  • "N\mathcal{N}" 表示正态分布(高斯分布),后面的括号中给出了分布的参数,包括均值和方差。

所以,ϵN(0,σ2)\epsilon \sim \mathcal{N}(0, \sigma^2) 表示我们假设误差项 ϵ\epsilon 服从均值为 00、方差为 σ2\sigma^2 的正态分布。这个假设在线性回归模型中常常被使用,因为正态分布对许多自然现象中的误差具有较好的描述能力,并且与最小二乘法等参数估计方法相匹配。

综上所述,正态分布之所以适用于线性回归,是因为它提供了一种自然的方法来描述观测数据中的误差项,并且均方误差最小化的方法与正态分布假设相一致。正态分布假设有助于建立合理的统计模型,并允许使用最小二乘法等方法来估计线性回归模型的参数。在示例中,通过改变均值(μ\mu)和标准差(σ\sigma)的值,我们可以观察到不同参数下的正态分布概率密度函数曲线,这帮助我们理解了正态分布与线性回归之间的关系。