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

2024-06-02 00:36

本文主要是介绍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:在多头注意力机制中,不同头的输出通过拼接而不是简单相加,而是拼接向量,使其包含了所有头中信息的完整表示】

多头的合并

这篇关于Transformer从0到1的学习【还有2-10,别想太多】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1022549

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件