当前位置: 首页 > news >正文

深入理解线性回归与 Softmax 回归:从理论到实践

线性回归:连续值预测的基石

线性回归作为一种经典的统计学习方法,在深度学习领域依然是不可或缺的基础模型,常被用于解决连续值预测问题,比如房价预测、销售额预估等。

线性回归的应用场景:以房价预测为例

在日常生活中,房价预测是一个典型的线性回归应用场景。当我们看中一套房子,想要估算其合理价格并决定出价时,线性回归就能派上用场。我们可以收集大量的历史房屋交易数据,这些数据包含房屋的各种特征,如卧室数量、车库数量、所在学区、房屋内部设施等,同时也包含每套房屋对应的成交价格(即往年房价)。

从 PPT 中展示的房屋信息来看,一套房子的特征丰富多样。卧室数量方面,最小卧室数为 7;停车信息里,车库最少和最多都是 2 个,停车描述包括附属车库和路边停车;学区信息涵盖了小学、中学和高中的具体学校及所属学区;内部设施中,厨房配备了花岗岩台面、洗碗机、垃圾处理器、抽油烟机、带水槽的中岛和微波炉烤箱组合等。这些特征都可能对房价产生影响,线性回归模型就是要通过对这些特征数据的学习,找到特征与房价之间的线性关系,从而实现对新房屋价格的预测。

线性回归的数学表达

线性回归的核心是建立输入特征与输出预测值之间的线性关系。其数学表达式有多种形式,具体如下:

  • 对于单个样本,若输入特征向量为\(x = (x_1, x_2, ..., x_d)\),对应的权重向量为\(w = (w_1, w_2, ..., w_d)\),偏置为b,则预测值y可表示为\(y = w^T x + b\)。其中\(w^T\)表示权重向量w的转置,\(w^T x\)是输入特征与对应权重的线性组合。
  • 当处理多个样本时,假设有n个样本,每个样本有d个特征,此时可将样本特征构成一个\(n \times d\)的矩阵X(每行代表一个样本的特征),权重向量w为\(d \times 1\)的矩阵,偏置b为一个标量(可扩展为\(n \times 1\)的矩阵),那么多个样本的预测值可表示为\(y = Xw + b\)。这种矩阵形式的表达在计算机处理大量数据时更为高效,便于利用矩阵运算进行快速计算。

从线性回归到神经网络

线性回归模型本身也可以看作是一种最简单的神经网络结构。在这种神经网络中,输入层包含d个神经元,分别对应输入特征\(x_1, x_2, ..., x_d\);输出层只有 1 个神经元,用于输出预测值y。输入层的每个神经元与输出层的神经元之间都存在一个连接权重\(w_1, w_2, ..., w_d\),同时输出层神经元还有一个偏置b。输入特征通过与对应权重的线性组合,再加上偏置,最终得到输出预测值,这与线性回归的计算过程完全一致。这种简单的神经网络结构为后续更复杂的深度神经网络奠定了基础,复杂的深度神经网络可以看作是由多个这样的简单 “线性层” 与非线性激活函数层堆叠而成。

模型训练的核心:优化算法

要让线性回归等模型能够准确地进行预测,就需要通过优化算法对模型的参数(权重w和偏置b)进行训练,找到使模型预测误差最小的参数值。常用的优化算法主要围绕梯度展开,包括梯度法、随机梯度下降和小批量随机梯度下降等。

梯度法:寻找函数最小值的 “指南针”

