十一、线性模型与非线性扩展
11、线性模型与非线性扩展
引言
机器学习的基本流程如下:

上图中,定义函数就是为了构建模型,损失是越少越好的,优化是为了实现loss最小化从而得到的参数。
回归与分类是两大类问题
- 回归问题的输出是连续值,是一个连续的问题,连续变化的值
- 分类问题的输出是离散值,是一个离散的值,离散的输出
- 区别:模型最后一层的设计方式不同
机器学习 ≈ 寻找函数

函数类型


线性回归
定义:
-
给定由m个属性描述的样本 x=(x1;x2;…;xm)\boldsymbol{x} = (x_1; x_2; \ldots; x_m)x=(x1;x2;…;xm),其中 xix_ixi 是 x\boldsymbol{x}x 在第 iii 个属性上的取值,线性回归(linear regression)试图学得一个通过属性值的线性组合来进行预测的函数:
f(x)=w1x1+w2x2+…+wmxm+b f(\boldsymbol{x}) = w_1 x_1 + w_2 x_2 + \ldots + w_m x_m + b f(x)=w1x1+w2x2+…+wmxm+b -
一般用向量的形式写成:
f(x)=wTx+b f(\boldsymbol{x}) = \boldsymbol{w}^\mathsf{T} \boldsymbol{x} + b f(x)=wTx+b 其中 w=(w1;w2;…;wm)\boldsymbol{w} = (w_1; w_2; \ldots; w_m)w=(w1;w2;…;wm)。 -
给定训练集 D={(x1,y1),(x2,y2),…,(xi,yi),…,(xn,yn)}D = \{(\boldsymbol{x}_1, y_1), (\boldsymbol{x}_2, y_2), \ldots, (\boldsymbol{x}_i, y_i), \ldots, (\boldsymbol{x}_n, y_n)\}D={(x1,y1),(x2,y2),…,(xi,yi),…,(xn,yn)}
其中 xi=(xi1;xi2;…;xim)\boldsymbol{x}_i = (x_{i1}; x_{i2}; \ldots; x_{im})xi=(xi1;xi2;…;xim), yi∈Ry_i \in \mathbb{R}yi∈R -
可用最小二乘法 (least square method) 对 w\boldsymbol{w}w 和 bbb 进行估计。
最小二乘法估计:
-
下面以一元线性回归为例,来详细讲解 www 和 bbb 的最小二乘法估计
f(xi)=wxi+b, 使得 f(xi)≃yi f(x_i) = wx_i + b, \text{ 使得 } f(x_i) \simeq y_i f(xi)=wxi+b, 使得 f(xi)≃yi
-
最小二乘法就是基于预测值和真实值的均方差最小化的方法来估计参数 www 和 bbb:
(w∗,b∗)=argmin(w,b)∑i=1n(f(xi)−yi)2 (w^*, b^*) = \arg \min_{(w, b)} \sum_{i=1}^{n} (f(x_i) - y_i)^2 (w∗,b∗)=arg(w,b)mini=1∑n(f(xi)−yi)2 =argmin(w,b)∑i=1n(yi−wxi−b)2 = \arg \min_{(w, b)} \sum_{i=1}^{n} (y_i - wx_i - b)^2 =arg(w,b)mini=1∑n(yi−wxi−b)2
-
最小化均方误差 E(w,b)=∑i=1n(yi−wxi−b)2 E_{(w,b)} = \sum_{i=1}^{n} (y_i - wx_i - b)^2 E(w,b)=i=1∑n(yi−wxi−b)2- 分别对 www 和 bbb 求偏导,可得 ∂E(w,b)∂w=2(w∑i=1nxi2−∑i=1n(yi−b)xi) \frac{\partial E_{(w,b)}}{\partial w} = 2 \left( w \sum_{i=1}^{n} x_i^2 - \sum_{i=1}^{n} (y_i - b) x_i \right) ∂w∂E(w,b)=2(wi=1∑nxi2−i=1∑n(yi−b)xi) ∂E(w,b)∂b=2(nb−∑i=1n(yi−wxi)) \frac{\partial E_{(w,b)}}{\partial b} = 2 \left( nb - \sum_{i=1}^{n} (y_i - wx_i) \right) ∂b∂E(w,b)=2(nb−i=1∑n(yi−wxi))
-
令上两式为零可得到 www 和 bbb 最优解的闭式(closed-form)解:
w=∑i=1nyi(xi−xˉ)∑i=1nxi2−1n(∑i=1nxi)2 w = \frac{\sum_{i=1}^{n} y_i (x_i - \bar{x})}{\sum_{i=1}^{n} x_i^2 - \frac{1}{n} \left( \sum_{i=1}^{n} x_i \right)^2} w=∑i=1nxi2−n1(∑i=1nxi)2∑i=1nyi(xi−xˉ) b=1n∑i=1n(yi−wxi) b = \frac{1}{n} \sum_{i=1}^{n} (y_i - wx_i) b=n1i=1∑n(yi−wxi) -
其中,xˉ=1n∑i=1nxi\bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_ixˉ=n1∑i=1nxi
通过上述的推导我们可以发现,上述并没有用到机器学习相关的方法,而是通过纯数学的方法进行求解的,那既然能够通过纯数学的方式得到上述的最优解,又为啥需要大费周章的使用机器学习的方法去拟合出来最优解呢?我认为有以下原因:
- 这是一个唯一有最优解的模型,后续较为复杂的模型都不能通过纯数学的方式得到最优解了,只能通过拟合得出近似的最优解。
- 纯数学的方法缺陷:对于大规模的数据,效率低下,甚至没法去求
因此,实际应用中一般不采用显式求解的方法,往往通过优化方法来进行迭代寻找最优参数。比如梯度下降法。
线性回归实例

