假设词元是100维度,WQW_QWQ、WKW_KWK、WVW_VWV都是100×100的参数矩阵
一、基础设定
词元向量维度:dmodel=100d_{\text{model}} = 100dmodel=100
单条序列有 NNN 个词元,输入张量形状 :N, 100N,\\ 100N, 100(词数 × 词向量维度)
二、单头自注意力:Q/K/V 投影矩阵
Transformer 里的 Q、K、V 不是直接用原输入,而是通过独立线性层(参数矩阵)做线性变换得到。
设单头注意力中,Q/K 维度为 dkd_kdk,V 维度为 dvd_vdv,常规设计:dk=dvd_k = d_vdk=dv
- 投影矩阵形状
输入:X∈RN×100X \in \mathbb{R}^{N \times 100}X∈RN×100
- Query 投影矩阵:WQ∈R100×dk\boldsymbol{W}_Q \in \mathbb{R}^{\boldsymbol{100 \times d_k}}WQ∈R100×dk
- Key 投影矩阵:WK∈R100×dk\boldsymbol{W}_K \in \mathbb{R}^{\boldsymbol{100 \times d_k}}WK∈R100×dk
- Value 投影矩阵:WV∈R100×dv\boldsymbol{W}_V \in \mathbb{R}^{\boldsymbol{100 \times d_v}}WV∈R100×dv
变换计算:
Q=X⋅WQ,K=X⋅WK,V=X⋅WVQ = X \cdot W_Q,\quad K = X \cdot W_K,\quad V = X \cdot W_VQ=X⋅WQ,K=X⋅WK,V=X⋅WV
- 两种常见情况
情况1:单头、不压缩维度(dk=dv=100d_k=d_v=100dk=dv=100)
此时三个参数矩阵都是:100×100100 \times 100100×100
变换后:Q,K,V∈RN×100Q,K,V \in \mathbb{R}^{N \times 100}Q,K,V∈RN×100
情况2:标准多头配置(以8头举例,h=8h=8h=8)
总维度 dmodel=100d_{\text{model}}=100dmodel=100 要均分至每个头:
dk=dv=dmodelh=100/8=12.5d_k = d_v = \dfrac{d_{\text{model}}}{h} = 100/8 = 12.5dk=dv=hdmodel=100/8=12.5
工程上一般取能整除的维度 ,我们换标准配置:
以论文原版 dmodel=512, h=8d_{\text{model}}=512,\ h=8dmodel=512, h=8 举例(512/8=64512/8=64512/8=64)更好理解:
每个头 dk=dv=64d_k=d_v=64dk=dv=64,
单个头的 WQ,WK,WVW_Q,W_K,W_VWQ,WK,WV 形状:512×64512 \times 64512×64
实操简化写法:会用一个大矩阵 一次性投影出全部头的Q/K/V
合并投影矩阵 Wqkv∈Rdmodel×3⋅dmodelW_{\text{qkv}} \in \mathbb{R}^{d_{\text{model}} \times 3\cdot d_{\text{model}}}Wqkv∈Rdmodel×3⋅dmodel
对于 dmodel=100d_{\text{model}}=100dmodel=100,合并矩阵就是 100×300\boldsymbol{100 \times 300}100×300,再切分得到完整Q、K、V。
三、纠正一个误区
- 单头、且保持维度不变时,三个独立权重矩阵确实都是 100×100 ✅
- 但 Q/K/V 本身不是参数矩阵 ,它们是输入向量经过矩阵变换后得到的特征张量 ,形状是 N,100N, 100N,100(词数×维度),不是方阵。
四、极简总结
- 词向量维度100,单头、维度不缩减 :
WQ、WK、WVW_Q、W_K、W_VWQ、WK、WV 三个权重矩阵 = 100×100\boldsymbol{100 \times 100}100×100; - 多头场景:总维度平分给每个头,单头权重矩阵列数变小;
- 区分:WQ/WK/WVW_Q/W_K/W_VWQ/WK/WV 是可训练参数 ,Q/K/V 是特征向量。
WQ/WK/WVW_Q/W_K/W_VWQ/WK/WV初始化
Transformer 里线性层权重主流做法:
- 权重 :使用高斯/均匀随机初始化 ,且会限定取值范围 (小数值),避免初始输出爆炸/梯度消失。
经典方案:Xavier 初始化(Glorot) 、He 初始化,Transformer 常用 Xavier。 - 偏置(bias) :一般初始化为 0。
2. 为什么不能随便乱随机?
- 若数值太大:输入经过多层矩阵相乘后,特征值会急剧膨胀,激活函数饱和,梯度接近0,网络训不动。
- 若数值太小:信号不断衰减,深层梯度消失。
所以必须用有界的标准随机分布。
3. 结合自注意力补充两点
- 三个矩阵 WQ,WK,WVW_Q,W_K,W_VWQ,WK,WV 相互独立初始化,初始值不一样,不会共享参数。
- 多头场景同理:拆分后的各组头权重,也都是各自独立随机初始化。
- 位置编码、词嵌入矩阵,同样是随机初始化(词嵌入也常用Xavier)。
4. 一句话总结
100×100100\times100100×100 的可训练权重属于受控随机初始化(限定范围的正态/均匀分布),偏置置零,并非纯杂乱随机。
transformer本质就是在训练WQ/WK/WVW_Q/W_K/W_VWQ/WK/WV这三组100×100的参数?
训练Transformer,不只是训QKV三个矩阵 ,而是整套编码器(+解码器)里所有线性层、嵌入层的权重与偏置。
一、先回到你当前场景:单个编码层(d_model=100)
单层Encoder包含4类可训练参数:
-
多头自注意力部分
- WQ、WK、WVW_Q、W_K、W_VWQ、WK、WV:3 个 100×100 权重矩阵 + 对应bias
- 多头拼接后的输出投影矩阵 WOW_OWO:也是 100×100 + bias
👉 注意力模块就有 4个大权重矩阵
-
前馈网络 FFN(两层全连接)
Transformer标准FFN:先升维、再降维(通常扩4倍)
d_model=100 → 中间隐层维度 = 400
- W1W_1W1:100×400100 \times 400100×400 + bias
- W2W_2W2:400×100400 \times 100400×100 + bias
👉 FFN 又多 2个大权重矩阵
仅单层编码器 :就有 4+2 = 6 组主要权重矩阵,远不止QKV三个。
二、多层堆叠(原版Transformer 6层Encoder)
每层结构完全独立、参数不共享:
- 6层 = 6套 注意力+FFN 全套参数
每一层的 WQ/WK/WV/FFNW_Q/W_K/W_V/FFNWQ/WK/WV/FFN 都是单独训练、互不复用。
三、还有两大块你容易忽略的核心参数
- 词嵌入矩阵 Token Embedding
假设词表大小为 VVV(比如几万词),维度100:
- 形状:V×100\boldsymbol{V \times 100}V×100
这是整个模型最庞大的参数之一,全程参与训练。
- 位置编码(分两种)
- 标准正弦位置编码 :固定公式生成,不训练
- 可学习位置编码:也是一个 Seq_Len×100Seq\_Len \times 100Seq_Len×100 的参数矩阵,参与训练
四、如果带上解码器(完整Transformer翻译模型)
解码器还有:
- 掩码自注意力的 QKV
- 编码器-解码器交叉注意力的 QKV
- 解码器自身FFN
- 最后的输出投影+Softmax层
这些又新增大量独立参数。
五、回到你的理解:纠正+简化
-
你的感受有道理 :
QKV矩阵是自注意力的核心,也是理解上下文语义的关键参数,模型学"词与词之间该关注谁",主要就靠这三组权重。
-
但严格来说:
- 学词语本身含义 → 靠词嵌入矩阵
- 学词与词的关联/上下文 → 靠各层QKV+输出投影
- 学抽象语义、特征变换 → 靠每一层FFN
训练Transformer,是同时优化词嵌入、每一层的QKV、注意力输出投影、前馈网络全部权重;QKV只是其中负责建模上下文依赖的核心模块,并非全部参数。
为啥100×100的参数矩阵能够实现Q查询的目的
100×100权重矩阵,本质是做线性特征变换**,把原始词向量「转成适合做匹配查询的新特征」,让Q能精准表达"我要找什么"。
一、先回顾基础形状
单个词元向量:x∈R1×100\boldsymbol{x} \in \mathbb{R}^{1\times 100}x∈R1×100
查询投影矩阵:WQ∈R100×100\boldsymbol{W_Q} \in \mathbb{R}^{100\times 100}WQ∈R100×100
查询向量计算:
q=x⋅WQ\boldsymbol{q} = \boldsymbol{x} \cdot W_Qq=x⋅WQ
结果:q∈R1×100\boldsymbol{q} \in \mathbb{R}^{1\times 100}q∈R1×100,维度不变,但特征含义彻底变了。
二、矩阵乘法到底干了什么?
100维向量 × 100×100矩阵,可以理解为:
用100组不同的"线性规则",对原向量的100个维度做加权重组。
举极简类比(缩成3维方便理解):
原向量 a,b,ca,b,ca,b,c 代表词本身字面语义;
乘上权重矩阵后得到 q1,q2,q3q_1,q_2,q_3q1,q2,q3,这组新向量不再单纯表示词义,而是专门用来表达「检索意图」。
- 原向量:描述这个词是什么
- 变换后的Q向量:描述这个词想关注哪些词、和哪些词有关系
矩阵里的每一列,就是一个查询特征提取器;训练过程就是不断调整这100×100的权重,让提取出的Q越来越会"找关联"。
三、结合Q-K匹配,解释为什么它能实现"查询"
自注意力核心是:QKTQK^\mathrm{T}QKT 算相似度。
-
原始词向量直接做点积行不行?
不行。
原生词向量只编码单词语义,没有"查询导向",词和词之间的关联表达很弱,算出来的相似度不准。
-
经过 WQ/WKW_Q/W_KWQ/WK 分别变换后:
- WQW_QWQ 把原向量转为查询表征Q:侧重"我需要什么信息"
- WKW_KWK 把原向量转为键表征K:侧重"我能提供什么信息"
此时 QKTQK^\mathrm{T}QKT 点积,就变成**「需求」和「供给」的匹配打分**,这才是真正有效的关联度。
而100×100的矩阵,就是用来学习这套"转成查询/键特征"的映射规则。
四、用直观例子理解
句子:猫 抓 老鼠
- 初始三个词的100维向量,只存各自词义;
- 经过 WQW_QWQ 变换后:
- "抓"的Q向量,会被权重训练成**主动偏向"猫"和"老鼠"**的特征;
- 再和所有位置的K向量点积,自然算出更高的注意力权重;
- 整个过程:
模型靠反向传播不断修改 WQW_QWQ 里的每一个参数,慢慢学会:动词"抓"应该去查询主语、宾语。
五、补充两个关键细节
1. 为什么维度保持100不变?
不是必须同维度,只是工程习惯:
- 维度一致,方便后续缩放点积、多头拼接、残差相加;
- 100×100方阵,是全维度特征重组,没有信息维度上的压缩/丢弃,表达能力拉满。
2. 和V矩阵的分工再区分
- WQ/WKW_Q/W_KWQ/WK:服务匹配打分,学习"谁和谁有关";
- WVW_VWV:服务内容提取 ,学习"该取出哪些语义信息做融合";
三者矩阵各司其职,合起来完成一整套「查询→匹配→取值」流程。
六、一句话总结
100×100的WQW_QWQ,就是把普通词向量线性重组成具备检索意图的查询特征;模型训练就是不断优化矩阵里的权重,让变换后的Q能精准找到序列中语义相关的位置。
为啥100x100的矩阵就是全局的?
先抓核心:不是矩阵本身叫"全局",是「矩阵作用+注意力计算逻辑」让模型拥有了全局建模能力
一、先分清两个概念
- 100×100 权重矩阵 :只是单词内部的特征变换(只改当前词的向量,不涉及其他词)
- 全局 :指一句话里所有词互相建立关联 (A词看B/C/D...所有词),这是注意力分数计算带来的,不是权重矩阵单独实现的
很多人混淆的点就在这:矩阵负责"造特征",注意力分数负责"跨词全局关联"。
二、分步拆解(沿用:词向量维度=100)
设一句话有 N 个词 ,整体输入张量形状:N, 100\boldsymbol{N,\\ 100}N, 100
每行 = 1个词的100维向量。
1. 第一步:用WQ(100×100)W_Q(100×100)WQ(100×100)做单词变换(无全局,只改自身)
对每个词向量 x∈R1×100\boldsymbol{x} \in \mathbb{R}^{1\times100}x∈R1×100
q=x⋅WQ\boldsymbol{q} = \boldsymbol{x} \cdot W_Qq=x⋅WQ
- 运算范围:只用到当前这一个词的100维特征,和句子里其他词毫无关系
- WQW_QWQ 作用:把"词义向量"转成"查询向量",纯单样本内部线性映射
- 此时:依然看不到全局,每个词还是孤立的
同理 WK、WVW_K、W_VWK、WV 也只是单独改写每个词的向量。
2. 第二步:QKTQK^\mathrm{T}QKT 矩阵乘法 → 真正实现全局交互
现在把整段序列的Q、K拼起来:
Q∈RN×100,K∈RN×100Q \in \mathbb{R}^{N\times100},\quad K \in \mathbb{R}^{N\times100}Q∈RN×100,K∈RN×100
计算相似度矩阵:
QKT∈RN×NQK^\mathrm{T} \in \mathbb{R}^{\boldsymbol{N \times N}}QKT∈RN×N
重点来了:
- 输出是 N行N列方阵
- 第 iii 行第 jjj 列的值 = 第i个词 和 第j个词 的匹配分数
- 对第i个词 来说:一整行N个分数,就是它和句子里所有N个词的关联程度
👉 到这一步,单个词终于能"看到全句所有词" ,这就是Transformer的全局能力。
三、那100×100矩阵到底起了啥作用?
一句话:
100×100的WQ/WKW_Q/W_KWQ/WK 是「全局匹配的前提」,本身不产生全局,但决定全局匹配准不准。
举直白例子:
-
不用WQ/WKW_Q/W_KWQ/WK,直接拿原始词向量算 XXTX X^\mathrm{T}XXT
原始向量只存"单词本身意思",没有"查询/匹配倾向",算出来的相似度杂乱无章,全局关联毫无意义。
-
经过 WQ、WKW_Q、W_KWQ、WK 分别变换后
- WQW_QWQ 训练出规则:把词向量变成「我想找谁」的查询特征
- WKW_KWK 训练出规则:把词向量变成「我是什么」的匹配特征
再做 QKTQK^\mathrm{T}QKT 全局比对,全局关联才变得有效、符合语义。
形象类比
- 每个词 = 一个人
- 原始100维向量 = 人的长相、身份
- WQ(100×100)W_Q(100×100)WQ(100×100) = 帮每个人生成寻人标签(我想找同伴/同事/家人)
- WK(100×100)W_K(100×100)WK(100×100) = 帮每个人生成自我介绍标签(我是谁、能和谁配合)
- QKTQK^\mathrm{T}QKT = 全场所有人互相比对标签(全局互相认识、建立联系)
👉 没有"标签制作"(100×100矩阵),就算所有人面对面(全局),也不知道该亲近谁。
四、再总结边界,彻底区分
-
100×100 权重矩阵
作用:单词特征重构 ,学习查询/匹配的特征表达
范围:只作用于单个词,局部运算
-
QKTQK^\mathrm{T}QKT 注意力分数矩阵
作用:全序列两两相似度计算
范围:覆盖所有词,全局运算
-
两者关系
训练时优化 WQ/WKW_Q/W_KWQ/WK,本质是优化"特征表达方式" ,让后续的全局匹配 结果符合语言逻辑。
不是矩阵=全局,是矩阵加工特征 + 注意力矩阵运算,共同实现全局上下文建模。
五、补一个极简版本方便记忆
- 100×100矩阵:给每个词"装一双会辨别的眼睛"
- QKTQK^\mathrm{T}QKT 运算:让这双眼睛看向整句话所有词 (全局)
合在一起,模型就能看懂全局语义。
既然拿到了注意力分数矩阵为啥还要和V计算
注意力分数只代表**「关联强弱」,没有语义内容;必须乘上V,才能按权重把全局语义融合出新向量**。
一、拆成两步理解(沿用你的维度设定)
设序列有 NNN 个词,向量维度 d=100d=100d=100
-
注意力分数矩阵 A=Softmax(QKTd)\boldsymbol{A = Softmax(\dfrac{QK^\mathrm{T}}{\sqrt{d}})}A=Softmax(d QKT)
形状:N,N\boldsymbol{N, N}N,N
- 每一行:当前词对全句所有词的关注权重(总和=1)
- 里面只有数字权重 ,没有任何词义、语义信息
- 类比:一张「点名表」,只写"我要多看谁、少看谁",但不知道这些人说了什么。
-
乘以 V\boldsymbol{V}V 得到最终输出 A⋅V\boldsymbol{A \cdot V}A⋅V
VVV 形状:N,100\boldsymbol{N, 100}N,100(每个词的语义内容向量)
矩阵相乘后结果依然是 N,100\boldsymbol{N, 100}N,100,和输入维度一致。
逐行看计算(以第 iii 个词为例)
outputi=∑j=1NAi,j⋅Vj\text{output}i = \sum{j=1}^N A_{i,j} \cdot V_joutputi=j=1∑NAi,j⋅Vj
- Ai,jA_{i,j}Ai,j:第iii个词对第jjj个词的注意力权重
- VjV_jVj:第jjj个词的真实语义向量
- 本质:用权重对全句所有词的语义做加权求和
二、生活化举例
句子:小猫 抓 老鼠
- 算出注意力矩阵后,"抓"这个词对「小猫、老鼠」权重很高,对自身权重一般。
- 只有权重:只知道"抓"要重点关注另外两个词,但不知道这两个词是什么意思。
- 乘上V:把「小猫」「老鼠」的语义向量,按高权重大量融合进"抓"的向量里。
- 最终"抓"的新向量:同时包含自身含义 + 主语+宾语的语义,完成上下文融合。
三、再区分三者分工(闭环串起来)
- WQ/WKW_Q/W_KWQ/WK → 加工出Q、K,用来算匹配权重
- 注意力分数矩阵 → 确定看谁、看多少(只有比例,无内容)
- WVW_VWV、V向量 → 承载所有词的语义内容
- A⋅VA \cdot VA⋅V → 按照"观看比例",把全局内容揉进每个词的表征里
四、反问帮你彻底想通
如果只留注意力分数、不乘V:
- 输出是 N×NN\times NN×N 的权重矩阵,和原始词向量维度完全不一样,没法继续往下走(残差连接、FFN、下一层编码器)
- 只有权重没有语义,模型学不到任何语言信息,训练毫无意义。
极简总结
注意力分数是**"分配比例",V是 "原始素材"**;
按比例取用全局素材,才能生成带上下文的新语义向量,这一步是自注意力输出有效特征的最后一环。
那为啥得到的V又不是最终输出
A·V 只是自注意力模块的原始输出,还要经过残差、归一化、前馈网络层层加工,才能得到单层编码器最终结果;且编码器是多层堆叠,单一层输出也不是整个模型最终输出。
一、先看位置:A·V 处在整个链路的哪一步
沿用单层编码器标准流程(输入X\boldsymbol{X}X):
- 输入 XXX → 计算 Q,K,VQ,K,VQ,K,V → 注意力加权 A⋅V\boldsymbol{A\cdot V}A⋅V(注意力原始结果)
- 残差连接:A⋅V+X\boldsymbol{A\cdot V + X}A⋅V+X(把原始输入直连过来)
- 层归一化 LN:对上一步结果做数值规整 → 得到注意力模块正式输出 X1X_1X1
- 送入前馈网络 FFN:FFN(X1)FFN(X_1)FFN(X1)(逐位置做非线性特征变换)
- 再一轮残差 + 层归一化 → 单层编码器最终输出
1. 为什么A·V不能直接当输出?
① 缺少残差连接,深层网络训不动
自注意力只做了上下文融合,完全丢弃了原始输入信息 。
残差连接相当于"抄近路",把词本身的基础语义保留下来,同时缓解多层堆叠带来的梯度消失,这是深度模型能收敛的关键。
② 数值分布不稳定,必须做层归一化
训练时网络参数不断更新,特征值会持续波动、偏移。
层归一化把向量维度的值拉到稳定分布,让后续网络更容易学习、收敛更快。
③ 自注意力只做「全局关联融合」,缺「非线性语义提纯」
自注意力是纯线性加权(矩阵乘法),表达能力有限:
- 它只会按权重拼接不同位置的语义,没法挖掘复杂语义、语法逻辑;
- FFN(两层全连接+激活函数)引入非线性,对融合后的特征做二次加工、抽象、提纯,让表征更贴合语言规律。
举个例子:
句子"苹果很甜"
- A·V 只做到:把"甜"的语义关联到"苹果"上;
- FFN 进一步学习:"苹果"+"甜"组合出"苹果具备甜味"这个整体语义。
二、再往上:单层输出 ≠ 整个编码器最终输出
原版Transformer编码器是6层完全独立的编码层堆叠:
- 第1层输出 → 喂给第2层输入
- 逐层传递,直到第6层
每层的侧重点不同:
- 浅层:学习词性、局部搭配、简单语法;
- 深层:学习长距离依赖、整句语义、抽象概念。
只有最后一层编码器跑完所有流程,得到的向量,才是编码器整体的输出。
三、结合你的QKV链路,完整串一遍闭环
- 原始词向量+位置编码 → 输入层
- WQ/WK/WVW_Q/W_K/W_VWQ/WK/WV 变换 → Q/K/V
- QKTQK^\mathrm{T}QKT+Softmax → 注意力权重(只存关联比例)
- 权重 × V → A·V(融合全局语义,中间结果)
- 残差+LN → 补原始信息+规整数值
- FFN+残差+LN → 非线性提纯特征(单层输出)
- 多层堆叠迭代 → 编码器最终输出
四、一句话总结
A⋅VA\cdot VA⋅V 只是完成了全局语义加权融合这一步,还需要补原始信息、规整数值、做非线性特征强化,再经过多层迭代,才是最终可用的编码表征。
那又是怎么用编码器实现文本分类的?最后接一个全连接层就可以吗
核心思路是把整个句子的表征聚合为一个向量,再接全连接层做分类,单纯拿所有位置向量直接接全连接不行,主流有三种聚合方式。
一、前置:编码器输出形态
假设输入句子有 NNN 个词元,向量维度 dmodel=100d_{model}=100dmodel=100
编码器最终输出形状:N, 100\boldsymbol{N,\\ 100}N, 100
每一行是单个词融合全局上下文后的向量,一共N个向量,不是单个句子向量 。
文本分类需要一个向量代表整句话,所以第一步必须做「聚合」。
二、三种主流聚合方案(BERT/Transformer 分类标配)
1. 取第一个位置向量( 主流,BERT 用法)
输入时手动在句子开头加一个特殊词元 ** (分类符)**
- 经过多层编码器后,` 位置的向量天然融合了全句语义
- 直接取出这个 1,1001, 1001,100 向量,作为句子整体表征
后续:这个向量送入分类全连接层,输出类别概率。
2. 全局平均池化(Avg Pooling)
对 N,100N, 100N,100 所有词向量,按维度求平均:
- 得到 1,1001, 1001,100 句向量
- 优点:不用额外加
[CLS],适配任意序列 - 适用:纯Transformer编码器、部分开源分类模型
3. 全局最大池化(Max Pooling)
按维度取所有位置的最大值,得到句向量,效果一般,用得少。
三、完整流程(以 [CLS] 方案举例,最标准)
- 文本转词元,句首拼接
[CLS],生成词嵌入 + 位置编码 - 送入堆叠的Transformer编码器,得到输出 N,100\boldsymbol{N, 100}N,100
- 单独抽取第0位(
[CLS])向量:1,100\boldsymbol{1, 100}1,100 - 接分类头(全连接层)
- 输入:100维句向量
- 权重矩阵:100×类别数100 \times \text{类别数}100×类别数
- 搭配Softmax,输出每一类的概率
- 训练:用分类标签计算损失,反向传播更新整个编码器 + 分类层所有参数
四、回答你的问题:只接全连接层可以吗?
-
不能直接把 N,100N,100N,100 喂给全连接
序列长度 NNN 不固定,输入维度会变,全连接层权重形状固定,无法运行。
必须先聚合为固定长度的单向量。
-
聚合之后 只接一层全连接完全够用
- 简单分类任务:单层全连接 + Softmax 即可
- 复杂任务:可多加1~2层全连接+激活函数,做更深的分类头
五、补充细节
- 训练特点
分类任务会微调整个编码器,原本预训练学到的语义特征,会进一步适配分类目标。 - 为什么
[CLS]向量能代表整句?
自注意力机制让[CLS]位置会主动关注句子里所有词,经过多层编码后,它天然汇聚了全局语义。 - 极简流程图
文本 → 词嵌入+位置编码 → 编码器 → 取[CLS]/池化(得到句向量)→ 全连接分类层 → 输出类别
一句话总结
先通过[CLS]或池化,把编码器输出的多个词向量压缩成一个句向量,之后再接全连接层,就能完成文本分类。