当前位置: 首页 > news >正文

浙江杰立建设集团网站单一本地门户网站源码

浙江杰立建设集团网站,单一本地门户网站源码,宣传产品的方式,青海找人做网站多少钱引言 我们知道Transformer很好用#xff0c;但它设定的最长长度是512。像一篇文章超过512个token是很容易的#xff0c;那么我们在处理这种长文本的情况下也想利用Transformer的强大表达能力需要怎么做呢#xff1f; 本文就带来一种处理长文本的Transformer变种——Transf…引言 我们知道Transformer很好用但它设定的最长长度是512。像一篇文章超过512个token是很容易的那么我们在处理这种长文本的情况下也想利用Transformer的强大表达能力需要怎么做呢 本文就带来一种处理长文本的Transformer变种——Transformer-XL它也是XLNet的基石。这里的XL取自EXTRAL LONG。 论文题目Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context 论文地址https://arxiv.org/pdf/1901.02860.pdf Transformer 我们先来简单回顾下Transformer不熟悉的可以先看关于Transformer论文全文翻译——[论文翻译]Attention Is All You Need 。 我们重点回顾输入向量的计算方式如上图底部所示词嵌入(Embedding) ➕ 位置编码(Positional Encoding)。 假设有两个输入token它们的位置分别在i,ji,ji,j处用xi,xjx_i,x_jxi​,xj​相应地表示。 记 ExiT∈R1×dE_{x_i}^T \in \Bbb R^{1 \times d}Exi​T​∈R1×d为token xix_ixi​的词嵌入ExjE_{x_j}Exj​​为 token xjx_jxj​的词嵌入 UiT∈R1×dU_i^T \in \Bbb R^{1 \times d}UiT​∈R1×d和UjT∈R1×dU_j^T \in \Bbb R^{1 \times d}UjT​∈R1×d分别为第iii和第jjj处的位置编码。 这里ddd为嵌入大小。 一般向量默认是列向量而行向量表示需要加上个转置。所以上面两个记号上有转置。 那么在计算token xjx_jxj​相对于token xjx_jxj​的Self-Attention时首先会计算出qiq_iqi​和kjk_jkj​ qi(ExiTUiT)WqT∈R1×dkj(ExjUj)WkT∈R1×d(1)q_i (E_{x_i}^T U_i^T)W_q^T \in \Bbb R^{1\times d}\\ k_j (E_{x_j} U_j)W_k^T \in \Bbb R^{1\times d} \tag 1 qi​(Exi​T​UiT​)WqT​∈R1×dkj​(Exj​​Uj​)WkT​∈R1×d(1) 其中WqTW_q^TWqT​和WkT∈Rd×dW_k^T \in \Bbb R^{d \times d}WkT​∈Rd×d。 这里把词嵌入位置编码分开写后面会看到为什么这么做。 接下来在计算它们两之间的注意力得分时直接拿这两个向量做点积得到一个标量注意维度 qi⋅kjT(ExiTUiT)WqT⋅((ExjTUjT)WkT)T(ExiTWqTUiTWqT)⋅(WkExjWkUj)ExiTWqTWkExjExiTWqTWkUjUiTWqTWkExjUiTWqTWkUj(2)\begin{aligned} q_i \cdot k_j^T (E_{x_i}^T U_i^T)W_q^T \cdot \left ( (E_{x_j}^T U_j^T)W_k^T \right)^T \\ (E_{x_i}^TW_q^T U_i ^TW_q^T) \cdot ( W_k E_{x_j} W_kU_j) \\ E_{x_i}^TW^T_qW_k E_{x_j} E_{x_i}^TW^T_qW_kU_j U_i ^TW_q^T W_k E_{x_j} U_i ^TW_q^T W_kU_j \end{aligned} \tag 2 qi​⋅kjT​​(Exi​T​UiT​)WqT​⋅((Exj​T​UjT​)WkT​)T(Exi​T​WqT​UiT​WqT​)⋅(Wk​Exj​​Wk​Uj​)Exi​T​WqT​Wk​Exj​​Exi​T​WqT​Wk​Uj​UiT​WqT​Wk​Exj​​UiT​WqT​Wk​Uj​​(2) 相当于把它们进行了展开整个过程应该没什么问题。 下面进入本文的主题。 Transformer-XL 我们先来看如果想在Transformer中处理长文本的话要怎么做呢 图1: Transformer中处理长文本的传统方法比如传统的做法就是将长文本切分成固定长度的块(segment)并为每个块单独编码块与块之间没有信息流动(正向传播与反向传播)。这样会导致两个问题一是模型无法捕获长期依赖(long-term dependency)另一个是在分块之后后面块在进行预测时没有前面块的信息使模型存在优化难和表现差的问题这被称为上下文碎片问题(context fragmentation problem)。 而Transformer-XL的提出就是为了处理(address)上面的两个问题。 上图给出了块长度为4时的一个示例可以看到在训练阶段Transformer分别对第一个块中的序列x1,x2,x3,x4x_1,x_2,x_3,x_4x1​,x2​,x3​,x4​和第二块中的序列x5,x6,x7,x8x_5,x_6,x_7,x_8x5​,x6​,x7​,x8​进行建模(modeling)。 而在评估(evaluation)阶段为了不将文本切成块会通过类似移动窗口的方式一个一个token地向后移动这种方法效率非常低下。 为此Transformer-XL提出了两种改进策略——块级别循环(Segment-level Recurrent)和相对位置编码(Relative Positional Encoding)。 我们先来看第一个。 块级别循环 块级别循环全称是状态复用的块级别循环(Segment-Level Recurrence with State Reuse)。如下图(a)部分 图2: Transformer-XL中处理长文本的方法上面有两个块每个块都会做Self-Attention块之间有一些绿色的连线。在第二个块的时候可以把第一个块的某些信息通过绿色的连线传递过来那么它是怎么实现的呢 实际上非常简单它的思想是在跑完第一个块的信息后把它中间所有的隐藏层向量都缓存起来然后跑第二个块的信息时可以拿到这些缓存向量。 下面用公式描述一下假设两个连续长度为LLL的块分别为sτxτ,1,⋯,xτ,L\pmb s_{\tau}\pmb x_{\tau,1}, \cdots,x_{\tau,L}sτ​xτ,1​,⋯,xτ,L​和sτ1xτ1,1,⋯,xτ1,L\pmb s_{\tau1}\pmb x_{\tau1,1}, \cdots,x_{\tau1,L}sτ1​xτ1,1​,⋯,xτ1,L​。记由第τ\tauτ个块sτ\pmb s_{\tau}sτ​在第nnn层上产生的隐藏状态序列hτn∈RL×d\pmb h_{\tau}^n \in \Bbb R^{L\times d}hτn​∈RL×dddd为隐藏层维度大小。 那么对于片段sτ1\pmb s_{\tau 1}sτ1​在第nnn层上的隐藏状态hτ1n\pmb h_{\tau1}^nhτ1n​计算如下 h~τ1n−1[SG(hτn−1)∘hτ1n−1](3)\pmb {\tilde h _{\tau 1}^{n-1}} [\text{SG}(\pmb {h _{\tau}^{n-1}}) \circ \pmb { h _{\tau 1}^{n-1}} ] \tag 3 h~τ1n−1​[SG(hτn−1​)∘hτ1n−1​](3) qτ1n,kτ1n,vτ1nhτ1n−1WqT,h~τ1n−1WkT,h~τ1n−1WvT(4)\pmb q_{\tau 1}^n, \pmb k_{\tau 1}^n,\pmb v_{\tau 1}^n \pmb h_{\tau1}^{n-1}W^T_q , \pmb { \tilde h_{\tau1}^{n-1}}W^T_k, \pmb { \tilde h_{\tau1}^{n-1}}W^T_v \tag 4 qτ1n​,kτ1n​,vτ1n​hτ1n−1​WqT​,h~τ1n−1​WkT​,h~τ1n−1​WvT​(4) hτ1nTransformer-Layer(qτ1n,kτ1n,vτ1n)(5)\pmb h_{\tau1}^n \text{Transformer-Layer}(\pmb q_{\tau 1}^n, \pmb k_{\tau 1}^n,\pmb v_{\tau 1}^n) \tag 5 hτ1n​Transformer-Layer(qτ1n​,kτ1n​,vτ1n​)(5) 其中函数SG(⋅)\text{SG}(\cdot)SG(⋅)表示停止梯度传输记号[hu∘hv][\pmb h_u \circ \pmb h_v][hu​∘hv​]表示沿着长度(时间步)维度拼接两个隐藏状态序列WWW表示全连接权重。 这里通过拼接当前块第n−1n-1n−1层的隐藏状态和缓存的前一块第n−1n-1n−1层的隐藏状态来生成扩展的上下文h~τ1n−1\pmb {\tilde h _{\tau 1}^{n-1}}h~τ1n−1​。 与传统的Transformer的主要不同点在于键kτ1n\pmb k_{\tau 1}^nkτ1n​和值vτ1n\pmb v_{\tau 1}^nvτ1n​的计算依赖于扩展的上下文h~τ1n−1\pmb {\tilde h _{\tau 1}^{n-1}}h~τ1n−1​即用到了前一块的缓存信息hτn−1\pmb {h _{\tau}^{n-1}}hτn−1​。 同时可以看到在计算查询qτ1n\pmb q_{\tau 1}^nqτ1n​时只会基于当前块来计算。这种设计体现在了上图(a)的绿线中。 这种状态复用的块级别循环机制应用于语料库中每两个连续的块本质上是在隐藏状态下产生一个块级别的循环。在这种机制下Transformer利用的有效上下文可以远远超出两个块。注意到这种在hτ1n\pmb h_{\tau 1}^nhτ1n​和hτn−1\pmb h_{\tau}^{n-1}hτn−1​的循环依赖每块间向下移动一层与传统RNN中的同层循环不同。因此最大可能的依赖长度随块的长度LLL和层数NNN呈线性增长。这种机制和RNN中常用的随时间反向传播机制(Back Propagation Through Time,BPTT)类似。然而在这里是将整个序列的隐藏层状态全部缓存而不是像BPTT机制中只会保留最后一个状态。 在训练的时候先训练第一块更新完第一块的权重后然后固定中间的隐藏状态向量。在训练第二块的时候读取刚才保存那些向量在训练第二块的时候还是只更新第二块的权重不过可以隐式地用到第一块的信息(通过绿线传递过来)。梯度不会沿着绿线进行更新因此实际上学的还是一个块之间的信息。 通过这种方式可以延长依赖的长度到N倍N就是网络的深度(块的个数)。 这样解决了上下文碎片问题让模型可以捕获到长期依赖的信息。而评估阶段就更简单了此时可以直接拿到全部的上下文信息沿着上面的绿线将信息向后传递而不需要像图1(b)那样从头开始计算。每次可以以块进行移动而不是以token为单位进行移动大大加快了推理过程。 虽然它的思想很简单但如果直接实现的话会发现表现很差因为这里还有一个问题就是不连贯的位置编码问题。这就涉及到了第二个改进策略相对位置编码。 相对位置编码 如果直接简单地把原来Transformer的绝对位置编码信息应用到块级别的循环上就会很奇怪 [0,1,2,3]→[0,1,2,3,0,1,2,3][0,1,2,3] \rightarrow [0,1,2,3,0,1,2,3] [0,1,2,3]→[0,1,2,3,0,1,2,3] 假设和上面的例子一样块长度限制为4。现在长度为8之后就会变成两个单独的块对应的位置编码就成了[0,1,2,3,0,1,2,3][0,1,2,3,0,1,2,3][0,1,2,3,0,1,2,3]。 这样模型无法区分第一个块的第2个位置编码和第二个块的第2个位置编码认为是一样的这显然是不合理的。因为位置编码的目的是为了引入位置信息。Transformer-XL针对这种情况提出了相对位置编码。 位置信息的重要性体现在注意力分数的计算上面在传统Transformer中同一块(segment)内的查询qiq_iqi​和键向量kjk_jkj​的注意力分数计算如下 就是上文公式(2)(2)(2)拆分成四项后为每项进行编号从(a)(a)(a)到(d)(d)(d)。 ExiT∈R1×dE_{x_i}^T \in \Bbb R^{1 \times d}Exi​T​∈R1×d为token xix_ixi​的词嵌入ExjE_{x_j}Exj​​为 token xjx_jxj​的词嵌入 UiT∈R1×dU_i^T \in \Bbb R^{1 \times d}UiT​∈R1×d和UjT∈R1×dU_j^T \in \Bbb R^{1 \times d}UjT​∈R1×d分别为第iii和第jjj处的绝对位置编码。 原本的做法里面位置嵌入是绝对位置因此如果是第i个位置这个UiU_iUi​都会是一样的(不管是哪个块)。 基于仅依赖相对位置信息的思想Transformer-XL提出了改进如下 其中为每项进行编号从下面展开描述一下它的改进点 将(b)(b)(b)和(d)(d)(d)项中计算key向量的绝对位置嵌入UjU_jUj​替换为相对位置Ri−jR_{i-j}Ri−j​代表一个相对距离信息。注意这里的RRR是传统Transformer中的正弦函数编码模式是不需要学习的。引入一个可学习的参数uuu∈Rd\in \Bbb R^d∈Rd去替换(c)(c)(c)项中的query向量UiTWqTU_i^TW_q^TUiT​WqT​。这样新的query向量uuu对于所有的位置都是一样的因为是以位置iii为基准点所以iii使用的位置嵌入是一个固定的嵌入只需要考虑iii和jjj之间相关位置的关系。同理用可学习的参数vvv∈Rd\in \Bbb R^d∈Rd去替换(d)(d)(d)项中的UiTWqTU_i^TW_q^TUiT​WqT​。将WkW_kWk​分成两个权重矩阵Wk,EW_{k,E}Wk,E​和Wk,RW_{k,R}Wk,R​以分别产生基于内容的key向量和基于位置的key向量。 在新的计算公式中每项都有直观的意义 (a)(a)(a)项表示基于内容的相关度计算query xix_ixi​和key xjx_jxj​内容之间的关联信息(b)(b)(b)项捕获内容相关的位置偏置计算query xix_ixi​的内容与key xjx_jxj​的位置编码之间的关联信息Ri−jR_{i-j}Ri−j​表示两者的相对位置信息取RRR中的第i−ji-ji−j行(c)(c)(c)项表示全局内容偏置计算query xix_ixi​的位置编码与key xjx_jxj​的内容之间的关联信息(d)(d)(d)项表示全局位置偏置计算query xix_ixi​与key xjx_jxj​的位置编码之间的关联信息 把块级别循环和相对位置编码的信息合并后我们就得到了Transformer-XL的最终架构。对于一个NNN层的Transformer-XL的单个注意力头对于n1,⋯,Nn1,\cdots,Nn1,⋯,N有 这样对于每个query所有的位置嵌入都是一样的对于不同的token注意力偏差也是一样的。 这里的注意力偏差怎么理解原始的Transformer中的位置编码对于每个位置都会学一个向量假设某个token经常出现在第一个位置比如“今年”这个token那么模型学到的位置编码可能会包含“今年”这个token的意思而没有其他不常出现在第一个位置的token信息。也就说第一个位置编码对“今年”产生了偏差。
http://www.dnsts.com.cn/news/259099.html

