从头理解transformer,注意力机制(下)
交叉注意力


交叉注意力里面q和KV生成的数据不一样
自注意力机制就是闷头自学

解码器里面的每一层都会拿着编码器结果进行参考,然后比较相互之间的差异。每做一次注意力计算都需要校准一次

编码器和解码器是可以并行进行训练的
训练过程
好久不见输入到编码器,long time no see输入到解码器,按照transformer的编码和解码这个过程逐渐往上进行计算。
有交叉注意力进行互相匹配,看是不是一样,最后得到损失函数,这个损失函数就是判断编码器和解码器部分分别得到的潜空间词向量是不是匹配,经过反向传播再修改模型里的参数,最后达到编码器和解码器他们在潜空间里词向量里表达的词意是能对应起来的
推理过程

直接把输入变成词向量,词向量翻译成对应的目标的语言是不行的

编码器部分:输入好久不见,生成一组潜空间里的词向量
解码器部分:输入一个特殊符号, 代表开始
经过交叉注意力进行计算得到一个结果,结果经过升维和softmax计算后,会将词汇表的所有token都计算一个数值,拿出概率最大的值作为结果,结果代表下一个token将会是什么。
以此类推直到得到的结果是结束符号为止,代表整个生成过程结束,生成的结果就是好久不见的翻译。相当于是逐步挨个对潜空间里的词向量进行解压,一个一个的还原成token,从而解决seq2seq

位置编码
多头注意力机制其实就是能力更强的CNN,词向量的维度就是CNN里面的通道,多头对应的就是卷积核
如果没有位置编码,transfomer会把所有token一起放到模型并行运算,这样的话词语的前后顺序所携带的信息没办法体现
有两种选择增加位置信息:
- 通过权重增加位置信息(乘法)
- 通过偏置系数进行区分(加法)
transformer用的是加法,因为如果用乘法,位置对词向量影响就太大。而LLama模型用到的旋转位置编码,就是用乘法的方式实现
绝对位置编码
针对数据进行修饰,直接让数据携带了位置信息
把位置下标,一维的自然数集投射到与词向量维度相同的连续空间,这样词向量矩阵就可以和位置编码矩阵直接相加了。

投射过程


值域中

相对位置编码
会更多的考虑一个词向量和另一个词向量之间的相对位置,一个词向量和另一个词向量进行对比。这个过程是在注意力机制里面发生的.
绝对位置编码是对数据进行修饰的话,那相对位置编码就是对注意力得分的那个A矩阵进行修饰,让它具备相对位置的信息。这个矩阵考虑的是Q和K的相对关系.
对于这个注意力得分矩阵,用乘法的方式为每一项增加一个系数。这个系数是和相对位置有关的。

多头注意力机制

形式
输入的数据。假如说有两词向量,我们之前只是把这个数据进行一次注意力机制,然后得到一个新的词向量。现在我们是多头了,假如说我有三头,分别去计算三次,这三个注意力机制里面系数是各自独立的。
也就是说这里的三个矩阵是不一样的。最后学到了什么可能会各不相同。最后得到的这三个结果也可能不一样。而多头对立就是把他们给拼起来
这个矩阵的行数和输入数据的这个矩阵的行数是一样的。因为行代表的是词向量的个数,行是一样的,维度就不同了。维度它是每一个输出的维度,再乘以头的个数,然后最后得到这个结果以后,还会再和一个W矩阵相乘,再得出一个输出的词向量
有什么意义
为什么要分别去计算,然后再拼在一起,而不是直接就用一个9维的W矩阵去进行训练。

词向量的维度某种程度上是可以理解成是通道的。就是和图片的RGB的通道是相同的。如果就是一个大的注意力机制,那最后得到的结果是九维,那就是相当于九个通道。
现在是多头的,每个头计算出来都有三个维度。这三个计算结果的第一位,如果定性的去想的话,他们在语义上都是比较接近的,把这些语义接近的组成一组是更合理。那这三个通道经过一个系数相乘,然后再相加得到一个具体的值

多头注意力机制比卷积神经网络它有更大的可能性,它不再局限于卷积核,必须是围绕一个中心的,是可以中间可以跨越很多个头头,对很远的地方去产生联系,所以这个可能性就要更多,也可能会比卷积神经网络更灵活。
在卷积神经网络里面,它通过卷积操作,它可以叠加不同的层去识别出不同尺度的模式,或者说不同尺度的规律。就比如说这里这个图最开始的卷积层可能是只能识别出非常简单的一些模式。再往上去叠加更多的层,就能识别出复杂的模式来了。比如说眼睛、鼻子、嘴,再往上就可以把眼睛、鼻子、嘴再拼成人的脸。

