1.transformer介绍
2017年Google的《Attention Is All You Need》
Transformer 2017 年被提出,NLP中红极一时的 BERT、GPT-2 都采用了基于 Transformer 的架构。近年来,Transformer 成为深度学习领域非常受欢迎的一种架构,它依赖于一种简单但却十分强大的机制——注意力机制,使得 AI 模型有选择地聚焦于输入的某些部分,因此推理更加高效。
Transformer 已经广泛应用于序列数据的处理,尤其是在语言建模、机器翻译等自然语言处理领域。此外,它在语音识别、符号数学、强化学习等多个领域也有应用。
- transformer主要组成
Transformer 主要由两个部分组成:
编码器(Encoder):将输入序列转换为一个隐表示(向量表示)。
解码器(Decoder):从隐表示生成输出序列。
编码器 和 解码器 都由多个 层(layers) 组成,每层都包括一个 自注意力机制 和一个 前馈神经网络(Feed-Forward Neural Network, FFN)。
2.模型重要概念理解
Transformer 的核心概念是 自注意力机制(Self-Attention Mechanism),它允许模型在处理每个输入时“关注”输入序列的不同部分。这种机制让模型能够理解每个单词或符号与其他单词或符号之间的关系,而不是逐个地线性处理输入。
2.1自注意力机制的宏观理解
输入句子:The animal didn’t cross the street because it was too tired。
句子中的it指代什么?它与句子中的每个词有着什么样的联系?
2.2序列编码
深度学习做NLP的方法,要先将句子分词,然后每个词转化为对应的词向量序列。这样一来,每个句子都对应的是一个矩阵
X
=
(
x
1
,
x
2
,
.
.
.
x
t
)
X=(x_1,x_2,...x_t)
X=(x1,x2,...xt),其中
x
i
x_i
xi代表着第i个词向量,维度为d维。问题即可转化为对序列的编码。
RNN层编码:
y
t
=
f
(
y
t
−
1
,
x
t
)
y_t=f(y_t−1,x_t)
yt=f(yt−1,xt)
CNN层编码:
y
t
=
f
(
x
t
−
1
,
x
t
,
x
t
+
1
)
y_t=f(x_t−1,x_t,x_t+1)
yt=f(xt−1,xt,xt+1)
Attention层编码:RNN要逐步递归才能获得全局信息,因此一般要双向RNN才比较好;CNN事实上只能获取局部信息,是通过层叠来增大感受野;Attention的思路最为粗暴,它一步到位获取了全局信息!它的解决方案是:
y
t
=
f
(
x
t
,
A
,
B
)
y_t=f(x_t,A,B)
yt=f(xt,A,B)
其中A,B是另外一个序列(矩阵)。如果都取A=B=X,那么就称为Self Attention,它的想法就是将
x
t
x_t
xt与原来的每一个词进行比较,最后得到
y
t
y_t
yt。
2.3Attention层
Google的一般化Attention思路也是一个编码序列的方案,因此我们也可以认为它跟RNN、CNN一样,都是一个序列编码的层。
Google给出的Attention的定义:
- 其中,Z是归一化因子。
- q,k,v分别是query,key,value的简写,K,V是一一对应的,它们就像是key-value的关系
- 那么上式的意思就是通过qt这个query,通过与各个ks内积的并softmax的方式,来得到qt与各个vs的相似度,然后加权求和,得到一个dv维的向量。其中因子 √ d k √d_k √dk起到调节作用,使得内积不至于太大(太大的话softmax后就非0即1了,不够“soft”了)。
2.4如何理解attention结构
- step1:每个单词的词向量X与三个权重矩阵后相乘中生成查询向量Q、键向量K和值向量V。
- step2:打分,分数决定了在编码单词“Thinking”的过程中有多重视句子的其它部分。
- 除以 √ d k √d_k √dk,使梯度更稳定
- step4:softmax,使所有单词的分数归一化,得到的分数都是正值且和为1。
- step5:每个值向量乘以softmax分数。这里的直觉是希望关注语义上相关的单词,并弱化不相关的单词
- step6:加权值向量求和
2.5multi-head attention(多头注意力机制)
Multi-Head Attention是Google对Attention机制的完善。不过从形式上看,就是把Q,K,V通过参数矩阵映射一下,然后再做Attention,把这个过程重复做h次,结果拼接起来,即:
所谓“多头”(Multi-Head),就是只多做几次同样的事情(参数不共享),然后把结果拼接。
2.6前馈神经网络
每个编码器和解码器层还包括一个前馈神经网络:
这是一个两层的全连接网络,其中max(0, .) 是 ReLU 激活函数。
3transformer模型结构
4模型验证
4.1数据集介绍
IMDB数据集:包含来自互联网的50000条严重两极分化的电影评论,该数据被分为用于训练的25000条评论和用于测试的25000条评论,训练集和测试集都包含50%的正面评价和50%的负面评价。
4.2multi-head attention代码实现
4.3验证结果
用imdb数据集对transformer模型进行验证。
模型经过训练,在验证集上的准确率可达到85%左右