<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>损失函数 on Lumenth</title>
        <link>https://blog.lumenth.me/tags/%E6%8D%9F%E5%A4%B1%E5%87%BD%E6%95%B0/</link>
        <description>Recent content in 损失函数 on Lumenth</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>Lumenth</copyright>
        <lastBuildDate>Thu, 15 Oct 2026 12:04:25 +0800</lastBuildDate><atom:link href="https://blog.lumenth.me/tags/%E6%8D%9F%E5%A4%B1%E5%87%BD%E6%95%B0/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>深度学习基础笔记5-损失函数</title>
        <link>https://blog.lumenth.me/p/loss/</link>
        <pubDate>Sat, 10 Oct 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.lumenth.me/p/loss/</guid>
        <description>&lt;img src="https://blog.lumenth.me/p/loss/wallpaper.png" alt="Featured image of post 深度学习基础笔记5-损失函数" /&gt;&lt;h1 id=&#34;损失函数&#34;&gt;损失函数
&lt;/h1&gt;&lt;p&gt;损失函数（Loss Function）用来衡量预测值 ŷ 和真实标签 y （也就是实际值）之间的差距，计算输出一个标量 L 代表损失。&lt;/p&gt;
&lt;p&gt;而“误差”：e = ŷ - y，是一个差值而不是一个独立的 “误差函数”。&lt;/p&gt;
&lt;p&gt;在&lt;a class=&#34;link&#34; href=&#34;../BackPropagation/&#34; &gt;反向传播笔记&lt;/a&gt;里，损失 L 是整个计算图的起点：前向传播算出 ŷ，损失函数把 ŷ 和真实标签 y 的差距压成一个数，反向传播再从这个数出发往回算梯度。这里把它单独展开整理。&lt;/p&gt;
&lt;h2 id=&#34;为什么需要损失函数&#34;&gt;为什么需要损失函数
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;神经网络本身不知道自己训练推理的结果是否正确，损失函数能够量化预测误差，使神经网络知道自己的预测好不好。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;损失函数也能为反向传播提供更新的源头，方便权重更新。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将人类的意图翻译给ai，做不同任务需要用不同的损失函数。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;好损失函数的几条标准&#34;&gt;好损失函数的几条标准
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;必须可导（至少几乎处处可导）&lt;/strong&gt;：反向传播要沿它往回传梯度，这是硬要求；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;能真实反映&amp;quot;错得多离谱&amp;quot;&lt;/strong&gt;：损失降下去的时候，最终的评价指标也要跟着变好；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;梯度性质好&lt;/strong&gt;：错得越离谱梯度越大，接近正确时梯度趋近 0，也就是自带&amp;quot;自适应步长&amp;quot;，既学得动又不会在最优附近来回跳；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;与输出层激活函数匹配&lt;/strong&gt;：配错了会直接梯度消失（见后面 MSE + Sigmoid 的例子）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数值稳定&lt;/strong&gt;：涉及 log 时要避免 log(0)，实践上交给框架提供的融合实现（BCEWithLogitsLoss、CrossEntropyLoss），别自己先激活再算损失；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对离群点的态度要符合任务&lt;/strong&gt;：离群点多的回归场景，就该选 MAE 或 Huber 而不是 MSE。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;常见损失函数&#34;&gt;常见损失函数
&lt;/h2&gt;&lt;h3 id=&#34;均方误差损失函数-mse&#34;&gt;均方误差损失函数 MSE
&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/loss/MSE.png&#34;
	width=&#34;348&#34;
	height=&#34;137&#34;
	srcset=&#34;https://blog.lumenth.me/p/loss/MSE_hu_debaa9d9fb92d044.png 480w, https://blog.lumenth.me/p/loss/MSE_hu_dc67c0b2c3bbf67a.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;254&#34;
		data-flex-basis=&#34;609px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;可以拆解MSE分为三部分：做差、平方、求平均
&lt;img src=&#34;https://blog.lumenth.me/p/loss/MSE_1.png&#34;
	width=&#34;1080&#34;
	height=&#34;441&#34;
	srcset=&#34;https://blog.lumenth.me/p/loss/MSE_1_hu_ee60218d78d637be.png 480w, https://blog.lumenth.me/p/loss/MSE_1_hu_42da62977dca6c8b.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;244&#34;
		data-flex-basis=&#34;587px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;MSE的优点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;通过平方消除误差的正负符号，只衡量偏差大小。&lt;/li&gt;
