Transformer详解常见面试问题

news2024/11/24 14:49:07

文章目录

  • 1. 各模块解决
    • 1.1 输入部分
    • 1.2 多头注意力(作者使用8个头)
    • 1.3 残差和LayerNorm
    • 1.4 Decoder部分
  • 2.Transformer经典问题
    • 2.1 tranformer为何使用多头注意力机制?
    • 2.2 Transformer相比CNN的优缺点
    • 2.3 Encoder和decoder的区别?两者感受野是否一致?

Tranformer现如今无论是在CV还是NLP,甚至现在非常或的LLM领域都非常重要!该架构是谷歌在2017年《Attention is all you need》中提出的,下面将分析本人对各个模块的理解+算法面试中的常见问题。

1. 各模块解决

参考如下:
Transformer从零详细解读(可能是你见过最通俗易懂的讲解)
在这里插入图片描述
其基本架构如上如所示,图中的N在论文中等于6。
编码器与解码器之间的数据传递如下图所示:
在这里插入图片描述
下面将详解各模块:

1.1 输入部分

(1)Embedding
在这里插入图片描述
一般是采用Embedding方式对输入进行编码,如上图所示,
即:使用特定维度来表达一个单词,如:
‘我’: 就使用一个512维度的向量来表示,
‘爱’: 也使用一个512维度的向量来表示;

(2)位置编码
详见本人博客:举例理解transformer中的位置编码

1)明白为什么要使用位置编码?
因为Transformer的多头注意力机制是并行化的,所有单词是可以一起处理的。(而不想RNN那种一次输入一个词,输入本身就带有时序关系, 注意RNN中的梯度消失:RNN的梯度是总的梯度和,它的梯度消失不是梯度变为0,而是因为它的梯度被近距离梯度主导,被远距离梯度忽略不计)

Transformer的并行化可以提高速度,但缺少了位置信息,所以需要位置编码!

2)编码过程
在这里插入图片描述
上式中,pos表示单词在句子中的位置,2i和2i+1要整体看,2i表示向量的偶数位置,2i+1表示向量的奇数位置。如图所示:
在这里插入图片描述
这样,每个单词都能有一个唯一的512维位置编码,然后将其和Embedding相加:
在这里插入图片描述
注:单个的位置只能表示绝对位置信息!然后由于三角函数的特性,他们之间还可以表现出相对位置信息,具体分析如下:

3)为什么位置嵌入是有用的?
因为借助三角函数的性质,可以表现出单词与单词之间的相对位置信息。
在这里插入图片描述
如上图所示,位置为:pos+k的单词可以分别用位置为pos和k的来计算出来,这样就表现出相对位置信息了。

4)为什么使用sin 和 cos?
1.sin cos 函数是无限延长的,适合单词序列的长短变化
2.sin cos 是具有周期性的,pos + k的单词可以分别用位置为pos和k的来计算出来

1.2 多头注意力(作者使用8个头)

以下是注意力机制的公式:
在这里插入图片描述其中Q,K,V分别是有输入词向量和初始化生成的三个矩阵相乘得来的,dk表示词向量维度,如上面的512。计算过程如下所示:
在这里插入图片描述
多头注意力机制,则表示使用多套不同的WQ,WK,WV去求注意力,如下图所示:
在这里插入图片描述
每个头最后经公式都会得出一个注意力Z矩阵,将其合起来,即可得到多头注意的输出。
在这里插入图片描述
使用多头注意力机制的目的在于:将原始信息映射到不同空间,保证可以捕捉到更多信息。

(1)为什么要除以根号dk?
①控制梯度大小:除以根号d可以控制注意力分数的大小,防止梯度爆炸问题。在内积操作中,两个向量之间的相似度随着向量维度的增加而增大,这可能导致梯度变得非常大,外面有还有Softmax,如果某一点太大,softmax会让那一点更趋近于1,而其他点则更趋近于0,从而影响训练的稳定性。通过除以根号d,可以使注意力分数的范围相对稳定,从而减轻梯度爆炸的问题。

