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

BERT 的 12 层维度变化详解:从输入到输出的逐步剖析

BERT 作为当前自然语言处理领域中的经典预训练模型,一直备受开发者们的青睐。许多研究者对 BERT 模型架构感兴趣,但其中的层级结构和每层的维度变化可能会显得有些复杂。在本文中,我们将对 BERT 的 12 层 Transformer 进行详细剖析,帮助大家理解从输入到输出每一层的维度变化。

BERT-base 模型的基本信息

BERT-base 是 BERT 模型的一种常见变体,具有以下特点:

  • 12 层 Transformer 编码器(即 12 层网络结构)。

  • 每一层包含 12 个注意力头(Attention Heads)

  • 隐藏层的维度为 768

  • 总参数量大约为 1.1 亿

BERT-base 的模型架构可以理解为堆叠的 12 层 Transformer 编码器,每一层负责不同层级的特征学习。下面,我们将以一个输入句子为例,逐步介绍每一层的维度变化。

输入示例

假设输入句子为:

[CLS] I love programming [SEP]

我们将剖析这个句子从输入经过 BERT-base 模型到输出的每一个步骤的维度变化。

1. 输入 Token 化

  • 输入句子首先经过 WordPiece Tokenizer 进行标记化(Tokenization)。

  • 标记化后的句子包含以下标记:[CLS], I, love, programming, [SEP],共 5 个词元(tokens)

  • 因此,标记化后的输入的维度是 (5,),每个元素表示一个词元的索引。

2. 嵌入层(Embedding Layer)

BERT 使用 词嵌入(Word Embedding)位置嵌入(Position Embedding)类型嵌入(Token Type Embedding),并将它们相加得到最终的输入嵌入:

  • 每个词元会被嵌入到一个大小为 768 维 的向量空间中。

  • 所以,嵌入后的输入维度变为:

    (5, 768),表示 5 个词元,每个词元被编码为 768 维的向量。

3. Transformer 编码器

BERT 的 Transformer 编码器由 12 层相同的结构组成,每一层包括 多头注意力前馈网络(Feed-Forward Network, FFN)

3.1 每层 Transformer 编码器的维度变化

每一层 Transformer 编码器内部的处理流程如下:

1. 多头自注意力层(Multi-Head Self Attention Layer)

  • 输入维度(5, 768)

  • 多头注意力:有 12 个注意力头(Heads),每个注意力头的维度是 64,因为 768 / 12 = 64

    • 输入被线性变换为 查询(Q)键(K)值(V) 向量。

    • 维度变化为:(5, 768) → (5, 12, 64)(12 个注意力头,每个头有 64 维)。

  • 拼接注意力头的输出:将 12 个注意力头的输出拼接后,维度为 (5, 768)

  • 线性层输出:通过一个线性层,保持维度为 (5, 768)

2. 残差连接和 Layer Normalization

  • 残差连接:注意力的输出与输入相加,保持维度为 (5, 768)

  • Layer Normalization:经过 Layer Normalization 后,维度仍然是 (5, 768)

3. 前馈网络(Feed-Forward Network)

  • 前馈网络包括两个全连接层:

    • 第一个全连接层:将 768 维的输入扩展到 3072 维,即 (5, 768) → (5, 3072)

    • 使用激活函数(如 GELU),然后通过第二个全连接层将维度缩小回 768 维,即 (5, 3072) → (5, 768)

4. 残差连接和 Layer Normalization

  • 前馈网络的输出与输入相加,维度保持为 (5, 768)

  • 经过 Layer Normalization,维度仍为 (5, 768)

3.2 经过 12 层 Transformer 编码器

  • 每一层的输入和输出的维度都是 (5, 768)

  • 经过 12 层 Transformer 编码器后,最终的输出维度仍然是 (5, 768)

4. 输出层

BERT 的输出可以用于不同类型的任务:

  • 分类任务(如情感分析):取 [CLS] 标记对应的最后一层输出向量 (1, 768),然后传递到一个分类层进行预测。

  • 序列标注任务(如命名实体识别):使用每个词元对应的最后一层输出向量 (5, 768) 进行预测。

总结

  • 输入嵌入层:输入的句子经过嵌入,得到维度为 (5, 768) 的向量。

  • Transformer 编码器:每层 Transformer 都包含 多头注意力前馈网络残差连接Layer Normalization,每一层的输入和输出维度都是 (5, 768)

  • 最终输出:经过 12 层 Transformer 编码器后,输出维度仍然是 (5, 768)

通过本文的讲解,希望大家对 BERT 的 12 层 Transformer 编码器的维度变化有了更清晰的认识。如果你有其他关于 BERT 或自然语言处理的问题,欢迎在评论区留言,我们一起讨论!


http://www.kler.cn/news/368515.html

相关文章:

  • 【Anaconda】Anaconda3 下载与安装教程(Windows 11)
  • Vue 组件之间通信的多种方式汇总
  • 活着就好20241028
  • Java | Leetcode Java题解之第513题找树左下角的值
  • python实现数据库两个表之间的更新操作(模糊匹配)示例
  • 使用Python计算相对强弱指数(RSI)进阶
  • Kafka消费者故障,出现活锁问题如何解决?
  • UE材质节点arctangent2解析
  • 重学SpringBoot3-Spring WebFlux之Reactor事件感知 API
  • 机器视觉:9点标定的原理与实现
  • [专有网络VPC]ECS安全组配置案例
  • 【Python知识】一个强大的数据分析库Pandas
  • 基于Python的B站视频数据分析与可视化
  • Spring Boot框架下租房管理系统的设计与实现
  • spring-ai-alibaba下载
  • 【认知智能】编译器1
  • DataX
  • Oracle 权限相关的概念
  • Chromium HTML5 新的 Input 类型email对应c++
  • pikachu靶场-Cross-Site Scripting(XSS)
  • node学习笔记
  • Python 函数返回值之None类型
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——15.C++11(1)
  • 控制Arduino的利器-Windows Remote Arduino
  • 基于SpringCloud的WMS管理系统源码
  • 如何搭建一部引人入胜的短剧小程序