news 2026/5/6 22:25:35

动手学深度学习——BERT

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
动手学深度学习——BERT

1. 前言

前面我们已经顺着李沐这条线,逐步走到了:

  • 注意力机制

  • 自注意力

  • 使用注意力机制的 Seq2Seq

到这里,其实已经离现代 NLP 的核心模型很近了。
因为后来的很多自然语言处理模型,本质上都建立在一个关键能力之上:

如何更好地学习上下文相关的语言表示。

而在这一点上,最具代表性的模型之一,就是:

BERT(Bidirectional Encoder Representations from Transformers)

BERT 的出现,可以说彻底改变了自然语言处理中的“预训练 + 微调”范式。
它让大家意识到:

先在大规模无标注文本上学通用语言表示,再在下游任务上微调,效果会非常强。

所以这一节的重点,就是把 BERT 的核心思想真正讲清楚:

  • BERT 到底是什么

  • 它和前面的语言模型、RNN、Seq2Seq 有什么不同

  • 为什么它叫“双向”

  • 为什么它能成为一个里程碑模型


2. 什么是 BERT

BERT 的全称是:

Bidirectional Encoder Representations from Transformers

中文可以理解成:

来自 Transformer 的双向编码表示

这个名字其实已经把它的核心说出来了:

第一,Transformer

说明它的底层结构不是 RNN,而是基于自注意力的 Transformer 编码器。

第二,Bidirectional

说明它不是单向看上下文,而是双向利用上下文

第三,Representations

说明它的核心目标不是直接做某个单独任务,而是先学习高质量的语言表示。

所以你可以先把 BERT 粗略理解成:

一个基于 Transformer 编码器、能学习深层双向上下文表示的预训练语言模型。


3. BERT 为什么重要

BERT 重要,不只是因为它“效果好”,
更因为它把 NLP 的工作流彻底带到了一个新阶段。

在 BERT 之前,很多 NLP 模型往往是:

  • 针对某个具体任务单独设计

  • 从头训练

  • 很依赖任务特定结构

而 BERT 带来的思路是:

先做大规模通用预训练,再针对具体任务微调。

这样带来的好处非常明显:

3.1 通用语言知识可以复用

模型先在海量语料中学到语言规律。

3.2 下游任务不再从零开始

只需要在已有表示基础上做适配。

3.3 小数据任务也能受益

因为预训练已经学到了大量知识。

所以 BERT 不只是一个模型,
它更是一种:

预训练语言模型范式的代表


4. BERT 和前面的语言模型有什么区别

这个对比一定要讲清楚。

前面的语言模型

我们前面学过的语言模型,核心是:

根据前文预测下一个 token

这通常是单向的。

例如:

  • 从左到右预测

  • 当前词不能看到未来词

这类模型更适合做自回归生成。


BERT

BERT 不走这条路线。
它不是简单做“下一个词预测”,而是通过特殊预训练任务,让模型:

同时利用左边和右边的上下文来学习当前词的表示。

所以 BERT 更像一个:

擅长语言理解的双向预训练编码器

而不是一个标准的自回归生成器。


5. 为什么 BERT 叫“双向”

因为它在训练表示时,希望每个位置的表示都能同时看到:

  • 左边上下文

  • 右边上下文

例如一句话里某个词的含义,很多时候必须结合前后文一起理解。

这和前面的单向语言模型不一样。

单向语言模型

当前位置表示通常只能依赖左边,或者右边。

BERT

当前位置表示可以依赖左右两边。

所以 BERT 的“Bidirectional”指的就是:

深层双向上下文建模能力

这也是它在语言理解任务上特别强的原因之一。


6. 为什么双向上下文这么重要

因为自然语言里,很多词的意义并不是固定的,
而是强烈依赖上下文。

例如一个词出现在不同句子里,
它的真正语义可能会变。

所以,如果模型只能单向看上下文,往往会丢掉很多信息。
而双向表示则更符合真实语言理解过程:

理解一个词,不只是看它前面出现了什么,也要看它后面跟着什么。

这就是 BERT 能学到更强表示的根本原因。


7. BERT 的底层为什么是 Transformer Encoder

因为前面我们已经学过:

自注意力非常适合建模全局依赖,而且并行能力强。

BERT 正是建立在这个基础上。
它没有用 RNN、GRU、LSTM 来逐步递推序列,
而是使用:

多层 Transformer Encoder 堆叠

这样做的好处包括:

7.1 能直接建模长距离依赖

任意两个位置都能通过自注意力直接相连。

7.2 更适合并行训练

不像 RNN 那样必须一步一步展开。

7.3 更容易学上下文化表示

每一层都能让各位置相互交互更新表示。

所以可以说:

没有自注意力和 Transformer Encoder,就没有 BERT 这种现代预训练模型。


8. BERT 的输入长什么样