&lt;li&gt;放大误差，对于大误差惩罚更大：比如3的平方是9，对于小误差惩罚更小：比如0.3的平方是0.09&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;MSE的导数：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/loss/MSEDAO.png&#34;
	width=&#34;318&#34;
	height=&#34;118&#34;
	srcset=&#34;https://blog.lumenth.me/p/loss/MSEDAO_hu_edf40b3822a1d679.png 480w, https://blog.lumenth.me/p/loss/MSEDAO_hu_52cd65f5d0e137.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;269&#34;
		data-flex-basis=&#34;646px&#34;
	
&gt;&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;以误差e = ŷ - y 作为横轴变量，MSE 的梯度曲线是一个过原点的直线，离真实值越远，梯度绝对值越大，所以MSE自带一个梯度上的“自适应步长”。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;MSE的局限：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;对离群点敏感：一个出错的离群点，错误过于离谱的话，会被放大到极大，如误差为10000的话，会被放大到 10 的 8 次方，把batch梯度带偏。&lt;/li&gt;
&lt;li&gt;假设目标连续可比：对类别标签无法实现，但对预测房价、预测温度这种是可以实现的，预测值要有连续性。&lt;/li&gt;
&lt;li&gt;配合sigmoid会梯度消失（Sigmoid 在预测很自信时，导数趋近于 0；再乘上 MSE 的梯度项，整体梯度变得极小，参数几乎不更新，也就是梯度消失。），因此几乎不能用在分类任务上。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;梯度消失：&lt;/p&gt;
&lt;p&gt;求导：
&lt;img src=&#34;https://blog.lumenth.me/p/loss/%E6%A2%AF%E5%BA%A6%E6%B6%88%E5%A4%B1.png&#34;
	width=&#34;473&#34;
	height=&#34;304&#34;
	srcset=&#34;https://blog.lumenth.me/p/loss/%E6%A2%AF%E5%BA%A6%E6%B6%88%E5%A4%B1_hu_f58bf5e512442e9c.png 480w, https://blog.lumenth.me/p/loss/%E6%A2%AF%E5%BA%A6%E6%B6%88%E5%A4%B1_hu_56104666a92cc5d1.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;155&#34;
		data-flex-basis=&#34;373px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;比如在二分类任务中，真实值是1，但预测值接近0，这时y - ŷ = 1，应当去给大梯度修正，但ŷ(1-ŷ)约为0。相乘后梯度约为0，梯度消失完全学不动。&lt;/p&gt;
&lt;h4 id=&#34;mse背后的假设&#34;&gt;MSE背后的假设
&lt;/h4&gt;&lt;p&gt;在模型输出与真实值的误差服从高斯分布的假设下，最小化均方差损失函数与极大似然估计本质上是一致的，所以MSE擅长的是集中在0附近、没有重尾的回归任务&lt;/p&gt;
&lt;p&gt;尾部：概率分布图两端远离中心 0 的区域，就是&lt;strong&gt;尾部&lt;/strong&gt;，代表出现很大误差的概率。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;轻尾：离 0 越远，概率&lt;strong&gt;指数级快速下降&lt;/strong&gt;。简单说：误差很大的样本非常罕见，几乎没有极端异常点。&lt;/li&gt;
&lt;li&gt;重尾：尾部衰减很慢，&lt;strong&gt;时不时会冒出很大的误差（离群点 outlier）&lt;/strong&gt;。比如学生 t 分布、帕累托分布，哪怕偏离均值很远，依然有不小概率出现。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此在这个假设能被满足的场景中（比如回归），均方差损失是一个很好的损失函数选择；当这个假设没能被满足的场景中（比如分类），均方差损失不是一个好的选择。&lt;/p&gt;
&lt;h3 id=&#34;平均绝对误差-mae&#34;&gt;平均绝对误差 MAE
&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/loss/MAE_MATH.png&#34;
	width=&#34;239&#34;
	height=&#34;87&#34;
	srcset=&#34;https://blog.lumenth.me/p/loss/MAE_MATH_hu_8582fdcfa1414c28.png 480w, https://blog.lumenth.me/p/loss/MAE_MATH_hu_3864f0b1ee69ef59.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;274&#34;
		data-flex-basis=&#34;659px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/loss/MAE.png&#34;
	width=&#34;612&#34;
	height=&#34;407&#34;
	srcset=&#34;https://blog.lumenth.me/p/loss/MAE_hu_8dd832cdc4f71b8e.png 480w, https://blog.lumenth.me/p/loss/MAE_hu_7a697ef8251c57cd.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;150&#34;
		data-flex-basis=&#34;360px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;与MSE的区别：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;MSE 通常比 MAE 可以更快地收敛，因为 MAE 梯度固定为±1，MSE 的梯度会随误差大小变化&lt;/li&gt;
