白话transformer(一):注意力机制

news2024/11/16 0:41:56

前面我们分篇讲述了transformer的原理,但是对于很多刚接触transformer的人来说可能会有一点懵,所以我们接下来会分三篇文章用白话的形式在将transformer 讲一遍。
前文链接
Bert基础(一)–自注意力机制

Bert基础(二)–多头注意力

Bert基础(三)–位置编码

Bert基础(四)–解码器(上)

Bert基础(五)–解码器(下)

注意力机制其实最大的作用就是对词嵌入也就是embedding的优化,下面我们来看下是怎么做到的

1、 词嵌入

我们人类最擅长的就是自然语言的表达,而计算机擅长的事数字的计算,如何将人类的表达方式让计算机能够理解呢,就需要一个桥梁连接起来。

这个桥梁就是embedding,embedding 即词嵌入,是NLP领域最重要部分;embedding就是将文本变成数字,让每个或者每段文本都有很好的与之对应的数字表示,那么需要解决的问题就会变得容易很多,embeddings 越好模型就会越好
在这里插入图片描述

2、 例子

在这里插入图片描述
我们这里有一堆文本单词,在一个二维的坐标系中,每个单词都有一个水平和垂直的坐标,比如香蕉是6,5,

那么现在出现了一个新的单词,apple(🍎),如果让我们给苹果安排一个位置,应该在哪里最合适呢?

很明显是右上角,因为这里全部是水果,embedding的作用就是相似的单词会被赋予相似的数字
在这里插入图片描述

当然,对于一个单词其实不会只有两个维度,可以使很多,分别来表示其中一个属性,比如大小、颜色、形状等,如下
在这里插入图片描述

3、 问题

现在我们重新定义一个坐标系
在这里插入图片描述
右上角是草莓和橘子,左下角是苹果和window系统;根据我们的正常理解,右上角是水果类,左下角是计算机类;

OK,下面我们又有几个新的单词出现了,需要我们预测他们的坐标。

在这里插入图片描述

我们其实很容易的可以区分,车厘子和香蕉是水果,应该在右上角;安卓和电脑应该属于计算机那个类别,放在右下角。
在这里插入图片描述

到现在为止,事情看上去还是很简单的,但是现在来了一个单词苹果(apple)

这个单词应该放在哪里呢???

苹果如果表示吃的水果应该在右上角,如果是手机的话应该在左下角。而对于embedding而言,不管是自己创建Vocabulary单词表还是使用word2vec,都不能解决歧义。

我们先把单词苹果(apple)放在中间的位置,那么我们该如何解决这个问题的,下面注意力就要出场了。

4、 注意力机制

注意力机制就是来解决单词歧义问题的
在这里插入图片描述

论文中提到的注意力就是使用了查询、键、值三个矩阵,我们在介绍中不是为了解释论文架构,而是说清楚注意力到底是怎么实现的。

在这里插入图片描述
现在我们来看两个文本,根据第一句话我们应该明白,这里面提到了橘子,我们人类是知道橙子属于水果,提到苹果这个词语时,那么苹果应该是可以吃的苹果;同样在第二个句子中提到了手机,那么我们应该明白这里指的是苹果手机。
在这里插入图片描述

我们人类可以根据经验进行判断,但是计算机是不知道的

下面我们来看看注意力机制是如何做到的?

在前面我们提到了,我们先把苹果这个单词初始化,放在中间的位置;当输入是第一句话时,提到了orange,那么这个地方出现的apple应该向右上角移动。
在这里插入图片描述

而,第二句话出现时,apple这个单词应该向左下角移动
在这里插入图片描述
其相应的坐标如下
在这里插入图片描述

5、 原理

要想实现上述过程,计算机就必须要计算所有单词来查看或者评估苹果这个词,通过程序不断的训练会发现,苹果和橘子这两个词比较接近,而与其他的词关系不是很大,那么orang就与apple这个单词相关性更大,我们这里绘制了更粗的连线,我们可以把他们想象成单词之间是有相互吸引力的,连线越粗其吸引力越大,最后距离就会越近。
在这里插入图片描述

其实,所有的单词之间都有相互的吸引力,但是随着不断的训练,单词之间会趋于一个平衡,比如buy这个单词,与他相关的单词会相互吸引聚成一簇,比如sell等,而苹果、橘子等水果相关的词会聚集在一起,可以想象成Kmeans聚类算法。

