今日推荐:大数据传输中的二进制加密方案文章链接:https://cloud.tencent.com/developer/article/2465816
这篇文章深入浅出地探讨了数据加密技术,包括对称加密、非对称加密和哈希算法,并通过实际代码示例展示了AES加密的实现过程。同时,文章还讨论了数据传输中的安全性问题,提出了不依赖加密算法的数据传输安全方案
目录
Transformer的输入和输出流程
输入顺序
输出顺序
具体例子
输入流程
输出流程
解码器怎样使用编码器的输出以及先前生成的输出序列来生成目标序列的下一个单词
例子:使用Transformer模型将"Hello, how are you?"翻译成法语
1. 编码器的输出
2. 解码器的输入
3. 解码器的第一个时间步
4. 自注意力机制
5. 编码器-解码器注意力机制
6. 前馈网络
7. 预测下一个单词
8. 迭代过程
矩阵运算
Transformer的输入和输出流程
输入顺序
- 整句话输入:在Transformer模型中,输入通常是整句话作为一个序列。这句话首先会被分词器(tokenizer)处理,转换成一系列的令牌(tokens),这些令牌可能是单词、子词或字符。然后,每个令牌会被映射到一个唯一的ID,这些ID会形成一个序列,作为模型的输入。
- 嵌入层:输入序列的每个令牌ID会被转换成对应的嵌入向量,这些嵌入向量会包含词嵌入(Word Embedding)和位置编码(Positional Encoding),以提供模型关于单词顺序的信息。
- 编码器(Encoder):嵌入后的序列会通过编码器层,编码器层由多个相同的层组成,每层包括自注意力(Self-Attention)机制和前馈网络(Feed-Forward Network)。编码器处理整个序列,并且是并行处理的,这意味着整个序列的所有令牌同时被处理。
输出顺序
- 解码器(Decoder):对于生成任务,如机器翻译或文本生成,编码器的输出会被送入解码器。解码器也是由多个相同的层组成,每层包括自注意力机制、编码器-解码器注意力机制,以及前馈网络。不同于编码器,解码器的处理是自回归的,即每一步的输出依赖于前一步的输出。
- 逐个词语生成:在解码器中,模型通常从一个特殊的起始令牌(如<bos>)开始,然后逐步生成下一个令牌,直到遇到结束令牌(如<eos>)。每一步的输出都是基于之前所有步骤的累积信息。这个过程是串行的,即模型在生成下一个词之前必须等待当前词的计算完成。
具体例子
假设我们要使用Transformer模型将英文句子翻译成法文。
输入流程
- 分词(Tokenization):
- 输入句子:"Hello, how are you?"
- 经过分词器处理后,转换成令牌序列:["Hello", ",", "how", "are", "you", "?"]。
- 添加特殊令牌:
- 在序列的开始添加起始令牌(例如
<s>),在末尾添加结束令牌(例如 </s>)。 - 处理后的序列:["<s>", "Hello", ",", "how", "are", "you", "?", "</s>"]。
- 令牌到ID的映射:
- 每个令牌被映射到一个唯一的ID。
- 例如:{"<s>": 1, "Hello": 421, ",": 16, "how": 537, "are": 757, "you": 999, "?": 1120, "</s>": 2}。
- 嵌入层(Embedding):
- 每个ID被转换成一个固定维度的向量(嵌入)。
- 同时,添加位置编码(Positional Encoding),以保留序列中单词的位置信息。
- 编码器(Encoder):
- 输入序列通过编码器层,每层包含自注意力机制和前馈网络。
- 编码器并行处理整个序列,输出一个编码后的序列。
输出流程
- 解码器(Decoder):
- 起始令牌:在解码器的输入序列开始处添加起始令牌(例如
<s>)。 - 初始序列:["<s>"]。
- 解码器的第一个时间步:
- 模型接收到第一个令牌 "<s>",并结合编码器的输出。
- 通过自注意力机制和编码器-解码器注意力机制,预测下一个令牌。
- 预测结果:"Bonjour"(假设这是模型预测的输出)。
- 逐个词语生成:
- 将预测的令牌 "Bonjour" 添加到序列中,形成新的输入序列:["<s>", "Bonjour"]。
- 重复上述过程,模型继续预测下一个令牌,直到遇到结束令牌 "</s>"。
- 结束条件:
- 当模型预测出结束令牌 "</s>" 时,生成过程结束。
- 最终输出序列:["Bonjour", ",", "comment", "ça", "va", "?", "</s>"]。
- ID到令牌的映射:
- 后处理:
- 对输出序列进行后处理,如去除特殊令牌,得到最终的翻译结果:"Bonjour, comment ça va ?"。
解码器怎样使用编码器的输出以及先前生成的输出序列来生成目标序列的下一个单词
在Transformer模型中,解码器使用编码器的输出以及先前生成的输出序列来生成目标序列的下一个单词。这个过程涉及到自注意力机制和编码器-解码器注意力机制
例子:使用Transformer模型将"Hello, how are you?"翻译成法语
1. 编码器的输出
假设编码器处理输入句子"Hello, how are you?"后,得到了编码信息矩阵C。这个矩阵C的维度是[batch_size, src_len, d_model],其中src_len是源句子的长度,d_model是模型的维度。
2. 解码器的输入
解码器的输入开始于一个特殊的起始令牌,例如<s>。在每一步,解码器都会接收两个输入:当前的输出序列(包括起始令牌)和编码器的输出C。
3. 解码器的第一个时间步
- 输入序列:["<s>"](假设
<s>的嵌入向量是[0.1, 0.2, ...]) - 编码器的输出:
C(源句子的编码信息)
4. 自注意力机制
解码器的第一个自注意力层会使用掩码来防止未来信息的泄露。这个掩码是一个上三角矩阵,使得模型在预测当前单词时不能看到未来的单词。
- 自注意力计算:计算
["<s>"]的自注意力,但由于掩码的存在,只有<s>自己可以看到自己,没有其他信息。
5. 编码器-解码器注意力机制
解码器的第二个注意力层会使用编码器的输出C来获取源句子的信息。
- 编码器-解码器注意力计算:计算
["<s>"]与C之间的注意力,这允许解码器根据整个源句子的信息来预测下一个单词。(多头是并行的)
6. 前馈网络
经过自注意力和编码器-解码器注意力层后,解码器的输出会通过一个前馈网络,这个网络由两个线性层和一个激活函数组成。
7. 预测下一个单词
最后,解码器的输出会被传递到一个线性层,然后通过softmax函数转换成概率分布,模型选择概率最高的单词作为下一个输出。
- 预测:假设模型预测下一个单词是"Bonjour"。
8. 迭代过程
这个过程会迭代进行,每一步的输出(包括预测的单词和起始令牌)都会成为下一步的输入,直到生成结束令牌"</s>"。
矩阵运算
在每一步中,矩阵的运算包括:
- 自注意力:
Q * K^T(查询和键的点积),然后应用softmax和值V。 - 编码器-解码器注意力:
Q * K^T(查询来自解码器,键和值来自编码器),然后应用softmax和值V。 - 前馈网络:两个线性层
W1 * X + b1和W2 * X + b2,中间有一个激活函数。
这个迭代过程和矩阵运算的详细实现可以在PyTorch的Transformer模型中找到。每一步的输出都是基于当前的上下文信息和先前的输出来生成的,这就是Transformer模型如何逐步构建输出序列的方式。