精华内容
下载资源
问答
  • Transformer-Tensorflow2 用于分类的Transformer架构 要求:Tensorflow 2.0
  • 理解Transformer架构 .01

    2020-03-12 20:56:20
    本文参考自知乎专栏:...1. Transformer架构 2. 编码器 3. 解码器 4. Transformer中的张量 5. 编码过程 5.1 从宏观上看自注意力机制 5.2 从微观上看自注意力机制的计算步骤 5.3 自注意力的矩阵运算 6. Tran...

    本文参考自知乎专栏:https://zhuanlan.zhihu.com/p/54356280,并结合自己的一些理解记录下来方便以后查看。

    目录

    1. Transformer架构

    2. 编码器

    3. 解码器

    4. Transformer中的张量

    5. 编码过程

    5.1 从宏观上看自注意力机制

    5.2 微观上看自注意力机制的计算步骤

     5.3 自注意力的矩阵运算

    6. Transformer中的多头注意力机制

    7.  使用位置编码表示序列的顺序

    8. 残差模块

    9. 解码过程中的一些细节

    10. 最终的线性变换和softmax层


    1. Transformer架构

    首先,Transformer架构理论来源是《Attention is All You Need》,它主要有编码组件、解码组件以及它们之间的连接组成。

                                                           

    编码组件部分由一堆编码器(encoders)构成(论文中是将6个编码器叠在一起,6个编码器的效果要好于1个编码器,就像CNN中使用多个卷积核效果优于只使用一个),如下图:

                                                      

    2. 编码器

    所有的编码器在结构上都是相同的,它们之间没有共享参数(可以理解为它们是6个独立的参数空间);而每个解码器都可以分为自注意力层和前馈网络层:

                                                      

    从编码器输入的句子首先会经过一个自注意力层(self-attention),这层的作用是帮助编码器在对每个单词编码时关注输入句子的其他单词(主要是计算Q、K、V的过程)。

    自注意力层的输出会传递到前馈神经网络中(feed-forward),每个位置的单词对应的前馈神经网络都完全一样。

    3. 解码器

    解码器中也有编码器的自注意力层(self-attention)和前馈层(feed-forward)。除此之外,这两个层之间还有一个编码-解码自注意力层,用来关注输入句子的相关部分。

                                                 

    4. Transformer中的张量

    张量,是矢量概念的推广,简单理解为矢量是一阶张量,矩阵是二阶张量。

    首先将输入单词通过词嵌入算法转换为词向量:

                                                    

    每个单词都被嵌入512维的向量,简单用上面的方框表示这些向量。

    词嵌入过程只发生在最底层的编码器中。所有的编码器都有一个相同的特点,即它们接收一个向量列表,列表中的每个向量大小为512维。在底层编码器中它就是词向量,在其他编码器中,它就是下一层编码器的输出。向量列表大小是我们可以设置的超参数(一般是训练集中最长句子的长度)。

    将输入序列进行词嵌入之后,每个单词都会流经编码器中的两个子层。

                                                      

    其中,Transformer的一个核心特性就是,在输入序列中每个位置的单词都有自己独特的路径流入编码器。在自注意力层中,这些路径之间存在依赖关系(各个单词之间存在序列关系,会有位置编码);而前馈层没有这些依赖关系,因此在前馈层可以并行执行各种路径。

    5. 编码过程

    一个编码器(从最底层的那一个算起)接收向量列表作为输入,接着将向量列中中的向量传递到自注意力层进行处理,然后传递到前馈神经网络中,将输出结果传递到下一个编码器中。

                                                      

    5.1 从宏观上看自注意力机制

    举个例子:

    下列句子是需要翻译的输入句子:

    The animal didn't cross the street because it was too tired

    思考:这个 it 在这个句子中是指什么呢? 它指的是street还是animal呢?这对于人类来说是一个简单的问题,但是对于算法则不是。

    当模型处理这个单词 it 的时候,自注意力机制会允许 it 与 animal建立联系。随着模型处理输入序列的每个单词,自注意力会关注整个输入序列的所有单词,帮助模型对本单词更好地进行编码。

    如RNN网络,它会将已经处理过的前面所有的单词/向量的表示与它正在处理的当前单词/向量结合起来;而自注意力机制会将所有相关单词的理解融入到我们正在处理的单词中。

                                                                   

    当我们在编码器#5(栈中最上层编码器)中编码it这个单词时,注意力机制的部分会去关注 The Animal ,将它的表示的一部分编入it的编码中。

    5.2 微观上看自注意力机制的计算步骤

    通过了解如何使用向量来计算自注意力,然后使用矩阵来实现。

    计算自注意力的第一步就是从每个编码器的输入向量(词向量)中生成三个向量,也就说对于每个单词,我们创造一个查询向量、一个键向量和一个值向量。这三个向量是通过词嵌入与三个权重矩阵后相乘创建的。

    可以发现这些向量在维度上比词嵌入向量维度更低,它们的维度是64,而词嵌入和编码器的输入/输出向量的维度是512。但实际上不强求维度更小,这只是一种基于架构上的选择,它可以使多头注意力(multiheaded attention)的大部分计算保持不变。

                                                  

    注意:W^Q 、W^K 、W^V属于模型中的参数,一开始随机初始化,通过模型逐渐收敛而固定。

    X_1 与 W^Q 权重矩阵相乘得到 q_1 ,就是与这个单词相关的查询向量。最终使得输入序列的每个词向量创建一个查询向量、一个键向量和一个值向量。

    计算自注意力的第二步计算得分,假设我们在为这个例子中的第一个词 ''Thinking'' 计算自注意力向量,我们需要拿输入句子中的每个单词 对 ''Thinking'' 打分。这些分数决定了在编码单词 ''Thingking'' 的过程中有多重视句子的其他部分。

    这些分数是通过打分单词(所有输入句子的单词)的键向量与 ''Thinking'' 的查询向量相点积来计算的。所以如果我们是处理位置最靠前的词的自注意力的话,第一个分数是q1和k1的点积,第二个分数是q1和k2的点积。

                                                           

    第三步和第四步将分数除以8(8是论文中使用的键向量的维数64的平方分,这会让梯度更稳定),也可以使用其他值,8是默认值;然后通过softmax将所有单词的分数归一化,得到的分数都是正值且和为1.

                                                       

    这个softmax分数决定了每个单词对编辑当下位置(Thinking)的贡献。

    第五步将每个值向量乘以softmax分数(这是为了准备之后将它们求和)。

    第六步对加权值向量求和,然后即得到自注意力层在该位置的输出(例子中是对应第一个单词)。注意:自注意力的另一种解释是在编码某个单词时,将所有单词的值向量进行加权求和,权重是该词的键向量与被编码单词的查询向量的点击并softmax得到。

    这六步可以用下图表示:

                                                       

    这样,自注意力的计算就完成了,得到的向量就可以传给前馈神经网络了。

     5.3 自注意力的矩阵运算

    第一步是生成查询矩阵、键矩阵和值矩阵。为此,我们将输入句子的词嵌入装进矩阵X中(X的维度通常是:batch_size*dimension),将其程以我们训练的权重矩阵(W^Q 、 W^KW^V)。

                                                        

    这里,X中的每一行对应输入句子中一个单词的词向量。q/k/v向量的维度是64维,词向量是512维。

    最后,可以将5.2节中的第2到第6步合并为一个公式来计算自注意力层的输出:

                                                        

    6. Transformer中的多头注意力机制

    通过增加一种叫做“多头”注意力的机制(multi-headed attention),论文进一步完善了自注意力层,并在两方面提高了注意力层的性能:

    1. 它扩展了模型专注于不同位置的能力。在上面的例子中,虽然每个编码都在z1中有或多或少的体现,但是它可能被实际的单词本身所支配。如果我们翻译一个句子,比如,"The animal didn't cross the street because it was too tired",我们会想到 "it"指的是哪个词,这时模型的"多头"注意力机制会起作用。
    2. 它给出了多头注意力层的多个“表示子空间”(representation suspaces)。接下来我们将看到,对于 多头注意力机制,我们有多个查询/键/值权重矩阵集(Transformer中有8个注意力头,所以每个编码器/解码器有8个矩阵集合)。这些集合中的矩阵参数都是随机初始化的,在训练之后,每个集合都被用来将输入词嵌入(除了第一层是词嵌入,其他层来自较低编码器/解码器的向量)投影到不同的表示子空间中。

                                                  

    在多头注意力机制下,我们为每个头保持独立的 查询/键/值权重矩阵,从而产生不同的 查询/键/值矩阵。

    如果我们做与5.2节相同的自注意力计算,只需8次不同的权重矩阵运算,我们就会得到8个不同的Z矩阵:

                                                 

    注意:这种计算给我们带来了一点挑战,因为前馈层不需要8个矩阵,它只需要一个矩阵,我们只需要将这些每个头产生的Z矩阵拼接在一起,然后用一个附加的权重矩阵 W^O 与它们相乘即可:

                                         

    下面尝试用一张图概括自注意力的所有计算过程:

                                

    这就是自注意力的全部计算过程,还算简单吧,不过思路确实巧妙。

    7.  使用位置编码表示序列的顺序

    为了解决输入单词顺序的表示问题,Transformer为每个输入的词嵌入添加了一个向量。这些向量遵循模型学习到的特定模式,这有助于确定每个单词的位置,或序列中不同单词之间的距离。这里的解决方法是将位置向量直接添加到词嵌入中使得它们在接下来的运算中,能够更好地表达词与词之间的距离。

                                               

    如果我们假设词嵌入的维数是4,则实际的位置编码如下:

                                                    

    举个例子:

    在下图中,每一行对应一个词向量的位置编码,所以第一行对应着输入序列的第一个词。每行包含512个值,每个值介于-1和1之间。

                                                        

    20字的位置编码实例,词嵌入大小为512.可以看到它从中间分裂成两半,左半部分的值是由一个正弦函数生成;右半部分由余弦函数生成,然后将它们拼接在一起得到每一个位置编码向量

    原始论文里描述了位置编码的公式(第3.5节)。你可以在 get_timing_signal_1d()中看到生成位置编码的代码。这不是唯一可能的位置编码方法。然而,它的优点是能够扩展到未知的序列长度(例如,当我们训练出的模型需要翻译远比训练集里的句子更长的句子时)

    8. 残差模块

    在编码器的每个子层(包括自注意力、前馈网络层)的周围都有一个残差连接,并且都跟随着一个 “层-归一化”步骤。(Bert中是 Add&Norm 模块)

    层-归一化步骤(Add&Norm):

                                                  

    如果我们去可视化这些向量以及这个和自注意力相关联的层-归一化操作,那么看起来就像下面这张描述一样:

                                                      

    解码器的子层也是这样的,比如一个2层的编码-解码结构的transformer:

                                    

    9. 解码过程中的一些细节

    编码器通过处理输入序列开启工作。顶端编码器的输出之后会转化为一个包含向量K(键向量)和V(值向量)的注意力向量集。这些向量将被每个解码器用于自身的“编码-解码注意力层”,而这些层可以帮助解码器关注输入序列哪些位置合适:

                                                             

    在完成编码阶段后,则开始解码阶段。解码阶段的每个步骤都会输出一个输出序列的元素。

    接下来的步骤重复了这个过程,直到到达一个特殊的终止符号,它表示transformer的解码器已经完成了它的输出。每个步骤的输出在下一个时间步被提供给低端解码器,并且就像编码器之前做的那样,这些解码器会输出它们的解码结果。另外,就像我们对编码器的输入所做的那样,我们会嵌入并添加位置编码给那些解码器,来表示每个单词的位置。

    而那些解码器中的自注意力层表现的模式与编码器不同:在解码器中自注意力层只被允许处理输出序列中更靠前的那些位置,在softmax步骤前,它会把后面的位置给隐去(把它们设置为-inf)。

    这个“编码-解码注意力层”工作方式基本就像多头自注意力层一样,只不过它是通过下面的层来创造查询矩阵,并且从编码器的输出中取得键/值矩阵。

    10. 最终的线性变换和softmax层

    解码组件最后会输出一个实数向量,我们如何把浮点数变成一个单词?这便是线性变换层要做的工作,它之后就是softmax层。

    线性变换是一个简单的全连接神经网络,它可以把解码组件产生的向量投射到一个比它大得多的、被称为对数几率(logits)的向量里。

    不妨假设我们的模型从训练集中学习一万个不同的英语单词(模型的“输出词表”)。因此对数几率向量为一万个单元格长度的向量-----每个单元格对应一个单词的分数。

    接下来的softmax层便会把那些分数变成概率(都为正数,上限是1.0).概率最高的单元格被选中,并且它对应的单词被作为这个时间步的输出。

                                               

    上图中,以解码器组件产生的输出向量开始,之后会转化为一个输出单词。

     

    展开全文
  • transformer架构的理解

    千次阅读 2019-05-06 09:40:00
    架构图: 分为两大块,编码层与解码层; 本质上来说编码层会为每一个输入单词输出一个新的representation;可类比于lstm模型中的每个input中对应的hidden state值;而不是一个context vector; 解码层会根据...

    架构图:

    分为两大块,编码层与解码层;

    本质上来说编码层会为每一个输入单词输出一个新的representation;可类比于lstm模型中的每个input中对应的hidden state值;而不是一个context vector;

      

    解码层会根据每个输入word编码层输出的representation与前面解码层输出的所有预测值 共同预测下一个值;

     

    最生动最形象的解释莫过于此: 

    个人认为:transformer架构注意力机制不仅用来连接编码模块与解码模块,还为每个单词计算表示;不同于传统的注意力模型;仅用于编码与解码层 连接处;

    参考:https://medium.com/@adityathiruvengadam/transformer-architecture-attention-is-all-you-need-aeccd9f50d09

    展开全文
  • 文章目录Transformer架构解析1. 认识Transformer架构Transformer模型的作用Transformer总体架构图2. 输入部分实现文本嵌入层的作用位置编码器的作用3. 编码器部分实现3.1 掩码张量3.2 注意力机制3.3 多头注意力机制...

    Transformer架构解析

    1. 认识Transformer架构


    Transformer的优势

    相比之前占领市场的LSTM和GRU模型,Transformer有两个显著的优势:

    1. Transformer能够利用分布式GPU进行并行训练,提升模型训练效率.
    2. 在分析预测更长的文本时, 捕捉间隔较长的语义关联效果更好.

    Transformer模型的作用

    • 基于seq2seq架构的transformer模型可以完成NLP领域研究的典型任务, 如机器翻译, 文本生成等. 同时又可以构建预训练语言模型,用于不同任务的迁移学习.

    声明:

    在接下来的架构分析中, 我们将假设使用Transformer模型架构处理从一种语言文本到另一种语言文本的翻译工作, 因此很多命名方式遵循NLP中的规则. 比如: Embeddding层将称作文本嵌入层, Embedding层产生的张量称为词嵌入张量,
    它的最后一维将称作词向量等.


    Transformer总体架构图

    avatar


    • Transformer总体架构可分为四个部分:
      • 输入部分
      • 输出部分
      • 编码器部分
      • 解码器部分

    • 输入部分包含:
      • 源文本嵌入层及其位置编码器
      • 目标文本嵌入层及其位置编码器

    avatar


    • 输出部分包含:
      • 线性层
      • softmax层

    avatar


    • 编码器部分:
      • 由N个编码器层堆叠而成
      • 每个编码器层由两个子层连接结构组成
      • 第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接
      • 第二个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接

    avatar


    • 解码器部分:
      • 由N个解码器层堆叠而成
      • 每个解码器层由三个子层连接结构组成
      • 第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接
      • 第二个子层连接结构包括一个多头注意力子层和规范化层以及一个残差连接
      • 第三个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接

    avatar


    2. 输入部分实现


    • 输入部分包含:
      • 源文本嵌入层及其位置编码器
      • 目标文本嵌入层及其位置编码器

    avatar


    文本嵌入层的作用

    • 无论是源文本嵌入还是目标文本嵌入,都是为了将文本中词汇的数字表示转变为向量表示, 希望在这样的高维空间捕捉词汇间的关系.

    位置编码器的作用

    • 因为在Transformer的编码器结构中, 并没有针对词汇位置信息的处理,因此需要在Embedding层后加入位置编码器,将词汇位置不同可能会产生不同语义的信息加入到词嵌入张量中, 以弥补位置信息的缺失.

    3. 编码器部分实现


    • 编码器部分:
      • 由N个编码器层堆叠而成
      • 每个编码器层由两个子层连接结构组成
      • 第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接
      • 第二个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接

    avatar


    3.1 掩码张量


    • 什么是掩码张量:
      • 掩代表遮掩,码就是我们张量中的数值,它的尺寸不定,里面一般只有1和0的元素,代表位置被遮掩或者不被遮掩,至于是0位置被遮掩还是1位置被遮掩可以自定义,因此它的作用就是让另外一个张量中的一些数值被遮掩,也可以说被替换, 它的表现形式是一个张量.

    • 掩码张量的作用:
      • 在transformer中, 掩码张量的主要作用在应用attention(将在下一小节讲解)时,有一些生成的attention张量中的值计算有可能已知了未来信息而得到的,未来信息被看到是因为训练时会把整个输出结果都一次性进行Embedding,但是理论上解码器的的输出却不是一次就能产生最终结果的,而是一次次通过上一次结果综合得出的,因此,未来的信息可能被提前利用. 所以,我们会进行遮掩. 关于解码器的有关知识将在后面的章节中讲解.

    3.2 注意力机制


    • 什么是注意力:
      • 我们观察事物时,之所以能够快速判断一种事物(当然允许判断是错误的), 是因为我们大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断,而并非是从头到尾的观察一遍事物后,才能有判断结果. 正是基于这样的理论,就产生了注意力机制.

    • 什么是注意力计算规则:
      • 它需要三个指定的输入Q(query), K(key), V(value), 然后通过公式得到注意力的计算结果, 这个结果代表query在key和value作用下的表示. 而这个具体的计算规则有很多种, 我这里只介绍我们用到的这一种.

    • 我们这里使用的注意力的计算规则:

    avatar


    • Q, K, V的比喻解释:
    已复制假如我们有一个问题: 给出一段文本,使用一些关键词对它进行描述!
    为了方便统一正确答案,这道题可能预先已经给大家写出了一些关键词作为提示.其中这些给出的提示就可以看作是key, 
    而整个的文本信息就相当于是query,value的含义则更抽象,可以比作是你看到这段文本信息后,脑子里浮现的答案信息,
    这里我们又假设大家最开始都不是很聪明,第一次看到这段文本后脑子里基本上浮现的信息就只有提示这些信息,
    因此key与value基本是相同的,但是随着我们对这个问题的深入理解,通过我们的思考脑子里想起来的东西原来越多,
    并且能够开始对我们query也就是这段文本,提取关键信息进行表示.  这就是注意力作用的过程, 通过这个过程,
    我们最终脑子里的value发生了变化,
    根据提示key生成了query的关键词表示方法,也就是另外一种特征表示方法.
    
    刚刚我们说到key和value一般情况下默认是相同,与query是不同的,这种是我们一般的注意力输入形式,
    但有一种特殊情况,就是我们query与key和value相同,这种情况我们称为自注意力机制,就如同我们的刚刚的例子, 
    使用一般注意力机制,是使用不同于给定文本的关键词表示它. 而自注意力机制,
    需要用给定文本自身来表达自己,也就是说你需要从给定文本中抽取关键词来表述它, 相当于对文本自身的一次特征提取.
    

    • 什么是注意力机制:
      • 注意力机制是注意力计算规则能够应用的深度学习网络的载体, 除了注意力计算规则外, 还包括一些必要的全连接层以及相关张量处理, 使其与应用网络融为一体. 使用自注意力计算规则的注意力机制称为自注意力机制.

    • 注意力机制在网络中实现的图形表示:

    avatar


    3.3 多头注意力机制


    • 什么是多头注意力机制:
      • 从多头注意力的结构图中,貌似这个所谓的多个头就是指多组线性变换层,其实并不是,而是只有使用了一组线性变化层,即三个变换张量对Q,K,V分别进行线性变换,这些变换不会改变原有张量的尺寸,因此每个变换矩阵都是方阵,得到输出结果后,多头的作用才开始显现,每个头开始从词义层面分割输出的张量,也就是每个头都想获得一组Q,K,V进行注意力机制的计算,但是句子中的每个词的表示只获得一部分,也就是只分割了最后一维的词嵌入向量. 这就是所谓的多头,将每个头的获得的输入送到注意力机制中, 就形成多头注意力机制.

    • 多头注意力机制结构图:

    avatar


    • 多头注意力机制的作用:
      • 这种结构设计能让每个注意力机制去优化每个词汇的不同特征部分,从而均衡同一种注意力机制可能产生的偏差,让词义拥有来自更多元的表达,实验表明可以从而提升模型效果.

    3.4 前馈全连接层


    • 学习目标:
      • 了解什么是前馈全连接层及其它的作用.
      • 掌握前馈全连接层的实现过程.

    • 什么是前馈全连接层:
      • 在Transformer中前馈全连接层就是具有两层线性层的全连接网络.

    • 前馈全连接层的作用:
      • 考虑注意力机制可能对复杂过程的拟合程度不够, 通过增加两层网络来增强模型的能力.

    3.5 规范化层


    • 规范化层的作用:
      • 它是所有深层网络模型都需要的标准网络层,因为随着网络层数的增加,通过多层的计算后参数可能开始出现过大或过小的情况,这样可能会导致学习过程出现异常,模型可能收敛非常的慢. 因此都会在一定层数后接规范化层进行数值的规范化,使其特征数值在合理范围内.

    3.6 子层连接结构


    • 什么是子层连接结构:
      • 如图所示,输入到每个子层以及规范化层的过程中,还使用了残差链接(跳跃连接),因此我们把这一部分结构整体叫做子层连接(代表子层及其链接结构),在每个编码器层中,都有两个子层,这两个子层加上周围的链接结构就形成了两个子层连接结构.

    • 子层连接结构图:

    avatar


    avatar


    3.7 编码器层


    • 编码器层的作用:
      • 作为编码器的组成单元, 每个编码器层完成一次对输入的特征提取过程, 即编码过程.

    • 编码器层的构成图:

    avatar


    3.8 编码器


    • 编码器的作用:
      • 编码器用于对输入进行指定的特征提取过程, 也称为编码, 由N个编码器层堆叠而成.

    • 编码器的结构图:

    avatar


    4. 解码器部分实现


    • 解码器部分:
      • 由N个解码器层堆叠而成
      • 每个解码器层由三个子层连接结构组成
      • 第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接
      • 第二个子层连接结构包括一个多头注意力子层和规范化层以及一个残差连接
      • 第三个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接

    avatar


    • 说明:
      • 解码器层中的各个部分,如,多头注意力机制,规范化层,前馈全连接网络,子层连接结构都与编码器中的实现相同. 因此这里可以直接拿来构建解码器层.

    4.1 解码器层


    • 解码器层的作用:
      • 作为解码器的组成单元, 每个解码器层根据给定的输入向目标方向进行特征提取操作,即解码过程.

    4.2 解码器


    • 解码器的作用:
      • 根据编码器的结果以及上一次预测的结果, 对下一次可能出现的’值’进行特征表示.

    5. 输出部分实现


    • 输出部分包含:
      • 线性层
      • softmax层

    avatar


    线性层的作用

    • 通过对上一步的线性变化得到指定维度的输出, 也就是转换维度的作用.

    softmax层的作用

    • 使最后一维的向量中的数字缩放到0-1的概率值域内, 并满足他们的和为1.
    展开全文
  • Transformer架构解析

    千次阅读 2016-02-14 16:59:51
    基于这个理念,我们提出了Transformer架构。基本概念定义 Transformer。 我们的每一个服务应用,都是一个数据转换器。数据在这些Transformer之间进行流动和转换。流动的过程就是Pipeline形成的过程(Pipeline的概念在...

    核心观点: 服务的本质是数据的流转与变换

    数据的变换依赖于数据的流转,只有流转的数据才能够被变换。基于这个理念,我们提出了Transformer架构。

    基本概念定义

    • Transformer。 我们的每一个服务应用,都是一个数据转换器。数据在这些Transformer之间进行流动和转换。流动的过程就是Pipeline形成的过程(Pipeline的概念在后续会有定义)。典型的例子比如你开发的一个Spark Streaming程序,一个Storm程序,一个Tomcat Web服务,都是一个Transformer。

    • Estimator 。它是一类问题的抽象与实现。现实生活中,我们要解决的问题举例有,实时计算问题,离线批量问题,缓存问题,Web服务问题等。对这些问题,我们都有一些可扩张,灵活动态的,具有平台性质的Estimator。比如MR 可以解决大部分离线批量问题,比如Spark则可以解决实时计算,离线批量等多个方面的问题。比如Storm则可以解决实时计算问题,比如Tomcat。并不是所有的Estimator 都能够实现平台特质,隔离底层的。譬如 基于Spark的Transformer 可以实现以资源为需求的动态部署。但基于Tomcat的Transormer则不行,因为Tomcat本身并没有做到分布式的,以资源为粒度的提供给上层Transormer使用的特质。

    • Parameter 。 每个Transformer都有自己的参数,每个Estimator有自己的参数。Parameter就是所有参数的集合。如果进行扩展,他可以包括Transformer/Estimator/Pipeline/Core/OS 等各个层次的参数。

    • Pipeline。 数据在Transfomer之间流动的形成了Pipeline。每一个Transformer 以自己作为Root节点,都会向下延伸出一个树状结构。

    • DataFrame。数据框。数据需要被某种形态进行表示。可以是byte数组,可以一个son字符串。这里我们用DataFrame 对 数据表示( Data Represention )。 它是各个Transformer之间交换数据的表示和规范。

    Transformer架构概览

    Transformer架构概览

    什么是资源需求为主导的Estimator

    在前文中,我们在对Estimator进行第一的时候,我们提到了平台特质以资源为导向等概念。那么这些指的是什么呢?

    如果上层的Transformer可以按资源进行申请,并且被提交到Estimator上运行,则我们认为该Estimator 是具有平台特质以资源为导向的。典型的比如Spark。

    但是譬如Tomcat,他本身虽然可以运行Web类的Transformer,但是Transformer无法向Tomcat提出自己的资源诉求,比如CPU/内存等,同时Tomcat本身也没办法做到很透明的水平扩展(在Transformer不知情的情况下)。所以我们说Tomcat 是不具备平台特质,并且不是以资源为导向的Estimator。

    但是,当我们基于Core层开发了一套容器调度系统(Estimator),则这个时候Tomcat则只是退化成了Transfomer的一个环境,不具备Estimator的概念。

    在Transformer架构中,我们努力追求Estimator 都是具备平台特质,并且以资源为导向的服务平台。

    Transformer/Estimator/Pipeline的关系

    下面以搜索为例子,简单画了个三者之间的关系。特定的Transformer依赖于特定的Estimator运行,不同的Transformer 构建了Pipeline实现了数据的流动,数据流动到具体的Transformer后发生数据的transform行为。

    Transformer/Estimator/Pipeline的关系

    Transformer 架构可以对互联网也进行建模

    Transformer 和Pipeline构建了一个复杂的网络拓扑。在Pipeline流动的的DataFrame则实现了信息的流动。如果我们跳出公司的视野,你会发现整个公司的网状服务体系只是全世界网络体系的一小部分。整个互联网是一张复杂的大网。而整个互联网其实也是可以通过上面五个概念进行涵盖的。

    利用Transformer概念去理解我们已经存在的概念

    譬如,我们部署服务到底是一件什么样的事情?

    你可能觉得这个问题会比较可笑。然而,如果之前我们提出的概念是正确或者合理的,让我们离真理更近了一步的话,那么它应该能够清晰的解释,我们部署或者下线一个服务,或者一个服务故障,到底是什么?

    所谓部署服务,不过是新建一个Transformer,并且该Transformer和已经存在的的Transformer通过Pipeline建立了联系,在网络拓扑中形成一个新的节点。这个新的Transformer无论业务有多复杂,不过是实现了一个对数据transform的逻辑而已。

    Transformer 的优势

    前文我们提到了具有平台特质,以资源为导向的Estimator,可以给我们带来如下的好处:

    • 这些Estimator 底层共享 Yarn/Mesos这个大资源池,可以提高资源利用率

    • Estimator如果已经实现了Adaptive Resource Allocation,则根据Transformer的运行情况,可以动态添加或者缩进对应的资源

    • Transformer 部署变得异常简单,申明资源即可。开发人员无需关心起如何运行。一切由Estimator来解决。

    • 有了Estimator的规范和限制,Transformer开发变得成为套路,真正只要关注如何transform,和哪些Transformer建立Pipline

    • 平台组和应用组只能划分清晰。平台组总结数据处理模式,提供抽象的Estimator供应用组进行开发和运行

    除了这些,对我们进行架构设计也具有极大的知道意义。让我们换了一种思考模式去思考面对新的需求,如何设计的问题。

    我们不希望每次遇到一个新的业务问题,都需要根据自己的聪明才智,通过经验,得到一个解决方案。任何事情都是有迹可循的。正如吴文俊提出的机器证明,可以通过流程化的方式让计算机来证明几何问题。当面临一个新的业务问题的时候,我们应该有标准的流程可以走。

    当设计一个平台的时候,我们只要关注Estimator就好,我们必须已经有大量的以及随时具备上线新的Estimator的能力。 之后面对实际的各种业务需求,应该由基于这些Estimator的Transformer去应对,构建Transformer 按如下方式思考去获得答案:
    * 哪个Estimator 最适合这个Transformer?
    * 从已经存在的Transformer中找出我们需要建立Pipeline的Transformer
    * 针对业务逻辑,定义好如何对数据进行Transform

    一个复杂的业务必定是由多个Transfomer进行构建的,每个Transfomer的构建流程都可以遵循这个方式。

    用Transformer架构思考样例

    假设我现在有个搜索服务,我要新接入一个产品,再次假设新产品的数据已经远远不断的放到了Kafka里。

    这个时候,我们需要新建立一个Transformer。

    哪个Estimator 最适合这个Transformer?

    数据进入索引,必然有个吞吐量和实时性的权衡。如果你追求实时性,譬如要达到毫秒级,这个时候实时计算里的Estimator Storm是个更好的选择。而如果是秒级的,可能Spark Streaming是个更好的选择。假设我们选择了Spark Streaming,则说明我们的Transformer是个Spark Streaming程序。

    从已经存在的Transformer中找出我们需要建立Pipeline的Transformer

    这里我们要连接的Transformer 非常清晰,就是搜索和Kafka。 他们之间需要通过我们新的Transformer将数据进行流转。为了解决他们的数据表示的不一致性(DataFrame的不一致),所以我们需要新的Transformer 能够做两次转换,将Kafka的数据转换为搜索能够认识的数据表示形态。

    针对业务逻辑,定义好如何对数据进行Transform

    你需要调研Kafka里的DataFrame以及搜索需要的DataFrame,实现transform逻辑。

    程序员根据这三点进行是靠,按照Estmator的规范(这里是Spark Streaming 的编程规范),写了几十行(或者百余杭代码),然后提出资源要求,譬如:

    • 10颗核
    • 10G内存
    • 无磁盘要求

    这个时候他package好后,通过一个简单的submit 命令(或者如果你有web提交任务的界面),带上资源要求,将服务进行提交。

    过了几秒,你就会发现数据已经神奇的从Kafka流入到搜索,通过搜索的API我们已经能够检索的数据了。

    整个过程从设计,从实现,我们都是严格按照规范来做的。我们无需有所谓的服务器。我们只要知道根据Transformer架构去思考,然后提出自己需要的资源,就可以实现一个新的业务逻辑。可能一到两小时就搞定了整件事情。

    个人感觉

    Transformer 架构,不仅仅能建模我们的数据平台,也能建模我们传统的Web服务,还能对机器学习流程进行建模。

    展开全文
  • 近来,源于某个神奇的需求,需要研究Transformer和LSTM相结合的模型架构。这两者作为自然语言领域两个时代的王者,似乎对立的戏份远大于合作。常理来说,在Transformer刚刚被提出来的一两年内,应该有很多关于..
  • 微软分享史上最大基于Transformer架构的语言生成模型.pdf
  • 谷歌将AutoML应用于Transformer架构,翻译结果飙升,已开源.pdf
  • 行业分类-物理装置-一种基于transformer架构的对话生成方法.zip
  • 第33章:过滤掉sequential redundancy对Transformer模型Funnel-Transformer架构内幕及完整源码实现 1,Transformer网络中的redundancy 产生的本质原因剖析 2,不同类型pooling operation数学原理解析 3,对sentence...
  • (一)机器翻译及其相关技术 1. 机器翻译(MT):将一段文本从一种语言自动翻译为另一种语言,用神经网络解决这个问题通常称为神经机器翻译(NMT)。 主要特征:输出是单词序列而不是单个单词。...
  • 问题陈述 给定Company Name和Business Description ,任务是将公司分类。 共有62个类别 方法 删除重复的条目 跨类别的Wordcloud可视化 具有BOW和多项朴素贝叶斯的基线模型分别获得F-1和AUC分数分别为0.59和0.685 。...
  • 可打印版本附pdf下载链接 paper: https://arxiv.org/abs/2105.13677 code: https://github.com/wofmanaf/ResT 本文是南京大学提出的一种高效Transformer架构:ResT,它采用了类似ResNet的设计思想:stem提取底层...
  • 微软AI&Research今天分享了有史以来最大的基于Transformer架构的语言生成模型Turing NLG(下文简称为T-NLG),并开源了一个名为DeepSpeed的深度学习库,以简化对大型模型的分布式培训。 基于Transformer的架构,...
  • 理解Transformer架构 .02

    2020-03-13 12:07:57
    通过提问题的方式,学习一下Bert中的Transformer架构,其中这篇文章与《理解Transformer架构 .01》的内容互为补充: 目录 1. Transformer的结构是什么样? 1.1 encoder端与decoder端总览 1.2 encoder端各个子...
  • 自然语言处理NLP星空智能对话机器人系列:NLP on Transformers 101 GavinNLP星空对话机器人Transformer课程片段1:Transformer架构内部的等级化结构及其在NLP中的应用内幕 GavinNLP星空对话机器人Transformer课程...
  • 【NLP】Transformer架构解析1. 认识Transformer架构1.1 Transformer模型的作用1.2 Transformer总体架构图2. 输入部分实现2.1 文本嵌入层的作用2.2 位置编码器的作用 1. 认识Transformer架构 1.1 Transformer模型的...
  • Transformer模型 Transformer干什么的? Transformer目前主要应用于NLP领域中,它是17年Google团队在论文《Attentionisallyourneed》中提出的。 读完这篇论文,总结了Transformer的三个主要亮点: 1.不同于以往主流...
  • Transformer引入视觉领域后,研究人员们一直在寻求更好的模型架构来适应视觉领域的通用任务。但将Transformer从NLP领域迁移到CV领域面临着众多挑战,与文本相比图像中的视...
  • 【新智元导读】为了探索AutoML在序列域中的应用是否能够取得的成功,谷歌的研究团队在进行基于进化的神经架构搜索(NAS)之后,使用了翻译作为一般的序列任务的代理,并找到了Evolved Transformer这一新的...
  • 一、Attention 机制 概述 实现Attention的方式有很多种,这里展示比较常用的一种。在Encoder的过程中保留每一步RNN单元的隐藏状态h1……hn,组成编码的状态矩阵Encoder_outputs;在解码过程中,原本是通过上一步的...
  • 第33章:过滤掉sequential redundancy对Transformer模型Funnel-Transformer架构内幕及完整源码实现 1,Transformer网络中的redundancy 产生的本质原因剖析 2,不同类型pooling operation数学原理解析 3,对...
  • 1,Transformer网络中的redundancy 产生的本质原因剖析 2,不同类型pooling operation数学原理解析 3,对sentence进行single-vector presentation不同类型实现技术解析 4,对Transformer的hidden states的处理...
  • Transformer介绍及架构解析

    千次阅读 2020-11-03 22:55:27
    第一章:Transformer背景介绍 1.1 Transformer的诞生 2018年10月,Google发出一篇论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》, BERT模型横空出世, 并横扫NLP领域11...
  • BERT,Transformer的模型架构与详解1.1 认识BERT学习目标什么是BERTBERT的架构BERT的预训练任务小节总结1.2 Transformer的结构是什么样的? 各个子模块各有什么作用?学习目标Encoder模块Decoder模块Add & Norm...
  • ©作者|陈萍、杜伟来源|机器之心在提交给 ACL 的一篇匿名论文中,研究者用潜在 n-gram 来增强 TransformerTransformer 模型已成为自然语言处理任务的...
  • if __name__ == '__main__': res = make_model(source_vocab, target_vocab, N) print(res)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,641
精华内容 5,056
关键字:

transformer架构