NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

NLP 中的 attention 机制

  • 2019-09-26
  • 本文字数:2155 字

    阅读完需:约 7 分钟

NLP中的attention机制


本篇介绍在 NLP 中各项任务及模型中引入相当广泛的 Attention 机制。在 Transformer 中,最重要的特点也是 Attention。首先详细介绍其由来,然后具体介绍了其编解码结构的引入和原理,最后总结了 Attention 机制的本质。

1 注意力机制的由来

在深度学习领域,注意力机制模仿的是人类认知的过程。当人看到如下“美女伤心流泪”图时,细细想一下,人在做出图片中美女是在伤心流泪的过程,应该是先整体扫描该图片;然后将视觉注意力集中到美女的脸部;集中到脸部之后,再进一步将视觉注意力集中到眼睛部位。最后发现了眼泪,得出美女是在伤心流泪的结论。



人类在对信息进行处理的过程中,注意力不是平均分散的,而是有重点的分布。受此启发,做计算机视觉的朋友,开始在视觉处理过程中加入注意力机制(Attention)。随后,做自然语言处理的朋友们,也开始引入这个机制。在 NLP 的很多任务中,加入注意力机制后,都取得了非常好的效果。


那么,在 NLP 中,Attention 机制是什么呢?从直觉上来说,与人类的注意力分配过程类似,就是在信息处理过程中,对不同的内容分配不同的注意力权重。下面我们详细看看,在自然语言处理中,注意力机制是怎么实现的。

2 seq2seq 结构及其中的 Attention


如上图所示,是标准的编解码(seq2seq)机制的结构图,在机器翻译、生成式聊天机器人、文本摘要等任务中均有应用。其处理流程是通过编码器对输入序列进行编码,生成一个中间的语义编码向量 C,然后在解码器中,对语义编码向量 C 进行解码,得到想要的输出。例如,在中英文翻译的任务中,编码器的输入是中文序列,解码器的输出就是翻译出来的英文序列。


可以看出,这个结构很"干净",对于解码器来说,在解码出 y1,y2,y3 时,语义编码向量均是固定的。我们来分析下这样是否合理。


假设输入的是"小明/喜欢/小红",则翻译结果应该是"XiaoMing likes XiaoHong"。根据上述架构,在解码得到"XiaoMing",“likes”," XiaoHong"时,引入的语义编码向量是相同的,也就是"小明",“喜欢”,“小红"在翻译时对得到"XiaoMing”,“likes”," XiaoHong"的作用是相同的。这显然不合理,在解码得到"XiaoMing"时,"小明"的作用应该最大才对。


鉴于此,机智的 NLP 研究者们,认为应该在编解码器之间加入一种对齐机制,也就是在解码"XiaoMing"时应该对齐到"小明"。在《Neural Machine Translation By Jointly Learning To Align And Translate》中首次将这种对齐机制引入到机器翻译中。我们来看看,这是怎样的一种对齐机制。


我们先回顾一下刚才的编解码结构,其语义编码向量和解码器状态,通过如下的公式得到:



通常在解码时语义编码向量是固定的。若要实现对齐机制,在解码时语义编码向量应该随着输入动态的变化。鉴于此,《Neural Machine Translation By Jointly Learning To Align And Translate》提出来一种对齐机制,也就是 Attention 机制。



如上图示,论文中采用双向 RNN 来进行语义的编码,这不是重点,我们先不关注。其对齐机制整体思想是:编码时,记下来每一个时刻的 RNN 编码输出(h1,h2,h3,…hn);解码时,根据前一时刻的解码状态,即 yi-1,计算出来一组权重(a1,a2,…an),这组权重决定了在当前的解码时刻,(h1,h2,h3,…hn)分别对解码的贡献。这样就实现了,编解码的对齐。


下面我们用数学语言描述一下上面的过程。


首先,进行编码计算(h1,h2,…hn),i 时刻的编码状态计算公式如下:



然后,开始解码,加入此时在解码的 i 时刻,则需要计算 i 时刻的编码向量 Ci,通过如下的公式计算:



aij 是对不同时刻的编码状态取的权重值。由此可见,i 时刻的语义编码向量由不同时刻的编码状态加权求和得到。


下面看看,如何取得权重向量 a:



权重向量 ai 通过加入解码器前一个时刻的状态进行计算得到。eij 表示,在计算 Ci 时,hj 的绝对权重。通过对其使用 softmax 函数,得到 aij。aij 就是在计算 Ci 时,hj 编码状态的权重值。


