赞
踩
transformer就是大名鼎鼎的论文《Attention Is All You Need》[1],其在一些翻译任务上获得了SOTA的效果。其模型整体结构如下图所示
Attention(Q,K,V)=softmax(QKT√dk)V
这里,d_{k}就是30,最终,我们会得到[10,30]的向量,首先,QKT的乘积是为了得到这10个单词在自己的10个单词的权重,所以维度为[10,10],除以√dk,论文中说是猜测如果dk过大,会导致在softmax求梯度的时候梯度过小,论文中还举了个栗子,比如两个以正太分布均值=0,方差为1的向量[10,30],[10,30],那么再进行向量乘法操作后,得到的就是均值=0,方差为30的向量。
最后得到输出后,将向量进行拼接,再加上一个全连接操作,即可得到一个block的输出。
GPT是由openAI提出的一种算法思想[2],其主要思想是通过在大规模的预料上进行模型的训练,然后在特定任务上进行为调。所以其总体思想分为无监督的训练和有监督的微调。
无监督的训练
无监督的训练是指我们首先对模型用大规模的语料进行训练,得到相应的参数。比如我们常用的word embedding,固定在输入向量,然后随着模型一起训练的过程。在本论文中,用的是transformer模型作为预训练模型,其公式如下
在第一个式子中,U代表输入的单词token,We代表单词的词向量,Wp代表位置向量。第二个式子中,我们将向量加和作为输入,经过transformer模型,最终得到输出hl。最后对于输出层,加上一个全连接然后接一个softmax层,得到每个单词在相应位置的概率,其中,对于一条输入,均含有其对应的上下文单词,我们在softmax最大化这个单词所在节点的概率即可。
有监督的微调
当我们用大量的语料进行模型的训练后,就会得到相应模型的参数,接着,我们可以用我们的特定任务在这个模型参数的基础上进行训练,以一些分类任务为例,这里我们将transfomer的输出加上一个softmax层,最终输出的节点个数即为类别标签的个数。在论文中微调损失函数既有分类标签的的损失,也有预训练中损失,所以最终的损失函数是两者的加和。这里分类的损失可以理解,但是预训练中的损失是什么?他的上下文输出的单词是什么?这里我的理解是对于一个句子依旧给他一个窗口,然后类似于word2vec,其中一个损失是预训练的损失,另一个损失是对于标签分类的损失。如下公式所示,是分类的损失,是预训练的损失,在这里,我们可以对预训练的损失设定权值。
总体架构图
总体架构图如下所示,这里我们看到,对于不同的任务的微调,有不同的处理方法,对于分类任务,我们直接输入相应的句子,在输出层加上一个softmax,对于一些句子对输入的任务,我们利用一些相应的标记,进行拼接,最终输出也是用softmax进行分类。
bert是由Google的一些研究者们提出的一种算法[3],其沿用了GPT的用大规模的语料进行预训练,然后在下游任务进行微调的方式,其中预训练的基础模型依然用的是transformer模型,bert在embedding层用了三种方式的embedding累加,并且提出了双向的语言模型,这比GPT的单向语言模型更能学到语义的信息。并且加入了next sentence prediction方式作为loss的一部分,最终在多个任务上达到了sota的效果。
该论文是由fb和华盛顿大学联合提出的一种方法[4],这篇文章的创新点不多,更像是对BERT的进一步炼丹,通过调整一些参数,步长等,最终在多个任务中取得了SOTA的效果,所以说,如果丹炼的好,相同的模型,也可以超过之前的效果。RoBERTa主要实验调优的方面有:1、增大训练数据集,增大batch,增大epoch。2、将static masked LM 换成dynamic masked LM。3、去掉NSP。4、用字节代替字符。
增大训练数据集,增大batch,增大epoch
RoBERTa使用更多的数据集,总计160G,其中包括BOOKCORPUS(16G),CC-NEWS(过滤后76G),OPENWEBTEXT(38G),STORIES(31G)。
原始bert用的是batch_size为256,steps为1M,RoBERTa用了两组,一组是batch_size为2k,steps为125k,另外一组是batch_size为8k,steps为31k
增大之后的效果如下图所示,可以看到,效果虽有提升,但是整体一般。
将static masked LM 换成dynamic masked LM
原始的MLM首先在线下用create pretraing脚本得到相应的训练数据,RoBERTa是在输入的时候对数据进行动态mask,效果如下。整体看来,效果也比较的一般,提升有限。因为这里其实动态的输入和静态数据其实基本上原理是一样的,所以并没有提升太多的效果。
去掉NSP
这里的实验结果表明,不使用NSP的效果要优于使用NSP(这里倒还是挺令人意外的)
用字节代替字符
原始的bert是用字符作为输入,RoBERTa使用字节,这里会使整体词表的数量增大,但是提升效果一般,就不上图了。
ALBERT依旧是Google提出的一种算法[5],其在原始Bert的基础上进行了优化,主要是为了解决Bert的参数量大,训练时间长的问题,其主要有三点创新:1、对输入的embedding进行因式分解。2、层间权重共享。3、损失函数将NSP替换为SOP。
输入embedding因式分解
输入层embedding因式分解是这样一种思想,通常的Bert的embedding向量E和隐藏层H是相等的,假设我们的单词个数是V,则我们的embedding的参数量为V * E,以bert_large为例,V=30000,H=E=4096,那么在优化时需要优化的参数量为30000 * 4096 = 1.23亿。在Albert中,将输入的embeding分成两个部分,V * E 和 E * H的向量,其中E远远小于H,这里的E为128,则H为4096,则参数量为30000 * 128 + 128 * 4096 = 436万,原始Bert的参数量是Albert的28倍。
下面依据论文中的描述,从模型角度和实际角度分析这种做法的可行性
从模型角度
来看,V * E是词向量的表示,其不涉及词与词之间的相关关系,也就是说每个单词的embedding是相互独立的,而E * H这个向量则含有了词与词之间的相关信息,所以可以将两者分离开。
从实际角度
来看,就是我们上文所说的参数量的减少,通过比较,的确可以有效的减少参数的数量。
层间权重共享
层间权重共享表示的是每个transformer模块的参数是共享的,并且通过实验的比较,发现层间权重共享可以有效的减少震荡,如下图所示。其中蓝线为Albert的结果,红色虚线为Bert的实验结果。
损失函数将NSP替换为SOP
论文中讲述了在单个任务中,NSP可以进行主题预测和连贯性预测,NSP的主题预测其实和MLM的效果有一定的冲突,所以作者用SOP代替NSP,NSP是进行两个句子的构造,正例的构造方法是选择一个句子,并将该句子所在句子的后一句作为第二个句子。负例选择的方法是选择一个句子,并随机选择另一个文档的一个句子。在输出时判断这两个句子是否属于同一个句子,类似于一个二分类。SOP的同样是进行两个句子的构造,正例的构造方法和NSP一样,负例的构造方法是将正例中的两个句子调换个位置。
spanBert是由华盛顿大学,fb等联合提出的一种改进bert的方法,其中它在三个方面进行的改进:1、将token mask改成span mask。2、损失函数加上SBO损失。3、去掉NSP。
xlnet是由卡内基梅隆大学和Google大脑联合提出的一种算法,其沿用了自回归的语言模型,并利用排列语言模型合并了bert的优点,同时集成transformer-xl对于长句子的处理,达到了SOTA的效果。
感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。
因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。