transformer它叠加了很多层,它其实也有类似的作用,不同层的叠加,最底层它很可能只能识别出一个单词,跨越几个单词它们之间的关系。随着层数越高,那可能就能识别出跨越段的语义关系,代表就识别出跨越文章的语义关系。
其他
1.掩码

第一个是在解码器里面,这个注意力上会加一个掩码,就是因为在推理的时候,解码器部分是一个词一个词生成的这就代表了你生成到某个词的时候,这个词它只能受到它之前词的影响,不应该被未来生成的词所决定。我们前面说了,注意力机制里面那个助力得分矩阵A它可以表示一个词和所有上下文之间的关系的,既包含了它之前的,也包含了它之后的。所以说这个时候就需要把矩阵A中的这部分词给屏蔽掉。
屏蔽的方法就是在这些位置上分别加上一个无穷小这样子。

2.计算残差和进行normal运算
这部分它会完成两个操作,一个是实现残差网络的功能,另一个是对上一层数据进行normal运算,也就是进行归一化。反正它的计算很简单,就是把输入和输出直接加起来,这么简单一加之后就会让注意力机制里面学习到的东西发生变化了。如果没有做残差,那注意力机制里面学到的是变化后的结果。而做了残差注意力机制里面学到的就是变化的程度了。
这两种情况的区别,做个类比的话,大概就是这样一种情况,没有做残差,就相当于是你蒙着眼开车,你只能通过控制手的不来回晃动,让自己车尽量走直线。理论上是可以做到的,但是对操作要求那就非常高了。做了残差,就相当于是你可以看到路上的标线,你控制的其实是车子和标线的偏差。就算手再抖,这个偏差也不会太大,你还是能调整回来的。
至于norm,Transformer里面用到的是layer Normal, 简单来说就是给模型里面输入的是一个batch数据。如果简单理解的话,你可以这么去想,你给模型说说一段话,一段话里面有不同的句子,每个句子都是一个句子的长短不一样。所以说这个句子的行数也不一样,那样的话要做的就是你一个句子里面,不管你的这个行数是多少,反正是这个句子里的所有元素放在一起进行归一,那就是layer Normal.
3.前馈神经网络
其实也就是一个全连接神经网络。CNN也有类似的东西,就是前面是一堆卷积层。卷积层计算完了之后还会把结果输入到神经网络里面。

全连接神经网络到底和前面的数据怎么连,按照词向量的维度去排列,作为输入一个维度。对应一个输入,因为只想让你的维度某种程度上来说就是这个词对应的词义特征,把特征输入到神经网络,这应该算是标准操作了。神经网络最后要做的就是各种特征的组合和抽象。
4.线性层

