当前位置: 首页 > news >正文

【深入浅出】深入浅出transformer(附面试题)

本文的目的是为了帮助大家面试transformer,会结合我的面试经历以及看法去讲解transformer,并非完整的技术细致讲解,介意请移步。

结构

提到transformer网络模型,大家脑海中是否有这张图呢?
transformer
这是网络结构中经典的编解码网络结构。
编码器:由𝑁层编码层组成,每层对输入序列进行编码。
解码器:也由𝑁层解码层组成,并结合编码器输出生成最终输出序列。

编码器

位置编码

可以看到,输入到编码其中,首先经过了一个位置编码,这个位置编码是怎么设计的?有什么用?

公式
在这里插入图片描述

  • 有什么用?
    众所周知,transformer结构依赖于自注意力机制,可以并行的计算整个序列的关系,但是他没有固有的顺序意识,这时候就需要位置编码了。
  • 怎么设计的?
    位置编码是一组具有固定模式的向量,其计算方式主要是基于正弦和余弦函数。句子长度为n,维度索引为i,总维度为d,通过这种方法确保不同位置的编码值是唯一的,并且在维度上保留平滑的变化。
  • 作用?
    周期性变化:正弦和余弦的周期性确保了相邻词的编码差异较小,随着位置增大变化逐渐减缓,适应长距离依赖。
    平滑的位置信息:正弦和余弦的值随着位置的变化以非线性的方式增加,使模型能够学习词的相对位置信息和词序关系。
    距离敏感性:较近的词之间的编码相似度较高,而远距离的词编码差异较大,便于捕捉长短期依赖。

注意力机制(attention)

在这里插入图片描述
输入内容经过位置编码后,ctrl +c,v复制成了三份完全一样的,作为QKV。如何理解QKV呢,通俗易懂的讲,Q为搜索关键字,K为搜索相关的分类,V为搜索出的结果,通过QK计算得到权重,然后V得到注意力的结果。请添加图片描述
注意力机制的公式是这样的:
在这里插入图片描述
是不是向上面讲的QK*V的一个逻辑?那么又聪明的小朋友可能要问了,下面的这个dk是做什么的(高频考点)
请参考我的这篇文章
【每日一问】transformer中的self-attention中为什么要除以dk?
讲完了注意力机制,那么多头是什么?

多头注意力机制

它将输入的注意力计算拆分为多个“头”,每个头分别计算一组不同的 Q、K、V 向量,并在每个头上并行计算注意力。然后将所有头的输出拼接在一起,再通过线性变换层生成最终的注意力输出。
太官方了?
别急,通俗易懂的讲:
同一份内容,经过不同的处理,能够得到不同的结果。多头注意力中,每个头是一注意力机制,独立的计算词与词之间的相似度,每个头关注不同的细节信息,帮助模型更全面地理解句子中的含义
举例我们有三个头:

  • 第一个头可能关注词之间的空间关系,比如“猫”在哪里坐。
  • 第二个头可能关注词之间的时间顺序,比如“先有猫再有沙发”。
  • 第三个头可能关注词的动作关系,比如“猫是在沙发上‘坐’的”

多头注意力机制就像给模型多副“眼镜”,每副眼镜看到的角度不一样,最终合成的结果让模型能从多方位理解句子。
这样,我们讲完了编码器,接下来讲解解码器

解码器

可以从网络结构图中看出,解码器结构与编码器结构几乎是相同的。但是有两点不同。

  1. masked是什么?
    masked是transformer中的蒙版。对于解码器来说,不同于以往的时序模型RNN中的解码器,它能够阅读到句子的整个上下文内容,所以在解码器中,需要一些特殊的操作对句子进行处理。
    例如在生成句子 “我要吃饭”,生成 “要 时,只能基于 “我” 来生成,而不能提前知道 “吃饭”,如果模型知道了后面的内容,不就相当于透题了吗?这样模型的损失函数无法计算,自然结果会很烂。

  2. masked是如何做的?
    在解码器的 masked self-attention 中,使用了一个“掩码矩阵”来阻止模型访问未来的信息。
    在这里插入图片描述
    在这个矩阵中,1 表示可以看到对应位置的词,0 表示不能看到。因此,在生成第三个词时,模型只能关注到第一个和第二个词,而不能看到第四个词。
    他的效果如下所示:
    请添加图片描述
    通过masked机制,强制保证解码器不偷看未来的答案,确保结果每次都是基于已经生成的词语。
    底层实现:其实这里masked的底层实现是给不是1的地方给了个很大的负数。还记得attention是怎么计算的吗?是不是有个softmax函数?在softmax函数中,x为很大的负数的时候,经过softmax处理后结果为0。这就是处理方式。

  3. 编码器对解码器的连线是什么?
    其实就是多头注意力中的K和V啦。解码器传递过来的是Q,然后通过这种方式计算注意力机制。
    请添加图片描述
    这样来看是不是就好很多了呢?

讲解完啦,接下来看看这些面试题能不能答上来吧!

面试题

  1. 编码器中距离编码是什么?
  2. 讲解一下注意力机制。
  3. 多头注意力是什么?作用是什么?有什么优点?
  4. 编码器和解码器有什么不同?
  5. masked是什么机制?如何实现?
  6. 简单讲一下Transformer中的残差结构以及意义。
  7. Encoder端和Decoder端是如何进行交互的?
  8. 你还了解哪些关于位置编码的技术,各自的优缺点是什么?
http://www.lryc.cn/news/473442.html

相关文章:

  • 苹果重大更新,macOS与iOS同时推出更新!功能真好用
  • 刘艳兵-DBA016-在您的数据库中,SALES表存在于SH用户中,并且启用了统一审计。作为DBA,您成功执行了以下指令:
  • 力扣题目解析--整数反转
  • 净水前置需要安装吗?
  • 在深度学习研究方向有哪些创新点
  • YOLOv11改进策略【卷积层】| 2024最新轻量级自适应提取模块 LAE 即插即用 保留局部信息和全局信息
  • 工作转型与个人突破提升:如何在社会浪潮中激流勇进
  • mongodb:增删改查和特殊查询符号手册
  • 你的Mac book多久没有清洁键盘屏幕了,Mac清洁好帮手来了
  • ANA基因组数据库(ANAgdb)
  • leetcode 704 二分查找
  • Vue学习笔记(十一)
  • ABAP进阶学习1:动态内表1-通过系统表LVC_T_FCAT类型定义内表
  • 【Vispy库】一个用于高性能交互式2D/3D数据可视化库 Python库
  • 为什么 C 语言数组是从 0 开始计数的?
  • matlab线性度计算程序
  • 为什么NMOS管比PMOS管更受欢迎?
  • 【论文复现】短期电力负荷
  • pytest脚本常用的执行命令
  • OpenCv入门
  • 超详细的flex教程(面试必考)
  • C++的输入与输出
  • 上海剧某文化传播有限公司与喜某(上海)网络科技有限公司、上海喜某科技有限公司侵害著作权及不正当竞争纠纷案
  • 【c++篇】:模拟实现string类--探索字符串操作的底层逻辑
  • springboot配置logback.xml遇到的几个问题
  • MySQL 5.7与MySQL 8.0对比
  • 【代码随想录Day55】图论Part07
  • 软考在即!这些注意事项你提前了解!
  • CMake知识点
  • git ls-remote