论文:https://arxiv.org/abs/1706.03762
理解:
位置编码之后,还要生成QKV向量,在传递到多头注意力
定义:
Transformer模型一般由编码器(Encoder)和解码器(Decoder)两部分组成,每个部分都有不同的功能,因此在不同的任务中可能会选择使用其中一个部分,或者同时使用两个部分。
-
只使用编码器:
- 当你的任务是单一输入序列到输出序列的映射时,你可以只使用编码器部分。例如,对于文本分类、文本生成、语言建模等任务,你可以使用Transformer的编码器来处理输入文本。
- 编码器可以将输入序列编码成一个固定维度的表示,这个表示可以用于后续的任务,如文本分类。
-
使用编码器和解码器:
- 当你的任务涉及将一个序列映射到另一个序列时,比如机器翻译、文本摘要、对话生成等,通常需要同时使用编码器和解码器。
- 编码器负责将源序列编码成一个上下文感知的表示,然后解码器使用这个表示来生成目标序列。
- 在这种情况下,编码器和解码器之间会传递信息,帮助模型理解输入序列并生成合适的输出序列。
编码器(Encoder):
-
输入嵌入(Input Embedding):
- 输入序列(比如文本中的单词)被转换成向量,将输入的文本,每个单词都被映射为一个多维度的实数向量
- 输入是几维?一维
- 然后根据qkv 变成三个不同的矩阵,输入的多头注意力机制里
-
-
位置编码(Positional Encoding):
- 因为Transformer没有递归结构或卷积结构,它无法识别序列中元素的位置。位置编码通过加入一个和嵌入向量维度相同的位置向量到嵌入向量中,赋予模型位置信息。
-
-
多头注意力机制(Multi-Head Attention):
- 在这一步,模型会通过注意力机制关注输入序列中不同位置的信息。"多头"意味着模型会以不同的方式,多次并行计算注意力,以捕获不同的上下文信息。
-
Add & Norm:
- 这一步包含了残差连接(直接将输入加到子层的输出)和层归一化(对输出进行归一化处理)。这有助于防止深层网络中的梯度消失问题。
-
前馈网络(Feed Forward):
- 经过注意力层处理后的输出会传递到一个前馈神经网络中,这个网络对每个位置的向量进行独立处理。
-
编码器的这些步骤会重复多次(Nx次),每次都会对信息进行更深层次的抽象。
解码器(Decoder):
-
输出嵌入(Output Embedding)和位置编码:
- 解码器接收的输入通常是之前已经产生的输出序列,这里的“Outputs”是指在生成序列时,已经预测出来的部分(在序列生成任务中,如机器翻译,这些输出是部分翻译结果)。在训练时,这些输出会通过一个向右偏移来确保预测时只能看到先前的输出。
-
位置编码
在Transformer模型中,位置编码(Positional Encoding)是用来为输入序列中的每个位置添加一些额外的信息,以便模型能够理解输入序列中元素的相对位置。由于Transformer没有像循环神经网络(RNNs)或卷积神经网络(CNNs)那样的内置顺序信息,因此需要一种方法来表示输入序列中元素的位置。
位置编码是通过在输入嵌入向量中添加一些额外的数值来实现的。通常,这些数值是根据一些特定的函数计算得到的,以便捕捉元素的位置信息。一种常见的位置编码方法是使用正弦和余弦函数。具体而言,对于序列中的每个位置i和每个维度j,位置编码的计算方式如下:
疑问
- Embedding和Encoding的区别
嵌入:把一个单词或者一个句子,映射成一个多维的实数向量,以便计算机可以更方便地处理和比较句子的语义信息
编码:把一个单词或者一个句子,通过某个模型(比如循环神经网络或Transformer)转换为隐藏表示,以便模型能够理解句子中的结构和语义。Transformer模型通过位置编码(Positional Encoding)的公式来实现对输入序列的编码,以捕捉元素在序列中的相对位置信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!