当前位置: 首页 > news >正文

深度学习之特征提取

前言

  深度学习就是把输入转换成一个高维的向量,之后利用这个向量去完成分类、回归等任务。


深度学习特征工程知识图谱

1. 特征提取的本质

核心目标:将原始数据→高维语义特征向量

监督驱动:标签决定特征提取方向

典型架构:  

AlexNet:首个深度CNN突破

VGG:统一卷积核设计

ResNet:残差学习框架

2. 无监督学习三大范式

方法原理典型应用
对比学习拉近正样本距离,推远负样本SimCLR、MoCo
生成对抗网络生成器-判别器博弈,生成逼真数据图像生成、风格迁移
自编码器重构输入数据,学习有效特征表示MAE、VAE

  这个表格总结了三种主要的自监督学习方法及其关键特征和应用场景。每种方法都利用未标记的数据来训练模型学习有用的特征表示,这些特征表示可以用于多种下游任务,如分类、聚类和生成任务。

  • 对比学习:通过正样本对和负样本对的设计,让模型学习区分相似和不相似的样本,从而提取有用的特征。

  • 生成对抗网络(GAN):通过生成器和判别器的对抗训练,模型学习生成新的数据,同时学习数据的特征表示。

  • 自编码器:通过重构输入数据,模型学习到数据的有效特征表示,这在特征提取和降维中特别有用。

3. 关键技术创新

CycleGAN:跨域转换的双向一致性约束
MAE:掩码自编码实现高效预训练
特征解耦:分离内容与风格特征
  语音:内容vs说话人特征
  图像:物体vs纹理特征
 

4. 自监督学习优势

数据效率:利用海量未标注数据
迁移能力:预训练模型适配下游任务
典型流程:
  无标注预训练 → 少量标注微调 → 目标任务
 

无监督学习

对比学习

  SimSiam(Simple Framework for Contrastive Learning of Visual Representations)是一种用于无监督学习的对比学习方法,旨在通过对比学习框架学习图像的特征表示。SimSiam 的核心思想是通过对比正样本对(即同一个图像的不同增强版本)和负样本(即不同图像的增强版本)来学习特征表示,从而使得模型能够捕捉到图像的内在结构。

SimSiam 的核心思想

  SimSiam 的目标是学习图像的特征表示,使得同一个图像的不同增强版本在特征空间中更接近,而不同图像的增强版本在特征空间中更远离。这种方法不需要标签信息,因此属于无监督学习。

SimSiam 的关键组件

1. 数据增强

   SimSiam 使用数据增强技术生成正样本对。具体来说,对于每个输入图像,SimSiam 会生成两个不同的增强版本,这两个版本被称为正样本对。常见的数据增强技术包括随机裁剪、颜色失真、高斯模糊等。

2. 对比学习框架

  SimSiam 通过对比学习框架来训练模型。具体来说,模型的目标是最小化正样本对之间的距离,同时最大化负样本之间的距离。这可以通过对比损失函数(如 InfoNCE 损失)来实现。

3. 无监督学习

  SimSiam 是一种无监督学习方法,不需要标签信息。它通过对比学习框架学习图像的特征表示,使得模型能够捕捉到图像的内在结构。

SimSiam 的训练过程

1. 数据准备

对于每个输入图像,生成两个不同的增强版本,形成正样本对。

2. 特征提取

使用一个编码器(通常是一个卷积神经网络,如 ResNet)提取输入图像的特征表示。

3. 对比学习

通过对比损失函数(如 InfoNCE 损失)来训练模型。具体来说:

  • 正样本对:同一个图像的不同增强版本,目标是最小化它们之间的距离。

  • 负样本:不同图像的增强版本,目标是最大化它们之间的距离。

4. 无监督训练

SimSiam 不需要标签信息,因此属于无监督学习。通过对比学习框架,模型可以学习到图像的特征表示,使得同一个图像的不同增强版本在特征空间中更接近,而不同图像的增强版本在特征空间中更远离。

SimSiam 的优势

  1. 简单高效:SimSiam 的框架相对简单,易于实现和训练。

  2. 无监督学习:不需要标签信息,适用于大规模无标签数据集。

  3. 特征表示质量高:通过对比学习,SimSiam 可以学习到高质量的特征表示,适用于多种下游任务(如分类、聚类等)。

SimSiam 的应用场景

SimSiam 主要用于无监督学习中的特征提取。通过学习图像的特征表示,SimSiam 可以应用于以下场景:

  • 图像分类:通过微调预训练的模型,可以提高分类任务的性能。

  • 聚类:学习到的特征表示可以用于聚类任务,将相似的图像分到同一类别。

  • 迁移学习:学习到的特征表示可以迁移到其他任务,提高模型的泛化能力。

总结

SimSiam 是一种无监督学习的对比学习方法,通过对比正样本对和负样本来学习图像的特征表示。SimSiam 的核心思想是通过数据增强生成正样本对,通过对比学习框架训练模型,使得同一个图像的不同增强版本在特征空间中更接近,而不同图像的增强版本在特征空间中更远离。SimSiam 的优势在于其简单高效,适用于大规模无标签数据集,可以学习到高质量的特征表示,适用于多种下游任务。

生成对抗网络

GAN 总体逻辑

  生成对抗网络(GAN,Generative Adversarial Networks)是一种深度学习模型,它包含两个主要部分:生成器(Generator)和判别器(Discriminator)。GAN 的目的是通过生成器生成逼真的数据,同时判别器尝试区分生成的数据和真实数据。两者在训练过程中相互竞争,从而提高生成数据的质量。

GAN 的工作原理

  1. 生成器:接收随机噪声作为输入,尝试生成与真实数据分布相似的数据。

  1. 判别器:接收生成的数据和真实数据,尝试区分两者。

  1. 对抗训练:生成器和判别器通过对抗训练相互竞争,生成器学习生成更逼真的数据,判别器学习更准确地区分真假数据。

GAN 的优势

  1. 数据生成:GAN 可以生成新的数据实例,如图像、音频等,这在数据增强、数据合成等方面非常有用。

  2. 风格迁移:GAN 可以用于风格迁移任务,如将一种艺术风格应用到另一幅图像上。

  3. 多样性:GAN 能够生成多样化的数据,增加数据集的多样性。

GAN 的缺点

数据非配对问题

在传统的 GAN 中,生成器的目标是生成逼真的数据,而判别器的目标是区分生成的数据和真实数据。然而,GAN 通常需要成对的训练数据,即每个生成的图像都有一个对应的真图像。在实际应用中,成对的训练数据往往难以获取,这限制了 GAN 的应用范围。

信息丢失问题

生成器在生成数据时,可能会丢失一些重要的信息。例如,生成器可能只关注某些特征,而忽略其他特征,导致生成的数据不完整或不准确。

 作弊问题

生成器可能会找到一些“捷径”来欺骗判别器,而不是真正学习数据的分布。例如,生成器可能通过添加噪声或模糊来生成图像,而不是生成高质量的数据。这种现象被称为“作弊”。

Cycle-GAN

循环一致性(Cycle Consistency)

核心要求

  • 翻译要地道(对抗损失)
  • 来回翻译保持原意(循环一致性)

CycleGAN 引入了循环一致性约束,确保生成器的转换是可逆的。具体来说:

  • 如果将一个域 A 的图像 x 转换为域 B 的图像 y,然后再将 y 转换回域 A 的图像 x',那么 x' 应该尽可能接近原始图像 x

  • 同理,如果将一个域 B 的图像 y 转换为域 A 的图像 x,然后再将 x 转换回域 B 的图像 y',那么 y' 应该尽可能接近原始图像 y

循环一致性约束通过以下方式解决 GAN 的问题:

  1. 解决数据非配对问题:CycleGAN 不需要成对的训练数据,因为循环一致性约束确保了生成器的转换是可逆的。

  2. 减少信息丢失:循环一致性约束确保生成器在转换过程中保留了重要的信息,因为生成器必须能够将转换后的图像还原回原始图像。

  3. 防止作弊:循环一致性约束迫使生成器生成高质量的数据,而不是通过“作弊”来欺骗判别器。

双向转换能力

CycleGAN 引入了两个生成器:

  • G:将域 A 的图像转换为域 B 的图像。

  • F:将域 B 的图像转换为域 A 的图像。

这种双向转换能力不仅提高了生成数据的质量,还确保了生成器的转换是可逆的。通过双向转换,生成器必须学习到两个域之间的双向映射关系,从而生成更高质量的数据。

图像转换的具象例子

案例:苹果变橘子

原始数据转换过程结果验证
苹果照片→生成器G:苹果→橘子橘子要逼真(骗过判别器)
生成的橘子→生成器F:橘子→苹果变回的苹果≈原苹果

关键验证

  • 假橘子和真实橘子混在一起难以区分
  • 苹果→橘子→苹果 几乎不变形
双生成器的必要性
  • 生成器G专注学习"如何变形成目标风格"
  • 生成器F专注学习"如何恢复原始特征"
  • 互相监督,避免乱改内容
为什么 CycleGAN 有效?
  1. 无需成对数据:CycleGAN 不需要成对的训练数据,这在实际应用中非常有用,因为成对的训练数据往往难以获取。

  2. 循环一致性:通过循环一致性约束,确保生成器的转换是可逆的,从而减少信息丢失,防止作弊。

  3. 双向转换能力:通过引入两个生成器,确保生成器学习到两个域之间的双向映射关系,从而生成更高质量的数据。

生成式自监督学习

生成式自监督学习提供了一种框架,特征分离是目标,而自编码器是实现这些目标的常见工具

核心思想

  生成式自监督学习的核心思想是让模型自己生成训练数据的一部分,然后使用这些生成的数据来训练模型。这种方法通常涉及到重构任务,即模型需要学习如何从输入数据中提取特征,以便能够重建或生成原始输入。

关键组件

  1. 编码器(Encoder):将输入数据编码成一种紧凑的表示形式。

  2. 解码器(Decoder):从编码表示中重建原始数据。

  3. 损失函数:通常涉及到重构误差,即输入数据和重建数据之间的差异。

常见方法

自编码器(Autoencoder):一种简单的生成式自监督学习方法,其中模型被训练来最小化输入和输出之间的差异。

变分自编码器(Variational Autoencoder, VAE):通过引入随机性来学习更丰富的特征表示。

对比学习(Contrastive Learning):通过对比相似和不相似的样本来学习特征表示。

生成对抗网络(GAN):虽然GAN 主要用于生成任务,但它也可以用于自监督学习,通过生成器和判别器的对抗训练来学习特征。

优势
  1. 无需标签:不需要外部标签信息,适用于标签获取成本高或不可行的情况。

  2. 特征学习:能够学习到数据的有用特征表示,这些特征可以迁移到其他任务,如分类、检测等。

  3. 灵活性:可以应用于各种类型的数据,如图像、文本、音频等。

挑战
  1. 评估困难:由于缺乏标签,评估生成式自监督学习的性能可能更加困难,通常需要设计特定的评估指标或依赖于定性任务的表现。

  2. 训练稳定性:某些生成式自监督模型可能难以训练,特别是当涉及到复杂的数据分布时。

总结

  生成式自监督学习是一种强大的自监督学习方法,它通过让模型自己生成训练数据的一部分来学习数据的特征表示。这种方法在处理无标签数据时特别有用,可以学习到的特征表示可以迁移到多种下游任务。

 

特征分离

 

相关文章:

深度学习之特征提取

前言 深度学习就是把输入转换成一个高维的向量,之后利用这个向量去完成分类、回归等任务。 深度学习特征工程知识图谱 1. 特征提取的本质 核心目标:将原始数据→高维语义特征向量 监督驱动:标签决定特征提取方向 典型架构: …...

Gurobi 并行计算的一些问题

最近尝试用 gurobi 进行并行计算,即同时用多个 cpu 核计算 gurobi 的 model,但是发现了不少问题。总体来看,gurobi 对并行计算的支持并不是那么好。 gurobi 官方对于并行计算的使用在这个网址,并有下面的大致代码: i…...

堆、栈、最小堆

堆是什么 结构属性 堆是一棵完全二叉树,即除最后一层外,其他层节点均填满,且最后一层节点从左到右连续分布。 排序属性: 根据类型不同,堆分为: 最大堆(Max-Heap) :每…...

基于 Spring AI 的 HIS 系统智能化改造

【Spring AI 的背景与现状】 Spring AI 是 Spring 生态里整的一个新活儿,专门给开发者提供搞 AI 驱动的应用的工具和框架。虽然 Spring AI 已经鼓捣了挺长时间,但截至现在(2025年2月),它还没正式发布。不过&#xff0…...

React进阶之前端业务Hooks库(五)

前端业务Hooks库 Hooks原理useStateuseEffect上述问题useState,useEffect 复用的能力练习:怎样实现一套React过程中的hooks状态 & 副作用Hooks原理 不能在循环中、条件判断、子函数中调用,只能在函数最外层去调用useEffect 中,deps 为空,执行一次useState 使用: imp…...

常见锁类型介绍

下面结合代码详细介绍 Mutex、RW Lock、Futex、自旋锁、信号量、条件变量 和 synchronized,并分析它们的适用场景、特点以及为什么这些锁适用于特定场景。我们将从锁的实现机制和性能特点出发,解释其适用性。 1. Mutex(互斥锁) 代…...

Java中,Scanner和System.out超时的解决方法及原理

ACM 模式的原理 在输入输出的时候,会先将输入输出的东西放在一个文件里,这个文件也叫做 IO 设备 为什么 Scanner 会慢 new 一个 Scanner ,在 Scanner 里面调用 next 的时候,程序会直接访问 IO 设备。在调用一个 next 的时候&…...

一种数据高效具身操作的原子技能库构建方法

25年1月来自京东、中科大、深圳大学、海尔集团、地平线机器人和睿尔曼智能科技的论文“An Atomic Skill Library Construction Method for Data-Efficient Embodied Manipulation”。 具身操控是具身人工智能领域的一项基本能力。尽管目前的具身操控模型在特定场景下表现出一定…...

