Transformer
导言 Introduction
- 背景中提到的工作:用CNN代替RNN,但是问题是CNN只能观察一个小窗口,但Transformer可以一次看整个序列;CNN的好处是可以使用多通道,每一个通道可以识别不一样的模式,于是Transformer采用了 Multi-head Attention来模仿CNN的多通道
编码器
解码器(在做预测的时候,输入是编码器在前一时刻的输出)
LayerNorm(在样本层面进行norm)- Transformer采用的
BatchNorm(在特征层面进行norm)
Scaled Dot-Product Attention
- key,query 等长
- key,query 内积作为相似度,如果有n对(key,query)pair的话,就会得到n个值,再放进softmax,就会得到n个非负的,和等于1的权重,然后对value进行加权
- Mask作用:避免t时刻看到t时刻之后的东西,所以在算出内积之后,对 t 以及 t 之后的时刻用一个非常大的负数代替,softmax出来后对应权重是0
Multi-head Attention
- 首先将V,K,Q投影到低维,投影的参数W是可以学习的
- Scaled Dot-product Attention里面没有可学习的参数
- 多头:学习不同的距离空间(类似CNN多通道)
Attention层的作用
- self attention
- 编码器:输入的序列,作为Q,K,V传入multi-head attention,输出是V的加权和(不考虑投影)
- 解码器:区别在masked,不能看到正在处理的时刻 t ,之后的时刻的输入
- 第三个attention:编码器的输出(n个长度为d的向量)作为V、K;解码器的输出(m个长度为d的向量)作为Q
Feed Forward
- 就是一个MLP
Positional Encoding
- 为什么需要:attention 是不会有时序信息的(同样一句话,打乱顺序,attention给出的结果顺序会变,但是值不会变,但实际上语义应该会发生变化)。所以需要在输入里面加入时序信息
- pos:词在序列中的位置
- d:输出的embedding的维度,在paper中使用和模型一样的维度
- 10000:User defined scalar,可以选其他值,paper中选的10000
- i:paper中说指的是维度,但是实际上,同一个 i 对应一个sin和一个cos,所以(如下图)如果我们需要将位置信息映射到4维空间上,那么只需要 i=0,i=1 (不是很确定)
- Transformer的做法:positional encoding得到512维度的位置信息(和embedding的维度一样),两者直接相加,然后输入到attention层
a v a
BERT
导言 Introduction
- 预训练 Pre-training 可以很多提升很多NLP任务,主要是两个方面的任务:
- 句子层面 sentence-level:句子关系
- 词源层面 token-level:Named entity recognition,question answering
- 使用预训练做特征表示一般有两类策略:
- 基于特征的 feature-based:代表作 ELMo,架构是双向RNN (对每一个下游任务,构造一个跟这个任务相关的神经网络,将于训练好的表示,如词嵌入,作为一个额外的特征,和本来任务的输入一起输入到模型中。我希望这些特征已经有了比较好的表示,所以导致模型训练起来比较容易)
- 基于微调的 fine-tuning:代表作GPT (模型预训练好的参数,会在下游的数据上进行微调)
- 这两个途径都是使用一个相同的目标函数:都是使用语言模型,并且是单向的 (unidirectional language models)
- Bert 的改进:Masked Language model
- 每一次随机选一些词,然后将它们盖住,目标函数是预测这些被盖住的字(完形填空),允许模型看左右的信息
- 下一个句子的预测:给两个句子,判断它们在原文中是不是相邻的,还是说是在原文中随机采样了两个句子
BERT 模型
- 两个步骤:pre-training,fine-tuning
- Pre-training:模型在unlabeled data进行训练
- fine-tuning:模型的权重初始化成Pre-training得到的权重,所有的权重都会在fine-tuning的时候参与训练,用的是labeled data
- Model Architecture:Multi-layer bidirectional Transformer encoder