注意力机制Attention详解

2023-11-18

注意力机制Attention详解

一、前言

2018年谷歌提出的NLP语言模型Bert一提出,便在NLP领域引起热议,之所以Bert模型能够火出圈,是由于Bert模型在NLP的多项任务中取得了之前所有模型都不能达到的出色效果。那么Bert模型它是如何提出的呢?我们来追溯Bert模型的发展历史:
首先Bert模型是基于Transformer提出的,Transformer同样是谷歌团队在2017年发表的论文 《Attention is all you need》 中提出,Transformer又是基于attention机制,注意力(Attention)机制由Bengio团队于2014年提出。而目前大部分attention模型都是依附于Encoder-Decoder框架进行实现。因此,我们要讲解Bert,必须要从Encoder-Decoder框架开始说起。

二、注意力Attention简述

什么是注意力: 对于人类来说,视野非常开阔,但焦点往往只有小部分范围,甚至一个点,这就叫做注意力。它可以帮助人类在众多的信息中去筛选对人类有帮助的信息。
注意力机制的核心目标是: 从众多信息中选择出对当前任务目标更关键的信息,将注意力放在上面。

在这里插入图片描述

三、Encoder-Decoder框架

在这里插入图片描述
上图是最常见的Encoder-Decoder框架图,在文本处理和语音识别的Encoder部分通常采用RNN模型;在图像处理的Encoder部分通常采用CNN模型

举个栗子: 机器翻译
英文:Tom chase Jerry
中文:汤姆 追逐 杰瑞

对应在图中,输入序列 {x1=Tom,x2=chase ,x3=Jerry} ,经过Encoder,被编码成语义编码C,语义编码是一块高度抽象的内容。

这里的语义编码C的编码方式是啥呢?
编码方式有很多种,在NLP中常见的RNN/LSTM/以及它们的变种,这里我们以RNN为例。
输入序列{x1,x2,x3,x4},通过RNN生成隐藏层的状态值{h1,h2,h3,h4},最简单的办法可以直接采用最后时刻输出的ht作为C的状态值,这里也就是h4作为语义编码C的值,也可以将所有时刻的隐藏层的值进行汇总,然后生成语义编码C的值,这里就是C=q(h1,h2,h3,h4),q是非线性激活函数。

再通过Decoder将其解码为中文内容,同样解码也可以采用RNN/LSTM/以及它们的变种进行解码。Encoder编码和Decoder解码的方式可以任意搭配
解码完成后输出序列 {Y1=“汤姆”,Y2=“追逐”,Y3=“杰瑞”}。在此过程中,每次生成一个目标单词,每个目标单词的有效信息都不一样,例如“杰瑞”,与之最重要的信息是“Jerry”,其他的可以看作成噪声或者相关度不大的信息。

相比于注意力机制而言,还有一种分心模型
体现在翻译输出时,对于输入贡献的注意力是一样的。例如翻译:“杰瑞”时,“Tom”,“chase”,“Jerry”三者贡献的注意力相同(同一个C)。

分心模型的计算:
Y1 = f ( C ) ; Y2 = f ( C ,Y1 ) ; Y3 = f ( C ,Y1,Y2 )

引入注意力机制之后:
在这里插入图片描述

此时会分配不同的语义编码C,语义编码C会告诉输入哪一个更为相关。

引入注意力机制后的计算:
Y1 = f1 ( C1 ) ; Y2 = f1 ( C2 ,Y1 ) ; Y3 = f1 (C3 ,Y1,Y2 )
C汤姆 = g ( 0.6 * f2(Tom),0.2 * f2(chase),0.2 * f2(Jerry))
C追逐 = g ( 0.2 * f2(Tom),0.7 * f2(chase),0.1 * f2(Jerry))
C杰瑞 = g ( 0.3 * f2(Tom),0.2 * f2(chase),0.5 * f2(Jerry))
g(x) 是对构成的元素进行加权求和 :aij表示权重
在这里插入图片描述

四、Attention机制的具体计算过程