②平衡不同维度的注意力权重:在注意力机制中,注意力分数的大小会影响不同键的重要性。通过除以根号d,可以确保不同维度的注意力权重在计算时有更平衡的影响,避免某些维度过大而影响模型的性能。

(2)为什么除以的数值是根号下dk,而不是其他数值?
因为q和k是两个独立(而非相同)的随机变量, 假设两个输入向量 q 和 k 的每一维都具有零均值和单位方差、并且假设每一维都互相独立,那么这个除 sqrt(dk)的操作可以使得运算结果仍然保持零均值和单位方差,因而有利于模型训练的稳定性。

1.3 残差和LayerNorm

多头注意力后就会进行残差连接和LayerNorm,如下图所示:
在这里插入图片描述
(1)残差连接为什么有用?
在这里插入图片描述
如上图,表示一个残差网络结构图,在进行反向传播时,有如下推导:
在这里插入图片描述
而有:
在这里插入图片描述
所以:
在这里插入图片描述
由式子可知,即使后面的连乘接近0,由于前面有个1,所以导数不会为0,这就是残差网络能很深的原因,因为残差网络缓解了梯度消失。

(2)BatchNorm的优缺点和使用场景
BatchNorm的计算可以参考:pytorch中对BatchNorm2d()函数的理解
BN的理解重点在于它是针对整个Batch中的样本在同一维度特征做处理!!!如下图所示:
在这里插入图片描述
x 1 、 x 2 , ⋅ ⋅ ⋅ , x R x^1、x^2,···,x^R x1x2,⋅⋅⋅,xR 表示R个样本,BatchNorm是作用在不同样本同一维度上的。

1)BN的优点
①解决内部协变量偏移
简单来说,在训练过程中,各样本之间可能分布不同,增大了学习难度,BN通过对各样本同一维度进行归一化缓解了这个问题。也有说,BN使损失平面更加更滑,从而加快收敛。
②缓解了梯度饱和问题,加快收敛。

2)BN的缺点
①batch_size较小时,效果较差
BN的过程,使用整个batch中样本的均值和方差来模拟全部数据的均值和方差,在batch_size 较小的时候,效果肯定不好。
②对文本这种输入维度不一致的不友好
如图所示:
在这里插入图片描述
举个最简单的例子,比如 batch_size 为10,也就是我有10个样本,其中9个样本长度为5,第10个样本长度为20。
那么问题来了,前五个单词的均值和方差都可以在这个batch中求出来从而模型真实均值和方差。但是第6个单词到底20个单词怎么办?
只用这一个样本进行模型的话,不就是回到了第一点,batch太小,导致效果很差。

3)BN的使用场景
BN在MLP和CNN上使用的效果较好,在RNN这种动态文本模型上使用的比较差。
为啥BN在NLP中效果差:
BN的使用场景不适合RNN这种动态文本模型,有一个原因是因为batch中的长度不一致,导致有的靠后面的特征的均值和方差不能估算。
这个问题其实不是个大问题,可以缓解。我们可以在数据处理的时候,使句子长度相近的在一个batch,就可以了。所以这不是为啥NLP不用BN的核心原因。

BN在MLP中的应用,BN是对每个特征在batch_size上求的均值和方差。记住,是每个特征。比如说身高,比如说体重等等。这些特征都有明确的含义。
但是我们想象一下,如果BN应用到NLP任务中,对应的是对什么做处理?是对每一个单词!也就是说,我现在的每一个单词是对应到了MLP中的每一个特征。也就是默认了在同一个位置的单词对应的是同一种特征,比如:“我/爱/中国/共产党”和“今天/天气/真/不错”
如何使用BN,代表着认为 "我"和“今天”是对应的同一个维度特征,这样才可以去做BN。
大家想一下,这样做BN,会有效果吗?
不会有效果的,每个单词表达的特征是不一样的,所以按照位置对单词特征进行缩放,是违背直觉的。

