NTU ML2023Spring Part2.8 自监督式学习

news/2025/3/16 18:26:36/文章来源:https://www.cnblogs.com/x383494/p/18775377

License: CC BY-NC-SA 4.0

同步发表于我的新博客。

supervised learning 是之前见过很多次的,给定一些输入和输出,让机器学习其中的规律。而 self-supervised learning 就不用标注数据。有趣的是,这一类模型大都以芝麻街的人物命名,例如 BERT. 它的结构和 transformer 的 encoder 差不多。

假设我们没有标注好的数据,这时又怎么做呢?可以将数据分为两部分,一部分作为模型的输入,另一部分作为 label. 这就是 self-supervised learning。它可以看作是一种 unsupervised learning 的方法. 这一段比较抽象,下面是详细解释:

  • masking input

    考虑 transformer 的 encoder,但将输入随机盖住一些 token(以中文序列为例,下面把一个字当成一个 token)。所谓盖住有两种做法,一种是用一种特殊的符号代替,另一种是随机替换为另一个 token。对于这个被盖住的字,它在通过 encoder 后会输出一个向量。我们把这个向量通过一层 linear 层之后做 softmax,就是机器认为这个字 应该 是什么。接下来由于我们知道它实际上是什么,所以只要 minimize cross entropy 就行了。

  • next sentence prediction

    (这个方法好像不是很管用)

    还是以中文序列为例。在你的训练资料里随便抽出两句话(不一定要是相邻的),在第一句话前面加一个特殊的 token「CLS」,在两句话中间加一个 token「SEP」,把这两个句子缝合成一个长句子。之后把这个缝合怪直接丢进 encoder 里,它会输出一个同样长度的向量序列,但我们只关心 CLS 对应的向量,将这个向量丢进一个 linear model 里,输出 yes/no,代表这两句话是否是相邻的。

  • sentence order prediction

    和上面的方法类似,但是用于拼接的两个句子是相邻的,只是前后顺序颠倒。任务是判断这两个句子是否顺序颠倒了。

学完之后虽然只会做填空题,但经过 finetune 之后就能拿来做各种下游任务。这些任务需要一些 labeled data。

如何使用 bert 之类预训练的模型并 finetune?其实方法和前面差不多。

在一个序列的开头加入特殊的 token「CLS」,然后把这个序列丢进 bert(其实就是一个预训练好的 encoder)。接下来的操作取决于下游的任务类型:

  • 输出一个分类

    只看 CLS 对应输出的向量。将它再通过 linear 层(这层是随机初始化的),softmax 之后得到分类。bert 和 linear 层整个就是要 finetune 的对象,两者都要做梯度下降之类的 optimization. 为了做 optimization,你需要一些标注的资料。

  • 输出一个序列,长度和输出相同

    encoder 的每个输出都过同一个 linear,然后分别输出各自的 class.

  • 输入两个句子,输出一个分类

    具体应用例如给出一篇文章和一个评论,分析是正面评论还是负面评论。

    方法仍然是将两个序列通过添加 CLS 和 SEP 来缝合成一个更长的序列,然后通过 bert 之后只取 CLS 对应的输出向量,再过一层 linear 层与 softmax 层输出一个类别。

  • 问答系统(但是带限制)

    给机器读一篇文章,然后问它一些问题。保证答案可以在文章里照抄到。

    输入的文章和问题都是 sequence,我们想要模型输出两个正整数 \(s,e\),意思就是文章里第 \([s, e)\) 个字符就是答案。

    做法和上面类似,将文章和问题缝合成一个序列输入进 bert。除了 bert 本身,我们还要两个随机初始化的向量,记作 \(\mathbf{v}_1, \mathbf{v}_2\). 对于文章部分通过 bert 之后的每一个向量,将这个向量与 \(\mathbf{v}_1\) 做点积,你就得到了一个和文章长度相同的标量序列。对这个标题序列做 softmax,数值最大的地方就是 \(s\). 同样地可以得出 \(e\). 其实这个部分有点像 transformer 里的 attention score。

有一个问题:transformer 没法输入太长的序列(要算 \(O(n^2)\) 个数的矩阵)。因此本次作业里其实是将文章切成小块然后训练。

bert 为什么能用?先看 encoder 的原理:经过 encoder 之后,每个字都被转换成了向量,这个向量是带有上下文语义的。

但是这个解释其实并不完整。例如,将一串 DNA 序列的每个碱基转换成一个英文单词,然后类似地训练,最后结果是优于随机初始化的。总结一下就是原理目前也解释不清楚。

还有一种现象,如果一个 bert 提前学习了多种语言,给它 finetune 英文的问答,它也能自动学会其他语言的问答。猜测可能是不同语言对应的 embedding 相近,但也要数据足够多。

