💻
QMMMS的笔记
博客
  • QMMMS的笔记
  • agent
    • MCP的背景、原理和开发
    • Agent 历史与背景
    • Agentic Workflows
    • 环境检查与基础工具
    • Tool Call
    • 工具与运行时的值
    • temp
    • 处理 Tool Call error
    • trick
  • algorithm
    • 线性结构
    • 二叉树
    • 图
    • 查找
    • 排序
    • 动态规划
    • 优化方法
    • 数学
    • 迁移至Java
  • computer_composition
    • 系统总线
    • 存储器
    • 输入输出系统
    • 计算机的运算方法
    • 指令系统
    • 补充
  • computer_network
    • 引入
    • 应用层
    • 传输层
    • 网络层(数据平面)
    • 网络层(控制平面)
    • 链路层
    • 常见问答
    • 实验
  • database
    • SQL实战
    • 关系代数
    • 数据库设计
    • 规范化
    • 数据库基本概念
    • 查询原理
    • 数据库恢复技术
    • 并发控制
  • dev_tools
    • Git
    • Nginx
    • Spring
    • LangChain
    • PyTorch Cheat Sheet
    • MyBatis
    • MySQL Cheat Sheet
    • MySQL 补充
    • Redis
    • Docker
    • RocketMQ
    • Chrome
  • linux
    • Linux基础命令与使用
    • 文件与权限
    • 文件与目录操作
    • 权限属性高级
    • 命令与文件的查找
    • 文件压缩和打包
    • vim编辑器
    • shell变量
    • 命令补充
    • 数据流重定向
    • 管道命令
    • shell脚本
    • 用户管理
    • 用户间交流
    • 计划任务
    • 进程管理
    • 软件管理
    • 认识系统服务
    • 运维常用命令
    • 常用命令
  • llm
    • 大规模语言模型概述
    • 分布式训练概述
    • 有监督微调概述
    • 强化学习与LLM
    • LLM评估概述
    • 大模型应用
    • 理解大模型
    • 量化
    • 预训练
    • 上下文学习
  • machine_learning
    • 引入
    • 大致正确学习
    • 一致收敛
    • 偏差还是过拟合?
    • 可学习的充要条件
    • 非均匀可学习性
    • 计算复杂性
  • mathematics
    • 概率与统计基础
    • 线性代数基础
  • operating_system
    • 操作系统基本概念
    • 进程和线程
    • 同步,互斥与死锁
    • 内存管理
    • 文件系统
    • I/O系统
    • 保护与安全
    • 《现代操作系统》
  • statistical_learning
    • 统计学习引入
    • 线性回归
    • 分类
    • 重抽样方法
    • 线性模型选择与正则化
    • 非线性模型
    • 基于树的方法
    • 支持向量机
    • 无指导学习
    • 马尔科夫链和蒙托卡罗方法简明理解
    • R语言速查
  • deep_learning
    • basic_concepts
      • 逻辑回归与损失函数
      • 神经网络
      • 正则化、预处理、权重初始化
      • 优化算法
      • 机器学习策略
      • 复习:从计算机视觉的角度
      • 卷积神经网络
      • 深度卷积网络示例
      • 计算机视觉任务
      • 循环神经网络
      • 自然语言处理任务
      • 注意力
      • Transformers 家族
      • 显卡扫盲
      • 强化学习概述
    • semi-supervise
      • 半监督学习简介
      • Consistency Regularization
      • Proxy-label Methods
      • Holistic Methods
      • Generative Models
      • Graph-Based SSL
      • Self-Supervision for SSL
      • Other SSL methods
  • programming
    • cpp
      • STL
      • C++基础
      • 内存管理
      • 面向对象
    • java
      • 环境和介绍
      • 注释
      • String
      • 面向对象思想
      • Object
      • 包
      • 访问权限修饰符
      • 初始化块
      • 接口
      • 内部类
      • 注解
      • 枚举
      • 集合框架
      • List
      • Map
      • 泛型
      • 迭代
      • IO与流
      • 序列化
      • 异常
      • Lambda
      • Stream流
      • Socket
      • 缓冲
      • 命名规范
      • 拆箱装箱
      • 值传递
      • 深拷贝
      • 反射
      • JVM
      • 并发编程基础
    • python
      • 并发编程
      • 环境管理
  • software_engineering
    • basic_concepts
      • 系统分析与设计概述
      • 规划
      • 需求分析与原型设计
      • 项目管理
      • 建模
      • 数据库设计
      • 架构
      • 配置管理
      • 测试管理
      • 安全
      • 编码原则
      • 微服务
      • 补充内容
    • software_testing
      • CMMI基础
      • PPQA与SQA
      • 软件测试基础
      • 黑盒测试
      • 白盒测试
      • 集成测试
      • 系统测试
      • 测开面试补充