梯度法是优化算法的基础,其核心思想是利用函数的梯度来确定参数更新的方向。

  • 梯度的定义:对于一个多变量函数,如\(f(x_0, x_1) = x_0^2 + x_1^2\),梯度是由该函数对所有变量的偏导数汇总而成的向量。以\(f(x_0, x_1)\)为例,其梯度\(\nabla f = (\frac{\partial f}{\partial x_0}, \frac{\partial f}{\partial x_1}) = (2x_0, 2x_1)\)。
  • 梯度的意义:严格来说,梯度指示的反方向是函数在各点处函数值减小最多的方向,就像指南针一样,能为我们寻找函数最小值提供方向指引。从 PPT 中的图像可以观察到,梯度指向函数的 “最低处”(最小值),并且离 “最低处” 越远,梯度向量的模(即箭头大小)越大,这意味着在函数值较大的区域,沿着梯度反方向移动,函数值下降得更快。
  • 梯度法的局限性:需要注意的是,梯度所指的反方向只是函数值在当前点减小最多的方向,无法保证这个方向就是函数全局最小值的方向,也不能确保沿着这个方向一直走就能找到全局最小值,可能会陷入局部最小值。但在实际应用中,梯度法仍然是一种有效的寻找函数最小值的方法,因为沿着梯度反方向移动,能最大限度地减小函数值。
  • 梯度法的流程:在梯度法中,参数更新的流程如下:首先,在当前参数位置计算函数的梯度;然后,沿着梯度反方向按照一定的步长(即学习率)更新参数,得到新的参数位置;接着,在新的参数位置重新计算梯度;之后,再沿着新梯度的反方向更新参数;如此反复迭代,直到函数值收敛到一个较小的稳定值,或者达到预设的迭代次数,此时认为找到了较优的参数。

随机梯度下降:高效的参数更新方法

随机梯度下降(SGD)是在梯度法的基础上发展而来的一种优化算法,它通过不断在损失函数递减的方向上更新参数来降低模型的预测误差。 与传统的梯度下降(每次使用全部训练数据计算梯度)不同,随机梯度下降每次只随机选择一个训练样本,根据该样本计算梯度并更新参数。这种方式的优点是每次参数更新的计算量小,速度快,能够快速地让模型参数向最优方向靠近,尤其适合处理大规模的训练数据。因为在大规模数据集中,全部数据计算梯度需要耗费大量的计算资源和时间,而随机选择一个样本计算梯度,虽然每次计算的梯度可能存在一定的噪声,但随着迭代次数的增加,这些噪声会逐渐被平均,参数依然能够收敛到较优值。

小批量随机梯度下降:平衡效率与稳定性

小批量随机梯度下降是对随机梯度下降的进一步改进,它综合了传统梯度下降和随机梯度下降的优点。

  • 批量值的选择:在小批量随机梯度下降中,关键是选择合适的批量值(即每次用于计算梯度的样本数量)。批量值不能太小:如果批量值太小,每次计算梯度使用的样本数量少,计算出的梯度噪声较大,参数更新的稳定性差,而且难以充分利用计算机的并行计算资源,导致训练效率低下。批量值也不能太大:如果批量值太大,虽然计算出的梯度更准确、稳定,但每次计算梯度需要处理大量的样本,会浪费大量的计算资源,增加计算时间,而且当批量值大到一定程度后,再增大批量值,对模型训练效果的提升并不明显。
  • 小批量随机梯度下降的优势:通过选择合适的批量值,小批量随机梯度下降既能保证参数更新的稳定性(相比随机梯度下降),又能提高训练效率(相比传统梯度下降),因此成为了深度学习中默认的模型求解算法,被广泛应用于各种深度学习模型的训练中。

学习率:影响参数更新的关键超参数

学习率是优化算法中的一个重要超参数,它决定了每次参数更新的步长,对模型的训练效果和收敛速度有着至关重要的影响。

  • 学习率不要太大:如果学习率过大,每次参数更新的步长就会过大,可能会导致参数在函数最小值附近来回震荡,无法收敛到最优值,甚至可能出现函数值反而增大的情况,使模型训练不稳定。
  • 学习率不要太小:如果学习率过小,每次参数更新的步长就会过小,参数收敛的速度会非常慢,需要经过大量的迭代才能使模型收敛到较优值,这会增加训练时间和计算成本。 在实际训练模型时,通常需要通过实验来选择合适的学习率。常用的方法包括尝试多个不同的学习率值,观察模型在训练过程中的损失函数变化情况和验证集上的性能表现,选择能使模型在较短时间内收敛且在验证集上性能较好的学习率。此外,还可以采用学习率调度策略,在训练过程中根据迭代次数或模型性能动态调整学习率,如随着迭代次数的增加逐渐减小学习率,以在训练初期快速靠近最优值,在训练后期精细调整参数,使模型更好地收敛。

Softmax 回归:多类分类的有力工具

在实际应用中,除了预测连续值的回归任务,还有大量的分类任务,如手写数字识别、图像分类、文本情感分析等。Softmax 回归作为一种常用的多类分类模型,能够有效地处理这类问题。