在这里插入图片描述
步骤:

  1. 根据Query和Key计算两者相似性或相关性;
    常见方法:
    (1) 两者向量点积: Similarity(Query,Keyi) = Query · Keyi
    (2) Cosine 相似性: Similarity(Query,Keyi) =(Query · Keyi)/||Query||·||Keyi||
    (3)引入额外的神经网络 MLP网络: Similarity(Query,Keyi) = MLP(Query,Keyi)
  2. 经过步骤1得到原始得分s1(例如Query = 汤姆,Key1 = Tom,经过F(Q,K)函数计算后得到两者相关性的得分,其他的同理。由于s1是一个实际的分值,通过softmax函数进行归一化处理,将得分映射到0-1之间得到权重系数(a1,a2,a3,a4)。
  3. 根据权重系数对Value进行加权求和。(权重系数a1,a2,a3,a4先分别和Value1,Value2,Value3,Value4相乘,最后相加)
    最终得到Attention Value

Attention计算公式:
在这里插入图片描述

五、Attention机制优缺点

优点:
1.速度快。Attention机制不再依赖于RNN,解决了RNN不能并行计算的问题。这里需要说明一下,基于Attention机制的seq2seq模型,因为是有监督的训练,所以咱们在训练的时候,在decoder阶段并不是说预测出了一个词,然后再把这个词作为下一个输入,因为有监督训练,咱们已经有了target的数据,所以是可以并行输入的,可以并行计算decoder的每一个输出,但是再做预测的时候,是没有target数据地,这个时候就需要基于上一个时间节点的预测值来当做下一个时间节点decoder的输入。所以节省的是训练的时间。
2.效果好。因为注意力机制,能够获取到局部的重要信息,能够抓住重点。
缺点:
1.只能在Decoder阶段实现并行运算,Encoder部分依旧采用的是RNN,LSTM这些按照顺序编码的模型,Encoder部分还是无法实现并行运算,不够完美。
2.因为Encoder部分目前仍然依赖于RNN,所以对于中长距离之间,两个词相互之间的关系没有办法很好的获取。

六、Self-Attention机制

在上面的Attention机制结构图中,Self-Attention其实表示的是Query、Key、Value三者是相同的值。(例如Query = Tom,Key1 = Value1 = Tom,Key2 = Value2 = chase,Key3 = Value3 = Jerry)。
同样下图中Query表示:making…(句子中的每一个词);Key/Value表示整句话中的每个单词权重系数表示句子中哪个词和我的这个词关联最大(making,more,difficu)
Self-Attention可以捕获同一个句子中单词之间的一些句法特征(比如下图中展示的有一定距离的短语结构)或者语义特征(图中its的指代对象是Law)
在这里插入图片描述

Self-Attention机制的优点:
更容易捕获句子中长距离的相互依赖特征,如果是RNN或者LSTM(都需要按照次序序列进行计算)对于长距离的相互依赖特征,要经过若干时间步步骤的信息累积才能够将两者联系在一起,距离越远,有效信息被稀释的越多,有效捕获的可能性越小。

Self-Attention不需要依赖次序序列计算,在计算过程中直接将句子中【任意两个单词的联系通过一个计算步骤直接联系在一起】对于远距离依赖特征之间的距离被极大缩短,有效的利用这些特征。

七、结语

以上是本人在学习注意力机制Attention过程中的个人见解,有不足之处欢迎指正!
接下来将学习建立在注意力机制基础上的Transformer,欢迎关注!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

注意力机制Attention详解 的相关文章

  • 23种设计模式概述

    设计模式共有23种 创建型模式5种 结构型模式7种 行为型模式11种 本章只做概念性说明 一 创建型模式 01 工厂模式 定义 又叫做静态工厂方法 定义一个用于创建对象的接口 让子类决定实例化哪一个类 工厂模式使得一个类的实例化延迟到子类
  • Unity笔记-打飞碟游戏

    目的 创建一个打飞碟游戏 简陋 游戏要求 游戏要分多个 round 飞碟数量每个 round 都是 n 个 但色彩 大小 发射位置 速度 角度 每次发射数量可以变化 游戏过程中 仅能创建 n 个飞碟 且不容许初始化阶段生成任何飞碟 飞碟线路
  • windows关闭开机自启动

    如题 有时候windows软件会开机自动打开某些软件 当你不希望它开机自启动的时候 就需要进行设置不让它开机自动 下面介绍几个方法关闭开机自启动 一 通过指令集进行设置 按下电脑上的windows R 然后输入msconfig 点击确定 可

随机推荐

  • 虚拟机硬盘简简单单扩容

    今天写这个博客就是为了 以后各位午饭们在使用虚拟机为虚拟机硬盘扩容时 不要再走那么多弯路了 环境介绍 虚拟机 VMware Workation 8 操作系统 windows server 2008 硬盘容量 10G windows serv
  • 4.Docker--Consul

    Docker Consul 引言 Consul是HashiCorp公司推出的开源工具 Consul由Go语言开发 部署起来非常容易 只需要极少的可执行程序和配置文件 具有绿色 轻量级的特点 Consul是分布式的 高可用的 可横向扩展的用于
  • 计算机运行慢提速小技巧,教你为Win7系统加速的五个技巧

    在我们使用电脑久了之后 不少用户就会发现系统的运行速度变慢了好多 这有可能是因为电脑使用久了之后电脑里面就会残余有一些垃圾文件 过多的垃圾文件占用了系统盘就会影响电脑的运行速度 那么用户可以选择使用第三方软件对电脑进行优化之外 还可以选择对
  • Python 接口并发测试详解

    一 接口并发测试简介 1 性能测试简介 性能测试是通过自动化测试工具模拟多种正常 峰值及异常负载条件对系统的各项性能指标进行的测试 负载测试和压力测试都属于性能测试 两者可以结合进行 通过负载测试 确定在各种工作负载下系统的性能 目标是测试
  • 发现新大陆

    csdn很久没有发博客了 当发现博客园可以进行一些骚操作之后 而CSDN又存在很多限制 相比较下 毅然选择了博客园 博主博客园首页链接地址 https www cnblogs com twq46 如果有想继续看博主的分享可以访问该链接
  • python opencv卡尺测量边缘距离

    opencv 卡尺法 测量边缘距离 参考来源 https github com crackwitz metrology demo 前言 一 测量方法 二 测量步骤 1 获取直线的像素 2 高斯滤波平滑曲线 3 计算跳变幅度值 4 计算距离值
  • 赶上ChatGPT的车,百度文心一言和阿里通义千问上线

    百度 文心一言 地址 https yiyan baidu com 阿里 通义千问 地址 https tongyi aliyun com 以下介绍来自官方 一 文心一言 介绍 你好 我是文心一言 ERNIE Bot 作为一个人工智能语言模型
  • Web3领域中最值得关注的3大主题

    这是白话区块链的第1792期原创 作者 Tony编译 火火出品 白话区块链 ID hellobtc 2014年 以太坊联合创始人加文 伍德 Gavin Wood 提出Web 3 0概念 将其描述为一种全新的互联网运行模式 用户自己发布 保管
  • Default Activity not found解决方法

    项目场景 最近开始学习Android 第一次尝试建立一个空白项目 手动添加activity时出现报错 Default Activity not found 问题描述 运行时程序可以正常编译 但不能发布到AVD上 查看了几篇博文 发现这篇方法
  • 2021ccpc女生赛(山东淄博)

    G 3G网络 K 音乐游戏 D 修建道路 A 公交线路 I 驾驶卡丁车 C 连锁商店 补题链接 这一次的开题顺序有点不好 G这个最简单的题目一开始没有开出来 然后开了另一个结果题目有点一个点读漏了 然后就做的复杂了一点 虽然a了 同是五道题
  • 对象的初始化和清理(构造和析构函数)

    对象的初始化和清理 1 1 构造函数 1 1 1 没有返回值 没有void 类名相同 可以发生重载 1 2 构析函数 1 2 1 没有返回值 没有void 函数名称 类名 不可以发生重载 不可以有参数 1 3 系统会默认调用 构造函数和析构
  • Javascript 使用js文件引入其他js文件

    注 js无法像php文件引入其他php文件到当前文件那样 require b php 只能通过html的标签通过url引入到html页面 当前js文件中添加 var scripts document getElementsByTagName
  • express脚手架安装和使用,node添加跨域处理

    前言 node的脚手架 express generator 的安装和使用 安装 步骤一 全局安装脚手架 npm i express generator g cnpm i express generator g 可以运行命令 express
  • el-select el-option未回显选中或显示value值

    现象描述 el select组件在数据回显时 未选中默认值 如下图所示 问题分析 很有可能是由于数据类型不一致导致的 比如后台接口返回的字段类型为int 但前端el option设置的value为String类型 因此只需要对后台接口返回的
  • 包含函数体的 INLINE 不是一种好的实践

    前几天碰到了一个很奇怪地错误 wmemcpy 已经定义在 A obj 中 经过查看头文件 wchar h 发现是一个有函数体的 inline 函数 可以看出上面的错误 是由于 inline 编译未生效导致的 经搜索需要开启优化级别 o2 才
  • 【实践经验】pip更改源加速下载

    目录 国内镜像 临时使用国内镜像 永久更换软件镜像 pip的默认源在安装软件包的时候非常慢 因此可以考虑使用国内的镜像加速下载和安装 在使用国内镜像的时候分为两种方式 1 临时使用镜像源 2 永久切换镜像 国内镜像 国内的镜像主要有以下几个
  • ubuntu16.04cuda10.0卸载、安装、查看版本信息

    一 Ubuntu16 04查看CUDA和CUDNN版本 1 cuda一般安装在 usr local cuda 路径下 该路径下有一个version txt文档 里面记录了cuda的版本信息 cat usr local cuda versio
  • 2023 LIGHTGBM 深度学习方法使用简易教程 入坑向

    一 需求背景及问题 项目要求使用LIGHTGBM进行本地数据的回归处理预测并要求做出Factors Importance的可视化处理 二 使用详情 1 LIGHTGBM框架使用目的 使用LIGHTGBM处理factors数据并作出regre
  • DBA思考方式感悟

    author skate time 2012 07 21 DBA思考方式感悟 某某牛人为什么能想到那么绝妙的方法 某某人为什么那么聪明 这样的话大家都听过 有时想想大家先天素质都差不多 那就是后天人家爱思考 知道如何思考 于是聊聊如何让自己
  • 注意力机制Attention详解

    注意力机制Attention详解 一 前言 2018年谷歌提出的NLP语言模型Bert一提出 便在NLP领域引起热议 之所以Bert模型能够火出圈 是由于Bert模型在NLP的多项任务中取得了之前所有模型都不能达到的出色效果 那么Bert模