(3)LayerNorm在Transformer中的应用
layner-norm 的特点是什么?layner-norm 做的是针对每一个样本,做特征的缩放。换句话讲,保留了N维度,在C/H/W维度上做缩放。

也就是,它认为“我/爱/中国/共产党”这四个词在同一个特征之下,所以基于此而做归一化。
这样做,和BN的区别在于,一句话中的每个单词都可以归到一个名字叫做“语义信息”的一个特征中(我自己瞎起的名字,大家懂就好),也就是说,layner-norm也是在对同一个特征下的元素做归一化,只不过这里不再是对应N(或者说batch size),而是对应的文本长度。

上面这个解释,有一个细节点,就是,为什么每个单词都可以归到“语义信息”这个特征中。大家这么想,如果让你表达一个句子的语义信息,你怎么做?

最简单的方法就是词语向量的加权求和来表示句子向量,这一点没问题吧。(当然你也可以自己基于自己的任务去训练语义向量,这里只是说最直觉的办法)。

1.4 Decoder部分

在这里插入图片描述
需要对当前时刻之后的信息进行musk,那么为什么需要mask呢?
(1)为什么需要mask?
需要提前知道的是:
在训练过程,Output(Shifted right) 表示的是GroundTruth;
在test过程,Output(Shifted right) 表示之前自己预测的序列。
这里探讨的是训练过程为什么需要Mask?
在这里插入图片描述
我的理解是,当我们的需要翻译是句子是:
“我现在爱你”,其Label为:“I LOVE YOU NOW”.
当前时刻是已经预测了“I LOVE”, 正在预测“YOU”。此时我们就需要把Label中的“YOU NOW”给mask掉。
其原因就是在推理时,是没有Label的,所以我们要训练和推理过程之间没有gap,才能得到较好的结果。
而mask就是将从代码角度讲,就是把当前时刻之后所有单词mask掉就好了

(2)decoder部分(和Encoder交互的部分)的输入
在这里插入图片描述
如上图所示,每个Encoder会接受Q,K,V矩阵,其中,K,V来自与Encoder,Q来自与上一个Decoder.
之后就没什么好讲了。但需要明白的是:
在训练过程,Output(Shifted right) 表示的是GroundTruth;
在test过程,Output(Shifted right) 表示之前自己预测的序列。

2.Transformer经典问题

基于Transformer经典模型的发家史:
在这里插入图片描述

2.1 tranformer为何使用多头注意力机制?

(1)多头保证了transformer可以注意到不同子空间的信息,捕捉到更加丰富的特征信息。
(2)每个并行计算注意力权重,提高计算效率(参数总量和总计算量没有减少)
(3)由于多头注意力机制能够从多个角度学习输入数据的特征,它有助于提高模型的泛化能力,使其能够更好地处理未见过的数据或任务。
(4)在自然语言处理中,句子中的词语往往与距离较远的其他词语存在依赖关系。多头注意力机制允许模型在不同的头中关注序列的不同部分,从而更有效地捕获这些长距离依赖。

2.2 Transformer相比CNN的优缺点

在这里插入图片描述
CNN感受野相对更小,所以需要搭建很多层CNN,才能注意到全局信息。而transformer的全局感受能力更强。
在这里插入图片描述
Transformer全局信息更加丰富,仅用几层就能达到很大的感受野。

2.3 Encoder和decoder的区别?两者感受野是否一致?

(1)Encoder只有一个Multi-Head Attention层,而Decoder有两个,且Decoder的第一个Multi-Head Attention采用了mash操作;
(2)decoder第二个 Multi-Head Attention 层的K, V矩阵使用 Encoder 的编码信息矩阵C进行计算,而Q使用上一个 Decoder block 的输出计算。
在这里插入图片描述
(3)功能性来说:encoder的功能是将输入序列编码成高维表示;而Decoder则将高维表示转化为目标序列,方便下游任务;
(4)感受野: Encoder的感受野是输入序列中某个位置的上下文信息;而Decoder同时关注输入序列和已生成的序列。