&lt;li&gt;正因为 MAE 的梯度固定为 ±1，它不会随误差大小被放大：离群点的梯度不会像 MSE 那样被平方放大成巨值，也就不会把整个 batch 的梯度带偏，因此 MAE 对离群点更鲁棒。代价是接近最优时步长不收缩，收敛末期不如 MSE 容易微调。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;huber-loss--smooth-l1&#34;&gt;Huber Loss / Smooth L1
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          ½ (ŷ − y)²          , |ŷ − y| ≤ δ
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;L = 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          δ·|ŷ − y| − ½δ²     , |ŷ − y| &amp;gt; δ
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Huber Loss 则是一种将 MSE 与 MAE 结合起来，取两者优点的损失函数，也被称作 Smooth Mean Absolute Error Loss。就是在误差接近 0 时使用 MSE，误差较大时使用 MAE。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/loss/Huber.png&#34;
	width=&#34;442&#34;
	height=&#34;272&#34;
	srcset=&#34;https://blog.lumenth.me/p/loss/Huber_hu_962260136da00c1f.png 480w, https://blog.lumenth.me/p/loss/Huber_hu_8b77c17c91caa55b.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;162&#34;
		data-flex-basis=&#34;390px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;适用场景&lt;/strong&gt;：回归，兼顾 MSE 与 MAE&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Huber Loss 结合了 MSE 和 MAE 损失，在误差接近 0 时使用 MSE，使损失函数可导并且梯度更加稳定；&lt;/li&gt;
&lt;li&gt;在误差较大时使用 MAE 可以降低 outlier 的影响，使训练对 outlier 更加健壮。&lt;/li&gt;
&lt;li&gt;缺点是需要额外地设置一个超参数 δ 。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;交叉熵-ce&#34;&gt;交叉熵 CE
&lt;/h3&gt;&lt;p&gt;交叉熵的表达式是 L = −Σᵢ yᵢ · log ŷᵢ，其中 yᵢ 是 one-hot 标签，ŷᵢ 是模型输出的概率。利用 one-hot 的性质，求和会坍缩，只剩真实类别对应的 −log(ŷᵢ) 一项。&lt;/p&gt;
&lt;h4 id=&#34;二元交叉熵-bcebinary-cross-entropy&#34;&gt;二元交叉熵 BCE（Binary Cross-Entropy）
&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;L = −[ y·log ŷ + (1 − y)·log(1 − ŷ) ]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/loss/BCE.png&#34;
	width=&#34;445&#34;
	height=&#34;272&#34;
	srcset=&#34;https://blog.lumenth.me/p/loss/BCE_hu_b25224061641d30d.png 480w, https://blog.lumenth.me/p/loss/BCE_hu_c923db6a16836ab0.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;163&#34;
		data-flex-basis=&#34;392px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;适用场景&lt;/strong&gt;：二分类，搭配 Sigmoid 输出层；多标签分类时对每个类别各算一次&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BCE + Sigmoid&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;求导：
&lt;img src=&#34;https://blog.lumenth.me/p/loss/BCE_Sigmoid_DAO.png&#34;
	width=&#34;1215&#34;
	height=&#34;566&#34;
	srcset=&#34;https://blog.lumenth.me/p/loss/BCE_Sigmoid_DAO_hu_bc9f7cb6e3a886de.png 480w, https://blog.lumenth.me/p/loss/BCE_Sigmoid_DAO_hu_56ddd34251d81059.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;214&#34;
		data-flex-basis=&#34;515px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;求导后发现梯度就是 ŷ − y，简单好算。&lt;/p&gt;
&lt;h4 id=&#34;多类交叉熵-cross-entropy&#34;&gt;多类交叉熵 Cross-Entropy
&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;L = −Σᵢ yᵢ · log ŷᵢ
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;适用场景&lt;/strong&gt;：多分类，搭配 Softmax 输出层&lt;/p&gt;
&lt;p&gt;使用方法解析：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;softmax可以将网络最后一层原始输出 z（Logits，未经过激活函数激活）转化成每项非负合为一的分布。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;套入到CE中，求和坍缩到正确类。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;举例分析：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3分类任务，z为[2.0，1.0，0.1]，one-hot标签为[1,0,0]&lt;/li&gt;
&lt;li&gt;softmax处理后转化为：[0.66，0.24，0.10]。&lt;/li&gt;
&lt;li&gt;套入CE中：L = -1&lt;em&gt;log(0.66)-0&lt;/em&gt;log(0.24)-0*log(0.10)=-log(0.66)=0.42。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;反传到原始输出Logits的导数：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.lumenth.me/p/loss/CE_SOFTMAX_DAO.png&#34;
	width=&#34;236&#34;
	height=&#34;78&#34;
	srcset=&#34;https://blog.lumenth.me/p/loss/CE_SOFTMAX_DAO_hu_9ef896aa7b5c8a67.png 480w, https://blog.lumenth.me/p/loss/CE_SOFTMAX_DAO_hu_e88704238570fdd1.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;302&#34;
		data-flex-basis=&#34;726px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;为预测值减真实值，简单易算。&lt;/p&gt;
