首页 > 其他分享 >经典注意力机制

经典注意力机制

时间:2022-08-26 09:23:02浏览次数:84  
标签:点积 模型 Attention 机器翻译 计算 经典 机制 注意力 向量

1. 用机器翻译任务带你看Attention机制的计算

单独地去讲Attention机制会有些抽象,也有些枯燥,所以我们不妨以机器翻译任务为例,通过讲解Attention机制在机器翻译任务中的应用方式,来了解Attention机制的使用。

什么是机器翻译任务?以中译英为例,机器翻译是将一串中文语句翻译为对应的英文语句,如图1所示。

 

 图1 机器翻译示例图

图1展示了一种经典的机器翻译结构Seq-to-Seq,并且向其中添加了Attention计算。Seq-to-Seq结构包含两个部分:Encoder和Decoder。其中Encoder用于将中文语句进行编码,这些编码后续将提供给Decoder进行使用;Decoder将根据Encoder的数据进行解码。我们还是以图1为例详细解释一下Decoder的解码过程。

更明确的讲,图1展示的是生成单词"machine"时的计算方式。首先将前一个时刻的输出状态 q2q2 和Encoder的输出 h=[h1,h2,h3,h4]h=[h1,h2,h3,h4] 进行Attention计算,得到一个当前时刻的 contextcontext ,用公式可以这样组织:

\[\begin{array}{*{20}{l}}
{[{a_1},{a_2},{a_3},{a_4}]}&{ = softmax([s({q_2},{h_1}),s({q_2},{h_2}),s({q_2},{h_3}),s({q_2},{h_4})])}\\
{context}&{ = \sum\limits_{i = 1}^4 {{a_i}} \cdot {h_i}}
\end{array}\]

我们来解释一下,这里的 s(qi,hj)s(qi,hj) 表示注意力打分函数,它是个标量,其大小描述了当前时刻在这些Encoder的结果上的关注程度,这个函数在后边会展开讨论。然后用softmax对这个结果进行归一化,最后使用加权评价获得当前时刻的上下文向量 contextcontext。这个contextcontext可以解释为:截止到当前已经有了"I love",在此基础上下一个时刻应该更加关注源中文语句的那些内容。这就是关于Attention机制的一个完整计算。

最后,将这个contextcontext和上个时刻的输出"love"进行融合作为当前时刻RNN单元的输入。

图1中采用了继续融合上一步的输出结果,例如上述描述中融合了"love",在有些实现中,并没有融入这个上一步的输出,默认 q2q2 中已经携带了"love"的信息,这也是合理的。‌

2. 注意力机制的正式引入

前边我们通过机器翻译任务介绍了Attention机制的整体计算。但是还有点小尾巴没有展开,就是那个注意力打分函数的计算,现在我们将来讨论这个事情。但在讲这个函数之前,我们先来对上边的Attention机制的计算做个总结,图2详细地描述了Attention机制的计算原理。

 

 图2 Attention机制图

假设现在我们要对一组输入 H=[h1,h2,h3,...,hn]H=[h1,h2,h3,...,hn]使用Attention机制计算重要的内容,这里往往需要一个查询向量 qq(这个向量往往和你做的任务有关,比如机器翻译中用到的那个 q2q2 ) ,然后通过一个打分函数计算查询向量 qq 和每个输入 hihi 之间的相关性,得出一个分数。接下来使用softmax对这些分数进行归一化,归一化后的结果便是查询向量 qq在各个输入 hihi上的注意力分布 a=[a1,a2,a3,...,an]a=[a1,a2,a3,...,an],其中每一项数值和原始的输入H=[h1,h2,h3,...,hn]H=[h1,h2,h3,...,hn]一一对应。以 aiai 为例,相关计算公式如下:

\[{a_i} = softmax(s({h_i},q)) = \frac{{exp(s({h_i},q))}}{{\sum\limits_{j = 1}^n e xp(s({h_j},q))}}\]

最后根据这些注意力分布可以去有选择性的从输入信息 HH 中提取信息,这里比较常用的信息提取方式,是一种"软性"的信息提取(图2展示的就是一种"软性"注意力),即根据注意力分布对输入信息进行加权求和,最终的这个结果 contextcontext 体现了模型当前应该关注的内容:

\[context = \sum\limits_{i = 1}^n {{a_i}} \cdot {h_i}\]

现在我们来解决之前一直没有展开的小尾巴-打分函数,它可以使用以下几种方式来计算:

  • 加性模型: \[s(h,q) = {v^T}tanh(Wh + Uq)\]

  • 点积模型: \[s(h,q) = {h^T}q\]

  • 缩放点积模型: \[s(h,q) = \frac{{{h^T}q}}{{\sqrt D }}\]

  • 双线性模型: \[s(h,q) = {h^T}Wq\]

以上公式中的参数 WW、UU和vv均是可学习的参数矩阵或向量,DD为输入向量的维度。下边我们来分析一下这些分数计算方式的差别。

加性模型引入了可学习的参数,将查询向量 qq 和原始输入向量 hh 映射到不同的向量空间后进行计算打分,显然相较于加性模型,点积模型具有更好的计算效率。

另外,当输入向量的维度比较高的时候,点积模型通常有比较大的方差,从而导致Softmax函数的梯度会比较小。因此缩放点积模型通过除以一个平方根项来平滑分数数值,也相当于平滑最终的注意力分布,缓解这个问题。

最后,双线性模型可以重塑为 \[s({h_i},q) = {h^T}Wq = {h^T}({U^T}V)q = {(Uh)^T}(Vq)\]

,即分别对查询向量 qq 和原始输入向量 hh进行线性变换之后,再计算点积。相比点积模型,双线性模型在计算相似度时引入了非对称性。

标签:点积,模型,Attention,机器翻译,计算,经典,机制,注意力,向量
From: https://www.cnblogs.com/beyoncewxm/p/16625206.html

相关文章

  • 注意力机制是什么
    假设有一天热爱绘画的你决定去户外写生,你来到一片山坡上,极目远去,心旷神怡。头顶一片蔚蓝,脚踩一席草绿,远处山川连绵,眼前花草送香,暖阳含羞云后,轻风拂动衣襟,鸟啼虫鸣入耳,美景......
  • PHP的session垃圾回收机制
     session垃圾回收机制-wen_php-博客园 https://www.cnblogs.com/wenphp/p/4871500.html在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内......
  • 垃圾回收机制
    怎么判定对象是否为垃圾对象1.引用计数法在每个对象中添加一个引用计数器,当有地方引用这个对象的时候,引用计数器就+1,当引用失效的时候,计数器的值就-1。任何时刻计数......
  • python基础-垃圾回收机制
    1.主)引用计数(referencecounting)引用计数为0时,该对象生命就结束了。维护引用计数消耗资源,循环引用L.append(L)L一直不回收(辅)标记清除机制(markandsweep)**目的:**解决......
  • python的垃圾回收机制
    1、引用计算  2、标记清除  3、分带回收 ......
  • 手机上就可以玩上百种经典小霸王的游戏-超级玛丽、拳皇、名将、坦克、魂斗罗等
    01软件介绍仅支持安卓系统小霸王模拟器安卓版是一款针对Android平台开发的模拟器平台软件。在这里,为你提供了上百种街机游戏,比如我们最熟悉的超级玛丽、拳皇、名将、......
  • 包机制
    包机制包的本质就是文件夹为了更好地组织类,Java提供了包机制,用于区别类名的命名空间包语句的语法格式为:packagepkg1[.pkg2[.pkg3…]]一般利用公司域名......
  • ajax经典表单提交
    <scripttype="text/javascript">functionlogin(){$.ajax({//几个参数需要注意一下type:"POST",//方法类型......
  • .Net Core&RabbitMQ消息转发可靠机制
    前言生产者发送消息到了队列,队列推送数据给了消费者,这里存在一些问题需要思考下生产者如何确保消息一定投递到了队列中RabbitMQ丢失了消息(下文暂不涉及这块)队列如......
  • Java06-包机制&JavaDoc文档
    包机制为了更好的组织类,Java提供了包机制,用于区别类名的命名空间(等同于文件夹)一般利用公司域名倒置作为包名eg:com.baidu.www(会生成树状子目录)包语句的格式:packagepac......