NLP预训练模型概述EBET易博app

  新闻资讯     |      2023-09-16 19:48

  前段时间套磁的某个老师让看NLP预训练模型(PLMs)的相关论文,然后做个presentation。现在把我总结的内容贴出来,主要是参考了李宏毅老师的ML课程,。我理解的很浅,主要是知道了有这么个东西,具体的算法研究其实并没有看多少,有问题欢迎大家评论区留言~

  在看论文之前,我连最基本的transformer都不会,因此先学了transfomer。transformer是一个典型的seq2seq的模型,也就是输入输出都是序列,但是二者的长度可以不一样

  其核心部分是self-attention机制。直观来说,这一机制考虑了上下文信息,计算每个输出时会考虑其他的输入,而不仅仅是自身。这一点在nlp的任务中尤其重要,比如说machine translation、qusestion answer等任务中,都是要结合上下文来给出结果的。主要是K、Q、V三个矩阵,各自的功能大家可自行学习,也不是很难,而且这也是面试的一个常问点。

  PLMs模型在使用中主要面临着两个问题:带label的数据稀缺、模型参数过大

  解决办法是用Prompt tuning。也就是在训练的时候对训练数据加上一些提示词,帮助模型认识学习到一些规则

  如上左图,如果想得到两个句子之间是否互相支持的关系,常用的做法是用一个sep连接起来扔到PLM中训练,如果数据量不足,模型是很难学到这种逻辑关系的,因为有些句子虽然是用sep连接,但是并不是判断逻辑关系,还可以有其他的任务,比如说两个句子前后关系是否对应。如果我们不用sep连接,而是用“is it true that”连接,那么在下游任务中,如果看到一个句子中有“is it true that”,那么模型就知道要判断前后两个句子之间的逻辑关系,而不是判断前后关系。

  刘鹏飞:近代自然语言处理技术发展的“第四范式”刘神@刘鹏飞在这篇文章里面形象的说明:prompt tuning是预训练模型迁就下游任务,这个说法太赞了!

  第二个问题是,预训练模型太庞大了,参数动辄上亿,最近的T5等模型更大。虽然现在都是基于预训练模型进行fine tuning,但是每个下游任务都fine tuning一整个模型,效率还是很低,对算力要求很高。解决办法是Parameter-Efficient Tuning。通过一些操作,使得下游任务需要tuning的参数大大下降

  上面的distilation和pruning都是在尝试减少原模型的更新参数量,但还是要fine tuning大部分模型参数的。而现在有些方法是对于特定下游任务,训练特定的向量vector,PLM的参数不用动。

  EBET易博官方网站

  和Adapter类似,LoRA是从“侧面”加了一个MLP,然后再residual。这样没有加深网络的深度,更利于训练。LoRA全称是 Low Rank,是指在新增的MLP中,先把输入转换到低维的向量,再转回来,所以叫low rank。这样也会节省很多参数。

  其主要思想是在self-attention那一部分前面认为加上几个vector,这几个新加的vector只有 K、V,没有Query。也就是在计算后面正文的句子的输出的时候会考虑这几个vector,但是这几个vector没有输出。在每一个self-attention层都可以加上几个vector,那么我们就只需要训练这些新加的向量即可,其他的PLM参数不用训练。

  为什么说是受prompt tuning的启发呢?其实prompt tuning就是在原训练预料中加入一些提示词,使得模型能更好的识别出特定的任务。而这里的认为加上几个vector,也就相当于是加上了几个提示词

  原来的PLM是很多transformer层的堆叠,而且每一层的输出都是同维度的向量,可以看作每一层都是对输入的特征表示,只是越高层,提取到的特征越准确。但是对于很多任务,我们其实并不需要那么多层来提取特征,也许三四层就可以很好的work了。因此这个方法是在每一层的输出加上一个分类器Classifier,并计算confidence。如果某一层的confidence达到了阈值,足够满意,那么其上面的那些层就都不需要训练了,因此也可以减少训练参数。