Transformer从0到1的学习【还有2-10,别想太多】

1.高纬度介绍Transformer

1.分为编码Encoders和解码器Decoders:“我爱你”作为编码器Encoders的输入进行编码得到序列码后,作为解码器的输入得到输出即为,“I Love you”。
将Transformer拆为编码器和译码器
2.编码器和译码器的具体拆分: 左边的编码器Encoders的数量会 x n倍,而右侧的解码器Decoders与左侧同理,即为n相同;在架构方面,编码器数量虽然有 n 个,但是他们各自的参数是不相同的【架构相同,参数不同】,同理解码器亦是如此【类似与CNN】。
区别

2.相关工作

2.1 位置编码详细解读

首先,编码器分为三个部分:1、输入部分【位置嵌入,Embedding】;2、注意力机制;3、前馈神经网络。
分为三个部分

2.1.1 输入部分【Embedding】

按字切分,每个字对应一个512维度的字向量【随机初始化向量或者vector】
Embedding化

2.1.2 位置编码

1、首先回顾一下RNN:
(为什么RNN共享一套参数?)
RNN为什么共享一套参数?
2、RNN的梯度消失跟其他网络的梯度消失有什么不同之处?
总梯度之和被近距离阻挡,被远距离归为0

3、Transformer 处理信息和RNN处理信息的不同之处:
编码器可以并行的处理我们的字,比如 “我爱你” 这三个字他可以一起进行并行处理,相反,RNN他是一个一个字的处理,在时效方面,RNN的效率就要低很多【时效方面】。但在顺序方面,因为Transformer是一起处理的,所以字与字之间的顺序并没有像RNN一样符合明确的序列要求【顺序方面】。

4、因此产生位置编码保证字的顺序

首先会求得该字的位置编码:
求得字的位置编码
然后我们将该字的词向量Embedding与该字的位置编码进行相加,得到:
将位置编码和词向量相加
最后得到相加后的内容,作为输入

5、为什么要用位置编码呢?
刚才我们说过,位置编码能够得到词的绝对位置,具体原因如下:

我们利用三角函数性质得到词的绝对位置,得到公式3;
公式3的主要思想是:绝对位置向量信息中蕴含着相对位置向量信息;
比如:“我爱你”,我即为pos,爱即为k,pos+k即为你;
位置编码为什么能得到词的绝对位置?

3.自注意力机制

1.目的: 找到最关注哪个区域,哪个区域和我们的目的最相似。

在这里插入图片描述
2.公式:
公式
3.为什么要点乘?: 点乘是一个向量在另一个向量投影的长度,它是一个标量【可以反映两个向量的相似度,点乘值越大,相似度越大】

4.如何找到最关注的区域: 通过上面的公式进行计算,Q 是输入【婴儿在做什么?】,K转置是我们的图像上的几个区域【图像区域特征】,进行点积得到的值即为相似度【表示为输入在特征上的投影长度,如果为0表示平行】,比如【0.1,0.3,0.2,0.4】说明关注右下部分,然后再和微矩阵相乘【相当于偏置】;
PCA主成分分析
如何找到最关注部分?

5.从NLP中的角度体现注意力机制:

**第一步Query:**通常是指当前需要关注的目标。例如,在翻译任务中,Query可能是当前正在翻译的词或句子的表示。
第二步Key:通常代表输入序列中每个单元(如单词)的表示。在图中,Key1、Key2、Key3和Key4可能代表四个不同单词或短语的向量表示
**第三步Value(值):**与每个Key相对应的Value 包含了与每个输入单元相关的信息,它们会根据相应的注意力权重被汇总,以产生输出【注意:Values可能与Keys相同(自注意力机制)或者有所不同】。
然后进行点积运算: Query与每个Key做点积计算(F(Q,K)),目的是测量Query与各个Key的相似度【也可以用协同过滤,cos余弦角公式计算相似度】。
接着进行softmax进行计算: 点积计算得到的结果(s1, s2, s3, s4)通过SoftMax函数进行归一化,这样可以得到每个Value的权重(a1, a2, a3,
a4)。SoftMax确保所有权重的总和为1,权重越大表示与Query的相关性越高【概率分布】。
最后进行加权和: 每个Value(Value1, Value2, Value3, Value4)根据其对应的权重(a1, a2, a3, a4)进行加权。然后,所有加权后的Value被加总,形成最终的输出(Attention
Value),这个输出是对输入信息的加权表示,侧重于与Query更相关的部分。