由 GitBook 提供支持
在本页
  • 没有免费午餐定理
  • 误差分解
在GitHub上编辑
  1. machine_learning

偏差还是过拟合?

上一页一致收敛下一页可学习的充要条件

最后更新于6个月前

没有免费午餐定理

复习一下,之前我们学过,减少过拟合的一种方式是使用归纳偏好(Inductive Bias)。预先设定一个假设类 H\mathcal{H}H ,使用经验风险最小化(ERM)的机器学习算法从 H\mathcal{H}H 中选择一个误差最小的预测函数 h∈Hh \in \mathcal{H}h∈H

这样的假设类可以视作先验知识——相信 H\mathcal{H}H 中的某个成员是该任务的低误差模型。

先验知识对机器学习算法的成功真的必要吗?是否存在一个不需要先验知识的通用的机器学习算法?即:

对于域 X\mathcal{X}X 上的二元分类任务的学习算法,针对0−1损失,是否存在一个固定的机器算法 AAA ,在任意一个 X×{0,1}\mathcal{X}\times\{0,1\}X×{0,1} 分布 D\mathcal{D}D 上,接收到 mmm (小于 ∣X∣/2|\mathcal{X}|/2∣X∣/2 )个独立同分布的样本,能输出一个低损失的预测函数 hhh ?

没有免费午餐定理(The No-Free- Lunch theorem)指出不存在这样的机器学习算法。更准确地说,定理指出,对于二元分类预测任务,对于每个机器学习算法,都存在一个其失败的分布。我们定义一个机器学习算法失败为:

  1. 从分布选出 mmm 个样本作为训练集,S∼DmS\sim\mathcal{D}^mS∼Dm,至少有1/7的概率,使得 LD(A(S))≥1/8L_\mathcal{D}(A(S)) \geq 1/8LD​(A(S))≥1/8

  2. 存在另一个函数 fff 使得 LD(h)=0L_\mathcal{D}(h) =0LD​(h)=0

换句话说,没有免费午餐定理指出没有机器学习算法能在所有可学习任务上成功——每个机器学习算法都有失败的任务,而其他机器学习算法则成功。

证明在这里省略了,可以看书,证明的思路是,假设 CCC 是大小为 2m2m2m 的 X\mathcal{X}X 的子集,任何只观察 C 中一半实例的学习算法没有关于 C 中其余实例标签的信息。因此,某个目标函数 fff ,它的 A(S)A(S)A(S) 预测与 C 上未观察实例标签矛盾。

推论5.2:X \mathcal{X}X 是一个有限的假设类,如果 H\mathcal{H}H 包括X×{0,1}\mathcal{X}\times\{0,1\}X×{0,1} 上所有的函数,不能进一步缩小范围,那么 H\mathcal{H}H 不是 PAC 可学习的。

推论5.2证明:复习一下,因为根据PAC可学习性的定义,如果已知存在某个预测函数 LD(f)=0L_\mathcal{D}(f) = 0LD​(f)=0,那么必须存在某个学习算法 AAA 和整数 m=m(ϵ,δ)m = m(\epsilon, \delta)m=m(ϵ,δ),当 AAA 应用于从 D\mathcal{D}D 中生成的大小为 mmm 的独立同分布样本 SSS 时,大于 1−δ1 - \delta1−δ 概率的情况下,有 LD(A(S))≤ϵL_\mathcal{D}(A(S)) \leq \epsilonLD​(A(S))≤ϵ。但是,根据没有免费午餐定理,由于 ∣X∣≥2m|\mathcal{X}| \geq 2m∣X∣≥2m,对于每个学习算法(尤其是算法 AAA ),存在一个分布 D\mathcal{D}D ,大于 1/7>δ1/7 > \delta1/7>δ 概率的情况下,有 LD(A(S))>1/8>ϵL_\mathcal{D}(A(S)) > 1/8 > \epsilonLD​(A(S))>1/8>ϵ