上述老师在讨论视频观看次数的预测时,强调了其对于资源分配的重要性:如果某视频的预期观看次数很高,则需相应增加服务器部署,以保障用户体验,满足大量观众的同时访问需求。
此外,还介绍了银行如何运用预测机制来规划现金流。银行通过预测未来一段时间内客户的取款需求,提前做好资金准备,并保持一定的储备金水平。这样可以避免因客户取款而出现资金短缺的情况,防止由此导致的信任危机和潜在的法律问题。这种预防措施对于维持金融机构的稳定运营至关重要。
上图中0.5k表示的是500。
一般来说,我们定义的损失函数需要满足,损失函数值越小,能说明模型越好,这样定义的损失函数值就是比较合理的。
一般比较常见的损失函数值就是平均绝对值误差L1和均方误差L2。
MAE就是平均绝对值误差,MSE就是均方误差。右侧的图片表明椭圆线上的点误差值是相同的,同时左下角的Loss大,右上角的Loss小。类似于地理里面的等高线,这就是一个左下角类似山地,右上角就是海拔较低的地势。
优化的过程就是(我的理解):
在优化过程中,我们首先随机选择一个初始值 w0w_0w0 作为起始点。无论这个初始点在哪里,接下来我们会计算损失函数在该点的梯度。根据数学上的定义,梯度指向的是函数值增长最快的方向。因此,为了使损失函数尽可能快地减小,我们将沿着负梯度方向更新权重。同时,为了避免因步长过大而跳过最优解,我们需要引入一个超参数 η\etaη(通常称为学习率)来控制每次更新的步长,从而调节梯度下降的速度。
具体来说,这一过程可以表述为:给定初始权重 w0w_0w0,通过迭代方式更新权重,
wn+1=wn−η⋅∇L(wn)w_{n+1} = w_n - \eta \cdot \nabla L(w_n)wn+1=wn−η⋅∇L(wn)
其中,LLL 表示损失函数,∇L(wn)\nabla L(w_n)∇L(wn) 表示在当前权重 wnw_nwn 处损失函数的梯度,而 η\etaη 控制着每次沿负梯度方向移动的步长大小。适当选择 η\etaη 的值对于确保算法能够有效地收敛到最小值至关重要。
实际上,通过上述的迭代过程并设定合适的学习率 η\etaη,我们确实能够找到一个局部最优解。然而,这并不能保证找到全局最优解。
如上图所示,尽管从初始点 w0w_0w0 经过 TTT 次迭代后达到了 wTw_TwT 这个局部最小值,但这个位置并非全局最小值。要到达全局最小值,需要越过一个相对较高的“山峰”,即所谓的Loss壁垒。根据梯度下降算法本身的特性,如果学习率设置不当,是无法跨越这种局部极小值区域进而达到全局最优解的。为了克服这个问题,可以尝试使用较大的学习率 η\etaη,使得更新步骤能够跳过这些障碍,从而在后续的迭代过程中有可能抵达全局最优解。
然而,这不禁使我们思考:是否一定要达到全局最优解才是最理想的呢?
实际上,追求绝对的最优解并不总是最佳选择。例如,在数据处理阶段,如果某个数据点因错误处理而形成了所谓的“针形”异常(即异常突出的数据点),那么模型在训练过程中可能会被这些异常值误导,从而学习到一些不具备泛化性的特征或模式。这种情况不仅会浪费计算资源,还可能导致过拟合问题,使得模型在训练集上表现优异,但在未见过的测试集或实际应用中性能大幅下降。
因此,在实际应用中,适度接受次优解可能更加明智。通过适当的正则化、引入早停机制(early stopping)、使用dropout等技术,可以有效防止模型陷入局部极小值或者对异常值过于敏感的问题。此外,合理设置超参数如学习率 η\etaη,以及采用更先进的优化算法(如Adam、RMSprop等),也可以帮助模型更好地泛化,并避免被训练数据中的噪声和异常值所干扰。最终目标是构建一个既能够准确捕捉数据本质特征,又具有较强泛化能力的模型,以确保其在各种应用场景下的稳定性和可靠性。