BERT 的输入不是简单一串普通 token。
它通常会在原始 token 序列基础上加入一些特殊标记。

最常见的有:

  • [CLS]

  • [SEP]

  • [MASK]

其中:

[CLS]

通常放在句子最前面,用来汇总整句表示。
后面做分类任务时,常常直接用它的输出表示。

[SEP]

用于分隔句子。
在句对任务里尤其常见。

[MASK]

用于预训练中的掩码语言模型任务。

所以 BERT 输入通常不是“纯文本 token 序列”,
而是:

带特殊标记的结构化输入序列


9. BERT 为什么需要[CLS]

因为很多 NLP 任务最终需要一个“整句表示”,例如:

  • 句子分类

  • 情感分析

  • 自然语言推理

BERT 的做法是:

在句首加一个特殊 token[CLS]

然后经过多层 Transformer 编码后,
[CLS]位置的输出向量就可以被当作:

整段输入的综合表示

这是一种非常巧妙的设计。
因为它避免了额外手工设计池化策略,直接把“句子级表示”嵌进了模型结构里。


10. BERT 为什么需要[SEP]

[SEP]的作用是:

分隔不同句子或不同片段

例如在句对任务中,输入可能是:

[CLS] 句子A [SEP] 句子B [SEP]

这样模型就能清楚知道:

  • 哪部分属于第一句

  • 哪部分属于第二句

这对于:

  • 问答

  • 句子匹配

  • 自然语言推理

这类任务非常重要。

所以[SEP]不只是一个普通分隔符,
它是 BERT 任务组织方式的一部分。


11. BERT 的预训练任务是什么

BERT 最经典的两个预训练任务是:

  • Masked Language Modeling(MLM,掩码语言模型)

  • Next Sentence Prediction(NSP,下一句预测)

这两个任务共同帮助 BERT 学习语言表示。


12. 什么是掩码语言模型(MLM)

这是 BERT 最核心的预训练任务。

它的基本做法是:

在输入序列中随机遮住一些 token,让模型根据上下文去预测这些被遮住的词。

例如原句:

I love deep learning

可能变成:

I love [MASK] learning

然后让模型预测:

deep

这和传统“下一个词预测”非常不同。

传统语言模型

只能单向看上下文。

MLM

被遮住的位置可以同时利用左右上下文。

所以 MLM 正是 BERT 实现“双向上下文建模”的关键。


13. 为什么 MLM 能让 BERT 学双向表示

因为在预测[MASK]的时候,模型既可以看左边,也可以看右边。

例如:

the cat sat on the [MASK]

模型既能看前面:

  • the cat sat on

也能结合整个句子结构去判断后面合理的词。

所以 MLM 不再要求模型按照时间方向生成,
而是要求它:

利用完整上下文恢复被遮住的信息

这就非常适合训练双向语言表示。


14. 为什么 BERT 不直接做普通语言模型

因为普通自回归语言模型天然是单向的。
它要预测下一个词,就不能偷看未来。

但 BERT 的目标不是“生成下一个词”,
而是:

学一个尽可能强的上下文表示模型

所以它改用 MLM 这种“填空式预训练”,
从而允许模型同时看左右上下文。

也就是说:

BERT 更偏“理解式预训练”,而不是“生成式预训练”。


15. 什么是下一句预测(NSP)

除了 MLM,原始 BERT 还有一个经典任务:

Next Sentence Prediction(下一句预测)

它的目标是:

给模型两个句子,判断第二句是不是第一句的真实后续。

例如:

  • 句子 A:今天天气很好。

  • 句子 B:我们去公园散步吧。

这两个句子可能是连贯的。

而如果句子 B 换成:

  • 服务器显存不足。

那就显然不连贯。

NSP 的目的是让 BERT 学习:

句子之间的关系

这对句对任务有帮助。


16. BERT 的输入表示不只是 token embedding

BERT 的输入表示通常由三部分相加得到:

  • Token Embedding

  • Segment Embedding

  • Position Embedding

也就是说,每个输入位置的最终表示,不只是词本身,还包含:

词是谁

token embedding

它属于哪一段句子

segment embedding

它在序列中的位置在哪里

position embedding

所以 BERT 的输入比前面很多模型都更结构化。


17. 为什么 BERT 还需要位置编码

因为 Transformer / 自注意力本身不像 RNN 那样天然按时间顺序递推。
它并不知道:

  • 哪个词在前

  • 哪个词在后

所以必须额外告诉模型位置信息。
这就是 position embedding 的作用:

把序列顺序信息显式注入模型

没有位置编码,
自注意力虽然能看见所有 token,
却分不清它们原本的先后顺序。


18. BERT 主要适合什么任务

BERT 特别适合:

自然语言理解类任务

例如:

  • 文本分类

  • 情感分析

  • 命名实体识别

  • 问答

  • 自然语言推理

  • 句子匹配