相关文章:

  • 钱币网站建设免费创建个人网站申请
  • 网站流量提升网站模版怎么样
  • 阿里云虚拟机怎么做多个网站做海淘的网站
  • 个人网站作品欣赏简单描述网络营销的特点
  • 中国遵义门户网站要怎么做网站推广
  • 湖南城乡建设厅官方网站开发区二手房
  • 最好的免费logo设计网站国内互联网推广
  • 爱狼戈网站建设wordpress站群管理破解版
  • 高端网站建设kgwl百度seo营销推广
  • 西宁网站公司土地流转网站建设报告
  • 企业做微网站网站数据库分离怎么做
  • 自己怎么做视频收费网站终端安全管理系统
  • 网站设计素养烟台网站制作公司哪家好
  • 邢台企业做网站找谁湖南省军区强军网网站群建设项目6
  • 网站如何认证红河网站建设代理
  • 衡阳网站建设网站wordpress single.php制作
  • 广饶网站开发网站建设费用怎么核算
  • 哪个网站做平面能兼职做电脑网站用什么软件好用吗
  • WordPress网站打不开nginx网络营销app
  • 做网站产品介绍太和网站开发招聘
  • wordpress布置网站教程wordpress 4.4 漏洞
  • 12306网站学生做郑州中原网站建设
  • 如何取消网站备案怎么查看网站开发语言的类型
  • 有利于优化的网站模板宿迁建设企业网站
  • 郑州高端网站公司企业网站2000元
  • 外贸如何建立网站平台网站建设外包费用
  • 网站建设维护知识自动建站网站系统域名
  • 建设电玩网站wordpress qq登录后页面跳转
  • app软件开发需要多少钱北京健康宝优化
  • 哪些行业对做网站的需求大网站建设公司谁管