我们发现:经过多轮迭代后,上述模型的误差为 L=0.48kL = 0.48kL=0.48k。尽管这一误差值表明模型在当前阶段的表现仍存在较大改进空间,但这种结果实际上受到多种因素的影响。以下是一些可能的原因:
-
模型复杂度不足(欠拟合)
如果模型过于简单,例如使用了线性模型来处理非线性问题,可能会导致其无法捕捉到数据中的复杂模式和特性,从而出现欠拟合现象。这通常表现为训练误差和测试误差都较高。在这种情况下,可以尝试增加模型的复杂度,例如引入更多特征、使用更高阶的多项式回归,或者采用深度学习等更强大的模型架构。 -
训练集样本数量不足
数据是机器学习模型的核心驱动力。如果训练集样本数量过少,模型可能无法充分学习到数据的分布规律,进而影响其泛化能力。解决这一问题的方法包括:收集更多真实数据、进行数据增强(data augmentation),或者使用迁移学习技术,利用预训练模型的知识来弥补数据量的不足。 -
超参数设定不合理
超参数的选择对模型性能有着重要影响。例如,学习率 η\etaη 设置过高可能导致模型无法收敛,而设置过低则会导致训练过程过慢甚至陷入局部最优解;正则化系数设置不当可能导致欠拟合或过拟合。因此,在实际应用中,建议通过网格搜索(grid search)、随机搜索(random search)或贝叶斯优化(Bayesian optimization)等方法对超参数进行调优,以找到最佳的配置。 -
特征工程不足
特征的质量直接影响模型的学习效果。如果特征选择不当或特征提取不充分,模型可能难以捕捉到数据中的关键信息。为此,可以通过特征选择算法(如递归特征消除 RFE)、主成分分析(PCA)降维,或者手工设计更有意义的特征来提升模型的表现。 -
噪声和异常值的影响
如果训练数据中存在较多噪声或异常值,模型可能会被误导,从而学习到错误的模式。为了缓解这一问题,可以在数据预处理阶段进行异常值检测和清理,或者采用鲁棒性更强的模型和损失函数(如Huber损失)。 -
评估指标的选择
最后需要注意的是,误差值 L=0.48kL = 0.48kL=0.48k 是否合理,还需要结合具体的应用场景和评估指标来判断。例如,在某些任务中,误差值 0.48k0.48k0.48k 可能已经足够好,而在其他任务中可能仍然需要进一步优化。因此,选择合适的评估指标(如均方误差 MSE、平均绝对误差 MAE 或准确率 Accuracy)以及合理的误差容忍范围,对于模型的实际应用至关重要。
我们还发现:在训练集上的误差 L=0.48kL= 0.48 kL=0.48k 是小于在测试集上的误差 L=0.58kL= 0.58 kL=0.58k 的,这不禁使我们思考:是否测试集误差一定大于训练集误差?
通常情况下,我们会发现测试集上的误差大于训练集上的误差,这是因为模型在训练集上进行了直接的学习和参数调整,而在测试集上则需要对未见过的数据进行预测。然而,这一现象并非绝对。在某些特定情况下,可能会观察到训练集上的误差高于测试集误差,这可能由以下几个因素导致:
- 数据分布不均:如果训练集和测试集的样本分布存在显著差异,可能导致模型在训练集上表现不佳,但在测试集上表现较好。
- 过拟合问题:虽然过拟合通常会导致训练集误差低而测试集误差高,但在极端情况下,如果测试集中包含大量与模型假设高度吻合的数据点,即使模型过度适应了训练集,也可能在测试集上表现出较低的误差。
- 样本量差异:当训练集的样本量远小于测试集时,训练集可能无法充分代表整体数据分布,从而导致较高的误差;相反,较大的测试集更有可能覆盖数据的所有特征,使得模型在测试集上的表现优于训练集。
- 噪声数据的影响:如果训练集中含有较多的噪声或异常值,模型可能会学习到这些不相关的模式,从而影响其在训练集上的性能,但若测试集相对“干净”,模型的表现反而会更好。