或者想象一下我们的宇宙空间的星球,他们之间都是有作用力的,因为地球和月球比较近,相互吸引力越大,所以相关性越大;而月球与其他的相求也有吸引力,但是比起与地球之间的相互吸引力就太弱了,也就是月球的大部分注意力都在地球上。

在这里插入图片描述

所以如果上下文一直在讨论香蕉、橘子等水果,那么接下来出现的apple这个单词大概率就是我们吃的苹果,那么聚集在一起的水果这个簇就会把apple这个单词拉到水果簇中心的方向。

其实这就模型跟踪内容的方式,也就是注意力机制的可视化的步骤。

6、 多头注意力

当我们建立好了一个注意力机制后,那么我们怎么确定这是一个非常好的embedding呢?
理想情况下可以有很多的词嵌入,把他们结合起来形成一个更强大的词嵌入矩阵
我们看一下现在我们有三个初始化的embedding矩阵,自己想一下,哪一个词嵌入是最好的
在这里插入图片描述

当然是第一个,因为他可以把两个不同簇分得更开,更加容易辨别。当我们对apple进行训练时,不管结果是拉向橘子还是手机,他们在拉近一个的同时会远离另外一个,这样就类似于聚类时可以很确定的将这个点进行归类,消除歧义。

在这里插入图片描述

所以我们初始化一个词嵌入时,有可能是第一种好的,也有可能是第二个比较差的,所以我们多使用几个,获取得到好的embedding的概率就会越大。

7、 线性变换

当然如果嵌入多了也会有问题,如果我们从不同的方式或者维度进行创建词嵌入矩阵,那么结果会变的不可控制,所以我们不能仅仅采用一大堆的嵌入进行组合
我们要做的是建立一个词嵌入矩阵,在此基础上进行修改和转换,就是我们要讲的线性变换

在这里插入图片描述

比如我们对原始embedding进行了两种变换,那么大家可以考虑下那种变换是变得更好呢

很明显是第三种,那么现在我们为了能够选出更好的词嵌入,我们可以给出评分,好的词嵌入给高的分数,不好的给予低的分数

在这里插入图片描述

最终的得分就是查询矩阵、键矩阵和值矩阵要做的事情

在这里插入图片描述

  • 首先我们根据文本创建一初始的词嵌入,现在我们使用Q、K来创建变换
  • V矩阵帮助我们进行评分,好的变化给予高的权重,不好的赋值较低的权重
  • 根据得分我们将所有的矩阵进行加权求和得到最终的词嵌入

以上就是注意力机制的全部内容,下一篇会讲一下Q、K、V矩阵相关知识。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1487929.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux安装JumpServer并结合内网穿透实现公网访问本地服务

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

全新攻击面管理平台

首页大屏 内测阶段,免费试用一个月 有兴趣体验的师傅,来长亭云图极速版群里找我 py

基于改进的YOLO算法在TT100K数据集上的交通标志目标检测

交通标志是道路交通管理中的重要元素,准确高效地检测交通标志对于智能交通系统具有重要意义。本文基于改进的YOLO算法,结合TT100K数据集,实现了交通标志的目标检测。通过优化网络结构和训练策略,提升了交通标志检测的准确性和效率…

vue 安装各种问题

新下载了个项目模板,安装包就遇到了各种各样问题 电脑:mac 使用npm i 等命令一直安装项目,然后一直报错 2534 info run canvas2.11.2 install node_modules/canvas node-pre-gyp install --fallback-to-build --update-binary 2535 info r…

rocky使用yum安装msyql8.0

先查看一下源是否有mysql和mysql的版本 yum list mysql* 直接yum install mysql-server 会安装相关7个包 安装完毕后systemctl start mysqld启动mysql 然后mysql_secure_installation配置权限 mysql8的配置稍微有点不一样,按照英文提示来就行,不会的…

rocketmq+rocket-dashboard win10安装部署+注册为Windows服务

1.1 首先去官网下载zip包 选择自己需要的版本 下载 | RocketMQ 1.2 、下载后,解压到指定目录 1.3、配置RocketMQ环境变量 注意,看对应的版本需要jdk版本 1.4、启动mqnameserver 进入bin目录下,双击启动mqnamesrv.cmd 启动后,…

【推荐算法系列十八】:DSSM 召回算法

参考 推荐系统中 DSSM 双塔模型汇总(二更) DSSM 和 YouTubeDNN 都是比较经典的 U2I 模型。 U2I 召回 U2I 召回也就是 User-to-Item 召回,它基于用户的历史行为以及用户的一些个人信息,对系统中的候选物品进行筛选,挑…

