郭震 AI公众号:郭震AI

45 自监督学习之模型架构

发布日期:

最近更新:

分类: 30个神经网络

预计阅读: 3 分钟

阅读次数: 0

预计阅读3 分钟
结构重点5 个
图文要点6 张
正文规模1.3k 字
自监督学习之模型架构结构图查看大图
自监督学习之模型架构结构图

自监督学习的关键是从数据本身制造监督信号。它适合标注少、原始数据多的场景。这篇重点看结构。先把数据流、关键模块和输出层画清楚,再回头看公式或代码。

自监督学习之模型架构实操核对图查看大图
自监督学习之模型架构实操核对图

我会分开看预训练任务和下游任务,确认表征真的迁移了,而不是只在预训练指标上好看。

自监督学习是一种新兴的学习范式,它能够在没有标注数据的情况下利用大量未标注数据进行有效的模型训练。在这一篇中,我们将讨论自监督学习中常用的模型架构,以及它们在特定应用中的有效性。

自监督学习模型的架构

在自监督学习中,模型架构通常会采用一些深度学习框架,如卷积神经网络(CNN)、循环神经网络(RNN)、以及Transformer等。以下是一些广泛应用的自监督学习模型架构:

自监督学习之模型架构要点判断卡查看大图
自监督学习之模型架构要点判断卡

读这篇时,可以把「自监督学习模型的架构 -> 变分自编码器 (Va -> 案例 -> 对比学习模型」当成一条检查线:先看对象、路径和证据,再回到案例、代码或指标里复查。

1. 变分自编码器 (Variational Autoencoder, VAE)

VAE通过学习数据的潜在分布实现生成模型。它的目标是通过最大化变分下界来最小化重构误差和正则化项。

L(x;θ,ϕ)=Eqϕ(zx)[logpθ(xz)]DKL(qϕ(zx)p(z))L(x; \theta, \phi) = \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] - D_{KL}(q_\phi(z|x) || p(z))

在自监督学习中,VAE可以通过重建输入数据来进行训练,鼓励模型学习数据的有效表征。

案例

假设我们有一组未标记的手写数字图像,我们可以利用VAE生成新的图像,从而通过生成的新图像进行后续的分类任务。

import torch
from torch import nn

class VAE(nn.Module):
    def __init__(self):
        super(VAE, self).__init__()
        self.encoder = nn.Sequential(
            nn.Linear(784, 400),
            nn.ReLU(),
            nn.Linear(400, 20)  # mean
        )
        self.decoder = nn.Sequential(
            nn.Linear(20, 400),
            nn.ReLU(),
            nn.Linear(400, 784),
            nn.Sigmoid()
        )
        
    def forward(self, x):
        z_mean = self.encoder(x)
        z = self.reparameterize(z_mean)
        return self.decoder(z)
    
    def reparameterize(self, z_mean):
        std = torch.exp(0.5 * z_mean)  # Assume variance is learned
        eps = torch.randn_like(std)
        return z_mean + eps * std

2. 对比学习模型

对比学习是一种通过将样本进行正负对比来训练模型的自监督学习方法。SimCLR和MoCo是两个流行的对比学习框架。

在对比学习中,模型通过最大化同一个样本不同增强版本间的相似度,以及最小化不同样本之间相似度来学习特征表示。

案例

考虑一个图像分类任务,我们可以使用对比学习来训练模型,以下是一个简单的实现示例:

import torch
import torch.nn.functional as F

def contrastive_loss(z_i, z_j, temperature=0.5):
    batch_size = z_i.size(0)
    # 计算相似度
    sim_matrix = F.cosine_similarity(z_i.unsqueeze(1), z_j.unsqueeze(0), dim=-1) / temperature
    labels = torch.arange(batch_size).to(z_i.device)
    # 计算对比损失
    loss = F.cross_entropy(sim_matrix, labels)
    return loss

3. 自监督Transformer

自监督学习在NLP领域的一个重要架构是Transformer。BERT和GPT都是基于Transformer的模型,它们通过自监督任务(如掩码语言模型和下一个句子预测)进行训练,学习到上下文的深刻表示。

案例:BERT

BERT模型通过掩盖输入文本中的某些词汇进行训练。目标是预测被掩蔽的词汇,以此推动模型学习上下文信息。

from transformers import BertTokenizer, BertForMaskedLM

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForMaskedLM.from_pretrained('bert-base-uncased')

# 输入样本
inputs = tokenizer("The cat sat on the [MASK].", return_tensors="pt")
outputs = model(**inputs)

在这个例子中,[MASK]被用来指代模型需要预测的词,通通过反向传播计算损失并更新权重。

自监督学习之模型架构应用复盘卡查看大图
自监督学习之模型架构应用复盘卡

复习《自监督学习之模型架构》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。

自监督学习之模型架构应用检查卡查看大图
自监督学习之模型架构应用检查卡

练习《自监督学习之模型架构》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。

小结

自监督学习通过构建特定的模型架构,能够有效利用未标记数据进行特征学习。这为解决很多标注困难或昂贵的任务提供了新的思路。接下来的篇章中,我们将深入探讨自监督学习在实际应用中的引入和用例。 神经网络阅读地图卡

读完《自监督学习之模型架构》后,可以回头问三件事:它解决什么问题,哪一步最容易出错,自己能否拿一个小例子跑通。

相关教程

相关入口

AI 教程总索引

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

相关内容

相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...