目录标题一、词转词向量第一步分词、清洗和标准化把句子切碎第二步构建词表 (Vocabulary)发“身份证号”第三步使用词嵌入矩阵查表变向量注入灵魂二、嵌入表行数等于词表行数可以理解但是列数怎么定一、列数维度是怎么定的依据是啥二、机器怎么知道在这些列上填啥数字重点就是深度学习训练三、那这些学出来的列人类能看懂吗三、每一列可以看作深度学习的权重吗(又解释一遍词转词向量)那输入tensor是啥就是训练数据是啥是[我是人物的档案你的任务档案在哪]这里一句句话转成词向量吗?一、完全可以这么理解而且在底层代码里它确确实实就是权重Weight。二、那输入 Tensor 是啥训练数据长啥样三、训练数据到底是什么以 GPT 这种大模型为例四、那每个模型都是有词表词表有10000行都有对应的词嵌套矩阵就是10000行维度认为预定300列那世界上这么多词就代表有很多行那对应的词嵌套矩阵岂不是很大。难道现在的大模型都是这样搞得?1. 现在的矩阵到底有多大算笔账2. 世界上词这么多代码、火星文、拼写错误怎么塞进词表3. 大模型除了这个矩阵还有别的参数吗五、如果想修改 人物档案 在词嵌入矩阵里每一列权重是不是就给就喂包含人物档案的句子训练一、纠正误区输入多次特定句子这个词的权重就能“完美”吗二、词嵌入表 (Embedding) 的真相大模型时代它是“死”的总结你的想法六、transformer网络和深度学习训练调整每个词的列权重有啥区别七、transformer怎么拿到Embedding表里向量变成几乎准确的词向量处理的必须搞定原来自注意力机制原理这里粗略介绍一下八、查Embedding表这里每列是不是通过深度学习训练出来的。后面tranformer就用不到深度学习了调Embedding表这里已经几乎固定列的权重了一、查嵌入(Embedding)表每列确实是深度学习训练出来的吗二、后面 Transformer 就用不到、也不调这里的权重了吗三、那在 Transformer 阶段是怎么“用”这个固定向量的总结一、词转词向量将词转换为词向量时首先需要对文本进行分词再根据需要进行清洗和标准化。构建词表Vocabulary每个词对应一个索引。使用词嵌入矩阵将词索引转换为词向量。自然语言处理NLP最神奇的地方就是要把人类看得懂的文字变成机器看得懂的数字向量。结合这三个步骤我们用一句最简单的话来举例“我爱吃苹果。”我们一步步看这句话是怎么变成一串串数字词向量的。第一步分词、清洗和标准化把句子切碎机器不认识一整句话它必须先把它切成词Token。分词把“我爱吃苹果”切成[我, 爱, 吃, 苹果, 。]。清洗和标准化去掉没用的标点符号比如句号英文字母通常还会转成小写。结果我们得到了一个干净**的词列表[我, 爱, 吃, 苹果]。第二步构建词表 (Vocabulary)发“身份证号”机器不仅不认识字更不认识词。所以我们要建一个大字典词表给每个词发一个唯一的数字 ID索引。假设我们手里有一个包含几万个词的字典词 (Word)索引 (Index)你0我1爱2吃3香蕉4苹果5……根据这个字典我们把刚才切好的词替换成数字 ID。结果[我, 爱, 吃, 苹果]变成了[1, 2, 3, 5]。注意这时候机器虽然拿到了数字但它觉得1和2只是编号并不代表“我”和“爱”有任何语义上的关系不能因为 2 比 1 大就说“爱”比“我”大。第三步使用词嵌入矩阵查表变向量注入灵魂这一步就是图里的核心词嵌入Word Embedding。我们要准备一个大表格词嵌入矩阵。这个表格的行数等于词表大小列数是我们自己定的比如定个 4 维意思是每个词用 4 个数字来描述。假设我们训练好或者下载好的矩阵长这样索引向量 (Vector)隐含的意义机器自己学出来的0 (你)[0.1, 0.2, 0.1, 0.9]代词人1 (我)[0.1, 0.1, 0.1, 0.8]代词人2 (爱)[0.9, 0.1, 0.2, 0.1]动词情感3 (吃)[0.8, 0.5, 0.1, 0.1]动词动作4 (香蕉)[0.1, 0.9, 0.8, 0.1]名词食物黄色5 (苹果)[0.1, 0.9, 0.8, 0.2]名词食物圆形怎么查表还记得第二步我们得出的数字 ID 吗[1, 2, 3, 5]。遇到1我们就去矩阵的第 1 行把[0.1, 0.1, 0.1, 0.8]抽出来。遇到2去第 2 行抽[0.9, 0.1, 0.2, 0.1]。遇到3去第 3 行抽[0.8, 0.5, 0.1, 0.1]。遇到5去第 5 行抽[0.1, 0.9, 0.8, 0.2]。最终结果“我爱吃苹果”这句话最终变成了一个4×4 的矩阵4个词每个词4个维度[ 0.1 0.1 0.1 0.8 0.9 0.1 0.2 0.1 0.8 0.5 0.1 0.1 0.1 0.9 0.8 0.2 ] \begin{bmatrix} 0.1 0.1 0.1 0.8 \\ 0.9 0.1 0.2 0.1 \\ 0.8 0.5 0.1 0.1 \\ 0.1 0.9 0.8 0.2 \end{bmatrix}0.10.90.80.10.10.10.50.90.10.20.10.80.80.10.10.2这就是机器眼中的“我爱吃苹果”。它变成了一个4 维 Tensor。为什么非要变成这么复杂的向量直接给数字 1、2、3、5 不行吗这就是词嵌入Word Embedding的魔法所在。变成向量后数字之间有了数学关系。你看表里“我”是[0.1, 0.1, 0.1, 0.8]“你”是[0.1, 0.2, 0.1, 0.9]它俩的数值非常接近说明机器知道它们词性相似都是代词。再看“苹果”是[0.1, 0.9, 0.8, 0.2]“香蕉”是[0.1, 0.9, 0.8, 0.1]它们的向量也极度相似机器就知道它们都是能吃的水果。更神奇的是向量还能做数学运算比如著名的例子“国王”的向量 - “男人”的向量 “女人”的向量 ≈ “女王”的向量二、嵌入表行数等于词表行数可以理解但是列数怎么定我们分两步来扒开这个“黑盒”列数维度是怎么定的 人为设定的超参数机器怎么知道每一列填啥数字 算法自己学出来的这是核心 一、列数维度是怎么定的依据是啥词向量的列数在专业术语里叫“Embedding Dimension嵌入维度”。列数不是固定的是人工程师拍脑袋设定的“超参数”。依据是什么主要是“你要捕捉多少语义细节”和“你的算力/内存有多大”。举个通俗的例子如何给一个人写“人物档案”词向量如果只给 2 列2 维你只能记录他的两个特征比如[身高, 体重]。这就叫 2 维词向量。两个词如果身高体重差不多机器就认为它们相似。如果给 10 列10 维你可以记录[身高, 体重, 年龄, 智商, 情商, 颜值, 财富, 幽默感, 运动能力, 饭量]。这就能区分得更细致了。如果给 300 列300 维早期的自然语言处理比如 Word2Vec 算法最常用的就是 300 维。这 300 列可能包含了 300 种人类难以直接命名的隐藏特征比如是否是有生命的、是否是动作、情感是正向还是负向等。现在的超大模型如 GPT-4、豆包维度动辄4096 维、8192 维甚至上万维因为大模型需要理解极其复杂的语法、逻辑、代码、多语言知识。列数定太小词与词之间容易“撞车”分不清细微差别比如分不清“喜欢”和“爱”。列数定太大浪费算力矩阵极度庞大模型训练慢且容易“过拟合”。所以列数就是一个“筐”你想装多细的信息就定多大的筐。二、机器怎么知道在这些列上填啥数字重点就是深度学习训练这绝对不是人类工程师手动填进去的。你不可能去规定“第 1 列代表是否吃素第 2 列代表颜色”。这些数字是机器自己**“学”出来的依靠的是一种叫做“反向传播Backpropagation”和“梯度下降”**的数学魔法。通俗解释“机器怎么学”初始状态瞎蒙刚开始词嵌入矩阵里的数字全是随机乱填的比如标准正态分布。此时机器眼里的“苹果”可能就是[0.88, -0.12, 0.45, ...]毫无逻辑。做填空题训练任务我们给机器几千万篇文章让它玩一个游戏比如**“预测下一个词”**大模型就是这么练的。输入“我每天早上都要吃一个……”机器根据它乱填的矩阵算了一下预测下一个词是“轮胎”错得离谱。老师打手板计算误差真实的答案是“苹果”。机器发现自己错了产生了一个巨大的“误差Loss”。调整数字反向传播这是最关键的一步。机器会回过头去稍微修改微调矩阵里的数字。它发现为了让预测变成“苹果”可能需要把“苹果”这个向量里的某几个数字调大一点把“吃”这个词的向量也调整一下让它们俩在空间上的**“距离”更近**。千锤百炼迭代把这个过程重复几十亿次经过海量的数据“毒打”矩阵里的数字越来越合理。原本随机乱填的数字慢慢变成了能表达语义的向量。“苹果”和“香蕉”的向量越来越像因为它们经常出现在相似的上下文里比如“吃___”。“苹果”和“手机”也会有一定相似性因为都有苹果公司。三、那这些学出来的列人类能看懂吗绝大多数情况下人类看不懂。大模型学出来的 4096 维并不是我们想象中的第 1 列 甜度第 2 列 圆润度机器在 4096 维空间里自己构建了一套极其复杂的“特征坐标系”。这些特征可能是人类语言根本无法描述的抽象概念组合。但是机器不需要人类看懂它自己懂就行了。只要在这个高维数学空间里“国王” - “男人” “女人” 算出来的结果最接近的那个词是“女王”这就说明它学到了真理。三、每一列可以看作深度学习的权重吗(又解释一遍词转词向量)那输入tensor是啥就是训练数据是啥是[我是人物的档案你的任务档案在哪]这里一句句话转成词向量吗?一、完全可以这么理解而且在底层代码里它确确实实就是权重Weight。词嵌入矩阵本身就是一个巨大的“权重矩阵”。在 PyTorch 里定义一个词嵌入层其实就是在定义一个全连接层或查表层。# 假设词表有 10000 个词每个词用 300 维向量表示embedding_layertorch.nn.Embedding(num_embeddings10000,embedding_dim300)这里的10000 x 300矩阵里的每一个数字都是可学习的参数权重。一开始随机写对初始化时机器就是在这个矩阵里随机生成一堆小数。训练时调整当你输入一句话模型算出了误差比如预测错了下一个词反向传播Backpropagation的算法就会去计算这个巨大的矩阵里哪些数字导致了错误然后把它们微调一点。经过几亿次调整这些权重就变得“有语义”了。二、那输入 Tensor 是啥训练数据长啥样你举的例子「我是人物的档案你的任务档案在哪」非常生动但要纠正一点输入给模型的绝对不是这句话本身也不是直接的索引而是“切词后的索引序列”经过“查表”后得到的“三维 Tensor”。我们把这个流水线彻底打通看看“训练数据”到底长什么样1. 原始文本人类语言假设我们有一条训练数据一句话“我喜欢吃苹果”2. 转成索引Token IDs机器先查词表Vocabulary把这句话变成一排数字。假设词表里我1喜欢2吃3苹果4句号5。那么输入变成了一维 Tensor[1, 2, 3, 4, 5]3. 变成词向量Embedding 查表这就是你问的“输入 Tensor 是啥”。机器拿着这排数字[1, 2, 3, 4, 5]去刚才那个10000 x 300的权重矩阵里“查表”。拿出第 1 行的 300 个数字“我”的向量。拿出第 2 行的 300 个数字“喜欢”的向量。…查完之后原本一维的[1, 2, 3, 4, 5]就变成了一个二维的大矩阵Tensor形状是[5, 300]。也就是 5 个词每个词 300 个维度。注意如果一次喂给模型多句话比如 32 句话作为一批即 Batch Size 32这个 Tensor 就会变成三维的[32, 5, 300]。这就是你之前问的三维/四维 Tensor 的来源这个[32, 5, 300]的 Tensor才真正进入神经网络比如 Transformer去进行计算。三、训练数据到底是什么以 GPT 这种大模型为例你理解的“训练数据是一句话”大体是对的但大模型训练时其实是在玩一个“完形填空”或“接龙”的游戏。以刚才的[1, 2, 3, 4, 5]我喜欢 吃 苹果 。为例训练数据通常被切成两部分输入Input[1, 2, 3, 4]我喜欢 吃 苹果目标标签Target[2, 3, 4, 5]喜欢 吃 苹果 。训练过程是这样的机器看着[1, 2, 3, 4]我喜欢 吃 苹果去查表变成向量送进网络。网络经过一顿复杂的数学运算矩阵乘法、注意力机制等开始预测下一个词。机器预测的答案是第 1 个位置它猜下一个词是“喜欢”第 2 个位置猜下一个词是“吃”第 3 个位置猜下一个词是“苹果”第 4 个位置猜下一个词是“。”。对比误差机器把自己猜的跟真实的目标标签Target对比。如果它把“苹果”后面猜成了“香蕉”误差就很大。反向传播误差传回去调整那个10000 x 300的Embedding 权重矩阵。让“苹果”的向量稍微向“吃”的向量靠近一点。重复几万亿次。四、那每个模型都是有词表词表有10000行都有对应的词嵌套矩阵就是10000行维度认为预定300列那世界上这么多词就代表有很多行那对应的词嵌套矩阵岂不是很大。难道现在的大模型都是这样搞得?现在的大模型用的就是这套逻辑而且它们对应的词嵌入矩阵极其巨大甚至大得吓人我们可以算一笔账看看现在的顶级大模型比如 GPT-4、豆包等在这个“查表矩阵”上到底有多疯狂以及它们是怎么解决“代码/生僻词太多”的问题的。1. 现在的矩阵到底有多大算笔账你说的 10000 个词、300 列那是早期小模型的规模比如 2013 年的 Word2Vec。现在的大模型呢词表大小行数通常是 10万 到 25万 左右。维度大小列数通常是 4096 到 12288 左右。我们拿一个中等偏上的大模型比如 Llama 3 或早期版本的 GPT-3来算算假设词表有 128,000 行包含各种语言、代码、符号维度是 8192 列。这个矩阵包含的数字个数是128 , 000 × 8 , 192 ≈ 10.48 128,000 \times 8,192 \approx 10.48128,000×8,192≈10.48亿。10亿个参数仅仅是为了“把词变成向量”这一个步骤这个矩阵里就装了 10 亿个需要训练的数字。如果每个数字用 16 位浮点数FP16存储光是这一个查表矩阵就要占用约 2 GB的显存。这也就是为什么大模型动不动就几十上百 GB因为底层全是这种巨大的矩阵堆出来的。2. 世界上词这么多代码、火星文、拼写错误怎么塞进词表你提到“代码有很多行”这是个极其核心的问题。人类语言是无止境的每天都在造新词比如“绝绝子”、“栓Q”代码变量名更是千奇百怪比如getUserInfoById。如果要把世界上所有的词和代码都塞进词表那行数得几千万矩阵会大到根本算不动。怎么解决秘诀就是不再以“词”为单位而是以“子词Subword”为单位。现在的大模型包括 GPT 系列、豆包等普遍使用一种叫BPEByte-Pair Encoding字节对编码的算法来构建词表。通俗解释 BPE 怎么干活的化整为零它不认完整的词它认“词根”或“片段”。比如unbelievable难以置信它不会给这一个词一行它会拆成unbelievable三行。比如代码getUserName它会被拆成getUserName。合并高频组合如果在海量数据里get和User经常连在一起出现它就会把这两合并成一个新行叫getUser。终极兜底字节级如果遇到一个极其罕见的字、生僻字、甚至乱码词表里实在没有办法怎么办模型会退化成“字节Byte”级别。英语里的字母、汉字的一个偏旁部首、甚至一个表情包的编码都可以被拆成一个个单字节。总共就 256 个基础字节任何火星文都能被拆开。好处是什么词表大小可以死死控制在 10万~15万 行左右矩阵不会无限膨胀。模型变得极其强大即便遇到从来没见过的代码变量名比如var_abc_123模型也能通过认识var、abc、123这些碎片拼凑出它的意思。3. 大模型除了这个矩阵还有别的参数吗有而且词嵌入矩阵只是冰山一角。用个比喻大模型就像一座工厂词嵌入矩阵Embedding Matrix就是工厂大门口的“收货单翻译机”。它负责把人类输入的词查表变成向量翻译成内部工人听得懂的“数学语言”。Transformer 网络核心大脑词向量进入工厂后会经过几十层甚至上百层的复杂加工流水线。这流水线里的每一个螺丝钉、齿轮权重都是参数。这部分叫“注意力机制Attention”和“前馈网络FFN”。输出层LM Head干完活了最后要把数学向量再变回人类词汇。这个输出层通常和词嵌入矩阵一样大或者直接共用同一个矩阵。在一个 100 亿参数的大模型里词嵌入矩阵可能只占了几亿参数绝大多数的参数都集中在中间那几十层的大脑网络里。五、如果想修改 人物档案 在词嵌入矩阵里每一列权重是不是就给就喂包含人物档案的句子训练一、纠正误区输入多次特定句子这个词的权重就能“完美”吗答案是不能而且千万不能这么干。为什么过拟合Overfitting的灾难如果你只给模型喂[我是人物的档案]这一句话模型会变成一个“复读机”。它确实会把这个词的向量调到跟你这句话严丝合缝但代价是它把之前学的所有常识全忘了。这叫“灾难性遗忘”。就像你为了考好一门课死记硬背背了一道题换个参数就不会了。词向量表示的是“相对关系”而不是“独立含义”还记得我们说的“苹果”和“香蕉”吗向量里的数字必须放在整个数学空间里看。如果你强行去修改“人物”这个词的某几列数字它跟“任务”、“档案”在其他维度的距离就会乱了。权重是“被迫”改变的不是“主动”改变的大模型在训练时并不是针对某一个词去调它。它是根据一整句话预测下一个词。算出来的误差会通过数学公式反向传播同时微调成千上万个词的权重。你输入的句子只是推动庞大矩阵改变的一粒沙子。二、词嵌入表 (Embedding) 的真相大模型时代它是“死”的在早期的小模型比如 Word2Vec里确实是“喂这个词的句子这个词的列就变”。但现在的百亿、千亿参数大模型几乎冻结了词嵌入表。为什么因为词嵌入表是通用底座。大模型在预训练时已经读过几万亿个词了。它不需要你在微调的时候去教它“苹果”是什么意思。真正在变的是什么是后面那几十层极其复杂的 Transformer 网络那些巨大的矩阵乘法和注意力机制。打个比方词嵌入表是字典后面的大脑是阅读理解能力。你想让模型学会“做任务”不是去修改字典里“任务”这两个字的定义而是去训练它的大脑让它知道当“任务”和“档案”连在一起时该怎么推理、怎么输出。总结你的想法你想要的想要哪个词好就去喂哪个词的句子改那个词在表里的数字。现实是词嵌入表通常不动是死字典。真正改变的是“大脑Transformer层的思考方式”。训练不是针对单个词而是针对上下文逻辑。你喂 100 遍“人物档案”不如喂 100 种“人物档案”在不同场景下的对话让大脑学会举一反三。如果你想真的去“调”某个特定词的权重或者让它记住特定的知识比如公司内部的专有名词现在业界有更高级的办法继续预训练Continue Pre-training往那个巨大的 10 亿参数的 Embedding 表里硬塞进去一批你们公司的专属词汇。微调SFT不动词表只疯狂训练后面的网络大脑让它学会“看到这批词应该输出什么样的特定格式”。RAG检索增强生成这是现在最火的。根本不改模型权重而是建一个外部资料库。当你问“人物档案”时模型先去资料库里把相关的文档搜出来然后连同你的问题一起塞给大脑去读。相当于不背字典了直接开卷考试。现在的重点是大模型是通过海量的“上下文”在调整大脑的脑回路而不是在死磕字典里的单字。六、transformer网络和深度学习训练调整每个词的列权重有啥区别深度学习调整“词的列”Embedding 表就像是我们之前说的那个10万行 × 4096列的矩阵。在预训练阶段它是通过预测下一个词慢慢“学”出来的。学完之后它基本就固定了。在这个表里“苹果”这个词对应的向量是唯一的、静态的。不管你说“我吃了一个苹果”还是“我买了个苹果手机”查出来的“苹果”向量一模一样。Transformer 网络调整权重注意力机制Transformer 根本不关心字典里“苹果”的初始向量是什么样它关心的是**“苹果”跟周围词的关系**。Transformer 里面的“权重Weight”是几万个矩阵乘法里的数字。它通过学习语法规律、逻辑关系、上下文搭配来调整词与词之间的融合方式。通俗比喻Embedding 表是《新华字典》。你查“苹果”字典告诉你它长什么样无论在哪句话里定义不变。Transformer 网络是《阅读理解大师》。它拿到字典里的解释后结合上下文告诉你“在这个句子里‘苹果’指的是一部手机不是水果。”七、transformer怎么拿到Embedding表里向量变成几乎准确的词向量处理的必须搞定原来自注意力机制原理这里粗略介绍一下这就涉及到大模型中最伟大的发明自注意力机制Self-Attention。我们拿一句话举例“苹果真好吃我买了两斤。”和“苹果发布会开了我买了两台。”这两句话里都有“苹果”但意思完全不同。Transformer 是怎么处理的第一步查表得到“初始向量”粗糙版通过 Embedding 查表“苹果”在第一句话和第二句话里拿到的初始向量是完全一样的。此时它是“瞎”的不知道自己 是水果还是手机。第二步Transformer 的魔法——“左顾右盼”自注意力机制Transformer 会让句子里的每一个词都去“看”句子里的其他词。在“苹果真好吃”里Transformer 算出来“苹果”跟“好吃”、“吃”的关联度极高。在“苹果发布会”里Transformer 算出来“苹果”跟“发布会”、“买”的关联度极高。第三步融合与更新产生“上下文向量”这就是最核心的一步Transformer 会根据刚才算出来的关联度把周围词的信息“揉”进“苹果”的向量里。第一句话里的“苹果”向量混合了大量“好吃、甜、水果”的特征。第二句话里的“苹果”向量混合了大量“科技、手机、贵”的特征。此时“苹果”不再是字典里那个固定的初始向量了它变成了一个**“根据上下文动态生成的、极度精准的高级向量”**。这个带有上下文的新向量再被送进更深层的网络比如几十层 Transformer不断重复“左顾右盼”和“融合”的过程。越往后词向量的含义就越精准、越抽象。第四步输出预测变成人类语言当这个极其精准的向量被计算到最后模型会通过最后一层通常和 Embedding 矩阵共享权重去计算词表里 10 万个词的概率。比如算出来下一个词是“手机”的概率是 90%是“香蕉”的概率是 0.01%。机器选概率最大的那个输出。八、查Embedding表这里每列是不是通过深度学习训练出来的。后面tranformer就用不到深度学习了调Embedding表这里已经几乎固定列的权重了一、查嵌入(Embedding)表每列确实是深度学习训练出来的吗是的百分之百是训练出来的。怎么训练的在最开始预训练之前这个10万行 × 4096列的矩阵里的数字全是随机生成的乱码。随着模型阅读海量的文本比如几万亿个词它不断做“预测下一个词”的练习。每次预测错了反向传播算法Backpropagation就会顺着网线爬回来微调这个矩阵里的数字。比如为了让“吃”和“苹果”在预测任务中配合得更好算法会把“苹果”向量里的某几个数字调大把另外几个数字调小。经过千锤百炼这些列上的数字才变得有意义比如呈现出水果、科技等语义。这就是标准的深度学习过程。二、后面 Transformer 就用不到、也不调这里的权重了吗完全正确在业界这叫“冻结Freeze词嵌入层”。在大模型的训练和微调Fine-tuning过程中工程师通常会设定两个不同的“学习率Learning Rate”Transformer 内部大脑学习率很高每天都在疯狂调整。Embedding 层查表层学习率极低甚至直接设为 0完全冻结。为什么要这么做为了省钱省算力那个嵌入矩阵动辄十亿参数如果每算一句话都要去微调它GPU 会直接冒烟。既然它已经把“词”翻译得很好了就让它固定当个“字典”用。为了防止遗忘如果你频繁去改字典模型很容易把以前学过的常识忘掉。维持字典稳定模型的大脑Transformer才能专心学习复杂的逻辑和语法。三、那在 Transformer 阶段是怎么“用”这个固定向量的虽然 Transformer 不去改这些列的数字了但它拿到这个固定的初始向量后要做一件极其夸张的事情——“洗稿”。你可以这样理解Embedding 给你的是一堆“原材料”比如苹果 [0.1, 0.8, 0.2...]吃 [0.9, 0.1, 0.5...]。这些原材料被固定死了。Transformer 是一个拥有几十层流水线的“超级加工厂”。它拿到原材料后不需要改变原材料本身而是通过几十层的矩阵乘法Attention把这些原材料混合、重组、投影到新的数学空间里。在 Transformer 看来“苹果”那个固定的 4096 维向量只是它的“出生证明”。经过第一层 Transformer 后它吸取了“吃”的信息经过第五层后它吸取了整句话的语气经过最后一层后它变成了一个全新的、带有整个句子语境的“超级向量”。举个极其通俗的例子Embedding冻结的列就像是给你发了一张身份证上面写着你的身高、体重、性别。这个信息是你刚出生时就固定好的不随环境改变。Transformer动态处理就是把你放进社会里。你今天去了医院上下文是治病你的状态向量就变成了“病人”你明天去了酒吧上下文是娱乐你的状态向量就变成了“顾客”。你的身份证Embedding没变但你在 Transformer 里的表现向量表示一直在变。总结Embedding 层是用深度学习训练出来的“静态字典”。一旦训练好在后续微调中基本就被“冻结”了权重固定。Transformer 层是“动态加工厂”。它拿着固定的字典根据句子的上下文把这些词揉捏成极其精准的高级向量然后去输出结果。 SEO 优化官网定制响应式建站教育培训建站