蓝桥杯倒计时 41天 - 二分答案-最大通过数-妮妮的月饼工厂

最大通过数 思路&#xff1a;假设左边能通过 x 关&#xff0c;右边能通过 y 关&#xff0c;x∈[0,n]&#xff0c;通过二分&#xff0c;在前缀和中枚举右边通过的关卡数&#xff0c;保存 xy 的最大值。 #include<bits/stdc.h> using namespace std; typedef long long ll…

价格腰斩,腾讯云2024优惠活动云服务器62元一年,多配置报价

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

5、Linux-vi编辑器

目录 一、介绍 二、三种模式 1、命令模式&#xff08;默认&#xff09; 2、插入模式 3、末行模式 4、模式转换 三、基本操作 1、保存文件&#xff08;末行模式下&#xff09; 2、行号&#xff08;末行模式下&#xff09; 3、查找&#xff08;末行模式下&#xff09; …

Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Fastapi 景天的主页&#xff1a;景天科技苑 上一章&#xff0c;我们讲到了fastapi数据库操作ORM的配置和查询操作&#xff0…

【Matlab深度学习】详解matlab深度学习进行时间序列预测

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 &#x1f510;#### 防伪水印——左手の明天 ####&#x1f510; &#x1f497; 大家…

框架漏洞-->Struts2 Docker_Vulnhub搭建

来浅浅的讲一下Struts2漏洞 目录 1.Docker_Vulnhub搭建 2.Struts2 3.Struts2的框架特征 4.S2-029-->Remote Code Execution 5.漏洞复现 1.RCE 2.Getshell 1.Docker_Vulnhub搭建 因为我用的是Linux&#xff0c;所以我选择直接搭个docker&#xff0c;这里我建议先换个…

Jmeter接口测试---随机数、加密、cookie鉴权、断言、CSV参数化

随机数 第一步&#xff1a;选择工具-函数助手对话框 第二步&#xff1a;选择random&#xff0c;设置最大值最小值&#xff0c;复制函数字符串到指定位置 加密接口 类型&#xff1a;AES、DES、Base64、RSA&#xff08;可以解密&#xff09; | MD5、SHA、HmacSHA&#xff08;不…

振弦式埋入应变计:工程安全的精准守护者

振弦式埋入应变计是一种先进的工程监测设备&#xff0c;以其卓越的性能和稳定的可靠性&#xff0c;广泛应用于水工建筑物及其他混凝土结构物的长期安全监测中。峟思振弦埋入式应变计的核心部件采用进口钢弦制成&#xff0c;保证了其使用寿命的长久性。同时&#xff0c;主要构件…

【C++练级之路】【Lv.10】【STL】priority_queue类和反向迭代器的模拟实现

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C语言》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 一、仿函数1.1 仿函数的介绍1.2 仿函数的优势 二、priority_queue2.1 push2.2 pop2.3 top2.4 size2.5 empty 三、…

延迟任务基于DeyalQueue

一&#xff0c;延迟任务应用场景&#xff1f; 一般用于处理订单&#xff0c;将redis中的数据延迟存入数据库&#xff0c;实现异步存储减少DB的压力 DelayQueue是基于内存的延迟队列 二&#xff0c; 延迟任务的实现方案有很多 DelayQueue Redisson MQ 时间轮 原理 JDK自带延…

基于Keil的RTE(run time environment)配置GD32开发环境,移植FreeRTOS

前言&#xff1a; 10多年前就用STM32了&#xff0c;最近从STM32转到GD32&#xff0c;感觉国产的芯片发展是真的快&#xff0c;不但更便宜&#xff0c;还更快更好用了&#xff08;是在是受不了STM32 I2C BUSY的那个BUG&#xff09;。 先说下&#xff0c;实际上STM32的程序可以…

5 分钟配置好 Electron 应用的图标

最近在开发博客本地客户端 HexoPress&#xff0c;应用做好后&#xff0c;需要打包&#xff0c;如果不希望打包出来 App 的图标用的是 Electron 默认的星球环绕的图标&#xff0c;那么需要自己制作图标。 制作图标 首先&#xff0c;你需要给各种操作系统制作一个满足要求的图标…

Python+OpenGL三维模型显示鼠标缩放旋转平移

程序示例精选 PythonOpenGL三维模型显示鼠标缩放旋转平移 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonOpenGL三维模型显示鼠标缩放旋转平移》编写代码&#xff0c;代码整洁&#…