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

李宏毅深度学习教程 第10-11章 自监督学习self-supervised learning+自编码器

【2025版】22、第七节 自监督式学习 一 – 芝麻街与进击的巨人_哔哩哔哩_bilibili

目录

1. BERT 来自 Transformers 的双向编码器表示

1.1 使用方式 - 微调

1.2 有用的原因

1.3 多语言 BERT(multi-lingual)

1.4 语音图片上的自监督学习

2. 生成式预训练 GPT(应用于文本生成写作)

3. 自编码器

3.1 去噪自编码器

4. 自编码器的应用

4.1 语音特征解耦

4.2 离散隐表征

4.3 VQ-VAE 向量量化-变分自编码器


自监督学习:我们有未标注的文章数据,则可将一篇文章 x分为两部分:模型的输入 x ′ 和模型的标签 x ′′,将 x ′ 输入模型并让它输出 yˆ,想让 yˆ 尽可能地接近它的标签 x ′′(输出预测抽出部分)

1. BERT 来自 Transformers 的双向编码器表示

后文例子均为 NLP中的文本处理任务。BERT可以处理序列 当然也可以处理语音、图像等。

自监督预训练 两个任务:

1. Masked掩码/替换一些字 让它完形填空;    (破坏方式也可以为 插入删除打乱等等)

比如让它预测“度”  最小化交叉熵损失

          

2. 判断B是不是A的下一句话       升级版为打乱句子顺序让它排序(句序预测SOP)

特殊符号有  [MASK]:填空占位符      [SEP]:分隔句子        [CLS]:分类标记

1.1 使用方式 - 微调

先通过两个任务 预训练出BERT     评估BERT的预训练效果:在一些任务集上 看他表现的平均值

经典的有 GLUE、 XLNET任务   比较人-机表现

想让它更深入地学习某项任务,需要再给一些标注数据 进行微调(fine-tuning)

预训练BERT是无监督的  下游任务微调时需要有标注的数据  整体看来是半监督的

情形1:情感分析 判断句子是正面还是负面的  把[CLS]放在一个句子前 再把对应的向量线性变换

    

情形2:词性标注  把句子中每个词分类成 动词/名词/形容词等 把[CLS]放在一个句子前 输出向量对应每个词的类别

情形3:自然语言推理 逻辑判断  判断文本A和文本B的关系  如是否能由A推出B   A和B是否矛盾等

可用于立场分析 文章后的留言是支持文章还是反对:只需把文章作为A 留言最为B 让模型输出关系

可用[SEP]分隔两句话,[CLS]位置输出判断结果

情形4:基于提取的问答(答案一定是文章中的一个片段) 文章D 问题Q 分别对应两个序列,

要求输出两个正整数s e,代表第 s 个单词到第 e 个单词的片段就是正确答案。

做内积训练橙色向量和蓝色向量;分别找开头s位置和结尾d位置 

1.2 有用的原因

传统静态词向量(如Word2Vec)无论上下文,"苹果"的向量永远相同。

→ 问题:无法区分"吃苹果"(水果)和"苹果手机"(品牌)。

BERT的动态词向量 语境化嵌入(Contextual Embedding): → 根据上下文实时更新词意。

→ 示例: 输入"喝苹果汁" → "果"的向量靠近"橙子、葡萄"(水果类)。

输入"苹果发布会" → "果"的向量靠近"三星、华为"(品牌类)。

计算这两类苹果 余弦相似度矩阵。  可以发现前五个之间相似度高,后五个之间相似度高。

一个词的意思取决于它的上下文,可以通过经常和它一起出现的词 判断它的词意

BERT的填空训练: → 任务:给定"深[MASK]学习很有趣",预测"度"。

→ 如何猜中?必须从上下文("深"、"学习")提取语义线索 → 被迫学会理解词义关系!

词嵌入中 连续词袋CBOW 是线性简单版本(浅层神经网络预测中心词)静态词向量

还可以对DNA/音乐  编码碱基/氨基酸/音符为单词等  转化为语言模型问题

优势:BERT相对于直接监督学习 预训练了很好的初始化参数 使得后续训练更容易收敛

1.3 多语言 BERT(multi-lingual)

多语言 BERT 有非常神奇的功能,如果用英文问答数据训练它,它会自动学习如何做中文问答

训练时 中文英文相同意思的词的词嵌入向量距离很近  比如跳和 jump;鱼和 fish;游和 swim

所有英文单词的嵌入平均 - 所有中文单词的嵌入平均 = 英文与中文的差距  即可实现中英文互转。 

但不会出现问英文问题回答中文的情况  可能因为BERT知道语言符号信息

作用:可以打破语言壁垒 训练一种语言 其他语言也收益

此外可以训练数据比较多的语言如英语 带动数据比较少的冷僻的语言进步

1.4 语音图片上的自监督学习

自监督学习应用到语音训练上,要mask一长串的feature,不要一次只mask一个feature,迫使机器去解比较难的问题。因为声音相邻向量往往内容非常接近,任务太简单学不到东西。

自监督学习 应用到图片就是 拆分一张图为几个部分,问机器两个部分的位置关系

对比学习(contrastive learning)  目标:让模型学会区分"相似"和"不相似"的数据

正样本对:同一图片的不同视角(如裁剪/旋转后的版本) 负样本对:不同图片(如猫和狗的图片)。

训练方式有:SimCLR:拉近正样本对,拉远负样本对。

                      MoCo:用动态队列存储负样本,增加对比难度。