除了 bert 之外,GPT 系列的模型也很知名。bert 做的是填空题,而 GPT 做的是文字接龙。它有个更大的目标,就是做到 few-shot learning(而不是像 bert 一样微调)。意思是,不必为某些任务单独 finetune,只要给出任务并举几个例子就行了。然而这里根本就没有 gradient descent 的过程,于是在 GPT 的文献里换了个名字,叫 in-context learning.

self-supervised learning 的概念也可以用到语音或图像等任务上。例如 SimCLR,BYOL(讲这部分时就放了两张 ppt 就过去了)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/899889.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息论基础(持续更新)

熵、相对熵与互信息 熵 定义:一个离散型随机变量 \(X\) 的熵 \(H(X)\) 定义为: \[H(X)=-\sum_{x \in X}p(x) \log p(x) \]注释:\(X\) 的熵又可以理解为随机变量 \(\log \frac{1}{p(X)}\) 的期望值 引理\(H(X) \geq 0\) \(H_b(X)=(\log_ba)H_a(X)\)二元熵: \[H(X)= -p\log p…

数分笔记2

目录数项级数敛散性定义敛散性例:等比级数(几何级数)定理(级数 \(\sum a_n\) 的 Cauchy 收敛准测)例:\(p\)-级数(\(p>0\),实常数)命题“线性性”定义余项正项级数定义正项级数定理正项数列收敛的充要条件定理(比较原则)DAlembert(达朗贝尔判别法)(比式(比值)…

3.15总结

P1305 新二叉树 首先介绍一下何为先序遍历: 在二叉树中,对于每一对父亲与左右儿子,都按照{父亲,左儿子,右儿子}的顺序来遍历 例如有这样一棵树: 先序遍历的顺序:遍历1,输出“1” 遍历1的左儿子3,输出“3”遍历3的左儿子5,输出“5” 5没有左右儿子,返回3 遍历3的右儿…

SpringBoot配置文件的使用

一.全局文件配置 Spring Boot 使用全局配置文件来允许开发者自定义应用程序的配置。这些配置文件可以用来修改自动配置的设置,或者添加新的配置项。 配置文件的位置和命名:application.properties 或 application.yml:默认情况下,Spring Boot 会在以下位置查找配置文件,并…

SpringBoot配置

一.全局文件配置 Spring Boot 使用全局配置文件来允许开发者自定义应用程序的配置。这些配置文件可以用来修改自动配置的设置,或者添加新的配置项。 配置文件的位置和命名:application.properties 或 application.yml:默认情况下,Spring Boot 会在以下位置查找配置文件,并…

[vue]实现一个天气预报页面

Vue学习笔记之用Vue3+ element plus + axios实现一个天气预报页面前言 使用vue3 + element plus + axios。效果:步骤创建项目并安装依赖npm create vue@latestcd vue3-demo1 npm install npm run devnpm install --save axios vue-axios npm install element-plus --savemain.…

【启程】CSP2024 游记

前言 upd:——希君生羽翼,化北溟鱼,度春风。 初赛前一天晚上开坑,回忆一下去年J组的经历。 回忆幸运的第一轮 初赛是什么?做了一套22年的卷子,连蒙带猜差不多70pts?考场直接瞎写,一半左右都是蒙的,判断去全选对,完善程序全蒙,最后9个判断7个A,30pts的完型蒙到了15p…

[Webpack] 打包优化 二

optimization optimization这个配置项内部的很多优化策略都是在生产环境默认开启的,启用这些规则从一定程序上来讲可以显著减少 bundle 体积,优化代码生成,帮助长期缓存等。 optimization.minimize optimization.minimize指定 webpack 默认使用 terser-webpack-plugin 来压缩…

坐标转换软件 | CGCS2000 经纬度坐标 与 高斯克吕格3度投影平面坐标的互相转换

软件下载地址: 链接: https://pan.baidu.com/s/1ySwut1CpFLTSkGTVy792Fw?pwd=dyzj 提取码: dyzj 关于软件软件介绍:Fast坐标转换软件 是一款专为地理信息系统(GIS)和测绘领域设计的实用工具,旨在实现CGCS2000经纬度(地理坐标)与高斯-克吕格3度投影平面坐标之间的快速、精确转…

可持久化线段树(主席树)学习笔记

可持久化线段树(主席树)学习笔记主席树求解的问题一般是区间历史求值的问题,即对一些点进行操作后,求其中一个版本的答案 最朴素的方法就是每一次操作都将原线段树复制一遍,但是这样很费空间,而且产生了大量无用的点 但是可以发现,每次修改时所走的路径其实只经过了根到对…

FBI树

FBI树 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。 FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如…

学嵌入式C语言,看这一篇就够了(4)

C语言的输入输出 C语言标准在发布的同时,ANSI组织同时也一起发布了和C语言相关的函数库,也就是标准C库,标准C库集成了很多的API函数接口,比如常用的输入和输出函数就是标准C库提供的 用户如果打算使用标准C库的函数,就必须要包含函数库对应的头文件,比如输入输出函数对应…