从图中可以看出,估计值(蓝色曲线)相对于标签值(红色曲线)似乎存在一定的滞后。
还可以看出,在增加训练样本后,模型的误差 L’L^’L’ 在2021年只能达到0.46k并且无法进一步提升,可能是因为模型过于简单,模型在训练集上过度拟合、数据分布变化、时间序列特性的复杂性以及超参数调优不足等原因。
线性模型的非线性拓展

上述可以发现:
- 左图强调了线性模型的局限性,即简单的线性关系无法捕捉复杂的数据模式。
- 右图展示了如何通过组合多个分段线性函数来逼近复杂的非线性关系,从而实现线性模型的非线性拓展



Q :非线性从哪里来?
A : 用一个线性函数加上一个阶梯状的函数,阶梯状的函数使用Sigmoid进行拟合




在上述定义的损失函数中,1/N 是一个用于表示平均损失的系数。由于梯度更新的核心在于损失函数对模型参数的偏导数,而 1/N 对最终的求导结果并无实质影响,因此可以选择将其省略。
它的作用主要是为损失值赋予不同的物理意义:
- 如果保留
1/N,则损失表示的是单个样本的平均损失。 - 如果省略
1/N,则损失表示的是整个样本集的总损失。
损失函数并不需要显式地包含模型中的所有参数,但必须通过模型的输出间接依赖于这些参数。 在优化过程中,梯度下降的目标是找到最优的模型参数。如果某个参数对损失函数没有任何影响(即损失函数与该参数无关),那么我们无法通过梯度下降来优化该参数。
因此,为了确保所有参数都能被优化,损失函数的设计需要满足以下条件:
- 它必须通过模型的前向传播过程间接依赖于所有的可训练参数。
- 这样才能为每个参数提供有效的梯度信息,从而实现参数的更新和优化。


分批:每一批样本可以得到新的参数
在深度学习中,选择合适的batch_size对训练效率和模型性能非常重要。 - 一次性使用所有样本的问题
虽然可以将batch_size设置为样本总数(如 10,000),但这种方式通常效率较低,尤其是在模型参数较多或硬件资源有限的情况下。此外,一次性学习所有样本容易导致模型过拟合,因为模型可能会过度关注训练数据的整体分布,而忽略局部特征。 batch_size的灵活性
实际上,batch_size可以设置为任意值,甚至可以为 1(即随机梯度下降,SGD)。但为了提高计算效率和程序实现的便利性,通常建议选择 2 的倍数(如 32、64、128 等)。这种选择有以下优点:- 更好地利用硬件资源(如 GPU 的并行计算能力)。
- 在训练过程中引入一定的随机性,有助于提升模型的泛化能力。

在实际应用中,Sigmoid 和 ReLU 激活函数在某些场景下的效果可能相差不大。然而,ReLU 因其以下优势而被广泛采用:
- 实现简单:ReLU 的计算仅涉及阈值操作,无需复杂的指数运算,计算效率更高。
- 缓解梯度消失问题:相比于 Sigmoid,ReLU 在正区间内的梯度恒为 1,能够有效缓解深层网络中的梯度消失问题。
因此,在深度学习中,ReLU 成为了更常用的激活函数,尤其是在深层神经网络的训练中表现尤为突出。

上述展示了一个使用多层神经网络进行浏览量预测的实验结果。左侧列出了不同时间段的损失值,右侧则通过图表直观地展示了模型预测值与真实值之间的对比,指出了模型在某些时间段可能存在预测误差的问题。