云创智城YunCharge 新能源二轮、四轮充电解决方案(云快充、万马爱充、中电联、OCPP1.6J等多个私有单车、汽车充电协议)之新能源充电行业系统说明书

云创智城YunCharge 新能源充电行业系统说明书 ⚡官方文档 ⚡官网地址 1. 引言 随着全球环境保护和能源危机的加剧,新能源汽车行业得到了快速发展,充电基础设施建设也随之蓬勃发展。新能源充电行业系统旨在提供高效、便捷的充电服务,满足电…...

JVM垃圾回收器深度底层原理分析与知识体系构建

一、垃圾回收的基本步骤 标记(Marking) 从GC Roots(如虚拟机栈、方法区静态变量、本地方法栈等)出发,遍历对象引用链,标记所有可达对象为存活对象,未被标记的则视为垃圾。此阶段需暂停用户线程&…...

30.[前端开发-JavaScript基础]Day07-数组Array-高阶函数-日期Date-DOM

JavaScript的DOM操作 (一) 1 什么是DOM? 认识DOM和BOM 深入理解DOM 2 认识DOM Tree DOM Tree的理解 3 DOM的整体结构 DOM的学习顺序 DOM的继承关系图 document对象 4 节点、元素导航 节点(Node)之间的导航&…...

IP、网关、子网掩码、DNS 之间的关系详解

IP、网关、子网掩码、DNS 之间的关系详解 在计算机网络中,IP、网关、子网掩码和 DNS 是几个关键概念,它们协同工作,共同保障网络通信的顺畅。本文将详细探讨它们之间的关系。 一、IP 地址 IP 地址是网络中设备的唯一标识,如同现…...

【Day50 LeetCode】图论问题 Ⅷ

一、图论问题 Ⅷ 1、dijkstra算法 堆优化 采用堆来优化&#xff0c;适合节点多的稀疏图。代码如下&#xff1a; # include<iostream> # include<vector> # include<list> # include<queue> # include<climits>using namespace std;class myco…...

结构体介绍及内存大小分配问题

结构体 一.结构体的介绍1.1结构体的声明1.2匿名结构体1.3结构的自引用1.4使用 typedef 简化结构体类型名 二.结构体内存对齐2.1内存对齐规则2.2结构体内存对齐原因2.3修改默认对齐数 在 C 语言中&#xff0c;结构体&#xff08;struct&#xff09;是一种用户自定义的数据类型&a…...

halcon 条形码、二维码识别、opencv识别

一、条形码 函数介绍 create_bar_code_model * 1.创建条码读取器的模板 * 参数一&#xff1a;通用参数的名称&#xff0c;针对条形码模型进行调整。默认值为空 * 参数二&#xff1a;针对条形码模型进行调整 * 参数三&#xff1a;条形码模型的句柄。 create_bar_code_model (…...

Vue框架的使用 搭建打包 Vue的安全问题(Xss,源码泄露)

前言 什么是Vue&#xff1f; Vue是轻量级的js框架 可以帮助我们一键构造网站&#xff0c;打包app程序等 Vue的基本使用 1、构造框架并启用 新建一个 目录 使用终端切换到当前的目录 创建vue项目 第一个弹出使用语法我们选择是 剩下的全选择否 发现创建好了 接着进行…...

Java+SpringBoot+Vue+数据可视化的音乐推荐与可视化平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在互联网技术以日新月异之势迅猛发展的浪潮下&#xff0c;5G 通信技术的普及、云计算能力…...

day2 - SpringBoot框架开发技术

主要内容 1. SpringBoot简介 2. 构建springboot工程 3. springboot接口返回json 4. springboot热部署 5. springboot资源属性配置 6. springboot整合模板引擎 7. springboot异常处理 8. springboot整合MyBatis 9. springboot整合redis 10. springboot整合定时任务 11. springbo…...

Flash-03

1-问题&#xff1a;Flash软件画两个图形&#xff0c;若有部分重合则变为一个整体 解决方法1&#xff1a;两个图形分属于不同的图层 解决方法2&#xff1a;将每个图形都转化为【元件】 问题2&#xff1a;元件是什么&#xff1f; 在 Adobe Flash&#xff08;现在称为 Adobe Anim…...

新建菜单项的创建之CmpGetValueListFromCache函数分析

第一部分&#xff1a; PCELL_DATA CmpGetValueListFromCache( IN PHHIVE Hive, IN PCACHED_CHILD_LIST ChildList, OUT BOOLEAN *IndexCached, OUT PHCELL_INDEX ValueListToRelease ) 0: kd> dv KeyControlBlock 0xe1…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...