回归与分类的区别

要理解 Softmax 回归,首先需要明确回归任务与分类任务的区别:

  • 回归任务:回归任务的目标是估计一个连续值,例如预测房价、股票价格、温度等。在回归任务中,模型的输出是一个连续的数值,我们通常以模型预测值与真实值之间的差异(如均方误差)作为损失,来衡量模型的预测性能。
  • 分类任务:分类任务的目标是预测一个离散的类别,例如将手写数字图像分为 0-9 中的某一个数字,将自然图像分为猫、狗、汽车等不同类别,将维基百科评论分为正常、有毒、威胁、侮辱、严重有毒、猥亵、身份仇恨等 7 类。在分类任务中,模型通常会输出多个值,每个值表示预测为对应类别的置信度,我们需要根据这些置信度来确定样本所属的类别。

PPT 中也列举了多个经典的分类任务案例,如 ImageNet 数据集任务(对自然对象进行分类,包含 1000 类)、MNIST 数据集任务(对手写数字进行分类,包含 10 类)、Kaggle 上的人类蛋白质显微镜图像分类任务(分为 28 类)以及维基百科恶语评论分类任务(分为 7 类),这些案例都充分体现了分类任务的多样性和广泛应用场景。

从回归到多类分类的过渡

从回归模型到多类分类模型,需要在输出层和损失函数等方面进行调整:

  • 输出层设计:在回归模型中,通常只有一个输出,用于预测连续值。而在多类分类模型中,输出层的神经元数量需要根据待解决问题的类别数量来决定。例如,对于 MNIST 手写数字分类问题(10 类别),输出层的神经元数量应设定为 10 个;对于人类蛋白质显微镜图像分类问题(28 类别),输出层神经元数量则设定为 28 个。每个输出神经元对应一个类别,其输出值表示模型预测样本属于该类别的置信度。
  • 基于回归的初步分类思路:在过渡阶段,可以尝试使用回归模型的思路来解决分类问题。例如,对于多类分类任务,仍然使用线性回归的方式计算每个类别的预测值(作为置信度),然后使用均方损失(平方损失)来训练模型,最后将预测值最大的类别作为样本的预测类别。然而,这种方法存在一些问题,例如均方损失对于分类任务来说,并不是最优的损失函数,而且模型输出的置信度不具有概率意义,无法直观地表示样本属于各个类别的概率大小。

Softmax 回归的结构与原理

Softmax 回归模型在输出层引入了 Softmax 运算,解决了上述基于回归进行分类的不足,使其成为一种更适合多类分类任务的模型。

  • Softmax 回归的网络结构:Softmax 回归可以看作是一个单层神经网络。输入层包含多个神经元,对应样本的各个特征;输出层的神经元数量等于类别的数量,每个输出神经元对应一个类别。由于计算每个输出\(o_1, o_2, ..., o_k\)(k为类别数)都取决于所有输入特征\(x_1, x_2, ..., x_d\)和对应的权重,因此 Softmax 回归的输出层也是全连接层。
  • Softmax 运算:Softmax 运算的核心作用是将输出层的原始输出(通常称为 logits)转换为具有概率意义的置信度。其数学表达式为\(y_i = \frac{exp(o_i)}{\sum_{k=1}^{K} exp(o_k)}\),其中\(y_i\)表示样本属于第i类别的概率,\(o_i\)是输出层第i个神经元的原始输出,K是类别的数量。 从 Softmax 运算的公式可以看出,它具有两个重要特性:一是通过指数函数\(exp(\cdot)\)确保了每个输出概率\(y_i\)都是非负的;二是通过除以所有指数函数值的总和,确保了所有输出概率的和为 1,即\(\sum_{i=1}^{K} y_i = 1\)。这使得 Softmax 回归输出的结果符合概率分布的定义,我们可以直接将\(y_i\)看作样本属于第i类别的概率,从而更直观地理解模型的预测结果。 PPT 中给出了一个 Softmax 运算的示例:对于原始输出\([1, -1, 2]\),其 Softmax 运算结果为\([0.26, 0.04, 0.7]\)。通过这个示例可以清晰地看到,Softmax 运算将原始输出转换为了概率分布,其中数值最大的原始输出对应着最大的概率,这与分类任务中选择置信度最高的类别作为预测结果的需求相契合。