原因很简单:

  • 它是双向的

  • 它擅长学上下文化表示

  • 它的[CLS]表示天然适合句级任务

  • 它的 token 级表示也适合序列标注

所以 BERT 更像一个:

强大的通用语言理解底座


19. BERT 和 GPT 最本质的差别是什么

这一点虽然本节不一定展开太多,但可以先点一下。

BERT

  • 双向

  • 以理解为主

  • 预训练任务是 MLM

  • 更适合理解类任务

GPT

  • 单向自回归

  • 以生成为主

  • 预训练任务是下一个 token 预测

  • 更适合文本生成

所以你可以简单理解成:

BERT 更像“会读懂”的模型
GPT 更像“会续写”的模型

当然现代模型已经越来越融合,但这个基本区分仍然很有帮助。


20. 李沐这一节最想让你理解什么

这一节最核心的,不是让你一口气记住所有 BERT 细节,
而是先把下面这条主线抓住:

第一,BERT 是基于 Transformer Encoder 的双向预训练模型

这决定了它的结构基础。

第二,BERT 的关键在于预训练范式

先大规模预训练,再在下游任务上微调。

第三,MLM 是它实现双向建模的核心机制

这是和普通语言模型最大的不同。

第四,BERT 是现代 NLP 的关键里程碑

后面很多模型都和它有深刻联系。

所以这一节真正要建立的是:

BERT 在整个 NLP 发展脉络中的位置感。


21. 本节总结

这一节我们学习了 BERT,核心内容可以总结为以下几点。

21.1 BERT 是基于 Transformer Encoder 的双向预训练语言模型

它擅长学习上下文化表示。

21.2 它的重要性不仅在模型本身,更在“预训练 + 微调”范式

这是现代 NLP 的重要基础。

21.3 BERT 的核心预训练任务是 MLM

通过预测被遮住的词来学习双向上下文表示。

21.4 原始 BERT 还使用了 NSP 任务

用于学习句子之间的关系。

21.5 BERT 更偏向语言理解任务

而不是标准自回归文本生成任务。


22. 学习感悟

BERT 这一节特别关键,因为它让我们第一次真正看到:

语言模型不一定非得只会“往后猜”,
它也可以通过更巧妙的预训练任务,学会“把整句看懂”。

这一步非常重要。
因为它把 NLP 的重点,从“单任务从零训练”,带到了:

先学通用语言知识,再迁移到具体任务。

从这个角度看,BERT 不只是一个模型,
更是一种时代转折。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 5:03:11

AutoSubs完全手册:从零到精通的AI字幕生成终极指南

AutoSubs完全手册:从零到精通的AI字幕生成终极指南 【免费下载链接】auto-subs Instantly generate AI-powered subtitles on your device. Works standalone or connects to DaVinci Resolve. 项目地址: https://gitcode.com/gh_mirrors/au/auto-subs 在视频…

作者头像 李华
网站建设 2026/4/15 17:42:49

efinance:Python量化交易数据获取的终极指南

efinance:Python量化交易数据获取的终极指南 【免费下载链接】efinance efinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库,回测以及量化交易的好帮手!🚀🚀🚀 项目地址: https://gitco…

作者头像 李华
网站建设 2026/4/15 17:42:09

如何快速提升Windows性能:Win11Debloat系统清理优化完全指南

如何快速提升Windows性能:Win11Debloat系统清理优化完全指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter …

作者头像 李华
网站建设 2026/4/15 17:42:08

从侧倾到俯仰:一份Carsim联合仿真笔记,复用查表法搞定车身姿态控制

从侧倾到俯仰:Carsim联合仿真中的车身姿态控制策略复用实战 车身姿态控制一直是车辆动力学领域的核心课题。当工程师们成功实现了转向工况下的侧倾控制后,往往会面临一个自然延伸的问题:如何将已有的控制策略高效地迁移到俯仰控制场景中&…

作者头像 李华
网站建设 2026/5/4 11:53:18

如何免费快速突破游戏窗口限制:SRWE终极分辨率自定义指南

如何免费快速突破游戏窗口限制:SRWE终极分辨率自定义指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 想要在窗口化游戏中获得全屏体验?厌倦了被固定分辨率束缚的截图创作&#xff1f…

作者头像 李华
网站建设 2026/4/15 17:42:07

TI芯片的福利怎么用?Ultra Librarian + Allegro 获取封装库的完整避坑指南

TI芯片封装库高效获取指南:Ultra Librarian与Allegro全流程实战 在PCB设计领域,封装库的准确性和完整性直接影响设计效率。德州仪器(TI)等半导体巨头提供的官方封装资源,往往能大幅缩短开发周期。但许多工程师在从.bxl文件到最终可用的Alleg…

作者头像 李华