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

【Transformer】模型输出模块处理

目录

  • 输出处理模块步骤
    • 1. 交叉注意力后的输出向量
    • 2. 线性变换(投影)
    • 3. Softmax 操作
    • 4. 选择最大概率的单词
    • 5. 输出词并进入下一轮预测
    • 总结:
  • 线性变换详解
    • 1. 交叉注意力后的输出向量
    • 2. 线性层的参数
    • 3. 线性变换的计算
    • 4. Softmax 转换为概率
    • 示例
    • 5. 线性层的作用

输出处理模块步骤

下方图像中,红框内即模型输出处理模块

在这里插入图片描述

在 Transformer 解码器中的 交叉注意力 后,得到的每个目标词的向量表示将用于生成下一个词的预测。为了从这些向量表示中选择概率最高的单词,通常会经过以下几个步骤:

1. 交叉注意力后的输出向量

经过交叉注意力(Cross Attention)后,解码器得到的每个目标词的向量表示包含了目标语言的上下文信息(来自解码器的自注意力)以及源语言的上下文信息(来自编码器的输出)。这些向量是未经过激活的原始表示

2. 线性变换(投影)

接下来,解码器中的每个目标词向量(经过交叉注意力后的输出)将通过一个 线性变换 投影到词汇表的维度上。具体来说,解码器的输出会经过一个 线性层,将每个词的向量表示从模型的维度(通常是 d_model)映射到词汇表的维度大小,即 V(词汇表的大小)。

假设:

  • d_model 是解码器中词向量的维度(通常是 512 或 1024)。
  • V 是词汇表的大小,例如,假设词汇表中有 10,000 个单词。

经过线性变换后,解码器的输出会被投影到一个长度为 V 的向量。这个向量的每个元素表示模型对词汇表中每个词的原始预测得分,也就是 logits

假设 d_model = 512,词汇表大小 V = 10,000,句子长度 T = 6,那么交叉注意力的输出会是 (6, 512)。经过线性变换后,得到的所有 logits 构成的矩阵的维度是 (6, 10,000),其中每行的 logits 是一个时间步上的词汇表分布

所以预测下一个词,就得选择得到的 logits 矩阵中的最后一个时间步中V维向量中最高的概率

3. Softmax 操作

为了将 logits 转换为概率分布,通常会使用 softmax 函数。Softmax 会将 logits 向量的每个元素转换为一个介于 0 和 1 之间的概率值,并且所有概率之和为 1。

假设 logits 向量是:

logits = [ 2.3 , − 0.5 , 1.1 , 3.5 , …   ] \text{logits} = [2.3, -0.5, 1.1, 3.5, \dots] logits=[2.3,0.5,1.1,3.5,]

softmax 操作会把这个 logits 向量转换为一个概率分布:

probabilities = [ P ( word 1 ) , P ( word 2 ) , P ( word 3 ) , P ( word 4 ) , …   ] \text{probabilities} = [P(\text{word}_1), P(\text{word}_2), P(\text{word}_3), P(\text{word}_4), \dots] probabilities=[P(word1),P(word2),P(word3),P(word4),]