为提高训练效果 训练时拿出来的两张异类图需要比较接近(难区分)

比如我要训练猫相关的 我拿苹果的图片 太不一样 很容易就区分并且学不到关键的特征

可以拿老虎 豹子等图片去训练猫

所以异类选择要注意 那如果不用异类呢?只学习拉近正类(不用异类)会出现坍塌的问题

反正要的就是要正类尽可能像(而且没有拉远的需求) 直接把所有点放一起

只用正类不用异类 还有一种 Bootstrapping Approaches 操作,

一边有predictor 再copy到另一边。 利用架构不同 不会坍塌 并且只需要正类的数据

2. 生成式预训练 GPT(应用于文本生成写作)

GPT自监督学习时要做的任务是 只根据上文预测下一个词。  基于Transformer解码器 掩码注意力

输入:"<BOS> 深" → 预测 "度"          输入:"<BOS> 深 度" → 预测 "学"

还需研究如何把这种 “接龙”创作能力应用到下游任务。

语境学习 如何让GPT学会翻译任务?  不微调模型,直接通过举例提示让GPT理解任务。

生成功能应用到: 生成语音(预测下一段声音讯号) 生成图像(预测下一个像素)

3. 自编码器

编码器压缩 解码器重构;希望重构后的结果接近最开始的输出(类似Cycle GAN)

自编码器可以实现很好的降维 发掘数据的内在联系 化繁为简

中间降低到的最低维度  称为瓶颈bottleneck

3.1 去噪自编码器

可以在压缩过程中过滤掉 无关信息(噪声)   进而在还原时还原出去噪的图像

4. 自编码器的应用

编码器单独拿出来 就是一个压缩器;解码器单独拿出来 就是一个生成器

4.1 语音特征解耦

特征解耦:在训练一个自编码器的时候, 知道嵌入的哪些维度代表了哪些信息。

比如 100 维的向量, 知道前 50 维代表这句话的内容,后 50 维代表了说话人的特征。

生成的语音有多个特征(内容/风格/音色等) 解码器可以把一个向量转化成一个复杂的东西

所以我们想 给这个向量压缩一些我们想要的特征 再让它解码

如果想实现一个变声器 即要求输出 A的内容 B的音色的音频

一种训练方式是 找很多组成对的“文本-目标人物说这句话的音频” 但找很多这样的训练数据不切实际。

特征解耦操作 提取出A的内容 压缩成针对内容的向量;提取B的音色 压缩成针对音色的向量

再把这两个向量拼在一起 送到解码器去解码。

4.2 离散隐表征

嵌入如果没有要求的话输出实数,但不用解码器就很难挖掘其实际意义

可以限制嵌入 只输出0-1 就可以做一些特征的二分类(比如男/女 是否戴眼镜之类)

如果限制嵌入为 独热编码,只有一个位置为1 就可以转化为分类问题

如果限制嵌入为一段文字,就可以起到压缩文字(写概要)的效果。

问题是 输出的这个压缩版本不一定是 “人类写的总结”风格的 有可能会冒出奇奇怪怪的符号,

所以可以加一个GAN   判别器用来判断 使得这个压缩版本接近人类写的风格。

4.3 VQ-VAE 向量量化-变分自编码器

将编码器输出 替换为码本中最近邻的向量,再送给解码器。

离散化迫使模型学习有意义的原型特征,避免连续空间中的"模糊表达"。

音标/拼音本身只有固定的那些种类,使得生成的音频更准确。

图像中 连续化可能使得输出是模糊的 而压缩向量的离散化可以使得输出质量更高。

编码器梯度:通过重建损失 + 承诺损失反向传播           码本梯度:仅通过码本损失更新

http://www.dtcms.com/a/315306.html

相关文章:

  • FFmpeg02:常用命令实战
  • 【LeetCode 热题 100】215. 数组中的第K个最大元素——(解法一)快速选择
  • CentOS卸载、安装MySQL8(yum操作)
  • 肾上腺疾病AI诊疗一体化系统应用方向探析
  • 智能图书馆管理系统开发实战系列(七):CMake构建系统与持续集成
  • 【Node.js从 0 到 1:入门实战与项目驱动】1.2 Node.js 的核心优势(非阻塞 I/O、事件驱动、单线程模型)
  • 比起登天,孙宇晨更需要安稳着陆
  • 飞算 JavaAI:为软件安全上锁的智能守护者
  • Antlr学习笔记 02、使用antlr4实现简易版计算器
  • 【Z字形变换】
  • 离线Docker项目移植全攻略
  • 明远智睿T113-i核心板:工业设备制造领域成本控制的破局者
  • NX982NX984美光固态闪存NX992NY102
  • UVa1480/LA5034 Jewel
  • webm 读取解析
  • Linux 系统重置用户密码指南
  • go安装gin
  • JMeter 性能测试工具使用教程
  • 【网络运维】Linux:逻辑卷管理
  • Spring @Component注解全解析
  • 计算机网络:子网掩码在路由转发中的关键作用
  • css的选择器
  • 虚拟机中查看和修改文件权限
  • MoonBit Pearls Vol.04:用MoonBit 探索协同式编程
  • Spring Security 认证与授权实现机制
  • 随机森林知识点整理:从原理到实战
  • 课题学习4——将原系统的BERT换为SBERT
  • 【网络运维】Linux:RAID存储技术
  • 单类别目标检测中的 Varifocal Loss 与 mAP 评估:从原理到实践(特别前景和背景类区分)
  • Transformer核心机制:QKV全面解析