如何防止这种失败?可以使用对特定学习任务的先验知识,以避免在学习该任务时导致失败的分布。这种先验知识可以通过限制假设类 H\mathcal{H}H 来表达。但我们应该如何选择一个好的假设类?

  • 一方面,我们希望这个类至少在PAC设置中包含没有误差的假设,或者至少从这个类中可实现的最小误差确实相当小

  • 另一方面,我们刚刚看到我们不能简单地选择最丰富的类——给定域上所有函数的类。

对 D\mathcal{D}D 的先验分为几种方式:

误差分解

我们研究了使用假设类作为形式化先验知识的方法的优点和缺点。我们将一个假设类上的ERM算法的误差分解为两个部分。

两个部分意味着我们需要作出权衡:

在许多情况下,经验研究( empirical research)专注于为某个特定领域设计好的假设类。在这里,“好”意味着近似误差不会过高的类。这个想法是,尽管我们不是专家,也不知道如何构建最优分类器,但我们对手头的具体问题仍有一些先验知识,这使我们能够设计近似误差和估计误差都不太大的假设类。

回到木瓜的例子,我们不知道木瓜的颜色和硬度与其味道的具体关联,但我们知道木瓜是水果,并且基于其他水果的经验,我们推测在颜色-硬度空间中的一个矩形可能是一个好的预测器。

我们知道分布 D\mathcal{D}D 来自某个特定参数分布族

我们知道存在某个预定义假设类 H\mathcal{H}H ,能在可能大致正确学习(PAC)中使 LD(h)=0L_\mathcal{D}(h) =0LD​(h)=0

更柔和的先验知识是,我们知道存在某个预定义假设类 H\mathcal{H}H,能在 PAC 中使 min⁡h∈HLD(h)\min_{h\in\mathcal{H}}L_\mathcal{D}(h)minh∈H​LD​(h) 较小,在某种程度上,这种对 D\mathcal{D}D 的先验是不可知(Agnostic) PAC 模型的前提条件,使得预测函数的损失不会超过 min⁡h∈HLD(h)\min_{h\in\mathcal{H}}L_\mathcal{D}(h)minh∈H​LD​(h) 很多

LD(hS)=ϵapp+ϵestL_\mathcal{D}(h_S) = \epsilon_{\text{app}} + \epsilon_{\text{est}}LD​(hS​)=ϵapp​+ϵest​

第一个部分,ϵapp=min⁡h∈HLD(h)\epsilon_{\text{app}} = \min_{h \in \mathcal{H}} L_D(h)ϵapp​=minh∈H​LD​(h),衡量了因为限制在特定类中而面临的风险,通过假设类中的假设的最小风险来衡量,这个部分也称为近似误差(approximation error),或算法对从 H\mathcal{H}H 中选择假设的偏差(bias),扩大假设类可以减少近似误差。在可实现假设下,近似误差为零。然而,在不可知论情况下,近似误差可能很大。

第二个部分,ϵest=LD(hS)−ϵapp\epsilon_{\text{est}} = L_\mathcal{D}(h_S) - \epsilon_{\text{app}}ϵest​=LD​(hS​)−ϵapp​,是由于过拟合导致的误差,这取决于类 H\mathcal{H}H 的大小或复杂性,被称为估计误差(estimation error),在后续章节中,我们将定义假设类的其他复杂度度量。

选择 H\mathcal{H}H 为一个非常丰富或者复杂的类,可以减少近似误差,但增加过拟合的风险

选择 H\mathcal{H}H 为一个非常小或者简单的集合,可能增加近似误差(欠拟合),但减少过拟合的潜在风险