参考链接:
自监督学习的预训练模型设计:
https://zhuanlan.zhihu.com/p/432546119
自监督学习:
https://zhuanlan.zhihu.com/p/184995155
自监督学习
利用**辅助任务(pretext)**从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。
自我监督学习是通过以下方式将无监督学习问题转化为有监督问题的方法:
在自监督学习中,我们通过利用数据的某些属性来设置伪监督任务来替换人类注释。
例如,这里我们可以将图片旋转 0/90/180/270 度,然后训练模型来预测旋转的角度,而不是将图像标记为 cat / dog。如果将图片标记为 cat / dog 是需要人的参与,而将图片进行旋转并记录其旋转的角度作为标签写个脚本就能完成,并且我们可以从互联网上找到数百万张图像生成几乎无限的训练数据。
从数百万张图像中学习到特征表示后,我们可以使用转移学习对一些监督任务(例如猫与狗的图像分类)进行微调:
1、自监督学习的三个挑战
链接:https://zhuanlan.zhihu.com/p/108906502
- 1、对于大量的无标签数据,如何进行表征学习?
- 2、从数据的本身出发,如何设计有效的辅助任务 pretext?
- 3、对于自监督学习到的表征,如何来评测它的有效性?
回答:
3、评测自监督学习的能力,主要是通过 Pretrain-Fintune 的模式。 我们首先回顾下监督学习中的 Pretrain - Finetune 流程:我们首先从大量的有标签数据上进行训练,得到预训练的模型,然后对于新的下游任务(Downstream task),我们将学习到的参数进行迁移,在新的有标签任务上进行「微调」,从而得到一个能适应新任务的网络。
而自监督的 Pretrain - Finetune 流程:首先从大量的无标签数据中通过 pretext 来训练网络,得到预训练的模型,然后对于新的下游任务,和监督学习一样,迁移学习到的参数后微调即可。所以自监督学习的能力主要由下游任务的性能来体现。
2、自监督学习的主要方法
自监督学习的方法主要可以分为 3 类:1. 基于上下文(Context based) 2. 基于时序(Temporal Based)3. 基于对比(Contrastive Based)
-
基于上下文(Context Based)
-
基于时序(Temporal Based)
-
基于对比(Contrastive Based)
3、自监督学习的理解
BERT
BERT模型,它的架构就是Transformer 的 Encoder,里面有很多Self-attention,MLP,Normalization等等。BERT可以做的事情也就是Transformer 的 Encoder 可以做的事情,就是输入一排向量,输出另外一排向量,输入和输出的维度是一致的。那么不仅仅是一句话可以看做是一个sequence,一段语音也可以看做是一个sequence,甚至一个image也可以看做是一个sequence。所以BERT其实不仅可以用在NLP上,还可以用在CV里面。所以BERT其实输入的是一段文字,如下图所示。
接下来要做的事情是把这段输入文字里面的一部分随机盖住。随机盖住有2种:
一种是直接用一个Mask把要盖住的token (对中文来说就是一个字)给Mask掉,具体是换成一个特殊的字符。另一种做法是把这个token替换成一个随机的token。
接下来把这个盖住的token对应位置输出的向量做一个Linear Transformation,再做softmax输出一个分布,这个分布是每一个字的概率,如下图所示。
那接下来要怎么训练BERT呢?因为这时候BERT并不知道被 Mask 住的字是 “湾” ,但是我们知道啊,所以损失就是让这个输出和被盖住的 “湾” 越接近越好,如下图所示。
剩余内容:
https://zhuanlan.zhihu.com/p/378360224
看不懂了。。。