资讯详情

资讯详情

一文搞懂大模型核心概念:深度学习、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双向编码的理解专家BERTBidirectional 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从哪里来LLMLarge 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。模型的知识有截止时间面对最新的私有资料会胡说八道。把知识库内容按向量索引每次提问时先检索出相关片段再拼到提示词里让模型作答能极大减少幻觉。现在主流业务系统基本都是“LLMRAG”的组合单纯的裸模型很少直接进生产。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和幻觉的几个经验单看“温度”调低了模型就不会胡说但并不绝对。即便temperature0模型也可能因为数据噪声、指令不清或理解偏差产生幻觉。杜绝幻觉的方法不是调参而是设计输出约束比如限定只基于给定材料作答不知道就回答“不知道”或者用知识检索做支撑。这比任何参数都重要。还有一招很好用让模型输出思考过程或引用来源。虽然会增加一点Token开销但能显著提升答案的可控性。在关键业务上我会要求模型先输出关键结论再列出依据再给出置信度方便人工审核。个人体会是理解大模型这8个关键词不需要把数学公式背得多熟只要抓住那条主线深度学习给了我们训练复杂模型的工具Token是文字进入模型的接口Transformer解决了长文本建模和并行计算问题预训练让模型获得通识能力微调让模型适配具体场景GPT和BERT是两大经典路线最后所有这些拼在一起成了今天的LLM。搞懂这些再去看任何新模型、新框架心里都会有一条清晰的坐标轴。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →