Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第3章:神经网络核心

第3章:神经网络核心

3.3 损失函数的设计

3.3.1 损失函数的定义与作用

损失函数(Loss Function)是神经网络训练中的核心组件,用于量化模型预测结果与真实值之间的差异。其核心作用包括:

  1. 性能评估:衡量模型在当前参数下的表现
  2. 优化导向:为反向传播提供梯度计算依据
  3. 任务适配:不同任务需要设计不同的损失函数

数学表达式:

L(θ)=1N∑i=1Nℓ(yi,f(xi;θ))L(\theta) = \frac{1}{N}\sum_{i=1}^N \ell(y_i, f(x_i;\theta)) L(θ)=N1​i=1∑N​ℓ(yi​,f(xi​;θ))

其中θ\thetaθ为模型参数,f(xi;θ)f(x_i;\theta)f(xi​;θ)为模型预测值。

3.3.2 常见损失函数分类

(1)回归任务损失函数

函数名称公式特性
均方误差 (MSE)1n∑(y−y^)2\frac{1}{n}\sum(y-\hat{y})^2n1​∑(y−y^​)2对异常值敏感,可导性强
平均绝对误差 (MAE)1n∑∣y−y^∣\frac{1}{n}\sum|y-\hat{y}|n1​∑∣y−y^​∣鲁棒性强,在0点不可导
Huber Loss分段函数(结合MSE和MAE)平衡鲁棒性与可导性

(2)分类任务损失函数

  • 交叉熵损失(Cross-Entropy):

    L=−∑c=1Myclog⁡(pc)L = -\sum_{c=1}^M y_c \log(p_c) L=−c=1∑M​yc​log(pc​)

    适用于多分类任务,对错误预测施加更大惩罚

  • 二元交叉熵:

    L=−[ylog⁡(p)+(1−y)log⁡(1−p)]L = -[y\log(p)+(1-y)\log(1-p)] L=−[ylog(p)+(1−y)log(1−p)]

  • 合页损失(Hinge Loss):

    L=max⁡(0,1−y⋅y^)L = \max(0, 1 - y\cdot\hat{y}) L=max(0,1−y⋅y^​)

    常用于SVM和最大间隔分类器

(3)特殊任务损失函数

  • Triplet Loss:用于度量学习(如人脸识别)
  • Focal Loss:解决类别不平衡问题
  • Wasserstein Loss:生成对抗网络中的稳定训练

3.3.3 损失函数设计原则

  1. 任务匹配原则:

    • 分类任务:优先选择交叉熵系列
    • 回归任务:根据异常值情况选择MSE/MAE
    • 排序任务:考虑Pairwise或Listwise损失
  2. 数值稳定性:

    • 添加微小常数避免log(0)情况
    • 使用log-sum-exp技巧处理数值溢出
  3. 多目标平衡:

    # 多任务学习示例
    total_loss = α*loss1 + β*loss2 + γ*regularization
    

3.3.4 自定义损失函数实践

案例:医疗诊断中的代价敏感损失

class MedicalLoss(nn.Module):
    def __init__(self, penalty_ratio=5.0):
        super().__init__()
        self.ratio = penalty_ratio  # 假阴性的惩罚系数
        
    def forward(self, pred, target):
        base_loss = F.binary_cross_entropy(pred, target)
        # 对false negative增加额外惩罚
        mask = (target == 1) & (pred < 0.5)
        penalty = mask.float().sum() * self.ratio
        return base_loss + penalty

3.3.5 损失函数选择建议

  1. 优先使用领域标准损失函数
  2. 对于不平衡数据考虑加权损失
  3. 复杂任务可尝试损失函数组合
  4. 始终在验证集上评估损失选择效果

关键理解:好的损失函数应该像"精准的指南针",既能反映任务本质需求,又能为优化过程提供清晰的梯度方向。

Last Updated:: 5/20/25, 7:33 PM