得到权重向量 ai 及语义编码向量 Ci 后,就可以计算当前时刻的解码状态了:



这就是编解码机制中注意力机制的基本内容了,本质上就是为了实现编解码之间的对齐,在解码时根据前一时刻的解码状态,获取不同时刻编码状态的权重值并加权求和,进而获得该时刻语义编码向量。


那么,抽离编解码机制,Attention 机制的本质是什么呢?我们下面来看看。

3 Attention 机制的本质

我们回想一下,引入 Attention 机制的本意,是为了在信息处理的时候,恰当的分配好”注意力“资源。那么,要分配好注意力资源,就需要给每个资源以不同的权重,Attention 机制就是计算权重的过程。


如下图所示,



如上图所示,我们由资源 Value,需要根据当前系统的其他状态 Key 和 Querry 来计算权重用以分配资源 Value。


也就是,可以用如下的数学公式来描述 Attention 机制:



F 函数可以有很多,在 transformer 中用的是点积。

总结

Transformer 中最重要的特点就是引入了 Attention,其对于 Transformer 性能的重要性我们下一篇介绍。总的来说,Adttention 机制是一种对齐机制,它通过对系统当前的某些状态进行评估,来对系统资源进行权重分配,实现对齐,具体可以看机器翻译的例子。


作者介绍


小 Dream 哥,公众号“有三 AI”作者。该公号聚焦于让大家能够系统性地完成 AI 各个领域所需的专业知识的学习。


原文链接


https://mp.weixin.qq.com/s/kn4zYDCCkzBfnL1AP6g8RA


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-09-26 18:501952

评论 1 条评论

发布
用户头像
Attention应该全文统译为注意力,第一次出现的地方用括号标注attention就好了,多处不统一,不好哦。
2019-09-28 02:46
回复
没有更多了
发现更多内容

Android面试必备!爆火超全的《Android性能优化全方面解析》

android 程序员 移动开发

Android自定义控件开发入门与实战(6)路径动画

android 程序员 移动开发

Android自定义照相机实现(拍照、保存到SD卡,利用Bundle在Acitivity交换数据

android 程序员 移动开发

Android菜鸟6年开发面试字节跳动安卓研发岗,被面试官怼的没话说

android 程序员 移动开发

Android触摸屏事件派发机制详解与源码分析三(Activity篇)

android 程序员 移动开发

Android面试主题整理合集(三)

android 程序员 移动开发

Android面试官:“来给我讲讲View绘制?

android 程序员 移动开发

Android自定义view;实现掌阅打开书籍动画效果

android 程序员 移动开发

Android自定义控件开发入门与实战(17)手势检测

android 程序员 移动开发

Android自定义DataTimePicker(日期选择器)

android 程序员 移动开发

Android记录25-WebView实现离线缓存阅读

android 程序员 移动开发

Android进阶——Android跨进程通讯机制之Binder、IBinder

android 程序员 移动开发

Android通过URI获取文件路径

android 程序员 移动开发

Android面试官必问的事件分发,你答得上来吗?

android 程序员 移动开发

Android简易天气App

android 程序员 移动开发

Android网络连接判断与处理

android 程序员 移动开发

android进阶篇08、启动速度、卡顿与布局优化简述

android 程序员 移动开发

Android隐藏系统状态栏(沉浸式状态栏)和设置状态栏颜色

android 程序员 移动开发

Android面经分享:从15K到32K,从小厂到大厂,我是如何做到的

android 程序员 移动开发

Android面经分享:快手、字节跳动、百度

android 程序员 移动开发

android解决AlarmManager警报器计时不准,在手机灭屏后延迟的问题

android 程序员 移动开发

Android面试大全基础篇(校招+社招)含答案

android 程序员 移动开发

Android第三方库解析

android 程序员 移动开发

Android第三方开发包值高德地图SDK使用介绍

android 程序员 移动开发

Android系统揭秘(五)-应用程序启动

android 程序员 移动开发

Android系统架构概述

android 程序员 移动开发

Android达到什么水平才能顺利拿到 20k 无压力?

android 程序员 移动开发

Android进阶:自定义视频播放器开发(上)

android 程序员 移动开发

Android缓冲进度条或加载进度条

android 程序员 移动开发

Android进程框架:进程的创建、启动与调度流程

android 程序员 移动开发

Android通讯录开发之取得姓名首字母实现简拼搜索

android 程序员 移动开发

NLP中的attention机制_AI&大模型_小Dream哥_InfoQ精选文章