其中,( P ( word i P(\text{word}_i P(wordi) ) 是词汇表中第 (i) 个词的预测概率。

4. 选择最大概率的单词

完成 softmax 后,你将得到一个包含所有词汇表单词的概率分布。然后,解码器会选择概率最高的单词作为下一个生成的词。

如果 softmax 输出的概率分布是:

probabilities = [ 0.02 , 0.05 , 0.01 , 0.85 , …   ] \text{probabilities} = [0.02, 0.05, 0.01, 0.85, \dots] probabilities=[0.02,0.05,0.01,0.85,]

那么,模型会选择概率值 0.85 对应的词(在这个例子中是第4个词)作为当前时间步的输出词。

5. 输出词并进入下一轮预测

选定的词将作为解码器的输出,并作为下一轮输入的一部分。对于序列生成任务(如机器翻译),这个过程会重复,直到遇到结束符号(如 <EOS>,表示句子的结束)为止。

总结:

  1. 交叉注意力 后得到的词向量会经过线性变换,得到一个与词汇表大小相同的 logits 向量。
  2. softmax 被应用于 logits 向量,将其转换为一个概率分布。
  3. 解码器根据概率选择下一个词(最大概率的词)。
  4. 选定的词会被作为输入传递给解码器,进行下一轮预测。

线性变换详解

在 Transformer 解码器中,线性变换的过程是通过一个 线性层 将解码器交叉注意力层的输出转换为一个与词汇表大小相同的向量。这一步称为“投影”,其目的是将解码器生成的高维向量映射到词汇表的每个单词对应的维度上。让我们更详细地看一下这个过程。

1. 交叉注意力后的输出向量

经过交叉注意力后,解码器每个时间步上的输出会包含目标语言和源语言的上下文信息。这些输出向量的维度是 d_model,通常是 512 或 1024。例如,如果句子长度是 T,那么解码器的交叉注意力输出的形状为 (T, d_model)

2. 线性层的参数

为了将解码器的输出映射到词汇表空间,线性层的权重矩阵 W_proj 的形状通常为 (d_model, V),其中:

  • d_model 是模型的隐藏层维度大小。
  • V 是词汇表的大小。

此外,线性层还包含一个偏置向量 b_proj,其长度为 V。因此,线性层的输出维度会从 (T, d_model) 映射到 (T, V)

3. 线性变换的计算

在这个过程中,每个输出向量 x 会经过如下线性变换:

logits = x ⋅ W proj + b proj \text{logits} = x \cdot W_{\text{proj}} + b_{\text{proj}} logits=xWproj+bproj

这里:

  • x x x 是交叉注意力后的输出向量,形状为 (1,d_model)
  • W p r o j W_{proj} Wproj 是线性层的权重矩阵,形状为 (d_model, V)
  • b p r o j b_{proj} bproj 是偏置项,形状为 (1,V)

最终结果 logits 的形状是 (1,V),代表对词汇表中每个词的预测分数。

4. Softmax 转换为概率

logits 输入 softmax 函数后,就能得到一个概率分布,使每个词的概率都介于 0 到 1 之间,并且所有概率之和为 1。

示例

假设 d_model = 512,词汇表大小 V = 10,000,句子长度 T = 6,那么交叉注意力的输出会是 (6, 512)。经过线性变换后,得到的 logits 矩阵的维度是 (6, 10,000),其中每行是一个时间步上的词汇表分布。

5. 线性层的作用

这个线性变换的作用是将高维向量投影到词汇表空间,使得模型的输出与特定的单词一一对应,从而能够通过 softmax 计算概率并进行词汇表中的选择。且这个线性层也是需要通过训练得到的。


http://www.kler.cn/a/390835.html

相关文章:

  • 基于迭代重加权最小二乘法的算法及例程
  • macOS解决U盘装完系统容量变小的问题
  • 2019年下半年试题二:论软件系统架构评估及其应用
  • 初探鸿蒙:从概念到实践
  • 管家婆财贸ERP BB059.银行流水导入对账
  • 关于sass在Vue3中编写bem框架报错以及警告问题记录
  • 快手,抖音IP属地怎么更改?快手抖音更改IP属地教程
  • 微服务链路追踪skywalking安装
  • 使用Matlab建立随机森林
  • 1.存储引擎:深入解析 MySQL 存储引擎与 InnoDB 文件结构
  • 【Django进阶】django-rest-framework中文文档——快速入门
  • Anaconda安装库
  • phpcms-tree(PHP无限级别分类)
  • Kafka-Eagle的配置——kafka可视化界面
  • redis十大数据类型
  • 代码训练营 day64|算法优化、带负权值图的最短路径
  • HTML DOM 简介
  • 新的服务器Centos7.6 安卓基础的环境配置(新服务器可直接粘贴使用配置)
  • display:inline-block元素之间为什么会出现间隙
  • vue3如何修改element ui input中type属性为textarea的高度
  • Linux:认识文件系统
  • Spring Boot框架的知识分类技术解析
  • 某m大厂面经1
  • 交叉编译工具链制作(RK3588用)
  • 【MATLAB代码】结合匀速运动 (CV) 和匀加速运动 (CA) 模型的EKF构造的IMM(交互式多模型)
  • 安卓属性动画插值器(Interpolator)详解