本文完结,撒花!
欢迎交流讨论!

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

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

相关文章

03-ArcGIS For JavaScript结合ThreeJS功能

ArcGIS For JavaScript结合ThreeJS功能 概述three.js中功能实现externalRenderers(4.28及以下版本)RenderNode(4.29版本) 概述 ArcGIS For Javacript提供了一些对象可以支持加载webgl上下文信息,这里包括webgl编程的代…

【Crypto】Url编码

文章目录 Url编码解题感悟 Url编码 Url编码 搞定 小小flag,拿下! 解题感悟 有点饿了…

Edge浏览器:重新定义现代网页浏览

引言 - Edge的起源与重生 Edge浏览器,作为Microsoft Windows标志性的互联网窗口,源起于1995年的Internet Explorer。在网络发展的浪潮中,IE曾是无可争议的霸主,但随着技术革新与用户需求的演变,它面临的竞争日益激烈。…

【加密与解密(第四版)】第十六章笔记

第十六章 脱壳技术 16.1 基础知识 壳的加载过程:保存入口参数、获取壳本身需要使用的API地址、解密原程序各个区块的数据、IAT的初始化、重定位项的处理、HOOK API、跳转到程序原入口点 手动脱壳步骤:查找真正的入口点、抓取内存映像文件、重建PE文件&…

【全网最全】2024电工杯数学建模B题问题一14页论文+19建模过程代码+py代码+2种保奖思路+数据等(后续会更新成品论文等)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片链接,那是获取资料的入口! 【全网最全】2024电工杯数学建模B题问一论文19建模过程代码py代码2种保奖思路数据等(后续会更新成品论文等)「首先来看看目前已…

Python导入Shapefile到PostGIS的常见问题和解决方案

导入Shapefile到PostGIS的常见问题和解决方案 先决条件: 已经拥有含有GDAL的python环境(如果大家需要,我可以后面出一片文章 问题一:QGIS连接到PostGIS数据库失败 错误描述: Connection to server at &quo…

211初试自命题复试线仅302分!延边大学计算机考研考情分析!

延边大学(Yanbian University),简称“延大”,地处吉林省延边朝鲜族自治州,是国家“双一流”建设高校、国家“211工程”重点建设大学、西部开发重点建设院校、吉林省人民政府和教育部共同重点支持建设大学、吉林省人民政…

[保姆式教程]使用目标检测模型YOLO V5 OBB进行旋转目标的检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)

最近需要做基于卫星和无人机的农业大棚的旋转目标检测,基于YOLO V5 OBB的原因是因为尝试的第一个模型就是YOLO V5,后面会基于其他YOLO系列模型做农业大棚的旋转目标检测,尤其是YOLO V9,YOLO V9目前还不能进行旋转目标的检测&#…

C++ 实现AVL树

目录​​​​​​​ 0.二叉搜索树 1.AVL树的概念 2.AVL树节点的定义 3.AVL树的插入 4.AVL树的旋转逻辑 5.判断是否符合AVL树 6.完整代码 7.数据测试 0.二叉搜索树 C 搜索二叉树-CSDN博客 1.AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近…

基于地理坐标的高阶几何编辑工具算法(2)——相交面裁剪

文章目录 工具步骤应用场景算法输入算法输出算法示意图算法原理后处理 工具步骤 选中一个需要裁剪的面,点击“相交面裁剪”工具,多选裁剪模板面,空格执行。 应用场景 常用于基于遥感影像的建筑物几何面编辑。 算法输入 一个待裁剪的面&a…

国家自然博物馆“云端自然”线上虚拟展厅是如何搭建的?