&lt;h3 id=&#34;其他&#34;&gt;其他
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quantile Loss&lt;/strong&gt;：在实际应用中非常有用的回归算法，通常的回归算法是拟合目标值的期望或者中位数，而分位数回归可以通过给定不同的分位点，拟合目标值的不同分位数。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hinge Loss&lt;/strong&gt;：&lt;code&gt;L = max(0, 1 − y·ŷ)&lt;/code&gt;，另外一种二分类损失函数，适用于 maximum-margin 的分类（标签取 ±1）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;输出层激活与损失函数怎么搭配&#34;&gt;输出层激活与损失函数怎么搭配
&lt;/h2&gt;&lt;p&gt;这两处必须成对选择，配错了梯度会很难算甚至训不动：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;任务类型&lt;/th&gt;
          &lt;th&gt;输出层激活&lt;/th&gt;
          &lt;th&gt;损失函数&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;回归&lt;/td&gt;
          &lt;td&gt;无（线性输出）&lt;/td&gt;
          &lt;td&gt;MSE / MAE / Huber&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;二分类&lt;/td&gt;
          &lt;td&gt;Sigmoid&lt;/td&gt;
          &lt;td&gt;二元交叉熵 BCE&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;多分类（类别互斥）&lt;/td&gt;
          &lt;td&gt;Softmax&lt;/td&gt;
          &lt;td&gt;多类交叉熵&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;多标签分类&lt;/td&gt;
          &lt;td&gt;每个类别各一个 Sigmoid&lt;/td&gt;
          &lt;td&gt;逐类别的 BCE&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;import torch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;import torch.nn as nn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# ============= 回归: MSE =============
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;criterion = nn.MSELoss()                 # 默认 reduction=&amp;#39;mean&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;loss = criterion(pred, target)            # pred, target 同形状的浮点张量
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# ============= 二分类: BCE =============
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 推荐用 BCEWithLogitsLoss——输入是 logits (Sigmoid 之前), 数值更稳
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;criterion = nn.BCEWithLogitsLoss()
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;loss = criterion(logits, target.float())  # target 是 0/1 浮点
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# ============= 多分类: CrossEntropyLoss =============
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 关键: 输入是 logits (softmax 之前!), 不是概率
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;criterion = nn.CrossEntropyLoss()
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;loss = criterion(logits, target.long())   # target 是 LongTensor, 存类别下标 (不是 one-hot)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;小结&#34;&gt;小结
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;损失函数把&amp;quot;预测得准不准&amp;quot;压成一个可求导的标量 L&lt;/strong&gt;，它既是训练的目标，也是反向传播的起点；&lt;/li&gt;
&lt;li&gt;选它要看这几条：可导、梯度性质好（错得多梯度大、接近正确梯度小）、与输出层激活匹配、数值稳定；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;回归用 MSE / MAE / Huber&lt;/strong&gt;：MSE 在误差服从高斯、没有重尾时最优，且自带自适应步长，但怕离群点；MAE 梯度恒为 ±1，抗离群点，代价是末期不好微调；Huber 小误差用平方、大误差用线性，两头兼顾，多一个超参数 δ；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分类一律用交叉熵&lt;/strong&gt;：二分类 BCE 配 Sigmoid，多分类 CE 配 Softmax。两者反传到 logits 的梯度都恰好是&amp;quot;预测值 − 真实值&amp;quot;，好算又好收敛；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;别用 MSE 做分类&lt;/strong&gt;：Sigmoid 在预测很自信时导数趋近 0，再乘上 MSE 的梯度项就整体趋近 0，梯度消失、完全学不动；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输出层激活与损失函数必须成对选&lt;/strong&gt;：回归不加激活直接算损失，多标签分类则对每个类别各用一个 Sigmoid + BCE。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料：
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://cloud.tencent.com/developer/article/1950150&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;六个深度学习常用损失函数总览：基本形式、原理、特点&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