通用的多类分类器

图中主要说明了多类分类器的两种实现方式:将分类问题视为回归问题和使用one-hot编码表示类别。
左侧内容:
- 回归(Regression):输入特征 ( x ) 经过模型处理后,输出一个连续值 ( y ),然后通过某种方式将其映射为预测值 ( y^\hat{y}y^ )。
- 将分类视为回归(Classification as regression?):尝试用数值来代表不同的类别(如1=class 1, 2=class 2, 3=class 3),但这种方式存在问题。例如,类别1和2在数值上更接近,而类别1和3则较远,但实际上三个类别之间并没有这种远近关系。
右侧内容:
- 类别作为one-hot向量(Class as one-hot vector):每个类别用一个独热编码(one-hot encoding)表示,即一个向量中只有一个元素为1,其余为0。例如,三个类别分别表示为 ([1, 0, 0]), ([0, 1, 0]), ([0, 0, 1])。这种方式确保了类别之间的平等性,没有远近之分。
- 神经网络结构:展示了一个简单的神经网络结构,包含多个隐藏层和输出层。每个输出节点对应一个类别的概率或置信度。
- 如何输出多个值(How to output multiple values?):对于多类分类问题,需要神经网络能够同时输出多个值,每个值对应一个类别的概率。这与只输出一个值的回归问题不同。
总结:
- 将分类问题直接视为回归问题是不合适的,因为类别之间没有数值上的远近关系。
- 使用one-hot编码表示类别是一种更好的方法,它能确保类别之间的平等性。
- 在神经网络中,可以通过设计多个输出节点来解决多类分类问题,每个节点对应一个类别的概率。

