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

仕么是Transformer以及工作原理和架构

Transformer 是一种革命性的**深度学习架构**,由 Google 团队在 2017 年论文《Attention is All You Need》中提出。它彻底改变了自然语言处理(NLP)领域,并逐渐扩展到计算机视觉、语音识别等多模态任务。其核心创新在于**完全依赖自注意力机制(Self-Attention)**,摒弃了传统的循环(RNN/LSTM)或卷积(CNN)结构,实现了高效的并行计算与强大的长距离依赖建模能力。

 

---

 

### **一、核心设计目标**

1. **解决 RNN 的瓶颈**:  

   - RNN 无法并行处理序列(必须逐词计算),且难以捕捉长距离依赖。

2. **提升计算效率**:  

   - 利用自注意力机制实现序列的全局并行计算。

3. **增强语义理解**:  

   - 通过注意力权重动态学习词与词之间的关联强度。

 

---

 

### **二、Transformer 核心架构**

Transformer 由 **编码器(Encoder)** 和 **解码器(Decoder)** 堆叠而成(原始论文中均为 6 层)。以下是其关键组件:

 

#### **1. 输入嵌入(Input Embedding)**  

   - 将输入词(如 "apple")转换为稠密向量(如 512 维)。

   - **添加位置编码(Positional Encoding)**:  

     - 因为 Transformer 没有循环或卷积结构,需显式注入序列顺序信息。

     - 公式:  

       $$PE_{(pos,2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$  

       $$PE_{(pos,2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$  

     - 其中 `pos` 是位置,`i` 是维度索引。

 

#### **2. 自注意力机制(Self-Attention)**  

   - **核心思想**:每个词通过加权聚合所有词的信息来更新自身表示,权重由相似度决定。  

   - **计算步骤**:  

     1. **生成 Q, K, V 矩阵**:  

        - 输入嵌入 $X$ 乘以可训练矩阵 $W^Q, W^K, W^V$,得到 **Query(查询)**、**Key(键)**、**Value(值)**。  

        $$Q = X W^Q, \quad K = X W^K, \quad V = X W^V$$  

     2. **计算注意力分数**:  

        - $Q$ 与 $K$ 点积,衡量词与词之间的相关性。  

        $$\text{Scores} = Q K^T$$  

     3. **缩放与 Softmax**:  

        - 缩放(除以 $\sqrt{d_k}$,防止梯度消失),再 Softmax 归一化为概率分布。  

        $$\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V$$  

 

   - **多头注意力(Multi-Head Attention)**:  

     - 并行运行多个自注意力机制(如 8 个头),捕获不同子空间的语义关系。  

     - 结果拼接后线性变换:  

       $$\text{MultiHead} = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O$$  

 

#### **3. 残差连接与层归一化(Add & Norm)**  

   - 每层的输出:`LayerNorm(X + Sublayer(X))`  

   - **残差连接**:缓解梯度消失,保留原始信息。  

   - **层归一化**:稳定训练过程。

 

#### **4. 前馈神经网络(Feed-Forward Network)**  

   - 每个注意力层后接一个全连接网络:  

     $$\text{FFN}(x) = \text{ReLU}(xW_1 + b_1)W_2 + b_2$$  

   - 作用:引入非线性变换,增强模型表达能力。

 

#### **5. 解码器(Decoder)的特殊设计**  

   - **掩码自注意力(Masked Self-Attention)**:  

     - 预测第 `t` 个词时,只能看到前 `t-1` 个词(防止信息泄露)。  

   - **编码器-解码器注意力(Encoder-Decoder Attention)**:  

     - 解码器的 `Q` 来自自身,`K` 和 `V` 来自编码器输出,实现跨语言对齐(如翻译中对齐源语与目标语)。

 

---

 

### **三、Transformer 工作流程示例(以机器翻译为例)**

1. **编码器处理源序列**(如英文句子):  

   - 输入词嵌入 + 位置编码 → 多头自注意力 → 前馈网络 → 输出上下文向量。  

2. **解码器生成目标序列**(如中文句子):  

   - 输入:已生成词(起始符 `<sos>`) + 位置编码。  

   - **步骤**:  

     - **掩码自注意力** → **编码器-解码器注意力**(关联源语信息)→ **前馈网络** → 线性层 + Softmax 输出下一个词概率。  

   - 重复直至生成结束符 `<eos>`。

 

---

 

### **四、为何 Transformer 如此强大?**

| **特性** | **优势** |

|-------------------|-------------------------------------------------------------------------|

| **并行计算** | 自注意力可同时处理整个序列,大幅提升训练速度(远超 RNN)。 |

| **长距离依赖** | 任意两个词的关联直接计算,不受序列长度限制(解决了 RNN 的梯度消失问题)。 |

| **多头注意力** | 从不同子空间学习多样化的语义关系(如语法结构、指代关系)。 |

| **可扩展性** | 通过堆叠更多层和增大隐藏维度,构建超大规模模型(如 GPT-3、BERT)。 |

 

---

 

### **五、Transformer 的变体与应用**

1. **仅编码器模型(Encoder-Only)**:  

   - **任务**:文本分类、命名实体识别(NER)。  

   - **代表**:BERT、RoBERTa。  

2. **仅解码器模型(Decoder-Only)**:  

   - **任务**:文本生成(如故事、代码)。  

   - **代表**:GPT 系列、LLaMA、ChatGPT。  

3. **编码器-解码器模型**:  

   - **任务**:机器翻译、摘要生成。  

   - **代表**:T5、BART。  

4. **视觉 Transformer(ViT)**:  

   - 将图像分块为序列,直接用 Transformer 处理,媲美 CNN。

 

---

 

### **六、图解 Transformer 架构**

```mermaid

graph LR

A[输入序列] --> B[嵌入层 + 位置编码]

B --> C[编码器层 x N]

C -->|多头自注意力| D[Add & Norm]

D --> E[前馈网络]

E --> F[Add & Norm]

F --> G[编码器输出]

G --> H[解码器层 x N]

H -->|掩码自注意力| I[Add & Norm]

I -->|编码器-解码器注意力| J[Add & Norm]

J --> K[前馈网络]

K --> L[Add & Norm]

L --> M[线性层 + Softmax]

M --> N[输出序列]

```

 

---

 

### **总结**

Transformer 的核心是通过**自注意力机制**动态学习序列中元素的依赖关系,结合**位置编码**保留顺序信息,利用**残差连接**和**层归一化**保障训练稳定性。其设计打破了序列建模的传统范式,成为当代大语言模型(如 GPT-4、Claude)的基石,并持续推动 AI 技术的边界。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/257246.html

相关文章:

  • 人工智能、机器人最容易取哪些体力劳动和脑力劳动
  • MySQL学习(1)——基础库操作
  • C++智能指针编程实例
  • Redis-CPP 5大类型操作
  • C#Halcon从零开发_Day14_AOI缺陷检测策略1_Bolb分析+特征分析_饼干破损检测
  • Kotlin 中为什么没有静态变量和静态方法—不用static?
  • 鸿蒙 Column 组件指南:垂直布局核心技术与场景化实践
  • Pandas 数据清洗
  • 端侧调用云数据库获取业务数据
  • 【Datawhale组队学习202506】YOLO-Master task03 IOU总结
  • 从iPSC到成熟细胞,纳米生物材料如何当“向导”?
  • 【大模型微调】6.模型微调实测与格式转换导出
  • 核心概念解析:AI、数据挖掘、机器学习与深度学习的关系
  • Linux(3)
  • 数学:初步了解什么是“向量”
  • HarmonyOS NEXT端侧工程调用云侧能力实现业务功能
  • 扫雷中的数学原理
  • ToolsSet之:歌词编辑器
  • 【期末速成】编译原理
  • 【期末笔记】高频电子线路
  • 从零开始手写redis(16)实现渐进式 rehash map
  • 云侧工程云函数开发
  • 测试工程师实战:用 LangChain+deepseek构建多轮对话测试辅助聊天机器人
  • Effective C++学习笔记
  • DeepSeek15-揭密模型上下文协议(MCP)
  • [学习] C语言<string.h>中字符串函数全解析
  • java专题漏洞总结 + 靶场练习
  • 开源 python 应用 开发(二)基于pyautogui、open cv 视觉识别的工具自动化
  • 关于程序的基本要素的详细讲解(从属GESP一级内容)
  • 端侧调用云存储实现头像存储