Transformer系列模型笔记

1.word2vec

1.1 CBOW(词袋模型)

根据上下出现的单词预测中间的单词,包括输入层、投影层、输出层。输入层包括上下出现单词的向量化表示;投影层是把输入层的向量累加求和后做映射;输出层(计算语料库中所有单词的概率,计算量大!)所以设计的底层是一颗哈夫曼树,按照语料库中单词出现的频率作为权重进行构建,出现频率越高的节点在树中层数越浅。

1.2 skip-gram

与词袋模型刚好相反,skip-gram模型是根据当前词推测当前单词可能的前后单词。

构建上下文词--目标词的数据集,采用了负采样技巧,使用上下文词+随机从语料库中选取词语构成负样本,将任务转化为逻辑回归N元分类任务。

2.Transformer

2.1预训练模型

为什么要研究预训练模型

有大量任务中存在无标注数据,若采用人工标注则费时费力。那么我们可以采用先使用大规模数据集训练一个大模型,再利用我们手头少量数据集做微调。

2.2训练过程

2.3模型优势

比起CNN,CNN只能通过卷积核提取到局部信息,而对于文本数据忽略了长距离的依赖。

比起RNN,RNN随着距离的增加,信息衰减严重,而transformer不存在距离问题它只取决于两者的相关性。RNN建模当前词时只会用到前面的词,而transformer建模当前词时不仅可以用到前面的词也会用到后面的词。RNN无法做到并行计算,只能一步一步计算隐藏层状态。

2.4位置编码

为了解决句子中的时序问题,transformer引入了位置编码。

当位置为偶数时为sin(××),位置为奇数时为cos(××)。

2.5解码器的两个注意力层

第一个是带masked的多头注意力层,本质上是一个自注意力层,与Encoder不同的是该自注意力层只允许关注已输出位置的信息,在通过softmax之前进行mask使之变为一个很大的负数。

第二个是不带masked的多头注意力层,也叫Encoder-Decoder注意力层。不同的是,Decoder中的qkv只有q来源于上一个Decoder的输出,kv全部来源于Encoder的最后一层输出。

3.ELMO模型

产生原因:因为word2vec无法区分多义词的不同语义,因此ELMO可以根据上下文动态调整:预训练(双层双向LSTM)+ 特征融合。伪双向---分开训练的!!!

本质思想:事先用语言模型学好一个单词的Word Embedding,然后在实际使用Word Embedding的时候,单词已经具备了特定的上下文了,这个时候可以根据上下文单词的语义去调整单词的Word Embedding表示,这样经过调整后的Word Embedding更能表达在这个上下文中的具体含义,自然也就解决了多义词的问题了。

ELMO虽然采用的双向结构,但两个方向是彼此独立训练的,从而避免了已知答案去预测答案的情况。

**【使用】**ELMO会得到三个Embedding向量:单词的word Embedding、第一层LSTM对应的Embedding(表示单词的句法信息)、第二次LSTM对应的Embedding(表示单词的语义信息)。分别给予这三个Embedding一个权重(这个权重可以通过学习得到),将三个Embedding分别乘以权重再进行累加后得到一个Embedding,将它作为补充的新特征用于下游任务。

4.生成式预训练模型GPT

GPT使用了transformer中的Encoder结构,其中的self-Attention替换为了masked的self-Attention,从而每个位置的词看不到后面的词。

为什么采用单向不采用双向:因为模型要训练预测能力,双向结构可以看到中间要预测的单词。因此GPT放弃了transformer的双向结构改用单向结构,也奠定了GPT根据已有的上下文生成下文的任务。

**【使用】**下游任务要向GPT的网络结构看齐,在做下游任务时GPT的参数初始化为预训练好的GPT网络参数,最后使用手头的任务训练这个网络并进行微调。

5.集大成者Bert

Bert使用了双向的transformer的结构集成,Bert综合了ELMO的双向优势与GPT的transformer特征提取优势。

**【使用】**同样是预训练,在下游任务中进行微调。

【输入输出部分的处理】为了适配多任务下的迁移学习,Bert设计了更通用的输入层和输出层。起始位置用[CLS]标识,两个句子用[SEP]分割,每个单词有三个Embedding---单词Embedding(有的单词会被拆分为一组公共字词单元,如playing被拆为play和ing)、句子Embedding、位置信息Embedding,将这三个Embedding直接相加得到最终输入。

**【两个创新】**Bert除了集中了前两个模型的优势之外,还做出了两个创新。

一个是让Bert具备通过上下文做预测的能力。具体做法是将大量的词替换为,模型需要通过上下文去预测这些标签。但是,直接将大量的词替换为标签可能会造成一些问题,模型可能会认为只需要预测相应的输出就行,其他位置的输出就无所谓。同时Fine-Tuning阶段的输入数据中并没有标签,也有数据分布不同的问题。因此文本中15%的词用于预测,这15%中的80%被替换为,10%的词被替换为其他词,另外10%保持不动。

另一个是让Bert具备判断句子B是否为句子A下文的能力。50%的训练数据选择语料库中真正相连的两个句子,50%的训练数据是从语料库中随机选取一个句子拼在第一个句子后面。这个做法相当于token级别的完形填空。

相关推荐
ShiMetaPi2 小时前
ShimetaPi丨事件相机新版SDK发布:支持Python调用,可降低使用门槛
深度学习·计算机视觉·事件相机·evs
南方的狮子先生4 小时前
【深度学习】卷积神经网络(CNN)入门:看图识物不再难!
人工智能·笔记·深度学习·神经网络·机器学习·cnn·1024程序员节
蒙奇D索大4 小时前
【计算机网络】考研408计算机网络:传输介质(导向/非导向)考点梳理
笔记·计算机网络·考研·408·改行学it
ideaout技术团队4 小时前
android集成react native组件踩坑笔记(Activity局部展示RN的组件)
android·javascript·笔记·react native·react.js
howard20054 小时前
神经网络初探
深度学习·神经网络·keras
一碗绿豆汤5 小时前
机器学习第一阶段
人工智能·笔记·机器学习
小五1275 小时前
U-net系列
深度学习·目标检测·目标跟踪
YJlio5 小时前
ProcDump 学习笔记(6.14):在调试器中查看转储(WinDbg / Visual Studio 快速上手)
笔记·学习·visual studio
Yeats_Liao6 小时前
华为开源自研AI框架昇思MindSpore应用案例:跑通Vision Transformer图像分类
人工智能·华为·transformer
zzZ65657 小时前
U-net 系列算法总结
人工智能·深度学习·机器学习