图中说明了多类分类问题和回归问题在神经网络中的实现方式,以及如何通过softmax函数将分类问题的输出映射为概率分布。
左侧内容:
- 类别作为one-hot向量(Class as one-hot vector):每个类别用一个独热编码表示,例如三个类别分别表示为 ([1, 0, 0]), ([0, 1, 0]), ([0, 0, 1])。
- 神经网络结构:展示了一个简单的神经网络结构,包含多个隐藏层和输出层。每个输出节点对应一个类别的概率或置信度。现在产生三个输出 (y1y_1y1), (y2y_2y2), (y3y_3y3),分别对应三个类别的预测值。
右侧内容:
- 回归(Regression):输入特征 (x) 经过模型处理后,输出一个连续值 (y),然后通过某种方式将其映射为预测值 (y^\hat{y}y^)。公式为 (y^=b+cTσ(b+Wx)\hat{y} = b + c^T \sigma(b + Wx)y^=b+cTσ(b+Wx)),其中 (b) 和 (c) 是偏置项,(W) 是权重矩阵,(σ\sigmaσ) 是激活函数。
- 分类(Classification):输入特征 (x) 经过模型处理后,输出一个向量 (y),然后通过softmax函数将其映射为概率分布 (y^′\hat{y}'y^′)。公式为 (y^′=softmax(y)\hat{y}' = \text{softmax}(y)y^′=softmax(y)),其中 (y=b′+W′σ(b+Wx)y = b' + W'\sigma(b + Wx)y=b′+W′σ(b+Wx))。softmax函数确保所有输出值在0到1之间,并且它们的总和为1。
总结:
- 在多类分类问题中,使用one-hot编码表示类别,并通过神经网络生成多个输出值,再使用softmax函数将这些值转换为概率分布。
- 在回归问题中,直接输出一个连续值,并通过某种方式将其映射为预测值。
1. 回归问题的公式:
y^=b+cTσ(b+Wx) \hat{y} = b + c^T \sigma(b + Wx) y^=b+cTσ(b+Wx)
- 这个公式表示的是一个回归模型。这里 bbb 是偏置项,cTc^TcT 是权重向量(转置),σ\sigmaσ 表示激活函数(例如ReLU, Sigmoid等),WWW 是权重矩阵,xxx 是输入特征。
- 输出 y^\hat{y}y^ 是一个标量值,代表预测的连续输出。
2. 分类问题的公式:
y=b′+W′σ(b+Wx) y = b' + W' \sigma(b + Wx) y=b′+W′σ(b+Wx)
- 这个公式用于多类分类问题。这里 b′b'b′ 也是一个偏置项,W′W'W′ 是一个新的权重矩阵,用于将隐藏层的输出映射到类别数目的空间中。
- 输出 yyy 是一个向量,其维度等于类别数量。每个元素对应于一个类别的得分或未归一化的概率。
关键区别:
-
cTc^TcT vs W′W'W′:
- 在回归问题中,cTc^TcT 是一个权重向量,它的作用是将隐藏层的输出加权求和得到最终的标量输出。
- 在分类问题中,W′W'W′ 是一个权重矩阵,它的作用是将隐藏层的输出映射到多个类别上。因为分类问题通常需要输出多个值(每个类别一个值),所以使用矩阵而不是向量来完成这个任务。
-
bbb vs b′b'b′:
- 在回归问题中,bbb 是一个单一的偏置项,它直接加到最终的输出上。
- 在分类问题中,b′b'b′ 也是偏置项,但它是一个向量,每个元素对应于输出类别中的一个偏置。
为什么它们看起来不一样?
- 回归问题的目标是预测一个具体的数值,因此只需要一个标量输出,对应的参数(如偏置和权重)也都是针对单个输出设计的。
- 分类问题的目标是为每个类别生成一个得分或未归一化的概率,因此需要一组参数(如偏置向量和权重矩阵)来处理多个输出。
综上所述,尽管在隐藏层部分两者可能共享相同的结构(如相同的 WWW 和 bbb),但由于它们解决的问题类型不同,输出层的设计也会有所不同,这导致了两个公式的外观差异。具体来说,回归问题使用向量乘法 cTc^TcT 来产生单个输出,而分类问题则使用矩阵 W′W'W′ 来产生多个输出。
图片和文字内容主要说明了两个概念:Softmax 函数在多分类问题中的应用 和 分类任务中损失函数的选择(MSE vs. 交叉熵)。以下是详细的解释:
1. Softmax 函数
定义与性质
- 公式:Softmax 函数将一个向量 y=[y1,y2,...,yn]\mathbf{y} = [y_1, y_2, ..., y_n]y=[y1,y2,...,yn] 映射为另一个向量 y′=[y1′,y2′,...,yn′]\mathbf{y'} = [y'_1, y'_2, ..., y'_n]y′=[y1′,y2′,...,yn′],其中每个元素 yi′y'_iyi′ 的计算方式为:
yi′=exp(yi)∑j=1nexp(yj) y'_i = \frac{\exp(y_i)}{\sum_{j=1}^{n} \exp(y_j)} yi′=∑j=1nexp(yj)exp(yi) - 性质:
- 每个 yi′y'_iyi′ 都是介于 0 和 1 之间的值,即 0<yi′<10 < y'_i < 10<yi′<1。
- 所有 yi′y'_iyi′ 的总和等于 1,即 ∑i=1nyi′=1\sum_{i=1}^{n} y'_i = 1∑i=1nyi′=1。
应用场景
- 多分类问题:Softmax 函数常用于神经网络的输出层,将模型对各个类别的“得分”转换为概率分布,便于进行分类决策。
示例
假设输入向量 y=[3,1,−3]\mathbf{y} = [3, 1, -3]y=[3,1,−3],则经过 Softmax 函数处理后得到的概率分布为:
- y1′=exp(3)exp(3)+exp(1)+exp(−3)≈0.88y'_1 = \frac{\exp(3)}{\exp(3) + \exp(1) + \exp(-3)} \approx 0.88y1′=exp(3)+exp(1)+exp(−3)exp(3)≈0.88
- y2′=exp(1)exp(3)+exp(1)+exp(−3)≈0.12y'_2 = \frac{\exp(1)}{\exp(3) + \exp(1) + \exp(-3)} \approx 0.12y2′=exp(3)+exp(1)+exp(−3)exp(1)≈0.12
- y3′=exp(−3)exp(3)+exp(1)+exp(−3)≈0.00y'_3 = \frac{\exp(-3)}{\exp(3) + \exp(1) + \exp(-3)} \approx 0.00y3′=exp(3)+exp(1)+exp(−3)exp(−3)≈0.00
2. 分类任务中的损失函数选择
常见损失函数
- 均方误差 (MSE):适用于回归问题,但在分类问题中表现不佳。
e=∑i(y^i−yi′)2 e = \sum_{i} (\hat{y}_i - y'_i)^2 e=i∑(y^i−yi′)2 - 交叉熵 (Cross-entropy):更适合分类问题,能够更好地衡量预测概率分布与真实标签之间的差异。
e=−∑iy^ilnyi′ e = -\sum_{i} \hat{y}_i \ln y'_i e=−i∑y^ilnyi′
为什么交叉熵更好?
- 最大化似然性:最小化交叉熵等价于最大化似然性,这使得模型更倾向于生成接近真实标签的预测结果。
- 梯度计算:交叉熵损失函数在反向传播过程中能提供更有意义的梯度信息,有助于模型更快收敛。
总结
- Softmax 函数 将模型的输出映射为概率分布,适用于多分类问题。
- 在分类任务中,交叉熵损失函数 相比 MSE 更加合适,因为它能更好地衡量预测结果与真实标签之间的差异,并且有助于模型更快地学习和收敛。

分类任务中的损失函数选择
网络结构
- 输入层:输入特征向量 x\mathbf{x}x。
- 网络层:通过神经网络处理输入,输出一个向量 y=[y1,y2,y3]\mathbf{y} = [y_1, y_2, y_3]y=[y1,y2,y3]。
- Softmax 层:将网络的输出 y\mathbf{y}y 转换为概率分布 y′=[y1′,y2′,y3′]\mathbf{y'} = [y'_1, y'_2, y'_3]y′=[y1′,y2′,y3′],其中每个元素表示对应类别的概率。
损失函数
- 均方误差 (MSE):用于回归问题,但在分类问题中表现不佳。
e=∑i(y^i−yi′)2 e = \sum_{i} (\hat{y}_i - y'_i)^2 e=i∑(y^i−yi′)2 - 交叉熵 (Cross-entropy):更适合分类问题,能够更好地衡量预测概率分布与真实标签之间的差异。
e=−∑iy^ilnyi′ e = -\sum_{i} \hat{y}_i \ln y'_i e=−i∑y^ilnyi′
损失函数的可视化
- MSE 损失函数:
- 左侧的图显示了 MSE 损失函数的表面。
- 从图中可以看出,MSE 损失函数在某些区域可能会导致梯度消失或梯度爆炸,使得优化过程变得困难。
- 图中标注了“stuck!”,表示在某些区域模型可能陷入局部最优解。
- 交叉熵损失函数:
- 右侧的图显示了交叉熵损失函数的表面。
- 从图中可以看出,交叉熵损失函数的表面更加平滑,有助于模型更快地收敛到全局最优解。
- 图中标注了“large”和“small”,表示损失值的大小变化。
总结
- 损失函数的形式可以影响模型优化的难度:选择合适的损失函数对于模型的训练至关重要。交叉熵损失函数通常更适合分类任务,因为它能提供更有效的梯度信息,帮助模型更快地收敛。
为啥MSE在分类问题中表现不佳
下面进行说明:
在分类问题中,MSE(均方误差)通常表现不佳的原因主要与其梯度特性、优化难度以及与概率分布的不匹配有关。以下通过一个具体的实例来说明为什么 MSE 不适合分类任务,而交叉熵更适合。
背景
假设我们有一个简单的二分类问题,目标是根据输入特征 xxx 预测类别标签 y∈{0,1}y \in \{0, 1\}y∈{0,1}。模型输出的是一个标量值 z=wTx+bz = w^T x + bz=wTx+b,然后通过激活函数将其映射到概率空间:
- Sigmoid 激活函数:$ \hat{y} = \sigma(z) = \frac{1}{1 + e^{-z}} $,将 zzz 映射到 [0,1][0, 1][0,1] 的概率范围。
- 我们的目标是让模型预测的概率 y^\hat{y}y^ 接近真实标签 yyy。
接下来,我们分别用 MSE 和 交叉熵 作为损失函数进行分析。
1. MSE 损失函数的表现
公式
对于二分类问题,MSE 的公式为:
LMSE=(y^−y)2 L_{\text{MSE}} = (\hat{y} - y)^2 LMSE=(y^−y)2
问题分析
-
梯度消失问题:MSE 对 Sigmoid 输出的梯度计算如下:
∂LMSE∂z=2(y^−y)⋅σ′(z) \frac{\partial L_{\text{MSE}}}{\partial z} = 2 (\hat{y} - y) \cdot \sigma'(z) ∂z∂LMSE=2(y^−y)⋅σ′(z)
其中 σ′(z)\sigma'(z)σ′(z) 是 Sigmoid 的导数:
σ′(z)=σ(z)⋅(1−σ(z)) \sigma'(z) = \sigma(z) \cdot (1 - \sigma(z)) σ′(z)=σ(z)⋅(1−σ(z))
当 y^\hat{y}y^ 接近 0 或 1(即 Sigmoid 的饱和区域),σ′(z)\sigma'(z)σ′(z) 会变得非常小,导致梯度接近于零。这会导致优化过程变慢甚至停滞(“梯度消失”问题)。 -
非线性优化困难:MSE 的损失表面在分类问题中往往是非凸的,容易导致模型陷入局部最优解。
实例
假设真实标签 y=1y = 1y=1,当前模型预测的概率 y^=0.99\hat{y} = 0.99y^=0.99(已经非常接近真实值)。此时:
- MSE 损失为:
LMSE=(0.99−1)2=0.0001 L_{\text{MSE}} = (0.99 - 1)^2 = 0.0001 LMSE=(0.99−1)2=0.0001 - 梯度为:
∂LMSE∂z=2(0.99−1)⋅0.99⋅(1−0.99)=−0.000198 \frac{\partial L_{\text{MSE}}}{\partial z} = 2 (0.99 - 1) \cdot 0.99 \cdot (1 - 0.99) = -0.000198 ∂z∂LMSE=2(0.99−1)⋅0.99⋅(1−0.99)=−0.000198
这个梯度非常小,即使预测值 y^\hat{y}y^ 已经很接近真实值,模型仍然需要很长时间才能进一步优化。
2. 交叉熵损失函数的表现
公式
对于二分类问题,交叉熵的公式为:
LCE=−[yln(y^)+(1−y)ln(1−y^)] L_{\text{CE}} = - [y \ln(\hat{y}) + (1 - y) \ln(1 - \hat{y})] LCE=−[yln(y^)+(1−y)ln(1−y^)]
优势分析
-
梯度稳定:交叉熵对 Sigmoid 输出的梯度计算如下:
∂LCE∂z=y^−y \frac{\partial L_{\text{CE}}}{\partial z} = \hat{y} - y ∂z∂LCE=y^−y
这个梯度直接反映了预测值 y^\hat{y}y^ 与真实值 yyy 的差距,且不依赖于 σ′(z)\sigma'(z)σ′(z)。因此,即使 y^\hat{y}y^ 接近 0 或 1,梯度也不会显著减小。 -
更快收敛:由于梯度更直接地反映了误差大小,交叉熵能够更快地推动模型向正确的方向优化。
实例
继续使用上述例子,假设真实标签 y=1y = 1y=1,当前模型预测的概率 y^=0.99\hat{y} = 0.99y^=0.99。此时:
- 交叉熵损失为:
LCE=−ln(0.99)≈0.01005 L_{\text{CE}} = - \ln(0.99) \approx 0.01005 LCE=−ln(0.99)≈0.01005 - 梯度为:
∂LCE∂z=0.99−1=−0.01 \frac{\partial L_{\text{CE}}}{\partial z} = 0.99 - 1 = -0.01 ∂z∂LCE=0.99−1=−0.01
相比 MSE 的梯度(-0.000198),交叉熵的梯度更大,优化速度更快。
3. 总结对比
| 特性 | MSE | 交叉熵 |
|---|---|---|
| 梯度公式 | 2(y^−y)⋅σ′(z)2 (\hat{y} - y) \cdot \sigma'(z)2(y^−y)⋅σ′(z) | y^−y\hat{y} - yy^−y |
| 梯度稳定性 | 在 Sigmoid 饱和区梯度消失 | 梯度始终稳定 |
| 优化速度 | 较慢,易陷入局部最优 | 较快,收敛更高效 |
| 损失表面 | 非凸,可能有多个局部极小值 | 更平滑,更适合分类任务 |
结论
通过上述实例可以看出:
- MSE 在分类问题中表现不佳的主要原因是梯度消失问题和非凸损失表面,导致优化过程缓慢且容易陷入局部最优。
- 交叉熵 则避免了这些问题,其梯度直接反映预测值与真实值的差距,优化更高效且稳定。
因此,在分类任务中,交叉熵通常是更好的选择。
更多推荐



所有评论(0)