如何使用无标签数据进行训练?

一、直观解释

简单来说就是“造目标”。也即人为地去构造一些子任务(论文里的protext task),或者利用一些最基本的公理性常识,去设计“类似监督”的任务。所不同的是,我们引入的“类似监督”的任务通常是用来完成表征学习,具体的下游任务仍需要额外想办法实现。

通俗来说,所谓的监督学习就是有明确的监督信号(比如分类任务中的 label,检测任务中的 cls等)去驱动网络不断地学习更好的特征表示,并完成相应的任务。所以对于无监督学习,我们很容易想到,能不能用什么方法,去构造某些监督信号?可能这些构造出来的信号不及监督学习中的label、bbox那样明确,但在无监督大样本的加持下,总算也能让模型慢慢变好。理解这几句话对于了解无监督学习、自监督学习非常重要

二、常用造目标的方法

1.伪标签

该方法的主旨思想其实很简单。首先,在标签数据上训练模型,然后使用经过训练的模型来预测无标签数据的标签,从而创建伪标签。此外,将标签数据和新生成的伪标签数据结合起来作为新的训练数据。

2.用数据本身作为标签

例如BERT模型的预训练,其包含两种模式:mask words prediction和 next sentence prediction

mask words prediction

首先,第一个预训练模型是让BERT做“完形填空”。具体来说是在输入的一段文本中随机将某一个单词盖住(mask),然后让BERT预测这个单词是什么的概率。最后一层用softmax输出所有单词出现在这个位置的概率,概率最大的即是BERT的预测。将这个预测的结果与真值进行对比,使预测值和真实值之间的交叉熵最小,这就是第一个预训练。

next sentence prediction

第二种预训练做的是两句话间是否是连续的逻辑判断。一共有四个输入:sentence1, sentence2, CLS判断符号和SEP分隔符号。但我们主要关注的是CLS的输出,这是个二分类输出,只有YES/NO两种情况。

3.数据增强

论文: ​​​​​​Unsupervised Representation Learning by Predicting Image Rotations (ICLR18),如图,文章提出,通过训练ConvNets来识别输入图像的2D旋转来学习图像特征。其输入为原图像,使用的标签为人为旋转图片后得到的数据。

论文:Context encoders: Feature learning by inpainting。我们可以通过随机去掉图像中的某个部分来生成训练数据,原数据作为训练标签来进行预训练。

 

这些用人为设计监督任务的所训练出来的模型是有效的。因为你可以反过来设想,如果这个网络啥也没学到,它怎么可能把丢失的像素无缝补齐呢?

三、总结

综上,利用无标签数据进行预训练的关键在于构造监督信号。利用伪标签、用数据本身作为标签及数据增强三种方式都是较为常用的利用无标签数据的方法。当然还包括无监督学习中的聚类等方法,这里不在详述。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想使用自己的模型进行训练,可以按照以下步骤修改train.py: 1. 导入你自己的模型类或函数。 2. 创建模型对象,设置模型参数。 3. 使用你自己的模型对象替换示例代码中的`model`对象。 4. 使用你自己的模型对象进行训练,具体的训练过程会根据你的模型而有所不同。 5. 在测试集上进行预测和评估。 下面是一个示例train.py,展示了如何使用自己的模型进行训练: ```python import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from my_model import MyModel from sklearn.metrics import classification_report # 读取数据集 data = pd.read_csv('data.csv') # 划分特征和标签 X = data.drop('label', axis=1) y = data['label'] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建你自己的模型对象 model = MyModel() # 训练模型 model.train(X_train, y_train) # 在测试集上进行预测 y_pred = model.predict(X_test) # 评估模型性能 print(classification_report(y_test, y_pred)) ``` 在这个示例中,我们假设你已经实现了一个名为`MyModel`的自定义模型类,并且该类具有`train`和`predict`方法来训练和预测数据。 你需要将这个示例中的`MyModel`替换为你自己的模型类或函数,并确保你的模型类或函数能够正确地训练和预测数据。 请注意,这只是一个示例,具体的实现细节会根据你的模型而有所不同。你需要根据你自己的模型进行适当的修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值