NLP中的Attention Mechanism

6.Transformer中的注意力集中机制:
6.1 输入Input: 输入通常是文本数据,如一句话或一段文字。
6.2 嵌入Embedding: 嵌入是将这些文本数据转换成数值形式的向量。
6.3 位置编码(Positional Encoding): 由于Transformer完全基于自注意力,因此它本身并不理解词的顺序。因此,为了让模型能够利用词语的顺序信息,输入嵌入会加上位置编码。位置编码通常是一组固定的向量,每个位置有一个唯一的向量,通过数学公式计算得到,与词嵌入相加,使得模型能感知到每个词在句子中的位置。【提供了词汇必要的位置信息,使得模型能够理解输入数据的序列信息】
6.4 生成Query,Keys,Value: 经过位置编码的输入嵌入向量接下来会通过三组不同的权重矩阵(分别为 WQ,WK,WV)进行线性变换,从而分别产生Query、Key和Value。【这些权重矩阵是模型训练中学习的参数】

首先明确定义:
1、Query(查询向量)Query向量代表了“请求者”的角色,即它是当前我们想要寻找上下文相关性的基点。Query的目的是从其他输入中找出与当前位置最相关的信息。每个位置的Query都会与序列中的所有Key进行比较。【可以理解为 ‘词’ 的绝对位置】
2、Key(键向量)则代表了“被请求者”的角色,即它是可以被Query查询的对象。每个位置的Key都会与所有位置的Query比较,以确定它们对于每个Query的相关性程度。【可以理解为该‘词’对于其他词的相对位置】

举个例子: 假设我们已经有了每个词的嵌入向量加上位置编码后的结果,这些向量通过不同的权重矩阵 WQ、WK和 WV转换,为每个词生成Query、Key、 Value。具体地说:【The cat sat】
1、“The” 转换后得到 Query1, Key1, Value1;“cat” 转换后得到 Query2, Key2, Value2;“sat” 转换后得到 Query3, Key3, Value3。
2、对于每个词作为Query,计算它与所有Key的点积得分:
Query1 和 Key1, Key2, Key3 的点积得分【比如Query1和key2进行点积得到就是以The为基准和sat的相似度】
Query2 和 Key1, Key2, Key3 的点积得分
Query3 和 Key1, Key2, Key3 的点积得分
3、将每个得分通过Softmax转换为概率,这表明每个词对当前词的重要性:
例如,对于"cat"作为Query,可能发现与"sat"的Key得分最高,说明在这个上下文中"sat"与"cat"关系紧密。
4、接着,用这些Softmax输出的概率去加权对应的Value,得到每个词的加权Value求和:
如果"cat"与"sat"的关系得分高,则"sat"的Value对于"cat"位置的输出贡献更大。

Transformer的注意力集中机制
进行点积运算并经过softmax转为概率分布,最后用这些Softmax输出的概率去加权对应的Value,得到每个词的加权Value求和
7.为什么在点积计算权重后要除以根号下dk?

