位置编码
位置编码公式如上,感觉大家跟我的疑惑一样,公式肯定是能看懂的,就差个例子。那么,做为Transformer第1个位置(
p
o
s
=
1
pos=1
pos=1)的输入,维度假设为7维(dmodel=7),那么他的位置编码如下,位置编码的维度和特征的维度相同,两者相加,就得到了包含位置信息的输入:
(
s
i
n
1
1000
0
0
128
,
c
o
s
1
1000
0
1
128
,
s
i
n
1
1000
0
2
128
,
c
o
s
1
1000
0
3
128
,
s
i
n
1
1000
0
4
128
,
c
o
s
1
1000
0
5
128
,
s
i
n
1
1000
0
6
128
)
(sin\frac{1}{10000^\frac{0}{128}},cos\frac{1}{10000^\frac{1}{128}},sin\frac{1}{10000^\frac{2}{128}},cos\frac{1}{10000^\frac{3}{128}},sin\frac{1}{10000^\frac{4}{128}},cos\frac{1}{10000^\frac{5}{128}},sin\frac{1}{10000^\frac{6}{128}})
(sin1000012801,cos1000012811,sin1000012821,cos1000012831,sin1000012841,cos1000012851,sin1000012861)
这么一写,了然了吧?
多头注意力
就是有多个self-attention,每个头都会得到自己的一个注意力系数,最后将这些注意力系数concat,做为最终的注意力。这就是集成学习的思想。
双向模型
单向模型仅能保留过去的信息,因为它看到的唯一输入来自过去。使用双向模型将以两种方式运行您的输入,一种从过去到未来,一种从未来到过去,这种方法与单向的不同之处在于,在向后运行的模型中,保留来自未来的信息并使用两个隐藏状态组合,能够在任何时间点保存过去和未来的信息。可以获得更多的知识。
LSTM
输入输出忘记门
GRU
复位门、更新门;重要性有多大,输出多少。LSTM和GRU相似,在一些情况下GRU胜过LSTM。
BERT
因为BERT是生成语言模型,所以只使用Transformer中的encoder部分。它主要包含两个任务:1. MLM(Mask Language Model),相当于一个完形填空任务;2. NSP(Next Sentence Predict),判断两个句子是不是上下文。训练时,将两个任务的loss相加。在海量单预料上训练完BERT之后,便可以将其应用到NLP的各个任务中了。也是个双向模型。
Transformer
包括encoder、decoder、多头注意力、自注意力、位置编码等关键部分。
GPT
删除Transformer的decoder部分的多头注意力,大规模堆叠。巨量数据训练。到底有多巨量?7000本书、8亿单词、5GB文本、8个GPU训练一个月。