transformer是大语言模型的核心技术之一,它首次出现于2017年的一篇著名论文《Attention Is All You Need》,论文原文:https://arxiv.org/abs/1706.03762
看过我上篇文章《Transformer介绍(一)》的都知道,模型的目标是接收一段文本,预测下一个词。输入的文本被切分成很多小块,每个小块是一个token,通常是单词、单词片段或符号。
为了便于理解,我们简化一下,将token视为单词。transformer的第一步是将每个token关联到高维向量,即embedding(嵌入向量)。
在所有可能的嵌入向量构成的高维空间中,方向可以对应语义。例如,方向对应性别,在该空间中,加上一个方向,就能将男性名词嵌入,转到对应女性名词的嵌入。
在高维空间中,还有很多的方向可以对应多种词义。transformer的目标是逐步调整这些嵌入(embedding),使它们不仅编码(encode)每个词,还能融入更丰富的上下文含义。
比如,mole在不同的语境有不同的含义。transformer的第一步切分文本,并将每个token对应一个向量,此时三个mole对应的都是同一个向量,因为初始的token嵌入没有参照上下文查找表。
接下来周围的信息传递到该嵌入向量。嵌入空间中有多个方向,编码了mole这个词多种不同的含义。
训练的好的attention blocks能计算出给generic embedding加什么向量,才能把它移动到上下文对应的具体方向上。
attention blocks不仅精细化了一个词的含义,还让模型相互传递这些嵌入向量所包含的信息。
所有的向量流经网络后,经过了很多层的attention blocks,此时预测下一个token的计算过程,完全基于序列中最后一个向量。
每个词的初始嵌入是一个高维向量,只编码了该单词的含义,没有关联上下文。然后还编码了词的位置信息,现在可以知道词是什么,以及在文中的什么位置。
用E表示这些嵌入向量,目标是通过一系列的计算产生一组新的更精确的嵌入向量。比如那些经过形容词修饰的名词,所对应的向量。
在深度学习中,我们希望多数计算都是矩阵向量乘法,其中矩阵填满了可调的参数,需要模型基于数据学习后调整。模型的实际行为往往很难解释,因为它是通过调整大量参数来最小化代价函数。
当逐一分析这些带有参数的矩阵时,为了帮助理解,我们设想出一个具体的行为。
第一步,可以想成是每个名词(如creature),问,我前面有形容词吗?然后前面的 fluffy 和 blue 回答,我就是