损失函数:衡量模型性能的标尺

损失函数是模型训练过程中用于衡量模型预测值与真实值之间差异的函数,它是优化算法更新模型参数的依据。不同的任务和模型,需要选择合适的损失函数。

常用的损失函数

  • 平方损失(L2 损失):平方损失是回归任务中常用的损失函数,其计算方式为模型预测值与真实值之间差值的平方。对于单个样本,平方损失的表达式为\(L = \frac{1}{2}(y - \hat{y})^2\),其中y是真实值,\(\hat{y}\)是预测值。平方损失对较大的误差更为敏感,因为误差被平方后会被放大,这在一些回归任务中可能是有利的,能够促使模型更关注误差较大的样本。但在分类任务中,平方损失并不是最佳选择,因为它没有充分考虑分类任务的特性,可能导致模型训练效果不佳。
  • L1 损失:L1 损失也是一种常用的损失函数,其计算方式为模型预测值与真实值之间差值的绝对值,表达式为\(L = |y - \hat{y}|\)。与平方损失相比,L1 损失对异常值(误差较大的样本)的敏感度较低,因为它没有对误差进行平方放大。在一些对异常值不敏感的回归任务中,L1 损失可能比平方损失表现更好。
  • Huber 损失:Huber 损失是一种结合了平方损失和 L1 损失优点的损失函数,它在误差较小时表现为平方损失,在误差较大时表现为 L1 损失。其数学表达式为:当\(|y - \hat{y}| \leq \delta\)时,\(L = \frac{1}{2}(y - \hat{y})^2\);当\(|y - \hat{y}| > \delta\)时,\(L = \delta |y - \hat{y}| - \frac{1}{2}\delta^2\),其中\(\delta\)是一个预设的阈值。Huber 损失既能够在误差较小时保持平方损失的光滑性,便于优化,又能够在误差较大时像 L1 损失一样对异常值不敏感,因此在一些场景中具有较好的性能。

交叉熵损失:分类任务的优选

对于分类任务,尤其是使用 Softmax 回归进行多类分类时,交叉熵损失是更为合适的损失函数。

  • 交叉熵损失的定义:交叉熵损失用于衡量两个概率分布之间的差异,在分类任务中,通常将真实标签的概率分布与模型预测的概率分布进行比较。对于多类分类任务,假设真实标签采用独热编码(即对于属于第i类别的样本,其真实概率分布p中,\(p_i = 1\),其余类别对应的概率均为 0),模型预测的概率分布为q(由 Softmax 运算得到),则交叉熵损失的表达式为\(H(p, q) = -\sum_{i=1}^{K} p_i \log(q_i)\)。由于真实标签是独热编码,该表达式可简化为\(H(p, q) = -\log(q_i)\)(其中i是样本的真实类别)。
  • 交叉熵损失的优势:交叉熵损失能够有效地反映模型预测概率分布与真实概率分布之间的差异。当模型预测的概率\(q_i\)越接近真实概率\(p_i\)(即模型预测越准确)时,交叉熵损失值越小;反之,当模型预测不准确时,交叉熵损失值越大。此外,交叉熵损失与 Softmax 运算结合使用时,其梯度计算相对简单,能够有效地指导模型参数的更新,使模型快速收敛到较优的状态。因此,交叉熵损失成为了 Softmax 回归等多类分类模型的首选损失函数。

总结

线性回归与 Softmax 回归是深度学习中的两个基础模型,分别适用于回归任务和多类分类任务。线性回归通过建立输入特征与连续输出值之间的线性关系,为连续值预测提供了简洁有效的方法,并且其简单的网络结构为复杂神经网络的构建奠定了基础;Softmax 回归则在 linear 层的基础上引入 Softmax 运算,将模型输出转换为概率分布,结合交叉熵损失,成为了多类分类任务的有力工具。

在模型训练过程中,优化算法起着关键作用。梯度法为参数更新提供了方向指引,随机梯度下降和小批量随机梯度下降则在梯度法的基础上,提高了参数更新的效率和稳定性,其中小批量随机梯度下降更是成为了深度学习中默认的求解算法。学习率和批量值作为重要的超参数,需要根据具体任务进行合理选择,以确保模型能够高效、稳定地收敛。