国家级综合性自然博物馆国家自然博物馆,联手积木易搭打造“云端自然”线上虚拟展览,形成一个集参观游览、科普教育为一体的线上虚拟数字博物馆平台,让数千以至数万年的古生物,栩栩如生地呈现在我们面前。 通过数字化的展示手段&am…

C# 文件清理

/// <summary>/// 定期清除文件/// </summary>/// <param name"fileDirect">文件夹</param>/// <param name"postFix">文件后缀</param>/// <param name"saveDay">保存天数</param>private voi…

blender 烘焙渲染图片,已经导出fbx,导出贴图。插件生成图片

1.新建一个模型。选择资产浏览器的材质&#xff0c;并拖动到模型身上&#xff0c;如下图。资产浏览器的材质可以网上找。 2.打开着色器面板。正下方着色器窗口中&#xff0c;点击空白取消选择&#xff0c;然后右击-添加-着色器-原理化BSDF&#xff0c;右击-添加-纹理-图像纹理。…

oracle怎么处理json格式

向数据库导入json相关jar包 loadjava -r -f -u bsuser/XXXX192.168.10.31/bsorcl json.jar 要删除的话&#xff0c;删除指定jar dropjava -u bsuser/XXXX192.168.10.31/bsorcl json.jar select * from user_java_classes 然后我们就可以取到json串中任意节点的值

几个原则

&#xff08;1&#xff09; 成功是成功之母&#xff0c;失败不是成功之母。100分的试卷一模一样&#xff0c;不及格的试卷千奇百怪。向成功者学习。 不要研究失败&#xff0c;因为研究了一万个失败的原因&#xff0c;也不能找到一把成功的钥匙。 &#xff08;2&#xff09; 要定…

Controlnet作者放出新的大招 IC-Light,可以操控图像生成时的光照,对内容主体重新打光生成符合新背景环境光照的图片

IC-Light代表Impose Constant Light,是一个控制图像照明的项目。可以操控图像生成时的光照&#xff0c;对内容主体重新打光生成符合新背景环境光照的图片。这下商品图合成这种需要最大程度保持原有主体 ID 需求的最大的问题解决了。 目前&#xff0c;已经发布了两种类型的模型…

如何将手机中的音乐转移到 SD 卡上?轻松传输音乐

概括 如何将音乐从手机转移到 SD 卡&#xff1f;我们的智能手机可以充当个人点唱机&#xff0c;因此有效管理我们的音乐库变得至关重要。无论您是存储空间不足还是只是想整理您的音乐收藏&#xff0c;将音乐从手机传输到 SD 卡都是一个实用的解决方案。 在本指南中&#xff0…

Python数据可视化(七)

绘制 3D 图形 到目前为止&#xff0c;我们一直在讨论有关 2D 图形的绘制方法和绘制技术。3D 图形也是数据可视化的 一个很重要的应用方面&#xff0c;我们接下来就重点讲解有关 3D 图形的实现方法。绘制 3D 图形通常需要导 入 mpl_toolkits 包中的 mplot3d 包的相关模块&#x…

【博主推荐】HTML5实现520表白、情人节表白模板源码

文章目录 1.设计来源1.1 表白首页1.2 甜蜜瞬间11.3 甜蜜瞬间21.4 甜蜜瞬间31.5 甜蜜瞬间41.6 甜蜜瞬间51.7 甜蜜瞬间61.8 永久珍藏 2.效果和源码2.1 页面动态效果2.2 页面源代码2.3 源码目录2.4 更多为爱表白源码 3.源码下载地址 作者&#xff1a;xcLeigh 文章地址&#xff1a;…

【每日一题】52.20个机器学习问题 2 (模型部署、实践流程和应用问题)

在上一篇《20个机器学习问答题》中&#xff0c;问题主要围绕机器学习的基础概念和理论知识。 这次&#xff0c;本篇内容针对机器学习的实践和应用继续提出了20个不同的问题。【点击跳转原文】 在实际应用中&#xff0c;机器学习模型的建立流程是怎样的&#xff1f; 机器学习模…