赞
踩
预训练语言模型的学习方法有三类:自编码(auto-encode, AE)、自回归(auto regressive, AR),Encoder-Decoder结构。
决定PTM模型表现的真正原因主要有以下几点:
深度学习中的注意力模型
抛除RNN的Self-Attention模型以及谷歌的Transformer架构
attention及transformer在自然语言处理及图像处理等方面的应用
BERT大火却不懂transformer?读这一篇就够了
一文读懂bert(原理篇)
从word embedding到bert模型–自然语言处理中的预训练技术发展史
乘风破浪的PTM:两年来预训练模型的技术发展
语言模型是为了量化地衡量哪个句子更有可能出现。核心函数P的思想是根据句子里面前面的一系列前导单词预测后面跟哪个单词的概率大小(理论上除了上文之外,也可以引入单词的下文联合起来预测单词出现概率)。
NNLM(神经网络语言模型,2003年发表,是后续NLP模型的鼻祖)的学习任务是输入某个句中单词W_t = "bert"前面句子的t-1个单词,要求网络正确预测单词Bert。
原始输入:onehot编码
上一层:单词embedding向量
再上一层:神经网络层
输出:softmax预测单词
Word2vec(2013年提出,最火的用语言模型做word embedding的工具)
Word2Vec有两种训练方法,一种叫CBOW,核心思想是从一个句子里面把一个词抠掉,用这个词的上文和下文去预测被抠掉的这个词;第二种叫做Skip-gram,和CBOW正好反过来,输入某个单词,要求网络预测它的上下文单词。
如何应用在下游任务中?
word embedding等价于将onehot层到embedding层的网络用预训练好的参数矩阵Q初始化了。下游任务使用word embedding有两种方式:一种是Frozen,就是Word Embedding那层网络参数固定不动;另外一种是Fine-Tuning,就是Word Embedding这层参数使用新的训练集合训练也需要跟着训练过程更新掉。
原理
word2vec的核心假设是拥有相似上下文的词相似。
技巧
skip-gram方法适用于小型语料库或者专业术语中,因为使用这种方式可以得到更多的训练数据,例如在5-grams中可以得到4个训练对。可用经验采样频率公式进行采样。
skip-gram的算法数据计算样本非常多。为了降低计算量,有两个方法:
Attention is All You Need,2017年谷歌发表
tansformer本身是一个典型的encoder-decoder模型。encoder端由N个结构相同的大模块block堆叠而成(文章中N=6),每个大模块又由两个子模块构成,分别为多头自注意力模块和前馈神经网络,decoder端也是由相同数量的大模块堆叠而成,每个大模块由三个子模块构成,分别为多头自注意力, 多头编码-解码注意力层,前馈神经网络。
一、Multi-Head attention模块
self-attention模块
self-attention的过程对应Q,K,V矩阵得到Z的过程。
Attention(Q,K,V)= softmax(\frac{QK^T}{\sqrt{d_k}})V
这里的d_k指的是key向量的维度,例如文章中取的是64,那么下根号之后就是8。除\sqrt{d_k}是为了把注意力矩阵变成标准正态分布,使得softmax归一化之后的结果更加稳定,以便反向传播的时候获取平衡的梯度。不做softmax的话某个输入太大就会使权重接近1,导致梯度很小。
在编码某个单词的时候,将所有单词的值向量value进行加权求和,而权重是通过该词的查询向量query与其他所有词的键向量key的点积并通过softmax得到。q与k点积的含义是将当前词作为搜索的query,与句子中所有词的key去匹配,得到相关性。
multihead(多头)就是我们使用多个Q,K,V的参数矩阵,最后再将其结果结合拼接起来,送入一个全连接层得到输出Z。
多头主要是扩展了模型专注于不同位置的能力,提取多重语义。
例如在翻译“The animal didn’t cross the street because it was too tired”时,需要知道这个it指的是什么。这时一个注意力头集中在animal上,另一个则集中在tired上。
self-attention的计算量:dN^2,其中d是embedding size, N是句子输入长度,因为每两个输入之间都要计算一遍,每次计算的复杂度为d。
使用Q/K不相同可以保证在不同空间进行投影,增强了表达能力,提高了泛化能力。
二、encoder端
输入:
embedding + position coding
为了让模型学习位置信息,添加position encoding并将其叠加在word embedding上。可选择正弦和余弦函数。为什么用正弦余弦函数?因为这样操作之后position encoding矩阵乘它本身的转置得到的矩阵可看到两个字之间的关系,这时两个字离的越近,相关程度越高,离的越远系数会越低,这与我们的认知是一致的。
【bert后来是用的position embedding,也就是说它的位置编码是学习的值,而不是直接用正弦余弦函数。】
结构:
encoder端有6层,每层由两个子层组成。第一个子层是多头自注意力模块+残差连接+LN,第二层是前馈神经网络+残差连接+LN。
自注意力模块前面已经讲过了,下面介绍下其他模块。
三、decoder端
decoder的基本单元与encoder的基本单元不同的地方在于:
在进行预训练的时候,Encoder和Decoder会同时对不同Mask部分进行预测:Encoder侧双向语言模型生成被随机Mask掉的部分单词;Decoder侧单向语言模型从左到右生成被Mask掉的一部分连续片断。两个任务联合训练,这样Encoder和Decoder两侧都可以得到比较充分地训练。
CPT: A Pre-Trained Unbalanced Transformer for Both Chinese Language Understanding and Generation
模型结构:
GPT: Improving Language Understanding by Generative Pre-Training,2018年6月提出)
GPT也采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过Fine-tuning的模式解决下游任务。
模型结构:transformer的解码器;
预训练任务:单向的语言模型,即根据前面k个词语预测下一个词语。
GPT-2: Language Models are Unsupervised Multitask Learners 参数量:1.5B
GPT-2的模型结构与GPT基本一致,只是用了更大的模型和更大的数据集。
亮点是提出了模型不需要根据下游任务进行微调,而是直接通过prompt(提示词)来生成补全提示词的句子。
GPT-3:Language Models are Few-Shot Learners (2020年5月) 参数量:200B
GPT3主要的卖点有两个:1. 不需要fine_tuning,直接通过zero-shot,one-shot, few_shot的方式来告诉模型要完成什么任务;2.大的模型,大的数据集。
它的主要特点如下:
1.语言生成:通过prompt来生成补全提示词的句子;
2.上下文学习(in-context learning):指在不进行参数更新的情况下,只在输入中加入几个示例就能让模型进行学习;【in-context learning的核心是类比学习。三个优势:1,演示样例用自然语言格式编写,十分简易;2.类似于人类通过类比学习的决策过程;3.无需重新训练模型】
GPT-3拥有的In-context learning能力可以说有很大程度来自于其庞大的参数量和训练数据,但是具体能力来源仍然难以溯源。
3.世界知识。
GTP3在上下文学习中,获得了一种Chain-of-thought能力,对输入的Prompt采用Chain-of-thought的思想进行改写。在这种方式下,模型能回答一些原本直接输出会产生错误的题。
GPT,GPT-2, GPT-3都是自回归语言模型(AutoRegressive,简称AR)。自回归模型的定义是上一个时刻模型的输出会接到模型输入的后面,一起成为这一个时刻的模型输入。第一次采用这种方式的模型是RNN,这些模型的预训练任务都是从左至右的单项语言模型。
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,2018年10月
一、 模型结构
模型结构:transformer的encoder端,由12层transformer layer构成。
预训练阶段用两种预训练方式:
1.Masked LM(language model),这点和CBOW相似。15%的token中,80%的几率替换成mask,10%的几率被替换为任意一个其他的token,10%的几率原封不动,模型预测和还原被遮盖掉或替换掉的部分。
2.next sentence prediction,判断两个句子是否在文章中互为上下句,然后使用了大规模的语料去预训练。
bert的输入部分是个线性序列,两个句子通过分隔符分割,最前面和最后增加两个标识符号。每个单词有三个embedding: word embedding + position embedding + segment embedding。
文章中的参数细节:
以BERT base为例
transformer_block=12, embedding_dimension = 768, num_heads=12
如以ALBert_xxlarge为例,V=30000, H=4096, E=128
那么原先参数为V * H= 30000 * 4096 = 1.23亿个参数,现在则为V * E + E * H = 30000128+1284096 = 384万 + 52万 = 436万,
词嵌入相关的参数变化前是变换后的28倍。
3. 原因是transformer学习到的隐向量应该是要比初始的embedding向量学习到的东西更多的。
4. cross-layer parameter sharing (跨层参数共享)
5. inter-sentence coherence loss (段落连续性任务)
使用段落连续性任务(sentence order prediction)。正例,使用从一个文档中连续的两个文本段落;负例,使用从一个文档中连续的两个文本段落,但位置调换了。
避免使用原有的NSP任务,原有的任务包含隐含了预测主题这类过于简单的任务。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。