一文搞懂大模型核心概念:深度学习、Token、Transformer与LLM
很多朋友刚开始接触大模型的时候,都会被一大堆名词砸晕:LLM、Transformer、GPT、BERT、预训练、微调、深度学习、Token……每个词好像都听说过,但连在一起又分不清谁是谁。这篇文章不打算堆术语,而是用一条线把这些概念串起来,讲清楚它们到底在干什么,以及为什么今天的AI会以这样的方式运转。你可以把这里当成一份“大模型入门地图”,按着顺序看,后面和人聊天吹牛也能更有底气。
1. 从深度学习说起:一切的基础
1.1 深度学习到底在“学”什么
深度学习听起来很高大上,但本质上一句话就能概括:让计算机通过海量数据,自己总结出输入和输出之间的规律。它模拟的是人脑神经元传递信号的方式,用一层层相互连接的“神经元”组成神经网络,每一层对数据做一次变换,最终把输入映射到我们想要的输出。
举个例子。你给模型看一万张猫的图片,每张图都标注“这是猫”,模型会不断调整内部参数,直到它看到新图片时能判断“这张大概率是猫”。这个过程叫“学习”,学习的内容并不是记住某张图,而是学会一组“特征组合”的权重。比如猫有尖耳朵、圆眼睛、胡须等特征,这些特征在不同层被逐步抽象出来,底层识别边缘和纹理,高层识别形状和部位。
深度学习和传统机器学习最大的区别,在于它不需要人工去设计特征。传统方法可能要手动告诉程序“毛发的纹理是这样的、耳朵的轮廓是那样的”,但深度学习只需要原始数据和标签,特征自己会长出来。这也是它能在大规模、高维数据上发力的原因。今天的大模型,神经网络层数动辄上百层,参数量从几亿到几千亿,靠的就是这套“自动特征学习”的机制。
1.2 神经网络怎么“学习”——前向传播和反向传播
具体到训练一个神经网络,核心是两步:前向传播和反向传播。
前向传播就是数据从输入层进入,经过各层计算,最后得到输出结果。一开始模型参数是随机的,输出自然乱七八糟。我们计算输出和真实答案的差距,这个差距叫“损失”。接下来是反向传播:从输出端往输入端倒着走,利用链式求导法则,算出每个参数对损失的影响方向。然后按照“让损失变小”的方向,微调所有参数,这一步叫“梯度下降”。
可以想象成你在山顶蒙着眼走向山脚。你不知道路,但每走一步能感觉到脚下是上坡还是下坡,于是朝着下坡方向迈步。走多了,自然就下到山脚。神经网络训练就是这个过程:反复走,反复调整,直到损失足够小。
深度学习之所以在近十年爆发,不只是因为算法变聪明了,还因为GPU并行计算能力和数据量都跟上了。神经网络非常大的时候,参数动辄上亿,靠传统CPU训练得等到天荒地老。而GPU擅长做大量简单的矩阵运算,正好匹配神经网络的线性代数本质。
2. Token:一切文本的“乐高积木”
2.1 为什么要有Token这个东西
计算机不认识文字,只认数字。所以要处理文本,第一步就是把文字换成数字。最直观的方式是每个字对应一个数字,但一个字的含义太有限,而且直接编码会丢失上下文。于是大家想到:把文本切分成一小块一小块的“单元”,每个单元映射成数字,模型再学习这些数字之间的关系。这个单元就是Token。
Token可以是一个字,一个词,也可以是半个词甚至几个字符。比如“大模型真好用”这句话,最简单的分词是按字切:["大", "模", "型", "真", "好", "用"]。也可以按词切:["大模型", "真", "好用"]。具体怎么切,要看分词器的规则。
为什么不用整句话作为一个Token?因为整句太稀疏了,世界上句子无穷多,模型根本学不完。Token太细小也不行,比如按字节切,一个汉字要拆成三个字节,语义全碎。Token的设计要平衡两件事:覆盖尽量多的语言现象,同时让模型容易学习它们之间的规律。这就是一种“乐高积木”思路:用有限种类的积木块,拼出无穷多句话。
2.2 分词器与词表
实际工程中,翻译文本到Token靠的是分词器(Tokenizer)。目前主流的分词方式叫BPE(字节对编码)。它的思路很聪明:先按单个字符处理,然后统计语料里哪些字符对出现频率高,把它们合并成一个Token,反复迭代,直到达到目标词表大小。
BPE的好处是能处理未知词。假设模型词表里没有“量子纠缠”这个组合词,它可以被拆成“量”、“子”、“纠缠”或者“量子”、“纠缠”等已有Token,模型仍然能理解。这种特性对多语言、网络新词特别重要。今天的大模型词表一般在几万到几十万之间。比如一个典型的词表是50,000个Token,几乎能覆盖常用英语词汇、中文常用字词以及各种代码符号。
还有一个细节很多新手会忽略:Token不是按“字数”算的。英文里一个词可能被拆成好几个Token,中文相对好一些,一个字大概对应0.6到1个Token。输入给模型的内容有长度限制,这个限制指标就是Token数,不是字符数。所以同样长度的一段英文和中文,消耗的Token不一样,实际计费也不一样。
2.3 Token对模型能力的隐藏影响
Token选择会直接影响模型质量。词表太小,很多词被拆得太碎,模型要花更多注意力去“拼出”语义;词表太大,每个Token的训练样本变稀疏,也容易学不好。各大模型在训练前期都会专门调分词器,让常用词尽可能成为一个整体。
另外,模型输出的每个字也是一个个Token生成的。它每步只预测下一个Token是什么,然后把预测结果接回输入,继续预测下一个。所以Token是大模型真正意义上的“基本粒子”,理解它之后,再看API的参数里max_tokens就明白了:那是在控制最多生成多少个Token,而不是多少个汉字。
3. Transformer:大模型的“地基”
3.1 为什么不是RNN或CNN
在Transformer出现之前,处理文本主要靠循环神经网络(RNN)和它的变体LSTM、GRU。RNN的思路是让网络“顺序读取”句子,每读一个词,就把之前的信息带进内部状态里。问题是:句子太长的时候,前面的信息会慢慢被冲淡,这叫“长距离依赖失效”。而且因为是顺序处理,没法并行,训练速度很慢。
CNN虽然能并行,但看图用的卷积核很难天然地处理语言的顺序信息,需要堆很多层才能看到长距离关系。
Transformer在2017年的一篇论文《Attention Is All You Need》里被提出来,它把注意力机制做到极致:让序列里任意两个位置直接建立联系,不再依赖逐字传递。只要输入一句话,它能把这句话中所有Token两两之间计算关联权重。不管两个词隔得多远,都能直接“看到”对方。这解决了长距离依赖问题,而且整个计算可以并行。可以说,Transformer改变了语言模型的“交通方式”:原来是一条条小路,现在是四通八达的高铁网。
3.2 自注意力机制的核心思路
自注意力机制是Transformer的核心。它把每个Token都映射成三个向量:Query(查询)、Key(键)、Value(值)。你可以这样理解:每个词都在问“谁和我有关系”,同时告诉别人“我是谁”(Key),以及“我的内容是什么”(Value)。
计算过程就是把Query和所有Key做点积,得到一个分数,经过softmax变成权重,再对所有Value加权求和。权重大的词汇,信息被保留得多。比如句子“小明喜欢吃苹果,因为它很甜”,“它”和“苹果”的注意力权重一定很高,模型因此知道“它”指代苹果。
为了让模型能同时捕捉不同类型的语义关系,实际使用的是多头注意力:把Query、Key、Value各拆成多份,分别做注意力计算,最后拼接起来。这相当于多个不同角度的“解读器”,一个注意语法关系,一个注意语义关系,一个注意位置关系,综合起来理解力更强。
Transformer还有两个关键部件:位置编码和前馈网络。因为注意力计算本身不区分词序,打乱句子顺序计算结果一模一样,所以必须把位置信息编码进去。原始论文里用的是正弦余弦函数的位置编码,后来的模型多用可学习的位置向量或旋转位置编码。前馈网络则是在每个注意力层之后做一次非线性变换,增加模型的表达能力。
3.3 为什么Transformer能撑起大模型
Transformer不只是效果变好了,更关键的是它能把模型“变大”而不崩。因为计算可并行,我们可以把几千亿参数堆上去,在超大规模集群上训练。模型越大,训练数据越多,表现越好。这个“规模效应”在RNN时代是做不到的。
还有一个重要的结构细节:Transformer的Encoder和Decoder两个部分。原始设计是Encoder读入完整句子做理解,Decoder根据前面的输入做逐词生成。后来有两个著名的变体:只保留Encoder的叫BERT,只保留Decoder的叫GPT。这两个方向后来衍化成两条主要技术路线,我们等会再细说。总之,现在的语言大模型几乎全是Transformer的某种改写或扩展,比如在层归一化位置上微调、换激活函数、加专家混合层等,但根基没有变。
4. 预训练与微调:先通识再专精
4.1 预训练:让模型“读万卷书”
预训练是整个大模型生态里最烧钱也最关键的环节。简单说,就是用海量的、未标注的文本,去训练一个通用的语言模型。它不需要人工标注,任务设计成“预测下一个词”这种自监督方式。给模型一句话的前面部分,让它猜后面是什么词。错了就调整参数,对了就保持。这个过程在几十TB的网页、书籍、代码上反复进行。
今天的GPT就属于这类模型,所以它被叫做“自回归语言模型”。通过这种“读万卷书”的训练,模型记住了大量语言的统计规律、常识知识、语法结构、推理模式。你问它“什么花在冬天开放”,它能答上来,并不是因为它有一个知识库,而是它在预训练时读到过大量类似表述,学会了“冬季开放的花包括梅花、山茶花”之类的关联模式。
预训练还有一个重要产物:通用的向量表示。早期的BERT把文本转换成一组向量,这些向量可以被下游任务直接使用。就像一个人系统学习过人类所有学科的基础,无论让他去做什么工作,他都比普通零基础的人上手快得多。预训练就是给模型打这个通识底子。
4.2 微调:让模型成为领域专家
预训练模型已经会说话了,但它是“通才”,不一定懂你的业务。比如你想让它做法律问答、客服对话、情感分析,直接拿来用效果可能一般。这时候就需要微调:拿一批高质量的领域数据,在预训练模型的基础上继续训练,让模型适应特定任务。
微调和预训练的区别在数据和算力要求上。预训练可能需要上万张GPU、训练几个月;微调通常一到几张GPU,训练几小时就能完成。微调也不是从零开始,而是在已有参数的基础上做小幅调整,所以它有“站在巨人肩膀上”的效果。
微调的方式也分几种。最传统的是把模型输出的最后一层换成一个新分类头,去适配分类任务。比如BERT加一个全连接层就能做“好评差评”分类。后来流行指令微调,把任务描述成对话或者指令,让模型学会“按照要求做事情”。比如用几百条“给出一段文本,提取情绪类型”的样本,模型就能学会做情绪分析,而且面对类似指令时还能表现出一定的泛化能力。
4.3 一套完整的工作流
在实际项目中,我比较推荐的工作流是这样的:先选一个合适的预训练基座模型,比如某个开源的中文大模型,然后确定任务类型和期望输入输出格式;接着准备几千到几万条高质量标注数据,分成训练集和验证集;再用合适的参数做微调,观察loss变化,防止过拟合;最后在验证集上评估效果,如果不够好,再加数据或者调超参。
这里一定要提醒一个坑:微调不是一个“万灵丹”。模型在预训练阶段已经会的东西,微调不改变;微调能改变的是“让它更熟悉你的输出格式和特定领域知识”。如果任务本身很难,你的数据质量又差,微调出来的模型反而可能变笨,出现灾难性遗忘。所以数据质量永远第一。我自己的习惯是:先用现成的大模型做零样本测试,看痛点在哪,再针对性地收集数据去微调,而不是一上来就堆数据。
5. GPT与BERT:两条技术路线
5.1 GPT:自回归的生成王者
GPT的全称是Generative Pre-trained Transformer,中文翻译是“生成式预训练Transformer”。它的核心思路是:只用Transformer的Decoder部分,从一开始就专注“预测下一个Token”。GPT的训练数据可以是任何文本,给前文,预测后文,就这么简单。但正是这个简单的目标,让它拥有了强大的文本生成能力。
为什么“预测下一个词”能训练出会聊天、会写代码、会翻译的模型?因为要预测准,模型就必须理解上下文、掌握语言规则、知道世界常识。预测任务成了一种隐性的“全能考试”,逼着模型把各种能力学到手。GPT的火爆大家也看到了,从GPT-3到ChatGPT再到GPT-4,一路把生成能力推高。用户给一句指令,它就能顺着思路把内容创作出来。
GPT系列的另一个重要特点是采用了上下文学习(in-context learning)。在给模型输入时,你不需要专门微调,只要在提示词里放几个例子,它就能照着例子继续做。这得益于超大模型的规模效应:模型参数足够多、训练数据足够广后,它具备了一种“即时模仿”能力。这也是Prompt工程存在的基础。
5.2 BERT:双向编码的理解专家
BERT(Bidirectional Encoder Representations from Transformers)走的是另一条路。它只使用Transformer的Encoder部分,训练时不是“从左往右”猜下一个词,而是同时看到句子的左右两侧。BERT的预训练任务有两个:一是随机掩盖15%的词,让模型根据上下文猜被掩码的词;二是判断两句话是否连续。这样训练出来的模型,对文本语义理解的敏感度特别高。
BERT最擅长的是自然语言理解任务,比如文本分类、命名实体识别、情感分析、问答中的段落抽取。你给它一篇影评,它能准确判断褒贬;给它一段病历,它能抽取出症状、药物、诊断结果。这些任务在BERT出现之前,精度记录一次次被刷新,之后很多榜单被它霸榜,可以说是开启了NLP的“预训练时代”。
BERT生成能力弱,基本不能连续写文章,但它长度更短、推理更快、部署更轻,在很多生产系统里依然是“物美价廉”的选择。即使今天有了GPT-4这种能理解又能生成的大家伙,BERT类模型也没有完全消失,因为很多任务只需要理解,不需要写长文案,用小模型能省下大量成本。
5.3 两条路线怎么选型
选GPT还是BERT,取决于你要做什么。如果任务是开放式的生成,比如文案创作、代码生成、对话系统,毫无疑问选GPT类模型。如果任务是结构化信息抽取、标签分类、相似度判断,BERT类的轻量模型可能更快更稳。
不过现在也出现了一个趋势:很多GPT类大模型本身就具备强大的分类能力。你完全可以用它做零样本分类,把标签放到提示词里让它选,效果很多时候不比微调过的BERT差。这时候就要权衡:是花时间标注训练BERT,还是直接用大模型的API省事。我的经验是,数据量不大、实时性要求不高时,直接用大模型;如果追求极致延迟和电路化部署,再说微调小模型。
6. LLM:集大成者与现实应用
6.1 LLM从哪里来
LLM(Large Language Model)中文叫大语言模型,直接把前面几个概念统一了:它是基于Transformer架构、经过大规模预训练的巨型语言模型,参数规模通常在十亿甚至千亿以上。GPT-3、GPT-4、开源社区里的各个中文大模型,都属于LLM。
LLM之所以“大”,不只是参数多,训练数据也大,训练代价也大。千亿参数的模型,动辄需要上千张GPU同时训练几个月。很多大厂发明了各种并行策略:数据并行、模型并行、流水线并行,把模型切到不同设备上协同计算。这些工程问题本身就是一门学问。
在大模型出现之前,NLP界是“一任务一模型”。情感分析一个模型,翻译一个模型,摘要一个模型,每个都要单独开发和部署。LLM改变了一切:一个模型通过不同的提示词就能胜任几乎所有任务。这种通用性让它从实验室走向了产品,也带动了API经济、RAG、Agent等一大批应用模式。
6.2 LLM的参数和Token,你真的得懂
使用LLM时,有两个最常见的参数:temperature和max_tokens。temperature控制随机性,值越大多样性越强,越少越确定。做代码生成或数学题时建议调低,比如0.1;做头脑风暴或文案创作时调高,比如0.8。max_tokens控制生成长度,前面说了,它按Token计数,所以别以为设100就是100个字,可能只有七八十个汉字。
上下文长度也是Token决定的,比如某模型支持128k上下文,意思是它能一次性读入约9万汉字的内容。很多人问“为什么ChatGPT记不住长对话”,因为它超出上下文窗口后,早先的内容就被截断了。所以用的时候要学会精简历史记录,或做检索增强,把关键信息抽出来放回上下文里。
6.3 实际使用大模型的经验之谈
我在实际项目中踩过很多坑,说三个最有用的经验。
第一,提示词才是当前最大的“软件工程”。同样的模型,不同的提示词效果天差地别。描述任务要具体,给出输出格式,最好提供示例。我习惯把提示词写成结构化形式:角色背景、任务目标、处理步骤、输出要求、额外限制,五段式。
第二,不要盲目追求大模型。数据私有、延迟敏感、离线部署的场景,一个70B的开源模型在小办公室里也可能跑不动。真正落地时要算一笔账:API调用成本、硬件成本、维护成本、效果收益。有时候用一个小模型加规则,反而比硬上大模型更实在。
第三,善用检索增强生成(RAG)。模型的知识有截止时间,面对最新的私有资料会胡说八道。把知识库内容按向量索引,每次提问时先检索出相关片段,再拼到提示词里让模型作答,能极大减少幻觉。现在主流业务系统基本都是“LLM+RAG”的组合,单纯的裸模型很少直接进生产。
7. 常见问题与避坑指南
7.1 参数量越大,模型就越强吗
总体来说,规模越大,能力越强,但这句“越大越好”是有代价的。同样的参数量,训练数据的质量、数据的覆盖度、训练的充分程度往往更关键。有些70B模型因为数据没喂够,效果可能比精心训练过的7B模型还差。选模型时不能只看参数大小,要看实际评测结果。而且模型越大,推理成本越高,如果任务用7B就能完成,非上70B就是浪费。
7.2 微调就是多训练一遍?
不止一个朋友问我:“我让大模型读一万篇文章,它是不是就学会了?”答案是没有。普通微调不会有这种“读书学习”效果。微调改变的是模型行为模式,而不是把新知识写进去。要让模型知道某条知识,主流做法是把知识放进上下文或外部检索库里,靠RAG实现。如果你真想通过微调注入新知识,那需要非常多的样本且结果很不稳定,许多人尝试后都放弃了,这个方向远不如直接告诉模型来得快。
7.3 Token数是不是等于字数?
这个问题经常引发误会。不同模型的Token计算规则不同,同一个词在不同模型里可能对应不同数量的Token。API账单上显示的Token数并不是你输入的字符数。中文字符一般按0.6到1个Token算,英文单词常按1到2个Token算。要省钱,就尽量精简提示词,去掉冗余描述;要准确估计,最好用模型自带的Token工具提前算一下。
7.4 关于Prompt和幻觉的几个经验
单看“温度”调低了,模型就不会胡说,但并不绝对。即便temperature=0,模型也可能因为数据噪声、指令不清或理解偏差产生幻觉。杜绝幻觉的方法不是调参,而是设计输出约束,比如限定只基于给定材料作答,不知道就回答“不知道”;或者用知识检索做支撑。这比任何参数都重要。
还有一招很好用:让模型输出思考过程或引用来源。虽然会增加一点Token开销,但能显著提升答案的可控性。在关键业务上,我会要求模型先输出关键结论,再列出依据,再给出置信度,方便人工审核。
个人体会是,理解大模型这8个关键词,不需要把数学公式背得多熟,只要抓住那条主线:深度学习给了我们训练复杂模型的工具;Token是文字进入模型的接口;Transformer解决了长文本建模和并行计算问题;预训练让模型获得通识能力;微调让模型适配具体场景;GPT和BERT是两大经典路线;最后所有这些拼在一起,成了今天的LLM。搞懂这些,再去看任何新模型、新框架,心里都会有一条清晰的坐标轴。