**点积大小:**当我们计算Query和Key的点积时,如果两个矩阵维度很大,相乘后的结果也可能很大,因为维度大代表需要累加的项数就会很多,数值就会很大。
**数据稳定性:**当较大的点积值输入到softmax函数中,就可能导致数值稳定性的问题,比如梯度消失或者梯度爆炸。Softmax函数对于其输入非常敏感,极端的输入值会使得梯度传递变得困难。因此我们要维护输出的数值大小以缓解梯度消失/爆炸的问题。
维持输出尺度: 通过除以根号下dk,调整点积的规模,使其不因为Key和Query的维度变化而改变太多。这样可以保持模型在不同设置下的表现一致性。【dk为Key向量维度】
**理论依据:**这种缩放方法有理论支持。从概率角度看,向量中的元素通常假定为独立同分布,它们的方差为1,那么它们点积后的方差就是dk,除以根号下dk就能使方差控制到1左右,避免方差太大带来的数值问题。模型的训练更加稳定,能够更快地收敛,并且在多种任务上表现更好。
为什么要保持方差为1?
公式
8.对于Transformer自注意力机制的总结:

问题: 比如Fairy Carry,根据Fairy输入找到相关单词,Q1,K1,V1为Fairy经过三个矩阵得到的值,Carry同理得到Q2,K2,V2,然后我们计算Fairy和carry的相似度,也就是上述公式:Q1与K2进行点积除以根号下K2的维度*权重得到概率值,这样理解有问题吗?另外这样算的话是不是需要抛去本身呀?比如Fairy。

问题的回复

4.多头注意力机制

目的: 每个头可以关注不同的方面,比如一个头关注句子的语法结构,另一个头可能关注语义内容,最后合并。
输入X: 输入是一些词的嵌入向量,比如这里可能是一个句子中的词向量。
注意力头#0: 使用权重矩阵W0Q,W0K,W0V分别对输入X进行变换得到Q0,K0,V0【绝对Q,相对V,权重偏置V】
注意力头#1: 使用权重矩阵W1Q,W1K,W1V都得到Q1,K1,V1
多头注意力机制前过程
合并输出: 最终的输出是通过将所有注意力头的输出 𝑍 合并。【通常是通过拼接后再通过一个线性层来形成一个单一的输出表示】
【PS:在多头注意力机制中,不同头的输出通过拼接而不是简单相加,而是拼接向量,使其包含了所有头中信息的完整表示】

多头的合并

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

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

相关文章

【常见的六大排序算法】插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序

个人主页 创作不易,感谢大家的关注! 文章目录 前言 🎡一、插入排序🌲二、希尔排序🎉三、选择排序🎀四、冒泡排序🚘五、堆排序🛵六、快速排序1. Hoare版本2. 挖坑法3. 前后指针法4. 非…

大佬推荐的好用网盘工具

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 前段时间有大佬推荐了一款网盘工具seafile,自己搭建起来试用了一下,发现还挺好用的,这款工具…

【C++】C++11新特性:新的类功能、可变参数模板、STL容器中的empalce相关接口函数、lambda表达式、包装器(function、bind)

目录 一、新的类功能 1.1 移动构造函数和移动赋值运算符重载 1.2 强制生成默认函数的关键字default 1.3 禁止生成默认函数的关键字delete 1.4 其它的类功能 二、可变参数模板 三、STL容器中的empalce相关接口函数 四、lambda表达式 4.1 lambda的引入 4.2 lambda表达式…

openVPN+SmartDNS=openDNS or smartVPN?

