【机器学习基础】Transformer学习

一、整体流程简述

在这里插入图片描述

1. 简述

  • Transformer相对于RNN的优势是能并行

  • 训练的时候并行,预测的时候串行
    训练阶段所有encoder的正确的输入输出都是已知的,所以可以并行执行,因为我们拿ground truth进行训练,预测阶段我们并不能知道decoder会输出什么,所以只能逐个生成。
    以翻译为例,训练阶段我是知道decoder最终输出是“我爱中国”,所以decoder的【输入】在训练阶段分别为(1)起始符(2)起始符+我(3)起始符+我+爱(4)起始符+我+爱+中国,因为我们知道正确的最终输出是什么,所以这4个阶段是可以并行执行的
    但是预测阶段,我们是不知道decoder的输出的,所以我们只能decoder的输入只能逐步进行(1)起始符(2)起始符+decoder预测单词1(3)起始符+decoder预测单词1+decoder预测单词2

  • Encoder的输出:Encoder处理完输入序列后,会生成一个表示该序列的上下文向量的序列。这个上下文向量的序列会被用作Decoder的输入。
    Decoder的输入:在Decoder中,每一个时间步(或者说是每一个生成词的位置)都会有一个对应的输入。在生成第一个词时,这个输入通常是一个特殊的开始符号(比如"")。在生成后续的词时,输入则是上一个时间步生成的词。这些输入首先会被转换成一个向量(通常是通过一个词嵌入层),然后再加上位置编码(Positional Encoding)。
    Encoder-Decoder Attention:在Decoder中,每一个时间步都会计算一个注意力权重,这个权重是基于Decoder的当前状态和Encoder的所有输出计算的。具体来说,Decoder的当前状态会被用作Query,而Encoder的输出会被用作Key和Value。通过计算Query和所有Key的点积,然后应用softmax函数,就可以得到一组注意力权重。这些权重会被用来加权所有的Value,得到一个上下文向量。这个上下文向量会被用作Decoder在当前时间步的输出的一部分。


2. 简要流程

  • Encoder输入中文,使用多头注意力机制算当前序列中,每个单词对其他词语的关注程度。

  • Decoder输入英文,使用mask attention机制算当前序列中,每个单词对其他词语的关注程度。

  • 解码器mask attention生成的查询向量(Query)与编码器输出的键、值向量(Key、Value)进行Cross-Attention,目的:在生成目标序列的过程中,解码器依赖于编码器提供的全局信息,这使得解码器能够根据编码器的输出序列进行上下文关联和信息检索(根据中文输入去检索,当前英文后边最应该相连接的英文是哪一个)

  • Cross attention中的Q和K/V是两种语言,两种语言是如何关联的

  • 虽然模型不知道 “I” 和 “喜欢” 是两种不同语言的词汇,但通过语义向量表示,它能自动捕捉到词语之间的语义相似性。原因有以下几点:
    1.预训练嵌入和共享语义空间:
    现代神经机器翻译模型通常在多语言语料上进行训练,编码器学到的中文向量表示和解码器学到的英文向量表示会共享一个语义空间。这个语义空间的构建方式是基于大规模双语数据集的训练,模型学会了在不同语言之间找到共同的语义表示。例如,在语义空间中,“I” 和 “我” 可能是相近的,“like” 和 “喜欢” 也是相近的。
    2.多层网络处理上下文:
    编码器和解码器都由多层注意力机制组成,这些层次允许模型逐步理解句子的结构和含义。尽管语言不同,模型能够从上下文中提取出句子的语义核心。例如,如果输入句子中存在“喜欢”这个动作动词,而当前输出部分是关于主语 “I”,模型会在高维语义空间中识别出它们之间的联系。
    3.注意力机制只关注向量的相似度:
    注意力机制计算的是查询向量(Q)和键向量(K)之间的相似度,而不关心它们属于哪种语言。模型学习到的语言之间的对应关系,允许 “I” 和 “喜欢” 这类不同语言的词汇在注意力中有较高的关联。

  • 通过上述注意力机制,解码器得到一个加权的上下文向量,该向量综合了与源句中各个词的相关性。之后,解码器利用这个上下文向量和前文生成部分,通过线性变换和 Softmax 生成目标语言中的下一个词的概率分布

3. 详细流程

第一步:获取输入句子的每一个单词的表示向量 X,X由单词的 Embedding(Embedding就是从原始数据提取出来的Feature) 和单词位置的 Embedding 相加得到
(词向量和位置编码相加,得到输入的Embedding )
在这里插入图片描述
一个编码器接收向量列表作为输入,接着将向量列表中的向量传递到自注意力层进行处理,对每个单词都输出一个向量传递到前馈神经网络中,将输出结果传递给下一个编码器

(1). 编码器

输出是搜索任何一个东西,能得到推荐的列表

将所有输入序列映射到一个抽象的连续表示,其中包含了整个序列的学习信息
编码器中的多头注意力应用了一种特定的注意力机制,称为自注意力
允许模型将输入中的每个单词与输入中的其他单词关联起来。
在这里插入图片描述
为了实现自注意力,我们将输入分别送入个不同的全连接层,以创建查询向量、键向量和值向量
在这里插入图片描述
查询和键经过点积矩阵乘法产生一个分数矩阵。分数矩阵确定了一个单词应该如何关注其他单词
在这里插入图片描述
因此,每个单词都会有一个与时间步长中的其他单词相对应的分数。分数越高,关注度越高。这就是查询如何映射到键的
在这里插入图片描述
接下来,通过将查询和键的维度开平方来将得分缩放。这样可以让梯度更稳定,因为乘法可能会产生爆炸效果
在这里插入图片描述
较高的得分会得到增强,而较低的得分对缩放后的得分进行softmax计算,得到注意力权重,从而获得0到1之间的概率值。
在这里插入图片描述
这让模型在关注哪个词时更有信心。接着,将注意力权重与值向量相乘,得到输出向量。较高的softmax得分会保留模型认为更重要的词的值
在这里插入图片描述
将输出向量输入线性层进行处理
在这里插入图片描述
为了使这个计算成为多头注意力计算,需要在应用自注意力之前将查询、键和值分成n个向量。分割后的向量然后分别经过相同的自注意力过程
每个自注意力过程称为一个头。每个头都会产生一个输出向量
在这里插入图片描述
这些向量在经过最后的线性层之前被拼接成一个向量,每个头都会学到不同的东西,从而为编码器模型提供更多的表达能力
在这里插入图片描述
总之多头注意力是一个模块,用于计算输入的注意力权重,并生成-个带有编码信息的输中向量指示序列中的每个词如何关注其他所有
接下来,将多头注意力输出向量加到原始输入上。这叫做残差连接。
在这里插入图片描述
残差连接的输出经过层归一化,归一化后的残差输出被送入点对点前馈网络进行进一步处理。点对点前馈网络是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值