Self-supervised Learning

文章探讨了Self-SupervisedLearning的概念,以BERT和GPT为例,展示了它们在无监督学习中的应用。BERT通过MaskingInput和NextSentencePrediction进行预训练,能适应各种下游任务。GPT则预测下一个词,同样可用于多种任务。Multi-lingualBERT能处理多语言数据。此外,Self-SupervisedLearning不仅限于文本,也扩展到了图像领域,如Image-SimCLR和Image-BYOL。

目录

BERT

How to use BERT

Why dose BERT work

Multi-lingual BERT

GPT

How to use GPT

Beyond Text


Self-Supervised Learning,又称为自监督学习。一般机器学习分为有监督学习,无监督学习和强化学习。 而 Self-Supervised Learning 是无监督学习里面的一种,主要是希望能够学习到一种通用的特征表达用于下游任务 (Downstream Tasks)。 其主要的方式就是通过自己监督自己。

Self-Supervised Learning的model喜欢以芝麻街的人物命名:

下面以BERT和GPT这两个模型为例,介绍Self-Supervised Learning的model做的事情是什么。

BERT

BERT是一个Transformer的Encoder。

有了BERT技术后,机器在自然语言处理的能力上又向前迈了一步。

BERT训练的时候做两件事:

        ① Masking Input: Randomly maskingsome tokens.

        ② Next Sentence Prediction

        后来研究表明这一招对BERT要做的事情不太有用。

        还有一招和Next Sentence Prediction有点类似,叫做SOP,这招在文献中证明是有效的。

通过以上两件事,BERT只学会做填空题,但BERT可以被用来做各式各样人们感兴趣的Downstream Tasks。给BERT一些不同的有标注的资料,它就可以变成做不同Task的model(类似于胚胎干细胞,可以分化),这就是BERT神奇的地方。

训练BERT是比较困难的:

Pre-training a seq2seq model:

How to use BERT

下面通过四个例子来介绍如何使用BERT。

  • case 1:

这个model中Linear的参数是随机初始化的,但BERT的参数是使用pre-train之后的参数。下面图中对比了BERT使用随机参数和使用pre-train参数的训练效果:

  • case 2:

  • case 3:

  • case 4:

训练过程如下:首先输出答案的起始位置

然后输出答案的结束位置

Why dose BERT work

首先给出文献中最常见的解释:BERT输入一串文字,输出一串向量,这些向量称为embedding。这些embedding代表了输入的那个字的意思,并且包含了它的上下文信息(比如吃苹果和苹果手机的果,输出的是不同的embedding)。

根据李老师实验室的一些实验,BERT work可能不止是embedding能够代表输入文字及其上下文关系这一个原因。

如下图实验,对DNA进行分类,随意选取四个英文单词来代表A、T、C、G,把DNA转化成一些没有实际意义的英文句子。然后输出DNA的种类。对于这些没有实际意义的英文句子,进行分类也能得到很好的结果。这说明BERT的能力不完全来自于它能看得懂文章,还有一些其他的原因。

Multi-lingual BERT

——Training a BERT model by many different languages.

Multi-lingual神奇之处在于,用英文的QA资料进行训练,就可以自动学会做中文的QA。

对以上神奇现象的一个简单解释是,对Multi-lingual BERT而言,不同语言间没什么差异:

GPT

——Predict Next Token

How to use GPT

Beyond Text

上面的例子都与文字有关,但Self-Supervised Learning不止能用在文字上:

Image - SimCLR:

Image - BYOL:

Self-Supervised Learning(SSL,自监督学习)是一种强大的机器学习范式,旨在利用未标记数据进行训练。这种方法通过从数据本身生成伪标签,来创建监督信号,使得模型能够学习有效的数据表示。在深度学习领域,标记数据往往昂贵且难以获得,而未标记数据则大量存在,因此自监督学习受到了广泛关注[^1][^2]。 自监督学习不仅在NLP领域,在CV、语音领域也有很多经典的工作,它可以分成3类:Data Centric、Prediction(也叫Generative)和Contrastive[^3]。通过自监督学习,可以利用未标注数据来提取有效的特征,进而用于各种下游任务。在实际应用中,自监督学习具有能够充分利用大量未标记数据的优势,不过也可能存在一定的限制,在具体使用时需对其定义、主要技术方法、实现策略以及优势和限制进行深入分析[^1]。 ### 代码示例(示意性) 以下是一个简单的Python伪代码示例,示意自监督学习中预训练和微调的过程: ```python import torch import torch.nn as nn import torch.optim as optim # 定义一个简单的神经网络模型 class SimpleModel(nn.Module): def __init__(self): super(SimpleModel, self).__init__() self.fc1 = nn.Linear(10, 20) self.fc2 = nn.Linear(20, 1) def forward(self, x): x = torch.relu(self.fc1(x)) x = self.fc2(x) return x # 初始化模型 model = SimpleModel() # 自监督预训练阶段 # 假设这里有未标记数据 unlabeled_data unlabeled_data = torch.randn(100, 10) criterion = nn.MSELoss() optimizer = optim.Adam(model.parameters(), lr=0.001) for epoch in range(10): outputs = model(unlabeled_data) # 这里简单假设生成的伪标签是输入数据的某种变换 pseudo_labels = unlabeled_data.sum(dim=1, keepdim=True) loss = criterion(outputs, pseudo_labels) optimizer.zero_grad() loss.backward() optimizer.step() # 微调阶段 # 假设这里有标记数据 labeled_data 和对应的标签 labels labeled_data = torch.randn(20, 10) labels = torch.randn(20, 1) for epoch in range(5): outputs = model(labeled_data) loss = criterion(outputs, labels) optimizer.zero_grad() loss.backward() optimizer.step() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值