线性层其实就是一个线性变化,也就是做一个矩阵运算。其实这部分我也没有去仔细研究,我的理解是这里加入这一层是为了将前面潜空间里的子向量再进行一次维度变换训练的时候,你就要把维度变换成可以计算损失值的形式。在推理的时候,你需要把词向量变成读热编码去判断到底哪个token的概率最大。所以这部分应该也不是特别复杂。
相关文章:
从头理解transformer,注意力机制(下)
交叉注意力 交叉注意力里面q和KV生成的数据不一样 自注意力机制就是闷头自学 解码器里面的每一层都会拿着编码器结果进行参考,然后比较相互之间的差异。每做一次注意力计算都需要校准一次 编码器和解码器是可以并行进行训练的 训练过程 好久不见输入到编码器&…...
ORA-609频繁出现在alert.log,如何解决?
ORA-609就alertlog中比较常见的一个报错,虽然并没有太大的影响,但是频繁的出现在alert log也是很让人厌烦的事情,本文介绍如何排查解决ORA-609问题。 1.ORA-609官方定义 could not attach to incoming connection Cause Oracle process cou…...
JVM 类加载机制
JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.class 对…...
亲测-wordpress文章实时同步发布修改删除多个站点的WP2WP插件
一款将wordpress文章同步到其他WordPress网站的插件,通过这款插件,可以保持不同博客之间文章发布、修改、删除的同步。 安装步骤: 主站和分站都要上传这个插件 1.把插件上传到wp-content\plugins解压出来wp2wp文件夹,然后启用插…...
npm无法安装node-sass 的问题
安装 node-sass 的问题呈现:4.9.0版本无法下载 Downloading binary from https://github.com/sass/node-sass/releases/download/v4.9.0/win32-x64-72_binding.node Cannot download "https://github.com/sass/node-sass/releases/download/v4.9.0/win32-x64-…...
springboot 引入第三方bean
如何进行第三方bean的定义 参数进行自动装配...
安装Nginx
如果没有gcc环境,需要安装gcc yum install gcc-c安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel工作目录 mkdir /opt/nginx && cd /opt/nginx下载安装包 wget http://nginx.org/download/nginx-1.32.1.tar.gz解压安装包…...
爬虫工具you-get
you-get是一个简单易上手的爬虫小工具,可以从网络中爬取多媒体信息,包括图片、音频和视频。you-get的github项目地址为:https://github.com/soimort/you-get 一、安装 以下为相关依赖,需要分别安装: Python 3 (必须…...
hal_stm32_RTC函数
1设置当前时间: 调用 HAL_RTC_SetTime 来设置小时、分钟、秒和亚秒。 调用 HAL_RTC_SetDate 来设置年、月、日和星期。 HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); HAL_StatusTypeDef HAL_RTC_SetDat…...
【大数据·Hadoop】从词频统计由浅入深介绍MapReduce分布式计算的设计思想和原理
一、引入:词频统计问题 假如我们有一亿份文档,需要统计这一亿份文档的词频。我们会怎么做,有以下思路 使用单台PC执行:能不能存的下不说,串行计算,一份一份文档读,然后进行词频统计࿰…...
win10建立共享文件夹和ipad共享文件
win10端设置 查看自己的局域网IP 在任意地方新建一个文件夹 打开文件夹的属性,点到共享的地方 点击高级共享 然后点击应用,确认 再回到之前哪个地方,点击共享 把Everyone的权限改为读取/写入 最后点击共享就欧克了 失败的可能原因 ipad端设置 然后回出现一个要输入用户名和…...
手机在网状态多方面重要性
手机在网状态的重要性体现在多个方面,它是现代社会中人们保持联系、获取信息以及进行日常活动不可或缺的一部分。以下是一些关于手机在网状态重要性的详细解释: 通信联系: 手机是在现代社会中进行通信联系的主要工具。当手机处于在网状态时&…...
Multitouch for Mac:手势自定义,提升工作效率
Multitouch for Mac作为一款触控板手势增强软件,其核心功能在于手势的自定义和与Mac系统的深度整合。通过Multitouch,用户可以轻松设置各种手势,如三指轻点、四指左右滑动等,来执行常见的任务,如打开应用、切换窗口、滚…...
IDEA创建springboot项目时不能选择java 8或者java 11等等版本的问题,解决方案
文章目录 1. Project JDK 和 Java 的区别2. 没有 java 8 或 java 11 等版本2.1 方案一2.2 方案二2.3 方案三 1. Project JDK 和 Java 的区别 我们在利用 idea 创建 spring boot 项目时,会有以上两个选项,这两个选项有什么区别? 答ÿ…...
SpringCloudAlibaba:4.3云原生网关higress的JWT 认证
概述 简介 JWT是一种用于双方之间传递安全信息的简洁的、URL安全的声明规范。 定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息,特别适用于分布式站点的单点登录(SSO)场景 session认证的缺点 1.安…...
【机器学习】Reinforcement Learning-强化学习基本概念
1、Q值与V值 1.1 Q值和V值的定义 Q值:也称为动作价值函数,评估动作的价值,它代表了智能体选择这个动作后,一直到最终状态奖励总和的期望,表示为Q(s, a),其中 s是状态,a是动作。 V值ÿ…...
vim编辑器---(1)vim编辑器介绍?
(1)vim编辑器介绍? 1 目录 (a)IC简介 (b)vim简介 (c)Verilog简介 (d)vim编辑器介绍? (e)结束 1 IC简介…...
解密 Unix 中的 “rc“ 后缀:自定义你的工作环境
在文件名中,rc 通常表示 “run commands”(运行命令)或者 “runtime configuration”(运行时配置)。这种命名惯例源自早期的 Unix 系统,用于指示这些文件包含了一系列要在程序运行时执行的命令或配置选项。…...
Java使用csv导出多字段大数据文件(无需写实体映射,自动遍历)
csv工具类CsvUtils 此处使用LinkedHashMap链表哈希表,实现键值中值为空时仍存在数据以及保证顺序与sql顺序一致。 package com.xxx.xxx.utils;import lombok.val; import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletRespons…...
Redis 本机无法访问
问题 我在服务器上有两个 Redis 实例,服务端口号分别是 6379 和 6380,Redis 服务器地址假设为 10.0.0.12。其中 6379 这个实例不需要密码即可访问,6380 需要密码访问。 在正常使用几天后,本机突然无法访问 6379 这个实例&#x…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
