从0开始深度学习(18)——环境和分布偏移
有时,根据测试集的精度衡量,模型表现得非常出色。 但是当数据分布突然改变时,模型在部署中会出现灾难性的失败。
有时模型的部署本身就是扰乱数据分布的催化剂。 举一个有点荒谬却可能真实存在的例子。 假设我们训练了一个贷款申请人违约风险模型,用来预测谁将偿还贷款或违约。 这个模型发现申请人的鞋子与违约风险相关(穿牛津鞋申请人会偿还,穿运动鞋申请人会违约)。 此后,这个模型可能倾向于向所有穿着牛津鞋的申请人发放贷款,并拒绝所有穿着运动鞋的申请人。
本章会揭露揭示一些常见的问题
1 分布偏移的类型
1.1协变量偏移
指的是训练数据和测试数据的输入分布不同,但条件分布 P ( y ∣ x ) P(y∣x) P(y∣x) 保持不变,即输入的分布可能随时间而改变, 但标签函数(即条件分布
)没有改变。
以区分猫狗为例,下面是训练集用的图像:
下面是测试集用的图像,即对下面的图像进行分类:
训练集由真实照片组成,而测试集只包含卡通图片。 假设在一个与测试集的特征有着本质不同的数据集上进行训练, 如果没有方法来适应新的领域,可能会有麻烦。
1.2 标签偏移
指的是训练数据和测试数据的标签分布不同,但条件分布 P ( x ∣ y ) P(x∣y) P(x∣y)保持不变。即标签的边际分布发生了变化,而给定标签的输入特征分布保持不变。
以开发一个疾病诊断模型为例:
- 在 A 医院收集了很多患者的诊断数据,进行模型训练,可能因为 A 医院专长于某种疾病,该疾病的比例在数据中非常高。
- 你在 B 医院测试模型,但是B医院的患者数据标签分布与A医院不同,可能该疾病的患者比例较低,由于训练集和测试集的标签分布不同,模型可能更倾向于预测该病
1.3 概念偏移
指的是输入数据与标签之间的关系发生了变化,即条件分布 P ( y ∣ x ) P(y∣x) P(y∣x) 发生变化。这种变化通常出现在模型部署后的实际应用中,环境、用户行为、市场趋势等随时间改变,导致原有模型不再准确。
以金融欺诈检测为例:
- 训练阶段:模型学到了根据历史交易特征(如金额、时间、地点)来预测是否是欺诈行为。
- 部署后:欺诈者的行为模式改变,使用新的手段进行欺诈,因此同样的交易特征可能不再代表欺诈行为。
2 分布偏移纠正
2.1 经验风险和实际风险
经验风险:指模型在给定训练数据集上所犯错误的平均值
经验风险(empirical risk)是为了近似 真实风险(true risk), 整个训练数据上的平均损失,即从其真实分布 p ( x , y ) p(x,y) p(x,y)中抽取的所有数据的总体损失的期望值:
2.2 协变量偏移纠正
我们可以通过在真实风险的计算中,使用以下简单的恒等式来进行纠正:
∫ ∫ l ( f ( x ) , y ) p ( y ∣ x ) p ( x ) d x d y = ∫ ∫ l ( f ( x ) , y ) q ( y ∣ x ) q ( x ) p ( x ) q ( x ) d x d y . \begin{aligned} \int\int l(f(\mathbf{x}), y) p(y \mid \mathbf{x})p(\mathbf{x}) \;d\mathbf{x}dy = \int\int l(f(\mathbf{x}), y) q(y \mid \mathbf{x})q(\mathbf{x})\frac{p(\mathbf{x})}{q(\mathbf{x})} \;d\mathbf{x}dy. \end{aligned} ∫∫l(f(x),y)p(y∣x)p(x)dxdy=∫∫l(f(x),y)q(y∣x)q(x)q(x)p(x)dxdy.
即根据数据来自正确分布与来自错误分布的概率之比, 来重新衡量每个数据样本的权重:
β i = d e f p ( x i ) q ( x i ) . \beta_i \stackrel{\mathrm{def}}{=} \frac{p(\mathbf{x}_i)}{q(\mathbf{x}_i)}. βi=defq(xi)p(xi).
将权重 β i \beta_{i} βi代入到每个数据样本 ( x i , y i ) (\mathbf{x}_i, y_i) (xi,yi)中, 我们可以使用”加权经验风险最小化“来训练模型:
m i n i m i z e f 1 n ∑ i = 1 n β i l ( f ( x i ) , y i ) . \mathop{\mathrm{minimize}}_f \frac{1}{n} \sum_{i=1}^n \beta_i l(f(\mathbf{x}_i), y_i). minimizefn1i=1∑nβil(f(xi),yi).
由于不知道这个比率,我们需要估计它,这里使用对数几率回归(logistic regression)
现在,我们来看一下完整的协变量偏移纠正算法。 假设我们有一个训练集 { ( x 1 , y 1 ) , … , ( x n , y n ) } \{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\} {(x1,y1),…,(xn,yn)}和一个未标记的测试集 { u 1 , … , u m } \{\mathbf{u}_1, \ldots, \mathbf{u}_m\} {u1,…,um}.。对于协变量偏移,我们假设 1 ≤ i ≤ n 1 \leq i \leq n 1≤i≤n的 x i x_{i} xi来自某个源分布, u i \mathbf{u}_i ui来自目标分布。 以下是纠正协变量偏移的典型算法:
2.3 标签偏移纠正
重要性加权是一种常用的技术,用于调整模型的训练过程,使其更好地适应测试数据的标签分布。通过为训练数据中的每个样本分配权重,使得样本的影响程度与其在测试集中的重要性相匹配。
步骤:
1、估计训练集和测试集的标签分布:
- P t r a i n ( y ) P_{train}(y) Ptrain(y):训练集中的标签分布
- P t e s t ( y ) P_{test}(y) Ptest(y):测试集中的标签分布
2、计算权重:
w e i g h t ( y ) = P t e s t ( y ) P t r a i n ( y ) weight(y)=\frac{P_{test}(y)}{P_{train}(y)} weight(y)=Ptrain(y)Ptest(y)
3、在训练过程中,对每个样本的损失进行加权:
w e i g h t e d l o s s = ∑ i w e i g h t ( y i ) ⋅ L ( f ( x i , θ ) , y i ) weighted loss= \sum_{i} weight(y_{i}) ·L(f(x_{i},\theta),y_{i}) weightedloss=i∑weight(yi)⋅L(f(xi,θ),yi)
通过这种方式,模型在训练时会更重视那些在测试集中频繁出现的标签。
2.4 概念偏移纠正
使用新数据更新现有的网络权重,而不是从头开始训练。
3 学习问题的分类法
有了如何处理分布变化的知识,我们现在可以考虑机器学习问题形式化的其他方面。
3.1 批量学习
在批量学习(batch learning)中,我们可以访问一组训练特征和标签 { ( x 1 , y 1 ) , … , ( x n , y n ) } \{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\} {(x1,y1),…,(xn,yn)}, 我们使用这些特性和标签训练 f ( x ) f(\mathbf{x}) f(x)。 然后,我们部署此模型来对来自同一分布的新数据 ( x , y ) (\mathbf{x}, y) (x,y)进行评分。
例如,我们可以根据猫和狗的大量图片训练猫检测器。 一旦我们训练了它,我们就把它作为智能猫门计算视觉系统的一部分,来控制只允许猫进入。 然后这个系统会被安装在客户家中,基本再也不会更新。
3.2 在线学习
在线学习是一种逐步更新模型的方法。在这种学习模式下,模型在接收到新数据后会立即进行更新,而不需要在训练结束后一次性处理所有数据。与传统的批量学习(Batch Learning)相对,后者通常在收集完所有数据后进行训练。
例如,在实时推荐系统中,在用户行为不断变化的场景中,在线学习可以根据最新的用户活动实时调整推荐算法。
3.3 老虎机
老虎机问题是在线学习中的一个经典特例,旨在解决探索与利用之间的权衡。该问题可以通过“老虎机”来形象化,想象有多个老虎机,每个老虎机都有不同的中奖概率。玩家的目标是在有限的尝试次数内最大化其总奖励。
例如,在线广告投放,即在多个广告选项中选择以最大化点击率。
3.4 控制
3.5 强化学习
相关文章:

从0开始深度学习(18)——环境和分布偏移
有时,根据测试集的精度衡量,模型表现得非常出色。 但是当数据分布突然改变时,模型在部署中会出现灾难性的失败。 有时模型的部署本身就是扰乱数据分布的催化剂。 举一个有点荒谬却可能真实存在的例子。 假设我们训练了一个贷款申请人违约风险…...

Java项目-基于springboot框架的线上买菜系统项目实战(附源码+文档)
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...

API接口的未来趋势:智能化、自动化与集成化的发展
在当今数字化驱动的世界中,应用程序编程接口(API)已成为连接不同软件、平台和服务的关键桥梁。随着技术的不断进步,API接口的未来趋势将聚焦于智能化、自动化与集成化的发展。本文将深入探讨这些趋势,并分析其在推动数…...

Yolo系列 V1和V2的对比
在计算机视觉领域中,目标检测是一个核心问题,旨在识别图像中所有感兴趣的目标,并给出它们的类别和位置。近年来,随着深度学习技术的发展,目标检测领域取得了巨大的进步。Yolo(You Only Look Once࿰…...

安装vue发生异常: idealTree:nodejs: sill idealTree buildDeps
一、异常 C:\>npm install vue -g npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIREDnpm ERR! request to https://registry.npm.taobao.org/vue failed, reason: certificate has expired 二、原因 请求 https://registry.npm.taobao.org 失败,证…...

SQL基础练习
SQL语句的下载脚本链接!!! 【免费】SQL练习资源-具体练习操作可以查看我发布的文章资源-CSDN文库https://download.csdn.net/download/Z0412_J0103/89908378 1 查看所有数据库 SHOW DATABASES; 结果展示: 2 创建库 方法一&#…...

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行
Python 如何处理大规模数据库表的迁移与数据迁移的高效执行 引言 在现代应用开发中,随着业务需求的增长,数据库表结构和数据往往需要进行迁移和更新。迁移(Migration)是指对数据库表的结构、数据类型、索引、约束等进行修改或更新…...

如何在 MySQL 中处理大量的 DELETE 操作
全文目录: 开篇语前言摘要简介概述DELETE 操作的基本概念常用的 DELETE 方法 核心源码解读简单 DELETE 语句批量 DELETE 示例 案例分析案例1:使用简单 DELETE 删除用户数据案例2:使用分批 DELETE 应用场景演示场景1:用户管理系统场…...

技嘉主板怎么开启TPM_技嘉主板开启TPM2.0教程
在win11最低要求是提示,电脑必须满足 TPM 2.0,并开需要开启TPM 才能正常安装windows11系统,有很多技嘉主板的用户问我,技嘉主板怎么开启tpm功能呢?下面小编就给大家详细介绍一下技嘉主板开启tpm功能的方法。 如何确认你…...

正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 5427(unattended-upgr)持有
这段信息表示你的系统正在等待一个锁文件 (/var/lib/dpkg/lock-frontend) 解除。锁文件用于防止多个进程同时修改系统的包管理器(apt 或 dpkg),避免冲突或损坏系统。 在这种情况下,进程 unattended-upgr(自动升级进程…...

js实现简单的【发布者-订阅者模式】
发布订阅模式是什么 发布订阅模式是一种代码的设计模式,它允许对象间进行松散耦合的通信。 发布者(Publishers)不会直接调用订阅者(Subscribers),相反,它们通过事件通道发布消息;订…...

java学习--集合(大写四.4)
4.collection子接口:List 4.1 List接口存储数据特点 List接口中存储数据的特点:用于存储有序\可以重复的数据. 可以使用List替代数组,动态数组 4.2List接口常用方法 4.2.1、第一波: Collection中声明的15个方法 4.2.2、第二波:因为List是…...

CSS3文本阴影、文本换行、文本溢出、文本修饰、文本描边的使用
1.文本阴影:text-shadow 2.文本换行: white-space:pre(可以理解为按原文显示) white-space:pre-wrap(不会超出父容器) 3.文本溢出 text-overflow:ellipsis一般配合文本…...

Python实现股票自动交易:步骤、要点与注意事项有哪些?
炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...

闪存----
闪存是一种非易失性存储设备,用于在电子设备中存储数据。使用固态电子存储技术,不含运动部件,因此具有更高的耐久性和更快的访问速度。闪存能够永久的保存数据,即使在断电的情况下也不会丢失。 闪存的速度主要得益于 非机械结构、…...

Spring Boot论坛网站:安全特性与性能优化
4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…...

【MATLAB源码-第261期】基于matlab的帝企鹅优化算法(EPO)机器人栅格路径规划,输出做短路径图和适应度曲线
操作环境: MATLAB 2022a 1、算法描述 帝企鹅优化算法(Emperor Penguin Optimizer,简称EPO)是一种基于自然现象的优化算法,灵感来自于帝企鹅在南极极寒环境中的生活习性。帝企鹅是一种群居动物,生活在极端…...

Spring Boot 核心理解-profile
在 Spring Boot 中,application.properties 和 application.yml 是用来管理应用程序配置的主要文件。为了方便在不同的环境(如 dev、test、prod)下进行配置管理,Spring Boot 提供了 Profile 的概念,这使得我们可以针对…...

docker清理未使用的 Docker 资源
docker system prune --all --forcedocker system prune --all --force 是一个 Docker 命令,用于清理未使用的 Docker 资源。具体含义如下: docker system prune:这个命令会清理所有未使用的 Docker 资源,包括未使用的容器、网络…...

新网虚拟主机wordpress伪静态规则
先在WordPress安装目录下的创建.htaccess 文件,并在该文件中添加以下规则: BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ [L] RewriteCond %{REQUEST_FILENAME} !f RewriteCond %{REQUEST_…...

Spring Cloud LoadBalancer
什么是负载均衡? 如果一个服务对应多个实例,我们需要把流量合理的分配给多个实例;当服务流量增⼤时, 通常会采⽤增加机器的⽅式进⾏扩容, 负载均衡就是⽤来在多个机器或者其他资源,中, 按照⼀定的规则合理分配负载. 服务端负载…...

面向对象与设计模式第二课:设计模式实战
第三章:面向对象与设计模式 第二课:设计模式实战 设计模式是软件工程中的一项重要实践,它为解决常见的设计问题提供了经过验证的解决方案。本课将深入探讨几种常见的设计模式,并通过实际案例分析其在项目中的应用。 1. 每种设计…...

非科班出身如何转行程序员?
非科班出身是指那些大学专业为非计算机相关专业的人群,多数人对于计算机基础了解比较少,甚至零基础。这部分人群中有相当多一部分处于对于编程的兴趣和外界了解的印象想转行成为一名程序员。 非科班出身与计算机科班出身相比有着天然的劣势,在…...

多台NFS客户端访问一台nfs服务器
目录 1.安装服务 2.创建用户和用户组 3.写配置文件 (服务端) 4.创建/share目录 5.挂载服务(在两个服务端上) 6.测试 1.安装服务 yum -y install rpcbind nfs 2.创建用户和用户组 useradd -u 555 nfs-share groupadd -u 556 nfs-share …...

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波
【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波 前言MPU6050寄存器代码详解mpu6050.cmpu6050.h 使用说明 前言 本篇文章基于卡尔曼滤波的原理详解与公式推导,来详细的解释下如何使用卡尔曼滤波来解算MPU6050的姿态 参考资料:Github_mpu6050 MPU6050寄存器…...

Linux系统——ssh远程连接
Linux系统——ssh远程连接 一、ssh协议介绍1、远程连接协议2、ssh服务基本操作3、ssh常用操作 二、ssh加密1、加密算法类型2、对称加密算法3、非对称加密算法 三、免密ssh的配置1、ssh认证方式2、配置免密ssh3、ssh-copy-id做了什么? 四、ssh服务配置 一、ssh协议介…...

python学习-第一个小游戏(vscode环境)
学习小甲鱼的视频,写了一个小游戏,vscode环境 运行结果 源码地址: python小游戏-猜数字源码...

程序设计基础I-单元测试2(机测)
7-1 sdut-C语言实验-AB for Input-Output Practice (不确定次数循环) Your task is to Calculate a b. Too easy?! Of course! I specially designed the problem for all beginners. You must have found that some problems have the same titles with this one, yes, a…...

Claude 3.5深夜觉醒,学会模仿人类用电脑,力压GPT-4o
1.Claude 3.5深夜重磅更新 Anthropic AI深夜发布了备受期待的Claude 3.5系列更新,包括了全新升级的Claude 3.5 Sonnet和首发的Claude 3.5 Haiku。 虽然备受期待的Opus版本尚未公布,但新版本的Sonnet在推理能力上取得了显著的进步,超越了Open…...

PuTTY
PuTTY 是一个免费的开源终端仿真器和串口终端,广泛用于在 Windows 系统上进行 SSH、Telnet 和 Rlogin 等网络协议的连接。 它允许用户通过安全的方式访问远程计算机,常用于管理服务器和网络设备。 PuTTY 也支持公钥身份验证和端口转发等功能,…...