损失函数是衡量模型性能的重要标尺,不同的任务需要选择合适的损失函数。平方损失和 L1 损失常用于回归任务,而交叉熵损失则更适合分类任务,尤其是与 Softmax 回归结合使用时,能够取得良好的分类效果。

通过深入理解线性回归与 Softmax 回归的理论知识、优化算法和损失函数,我们能够更好地掌握深度学习的基础,为后续学习更复杂的深度学习模型(如卷积神经网络、循环神经网络、Transformer 等)打下坚实的基础,从而在解决实际的回归和分类问题时,能够选择合适的模型和方法,提高问题解决的效率和效果


文章转载自:

http://Aayzc61t.mLdrd.cn
http://YWej9qTD.mLdrd.cn
http://aAhbrKRa.mLdrd.cn
http://jB8KoHVU.mLdrd.cn
http://DH1MS0jO.mLdrd.cn
http://GjUVvwdT.mLdrd.cn
http://U3P087kt.mLdrd.cn
http://ouE4n95Q.mLdrd.cn
http://HeAMtOJJ.mLdrd.cn
http://8MShBC5U.mLdrd.cn
http://xIbjBCYZ.mLdrd.cn
http://T4HUTY5F.mLdrd.cn
http://YCOibpl6.mLdrd.cn
http://YbGeY2hY.mLdrd.cn
http://KcoEpCTn.mLdrd.cn
http://bLWlmPFf.mLdrd.cn
http://fE6pOJYV.mLdrd.cn
http://XT4lQvO5.mLdrd.cn
http://BV5X2TcS.mLdrd.cn
http://28rWUh3t.mLdrd.cn
http://eILAKjeE.mLdrd.cn
http://8M7sglsd.mLdrd.cn
http://Vjq5qJNT.mLdrd.cn
http://HwHXl6X2.mLdrd.cn
http://3j5sY7yz.mLdrd.cn
http://uxuOOVnY.mLdrd.cn
http://jAzJrtWK.mLdrd.cn
http://7sON1yQh.mLdrd.cn
http://UXTFKkHB.mLdrd.cn
http://BHA2AF9u.mLdrd.cn
http://www.dtcms.com/a/387385.html

相关文章:

  • SSM-----Spring
  • ubuntu 24.04.02安装android-studio
  • WebRTC 定时任务Process Module
  • 【服务器挂掉了】A40和A800:“性能不足”和“系统崩溃”
  • EJS(Embedded JavaScript)(一个基于JavaScript的模板引擎,用于在HTML中嵌入动态内容)
  • 前端路由模式:Vue Router的hash模式和history模式详解
  • 信创电脑采购指南:选型要点与避坑攻略
  • 前端高级开发工程师面试准备一
  • window下Qt设置生成exe应用程序的图标
  • Linux(三) | Vim 编辑器的模式化架构与核心操作机制研究
  • Kubernetes 安全与资源管理:Secrets、资源配额与访问控制实战
  • Java基础知识总结(超详细)持续更新中~
  • 原生js过滤出对象数组中重复id的元素,并将其放置于一个同一个数组中
  • 《Python 对象创建的秘密:从 __new__ 到单例模式的实战演绎》
  • k8s 与 docker 的相同点和区别是什么?
  • Linux《线程(下)》
  • 第二部分:VTK核心类详解(第20章 vtkCamera相机类)
  • 线性回归与 Softmax 回归:深度学习入门核心模型解析
  • K8s配置管理:ConfigMap与Secret核心区别
  • 【Qt开发】显示类控件(四)-> QCalendarWidget
  • 【K8S系列】Kubernetes 调度与资源管理深度剖析:Requests、Limits、QoS 与 OOM
  • 小程序地图以及讲解的使用
  • 单分类线性逻辑回归
  • 使用POSTMAN 创建泛微OA流程
  • vscode中配置pytest
  • 液氮低温恒温器的应用领域
  • [Yolo遇到的问题] 使用VScode进行ultralytics训练 启动后在scanning阶段意外中断 导致训练无法正常启动
  • 微算法科技(NASDAQ:MLGO)研究分布式量子计算,释放量子计算潜能
  • 使用EasyExcel读不到数据的低级问题
  • 万象EXCEL开发(一)表头标尺搭建—东方仙盟筑基期