[2022]李宏毅深度学习与机器学习第七讲(必修)-Self-Supervised Learning
做笔记的目的
1、监督自己把50多个小时的视频看下去,所以每看一部分内容做一下笔记,我认为这是比较有意义的一件事情。
2、路漫漫其修远兮,学习是不断重复和积累的过程。怕自己看完视频不及时做笔记,学习效果不好,因此想着做笔记,提高学习效果。
3、因为刚刚入门深度学习,听课的过程中,理解难免有偏差,也希望各位大佬指正。
Self-Supervised Learning
在自然语言处理里面的模型,主要采用了芝麻街的角色。
Self-Supervised Learning是一种无监督学习方法,但是又比较特殊。
Bert
Bert训练的时候有两个任务,第一个是Masking Input预测遮住的词,损失函数是交叉熵,第二个任务是Next Sentence Prediction,取ClS,之后加一个线性层判断两个句子是否是前后相连。但是后面有工作提出Next Sentence prediction对于任务没有用,可能是这个任务比较简单,因为两个句子是不是配对很容易判断。所以就有了下面第二个图的SOP方法,判断两个句子的顺序,哪个在前,哪个在后。
Downstream Tasks
用预训练模型去做别的任务,主要有四个不同的任务:
- 输入一个序列,进行分类
- 产生相同长度的输出,如词性预测。
- 出入两个序列,输出是否配对(分类)
- Extraction-based Question Answering,这类问答要求答案一定要在原文里面。
这个任务,还要两个额外的向量去预测开始的地方和结束的地方。
为什么Bert可以工作
首先Bert考虑了上下文信息,可以区分一词多意,如下面的第二个图片,苹果和苹果手机的果字就可以分开。
这个又叫contextualized word embedding
同时Bert在蛋白质分析,DNA分析领域的效果也不错,所以就可能需要重新思考为什么Bert效果不错,因为DNA领域或者蛋白质分析和文本好像并没有关系。
实线是用Fine-tune虚线是不用,可以看到在训练集上,同样的模型用Fine-tune的模型不仅收敛的快,而且更加优秀。
而且同样都是局部最优解,但是Fine-tune一般会走到平缓的地方。
Multi-lingual Bert
用104种不同的语言去训练模型,得到了更加强大的模型。
不同语言的字,向量是接近的
但是,我们自己做这个实验的时候可能并不是很容易,很可能训练不出来,因为数据量小,同时训练的次数不够多,需要耐心等待。
为什么这种方法是有效的那?有论文做了Bert训练之后计算两种语言的差距,向量加上差距竟然可以弄成原来的语言。具体的来说就是,计算中午和英文所有向量的平均并相减得到C,然后用Multi-Bert编码英文,编码后加上C,做一个Reconstruction就可以得到中文。
GPT
GPT的任务是预测下一个Token,这里的架构非常像Transfrom的decoder,因为预测下一个Token的时候不能看到以下个Token,这里可以用MASK技术,GPT比较有名的是写了一篇关于独角兽的新闻。
因为GPT真的太大了,所以不会去在训练调整参数,都是给他看一些案例然后直接开始执行任务。
其他的任务Beyond Text
自监督学习在很多领域都有用到
图像领域的对比学习
也可以将bert用在语音上。
What is pre-train model
一般的机器学习方法,一个词,对应的向量是一样的,所以效果并不是很好。不同语境下词应该是不同的向量,所以机器学习又出了FastText。
现在的预训练模型都非常的大,基本上不是穷人可以玩的起来的,所以一方面是让模型变大,另一方面是让模型变小同时保证准确率。
这里Albert比原来的效果还好一点,同时模型更小了,有时间可以去读一读。
当然也有一些改变Transform架构减少计算量的工作,之前讲过了。
How to fine-tune
有两种预训练的方法
- 固定pre-trained Model但是训练最后一层
- 连同pre-trained Model和后面的神经网络一起进行训练。
通常第二种方法更好一点
如果是第二种方法,每一个任务就要保存一个model那么成本非常大,所以就有了Adaptor这一项技术。
那么只需要存Apt这部分就可以了,Apt长什么样子,是一个值得研究的问题。
因为有很多layer,去每个layer的输出乘以weight然后相加也是一种方法。
做Encoder和Decoder的模型可以用翻译来做训练,翻译这个任务,每个词汇都会被考虑到,但是需要很多配对的文本。