ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Logistic回归核心解析:从Sigmoid函数到交叉熵损失与梯度下降

Logistic回归核心解析:从Sigmoid函数到交叉熵损失与梯度下降 1. 从“是与否”的直觉到数学建模Logistic回归的起点我们每天都在做“是与否”的决策。这封邮件是不是垃圾邮件这张图片里有没有猫这个用户会不会点击广告这类问题在数据科学和机器学习里被称为二分类问题。解决这类问题我们第一个想到的武器往往是线性回归——画一条直线去拟合数据点然后设定一个阈值比如大于0.5预测为“是”小于0.5预测为“否”。听起来很合理对吧但实际操作过的人都知道这条路走不通而且会走得很难看。线性回归的输出范围是整个实数域从负无穷到正无穷而我们的预测目标是一个概率范围必须在0到1之间。强行用线性回归拟合分类问题会导致两个致命伤一是预测值可能超出概率的合理范围比如预测出1.5或-0.3这毫无意义二是它对极端值异常点非常敏感一条直线的轻微摆动就可能让一大堆样本的预测从“是”翻转为“否”模型极不稳定。那么我们需要的是一种方法能把任意实数“挤压”到0和1之间并且这种“挤压”是平滑、可导的。这个完美的“挤压函数”就是Sigmoid函数也叫Logistic函数。它的样子是一个优美的S形曲线数学表达式是σ(z) 1 / (1 e^{-z})这里的z就是我们熟悉的线性组合z θ^T * x θ₀ θ₁x₁ θ₂x₂ ...。你可以把z理解为一个“证据”的综合得分。当z趋向于正无穷时σ(z)无限接近1模型非常确信这是正类当z趋向于负无穷时σ(z)无限接近0模型非常确信这是负类当z 0时σ(z) 0.5模型完全无法判断。所以Logistic回归的本质就是用线性回归的“骨架”计算综合得分z套上Sigmoid函数的“外衣”将得分映射为概率从而解决二分类问题。它输出的不是一个硬性的类别标签而是一个属于正类的概率P(y1|x; θ) σ(θ^T * x)。这个概率值为我们后续的决策比如设定0.5为阈值提供了灵活性和可解释性。2. 衡量“预测概率”与“真实标签”的差距损失函数的诞生模型有了它能输出一个预测概率ŷ σ(θ^T * x)。现在的问题是我们怎么知道这个预测得好不好我们需要一个量化的标准来衡量模型预测的“错误”程度这个标准就是损失函数它计算的是单个样本的预测值与真实值之间的差异。最直观的想法是用线性回归里的均方误差MSELoss (1/2)(ŷ - y)^2。但在Logistic回归里这会导致一个非常糟糕的后果损失函数关于参数θ的图形不再是“碗状”的凸函数而是会变成有很多局部极小点的“坑坑洼洼”的地形。这意味着使用梯度下降等优化算法时我们很容易陷在一个局部最优解里出不来永远找不到全局最好的那组参数。注意这是Logistic回归学习中的一个关键认知转折点。不能因为输出看起来是个数值概率就沿用回归的损失函数。问题的本质分类决定了我们必须设计全新的、适用于概率输出的衡量标准。那么适合衡量两个概率分布差异的函数是什么呢信息论中的交叉熵给了我们答案。对于二分类问题我们可以从极大似然估计的角度非常自然地推导出交叉熵损失函数。极大似然估计的思想很简单寻找一组参数θ使得在这组参数下我们观测到的这批数据训练集出现的概率最大。对于单个样本(x, y)如果真实标签y1我们希望模型预测的概率ŷ越大越好。如果真实标签y0我们希望模型预测的概率ŷ越小越好即1-ŷ越大越好。这可以统一写成一个式子P(y|x; θ) ŷ^y * (1-ŷ)^(1-y)。这个式子很巧妙当y1时后半部分指数为0整个式子等于ŷ当y0时前半部分指数为0整个式子等于1-ŷ。我们的目标是最大化所有样本的这个联合概率也就是最大化似然函数L(θ)。但连乘计算起来很麻烦我们通常取其对数变成对数似然函数ℓ(θ)这样连乘就变成了连加。最大化对数似然函数等价于最小化其负数。经过这一步转换我们就得到了二元交叉熵损失函数对于单个样本的形式L(ŷ, y) -[y * log(ŷ) (1-y) * log(1-ŷ)]让我们来感受一下这个函数的智慧当y1时损失函数变为-log(ŷ)。如果模型预测概率ŷ接近1预测正确-log(ŷ)接近0损失小如果ŷ接近0预测错误-log(ŷ)会变得非常大损失大惩罚很重。当y0时损失函数变为-log(1-ŷ)。逻辑同理预测概率ŷ越接近0损失越小。这个函数是凸的这保证了我们使用梯度下降时能够顺利找到全局最优解。它完美地表达了我们的直觉对于错误预测尤其是“非常自信的错误预测”施以严厉的惩罚。3. 从单点损失到全局优化成本函数的角色与梯度下降损失函数L(ŷ, y)衡量的是单个样本的误差。但我们的模型是要在所有训练样本上都能表现良好因此需要定义一个全局性的目标函数这就是成本函数J(θ)。在Logistic回归中成本函数就是所有训练样本损失的平均值加上一个可选的正则化项用于防止过拟合。不带正则化的成本函数也称为逻辑损失为J(θ) -(1/m) * Σ [y⁽ⁱ⁾ * log(ŷ⁽ⁱ⁾) (1-y⁽ⁱ⁾) * log(1-ŷ⁽ⁱ⁾)]其中m是样本数量求和符号Σ对i1到m的所有样本进行累加。有了成本函数J(θ)我们的目标就明确了找到一组参数θ使得J(θ)的值最小。这个过程就是模型训练。而寻找这组参数最常用的方法就是梯度下降。梯度下降的核心思想好比蒙眼下山你想走到山谷最低点最小化成本你每走一步都会感受一下脚下最陡的下坡方向梯度负方向然后朝那个方向迈出一小步学习率α。重复这个过程你最终会大概率走到谷底。对于Logistic回归我们需要计算成本函数J(θ)关于每个参数θⱼ的偏导数即梯度。经过推导这是一个重要的练习我们可以得到一个非常简洁优美的梯度公式∂J(θ)/∂θⱼ (1/m) * Σ (ŷ⁽ⁱ⁾ - y⁽ⁱ⁾) * xⱼ⁽ⁱ⁾这个公式的形态和线性回归梯度下降的公式一模一样这是巧合吗不是。这背后深层次的原因是广义线性模型的理论在支撑。尽管ŷ的定义不同线性回归是θ^T*xLogistic回归是σ(θ^T*x)但梯度形式的一致性使得算法实现非常简洁。因此梯度下降的参数更新规则为同时更新所有θⱼθⱼ : θⱼ - α * ∂J(θ)/∂θⱼ其中α是学习率控制着每一步的步长。实操心得学习率α的选择是梯度下降能否成功收敛的关键。太大成本函数可能会在最小值附近震荡甚至发散太小收敛速度会慢得令人难以忍受。一个实用的技巧是绘制成本函数J(θ)随迭代次数的变化曲线。一条平滑下降的曲线说明学习率合适如果曲线上下剧烈波动说明学习率太大如果曲线下降得非常缓慢说明学习率太小。通常可以尝试0.001, 0.003, 0.01, 0.03, 0.1等值按3倍左右的比例进行缩放尝试。4. 应对过拟合成本函数中的正则化项当我们拥有大量特征或者特征与标签之间的关系非常复杂时模型可能会过度拟合训练数据中的噪声和细节导致在训练集上表现极好但在未见过的测试集上表现糟糕。这就是过拟合。在Logistic回归中过拟合通常表现为某些参数θⱼ的绝对值变得特别大使得Sigmoid函数在决策边界处变得非常“陡峭”几乎像一个阶跃函数对训练数据做到了“分毫不差”但丧失了泛化能力。为了抑制过拟合我们在成本函数中引入正则化项。它的作用是对过大的参数值进行“惩罚”鼓励模型找到一组更小、更简单的参数从而获得更平滑的决策边界提高泛化能力。最常用的两种正则化是L1正则化Lasso和L2正则化Ridge。L2正则化在成本函数中添加了所有参数平方和不包括偏置项θ₀通常不对其进行正则化乘以一个正则化参数λJ(θ) -(1/m) * Σ [y⁽ⁱ⁾log(ŷ⁽ⁱ⁾) (1-y⁽ⁱ⁾)log(1-ŷ⁽ⁱ⁾)] (λ/2m) * Σ θⱼ²L1正则化添加的是参数绝对值之和J(θ) -(1/m) * Σ [y⁽ⁱ⁾log(ŷ⁽ⁱ⁾) (1-y⁽ⁱ⁾)log(1-ŷ⁽ⁱ⁾)] (λ/m) * Σ |θⱼ|正则化参数λ控制着惩罚的力度λ 0退化为没有正则化的原始模型。λ太大惩罚过重所有参数除θ₀都被迫趋近于0模型会变成不管输入是什么都只预测一个值通常是多数类导致欠拟合。L1和L2正则化有何区别L2正则化使参数值整体缩小但很少会将参数精确地压缩到0。它得到的模型是所有特征的线性组合每个特征都对预测有微小贡献。L1正则化倾向于产生稀疏解即它会将一部分不重要的特征对应的参数精确地压缩到0。这实际上完成了一次特征选择模型最终只依赖于一部分关键特征。选择哪一种如果你的特征数量非常多比如成千上万并且你相信只有少数特征是真正相关的那么L1正则化可以帮助你进行特征筛选提高模型可解释性。如果特征数量不算特别多或者你认为所有特征都可能与结果有关那么L2正则化通常是更稳妥和默认的选择因为它求解更稳定。引入正则化后梯度下降的更新公式也需要做相应调整。对于L2正则化更新公式变为θⱼ : θⱼ - α * [ (1/m) * Σ (ŷ⁽ⁱ⁾ - y⁽ⁱ⁾) * xⱼ⁽ⁱ⁾ (λ/m) * θⱼ ]你可以看到每次更新时θⱼ都会额外减去(αλ/m) * θⱼ这相当于在每次迭代中都让参数值向0收缩一点从而实现权重衰减的效果。5. 手把手推导与实现梯度公式的来龙去脉很多教程直接给出梯度公式(ŷ - y) * x但知道“为什么”远比记住公式更重要。让我们亲手推导一遍这能加深对模型运作机制的理解。我们的目标是求J(θ)对某个θⱼ的偏导∂J/∂θⱼ。已知J(θ) -(1/m) Σ [y⁽ⁱ⁾ log(σ(z⁽ⁱ⁾)) (1-y⁽ⁱ⁾) log(1-σ(z⁽ⁱ⁾))]其中z⁽ⁱ⁾ θ^T x⁽ⁱ⁾。ŷ⁽ⁱ⁾ σ(z⁽ⁱ⁾) 1/(1e^{-z⁽ⁱ⁾})我们先求单个样本损失L对z的导数。令a σ(z)。L -[y log(a) (1-y) log(1-a)]求导使用链式法则∂L/∂z ∂L/∂a * ∂a/∂z∂L/∂a -[y * (1/a) (1-y) * (1/(1-a)) * (-1)] -[y/a - (1-y)/(1-a)] (1-y)/(1-a) - y/a∂a/∂z是Sigmoid函数的导数有一个非常优美的性质∂a/∂z a(1-a)。这个性质让后续推导变得简单。 推导a 1/(1e^{-z})令u 1e^{-z}则a u^{-1}da/du -u^{-2}du/dz -e^{-z}。所以da/dz (-u^{-2}) * (-e^{-z}) e^{-z} / (1e^{-z})^2 (1/(1e^{-z})) * (e^{-z}/(1e^{-z})) a * (1 - a)。将1和2的结果相乘∂L/∂z [ (1-y)/(1-a) - y/a ] * a(1-a) a(1-y) - y(1-a) a - a*y - y a*y a - y所以∂L/∂z ŷ - y。这个结果简洁得令人惊讶接下来因为z θ₀x₀ θ₁x₁ ...所以∂z/∂θⱼ xⱼ。因此对于单个样本i∂L⁽ⁱ⁾/∂θⱼ (∂L⁽ⁱ⁾/∂z⁽ⁱ⁾) * (∂z⁽ⁱ⁾/∂θⱼ) (ŷ⁽ⁱ⁾ - y⁽ⁱ⁾) * xⱼ⁽ⁱ⁾。对所有m个样本取平均就得到了我们之前给出的梯度公式∂J/∂θⱼ (1/m) * Σ (ŷ⁽ⁱ⁾ - y⁽ⁱ⁾) * xⱼ⁽ⁱ⁾这个推导过程揭示了几个关键点误差驱动学习梯度(ŷ - y)直接就是“预测值”与“真实值”的差值。这个误差信号越大参数更新的幅度就越大。特征权重更新幅度还与特征值xⱼ本身成正比。这意味着对于数值大的特征其对应的参数更新也会更敏感因此在训练前对特征进行标准化如Z-score标准化是一个好习惯可以使梯度下降更快更稳定。Sigmoid导数的妙用正是σ‘(z) σ(z)(1-σ(z))这个性质使得中间项∂L/∂z简化成了ŷ - y避免了复杂的计算。6. 超越二分类Softmax回归与多元交叉熵损失Logistic回归完美解决了二分类问题但现实世界很多问题不止两个类别例如识别手写数字0-9图像分类到猫、狗、汽车等。这时我们需要将其推广到多分类这就是Softmax回归也称为多项Logistic回归。Softmax回归的核心思想是对于每一个类别k总共有K个类别都计算一个线性得分z_k θ_k^T * x。然后通过Softmax函数将这些得分转化为一个概率分布。Softmax函数定义如下P(yk | x; θ) σ(z)_k e^{z_k} / Σ_{j1}^{K} e^{z_j}Softmax函数做了三件事对每个类别的得分z_k取指数e^{z_k}确保所有值为正。将所有类别的指数值相加得到归一化分母。将每个类别的指数值除以总和得到该类别的概率。这样对于任何一个样本模型会输出一个长度为K的概率向量每个元素代表该样本属于对应类别的概率且所有元素之和为1。相应地损失函数也需要从二元交叉熵推广到多元交叉熵损失或称分类交叉熵损失。对于单个样本其真实标签y通常用独热编码表示例如对于3分类y2表示为[0, 0, 1]。假设模型预测的概率分布为ŷ [ŷ₁, ŷ₂, ŷ₃]则损失函数为L - Σ_{k1}^{K} y_k * log(ŷ_k)由于y是独热编码只有真实类别c对应的y_c 1其他都为0所以上式简化为L - log(ŷ_c)即多元交叉熵损失只关心模型对真实类别预测概率的对数值。预测概率ŷ_c越接近1损失-log(ŷ_c)越接近0预测概率越接近0损失会急剧增大。成本函数依然是所有样本损失的平均值J(θ) -(1/m) Σ Σ y_k⁽ⁱ⁾ log(ŷ_k⁽ⁱ⁾)。Softmax回归的梯度推导比二分类情况稍复杂但结果同样清晰。对于属于类别c的样本其损失对参数θ_k的梯度为∂L⁽ⁱ⁾/∂θ_k (ŷ_k⁽ⁱ⁾ - 1{kc}) * x⁽ⁱ⁾其中1{kc}是指示函数当k等于真实类别c时为1否则为0。实操心得在实现Softmax回归时计算e^{z_k}可能会遇到数值溢出的问题z_k很大时e^{z_k}会变成无穷大。一个标准的稳定实现技巧是在计算Softmax时先从所有z_k中减去最大值max(z)e^{z_k - max(z)} / Σ e^{z_j - max(z)}。这在数学上是等价的因为分子分母同时除以e^{max(z)}但能有效避免数值溢出。7. 实战中的决策边界、评估与调优训练好模型后我们得到了参数θ。对于一个新样本x_new我们计算z θ^T * x_new然后通过Sigmoid函数得到概率ŷ σ(z)。通常我们设定一个阈值默认为0.5如果ŷ 0.5预测为正类(y1)。如果ŷ 0.5预测为负类(y0)。这个决策规则对应在特征空间里的一条线二维或一个超平面高维称为决策边界。其方程就是θ^T * x 0因为σ(0)0.5。决策边界的一侧预测为正类另一侧预测为负类。模型评估不能只看准确率尤其是在类别不平衡的数据集上比如99%的邮件都是非垃圾邮件。常用的评估指标包括精确率在所有预测为正的样本中真正为正的比例。Precision TP / (TP FP)。关注“预测的准不准”。召回率在所有真实为正的样本中被正确预测为正的比例。Recall TP / (TP FN)。关注“找的全不全”。F1分数精确率和召回率的调和平均数F1 2 * (Precision * Recall) / (Precision Recall)是综合衡量指标。ROC曲线与AUC通过不断移动分类阈值计算真正例率和假正例率绘制出的曲线。曲线下面积AUC值越接近1模型整体性能越好且对类别不平衡不敏感。模型调优是一个迭代过程特征工程Logistic回归是线性模型对于非线性关系需要手动构造特征交互项如x₁ * x₂或多项式特征如x₁²。分类型变量必须进行独热编码或有序编码。正则化强度λ通过交叉验证来选择合适的λ值。绘制不同λ下模型在验证集上的性能曲线如F1分数选择性能最佳的点。阈值调整默认0.5阈值不一定最优。根据业务需求调整如果希望尽可能抓住正类如疾病筛查可以降低阈值以提高召回率但会降低精确率如果希望预测结果非常可靠如垃圾邮件过滤可以提高阈值以提高精确率但会降低召回率。可以通过P-R曲线或ROC曲线来辅助选择。优化算法对于大数据集批量梯度下降每次用全部数据计算梯度太慢。更常用的是小批量随机梯度下降或Adam等自适应学习率算法它们能更快收敛。我在实际项目中曾遇到一个经典的陷阱特征数值尺度差异巨大。其中一个特征是“用户年龄18-60”另一个特征是“年收入以万计”。未经标准化直接训练收入特征对应的参数更新会非常剧烈且不稳定导致模型难以收敛甚至收敛到很差的解。解决方案很简单对所有连续特征进行标准化使其均值为0标准差为1。这一步操作往往能大幅提升训练速度和解的质量。Logistic回归虽然结构简单但因其良好的可解释性参数θⱼ的大小和正负直接反映了特征的影响方向和程度、高效的计算性能以及作为神经网络基础组件的重要性至今仍是工业界和学术界最基础、最常用的分类模型之一。理解其损失函数和成本函数不仅是掌握这个模型的关键更是打开广义线性模型和深度学习大门的一把钥匙。
返回列表