云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

域名注册_服务器尺寸_限时特惠

小七 141 0

分解变压器

我们看到了注意力是如何工作的,以及它是如何改进神经机器翻译系统的(参见之前的博客文章),我们将揭开当今最著名的NLP模型(a.k.a BERT and friends)背后的秘密:变压器。在第二部分中,我们将深入研究这个体系结构的细节,目的是深入了解它的不同组件是如何操作和交互的。剖析变形金刚怪物(来源)处处注意!正如你现在所理解的,注意力是序列到序列系统(如翻译模型)中的一个革命性的想法。谷歌翻译团队的人对此非常理解。由于充满了想法(和gpu),这些人有一个惊人的想法来进一步推动注意力。这归结为一个相当简单的观察:除了使用注意力来计算编码器隐藏状态向量的表示(即上下文向量),为什么不使用注意力来计算编码器的隐藏状态向量呢?利用这一想法的直接好处是吸引人的:摆脱RNNs固有的顺序结构,这阻碍了这些模型的并行化。正如尤金尼奥教授雄辩地说:"放下你的RNN和LSTM,它们不好!…忘了RNN和变体。集中注意力。注意力才是你真正需要的! "因此在2017年,在他们现在标志性的论文《注意力就是你需要的一切》中,全世界都被引入了这一新的架构:图1:变压器架构概述在这个博客中,我们将对这个模型的主要组成部分进行一些说明。俗话说"你不会改变一个胜出的团队。"因此,前面讨论的模型的核心概念被保留下来:转换器利用了一个编解码器架构以及这两个组件之间的注意力机制。但不仅如此:在下面,我们将讨论自我注意层、多头概念和位置编码的魔力。自我注意现在让我们深入到核心组件self-attention层(在图1中称为multi-head attention;我们稍后将讨论这个名称背后的原因)。自我注意首先是一个序列到序列的转换,这意味着它将一系列标记转换成一个新的标记序列。图2:自我注意层正如我们现在所理解的,一个词的好的表达需要考虑它在句子中的上下文(例如,这已经是ELMo的核心思想之一)。换句话说,单词i的表示向量W(i)需要解释i左边的单词sw(1),…,W(i-1),以及i右边的单词sw(i+1),…,W(n)。这就要求能够以某种方式将一个单词与其相邻的单词联系起来。这就引出了第二个概念,通常在机器学习中使用:你如何评估两个项目之间的关联度?两个亚马逊产品,两个Netflix观众…还是一句话里的两个词?你通常取他们的点积(在适当的地方):图3:这个图显示了计算单词X(j)表示的步骤:对于句子中的每个词向量X(i),计算X(i)和X(j)之间的点积,记为α(i)。然后用这个值作为字向量X(i)的权重,最后加权和W(j)=∑α(k)X(k)。瞧,自我关注的简略版本。为了得到更完整的版本,我们需要澄清两件事:首先,X(i)向量是什么样子的?你给自我注意层提供了什么,也就是说,句子中每个单词的初始表示是什么?这些可以用几种方法计算。例如,您可以使用传统的tf-idf,也可以跟上NLP的潮流并使用单词嵌入(例如,glow、Fasttext或Word2vec)。第二,相关词到底是什么意思?很多东西!例如,一个句子中的两个词可以与主谓关系(bird和has共享这种关系)。理想情况下,我们希望这两个单词的嵌入之间的点积-以及所有共享相同语法关系的单词-的点积为高,反之,对于不共享这种语法关系的单词,则为低。坏消息是,你的现成的预先计算的单词嵌入没有经过训练来回答这个特定的问题。好消息是,我们仍然可以利用这些预先计算的嵌入,并将其作为整个变压器培训的一部分进行微调。三个嵌件一个的价格现在让我们退一步,想想嵌入W(i)的单词是如何运作的。在这里,我想让你们注意到这个向量实际上被用于三个不同的任务!(以下是我对这篇博文的释义):1-计算单词i的新表示:嵌入W(i)将与句子的另一个单词sw(j)一起在点积中使用,以计算每个单词的权重。2-计算句子j中其他单词的新表示:嵌入W(i)将用在这些单词的点积中,以计算每个单词的权重。3-计算单词i的新表示:嵌入的W(i)将用作最终加权和的和。在这里,我们得出了这篇论文的另一个天才想法。与其为每个单词学习一个单独的嵌入来执行这三个任务,为什么不为每个任务学习不同的单词嵌入呢?从一个通用的嵌入到每个单词的三个专门嵌入。我们将任务1的嵌入称为查询,将任务2的嵌入称为键,将任务3的嵌入称为值。现在让我们重温图3:图4:为了清晰起见,没有表示softmax步骤。假设我们要计算单词"bird"的注意表征,首先,我们测量这个单词与同一句子中所有其他单词的关系:小鸟开始飞翔。我们用它的查询向量Q(bird)的点积和所有其他单词的关键字K(the),…,K(flight)来实现这一点,得到句子中所有单词的权重向量:α(the),…,α(flight)。然后我们将这些权重用于V(the),…,V(nest)句子中所有单词的加权值向量和。由于所有这些操作都是独立的,因此可以对它们进行矢量化:自我关注的向量化形式。这真是它的要旨!我故意省略了真正实现的一些细节(例如规范化常量、前馈层、剩余连接等)。我邀请你阅读原始报纸来报道这些。如果您想了解更多关于查询、键和值参数的详细信息,我建议您查看Jay Alammar关于变形金刚的博客文章。锦上添花:多头注意力"好吧,等等,"你可能会说我知道我们需要训练新的嵌入来捕捉主语与动词的关系,但是其他可能存在的关系呢?"接球不错。毕竟,你可能还想推断"bird"和"its"是通过所有格到名词的关系来联系的。这个问题的解决方案很简单:对于每个单词,创建尽可能多的不同的嵌入,因为我们可能想要捕获这些关系。这意味着有多个平行的自我注意层,而不是只有一个。这叫做多头注意力。在原始文件中,使用了8个头部。对顺序的最后一个调用:位置编码你可能注意到我们一刻都没有提到句子中单词的顺序。这是意料之中的;自我注意操作是置换不变的。也就是说,无论你如何在一个句子中排列单词,它都会产生相同的结果。但这当然不能阻止作者在混乱中建立某种秩序。作者建议通过在每个单词上添加一个维数为d_模型的嵌入向量(一个大小相同的向量)来表示这个信息。理论上,这个位置编码向量会告诉模型这个词在句子中的位置。让我们首先陈述这些向量。每个字位置"pos"和该向量的每个维度"i"的位置编码向量的值。例如,bird在句子中的位置编码向量bird:the little bird take its flight(这里我们取d_model=300),是:"bird"的位置编码向量的前40个值,位于位置2。我们还可以查看一个较长句子的位置编码热图(该句子是使用臭名昭著的GPT-2模型生成的)。每行对应一个字,并显示其位置编码向量的40个第一个值。那么我们如何理解这些向量呢?为了理解它们背后的逻辑,让我们分析一下这些向量需要遵循的两个基本属性:…它可以让模型推断出比训练中遇到的序列长度更长的序列长度。[你只需要注意]这意味着,即使模型被训练的句子不再是N个单词,它也应该能够正确地评分较长的句子。这将这些编码的选择转向了周期函数,并帮助解决了这些函数族,而不是从头开始训练这些位置编码向量。我们假设,这将使模型能够很容易地学会通过相对位置来参与,因为对于任何固定偏移量k,PE(pos+k)可以表示为PE(pos)的线性函数。[你只需要注意]这些向量需要具备的一个基本属性是,它们不应该编码一个单词在句子中的内在位置("单词take位于位置4"),而是一个单词相对于句子中其他单词的位置("单词take位于位置3,相对于单词the")。换句话说,如果一个句子中A和B两个词之间的距离与C和D之间的距离相同,则它们的位置编码向量应该反映f