正文共:777 字 11 图,预估阅读时间:1 分钟 我们现在已经熟练的掌握了openVPN的部署方式和配置方法(带认证的openVPN连接/断开操作指南),还掌握了在CentOS系统部署SmartDNS的方法(基于CentOS部署…

【网络安全】Web安全基础 - 第二节:前置基础知识- HTTP协议,握手协议,Cookie及Session

本章节主要介绍一些基础知识 d(^_^o) HTTP协议 什么是HTTP 超文本传输协议(HyperText Transfer Protocol)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 HTTP是一个基于请求与响应,无状态的,应用层协议,…

100.网络游戏逆向分析与漏洞攻防-ui界面的设计-聊天功能的界面与设计

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 现在的代码都是依据数据包来写的,如果看不懂代码,就说明没看懂数据包…

Git常用命令1

1、设置用户签名 ①基本语法: git config --global user.name 用户名 git config --global user.email 邮箱 ②实际操作 ③查询是否设置成功 cat ~/.gitconfig 注:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交…

MulterError: Field name missing 报错解决

Request POST /FileUpload/chunkApi/upload/mProjectNews/Images failed with status code 500. MulterError: Field name missing. 原因:Multer是基于Busboy解析的表单参数信息,经定位发现是解析表单中文本参数时出现了null,故收到MISSION_…

【算法】模拟算法——数青蛙(medium)

题解:模拟算法——数青蛙(medium) 目录 1.题目2.题解3.参考代码4.总结 1.题目 题目链接:LINK 2.题解 用循环进行遍历, 如果该字符为o\o\a\k 找一下前驱字符是否存在 如果存在,前驱字符–,该字符如果不存在&#x…

CATIA二次开发VBA入门(4)——进程外开发环境搭建,vb.net在Visual Studio中开发,创建圆柱曲面的宏录制到二次开发案例

目录 引出vb.net和vb6.0 进程外开发环境搭建vb.net开发环境搭建《CATIA二次开发技术基础》模板 添加宏库引用 vs开发环境初步vs中的立即窗口对象浏览器 建立模板案例:创建一堆圆柱曲面第一步:录制宏第二步:代码精简第三步:for循环…

⌈ 传知代码 ⌋ 命名实体识别

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

提升B端图表设计技能:教程分享

图表是数据可视化的常用表现形式,是对数据的二次加工,可以帮助我们理解数据、洞悉数据背后的真相,让我们更好地适应这个数据驱动的世界。本期就来带大家学习图表的设计及构成,帮助大家更好的理解图表设计。 设计教程源文件http:/…

OpenAI已全面开放自定义GPT以及文件上传等功能

今天,OpenAI兑现了前段时间做出的承诺:免费向所有用户开放GPT-4o。这意味着所有的免费用户都能使用自定义GPT模型、分析图表等其他GPT-4o新功能了。现在ChatGPT界面长这样: 可以看出,免费用户也能使用GPT store中定义好的模型&…

Python开发与应用实验1 | 开发环境安装配置

*本文来自博主对专业课 Python开发与应用 实验部分的整理与解析。 *一些题目可能会增加了拓展部分(⭐)。拓展部分不是实验报告中原有的内容,而是博主本人的补充,以便各位学习参考。 *实验环境为:Python 3.10 &#xf…

java实现地形dem产汇流流场数据提取解析

一、基础概念 在GIS和气象学、海洋学、大气科学、水文学等领域,"提取流场"通常指的是从数据集中识别和分析流体(如水流、风场、洋流、大气流)的运动模式和流向的过程。这个过程涉及数据处理、可视化和分析技术,下面是提…

Wpf 使用 Prism 实战开发Day31

登录数据绑定 1.首先在LoginViewModel 登录逻辑处理类中&#xff0c;创建登录要绑定属性和命令 public class LoginViewModel : BindableBase, IDialogAware {public LoginViewModel(){ExecuteCommand new DelegateCommand<string>(Execure);}public string Title { ge…

vue-标签选择

效果 选中后 代码 <span :class"[item.bealtrue?p_yx_span span_active :span p_yx]" click"onTagSelect(index)" v-for"(item,index) in tagList" :key"index" >{{item.name}} </span> // 列表值 tagList:[ {id: 1, na…

R语言ggplot2包绘制世界地图

数据和代码获取&#xff1a;请查看主页个人信息&#xff01;&#xff01;&#xff01; 1. 数据读取与处理 首先&#xff0c;从CSV文件中读取数据&#xff0c;并计算各国每日收入的平均签证成本。 library(tidyverse) ​ df <- read_csv("df.csv") %>% group_…

PostgreSQL基础(六):PostgreSQL基本操作(二)

文章目录 PostgreSQL基本操作(二) 一、字符串类型 二、日期类型 三、

基于分步傅立叶数值算法的一维非线性薛定谔方程求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于分步傅立叶数值算法的一维非线性薛定谔方程求解matlab仿真. 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 ........................…