琼海市网站建设_网站建设公司_GitHub_seo优化
2025/12/20 15:47:06 网站建设 项目流程

想要入门大语言模型(LLM),核心是抓住它的底层逻辑——无论你听到的预训练、微调,还是实际应用中的推理过程,本质上都围绕一个核心任务展开:next token prediction(下一个token预测)。简单说,就是模型以“自回归”的方式,从左到右一步步生成连贯的文本,这也是所有LLM的共同基石。

一、先搞懂基础:什么是Token?

接触LLM的第一步,必然要理解“Token”这个核心概念。它不是复杂术语,本质就是文本的“最小拆分单元”——可以是一个词、一个子词,甚至是一个标点符号。在把文本送入大模型之前,必须先做“tokenize(分词)”处理,把连续的文本拆成离散的Token序列,这个过程就像我们阅读前先把段落拆成句子一样。

这里要注意:分词器是在大量无标签文本上提前训练好的,它能保证拆分出的Token数量固定且唯一,这个固定的Token集合就是我们常说的“词表”(Vocabulary)。不同语言的Token拆分逻辑有差异,小白可以直接记下面的总结:

1. 英文中的Token

  • 拆分单位:单词、子词或标点,比如“unhappiness”会拆成“un”“happi”“ness”(子词拆分能兼顾未登录词和效率);
  • 数量换算:1个Token约对应3-4个字母,或0.75个英文单词(粗略估算,方便计算文本Token数)。

2. 中文中的Token

  • 拆分单位:单个汉字或分词后的词语,比如“人工智能”可能拆成“人工”“智能”;
  • 平台差异:不同大模型平台的Token换算不同,通义千问/千帆1 Token=1个汉字,腾讯混元1 Token≈1.8个汉字(实际使用时以平台文档为准)。

分词后,每个Token都会对应一个固定的“向量表示”,这就是模型的“Embedding层”的作用。获取Token的Embedding其实很简单,就像查字典一样:词表中每个Token都有唯一的索引,通过索引就能找到对应的向量(这个向量包含了Token的语义信息)。

关键补充:位置编码(Position Embedding)

文本是有顺序的(比如“我吃苹果”和“苹果吃我”意思完全不同),但LLM的核心结构——Transformer,本身不具备“感知顺序”的能力。为了解决这个问题,必须给每个Token加上“位置信息”:给每个位置分配一个专属的“位置Embedding”,再和对应的Token Embedding相加,这样模型就能区分不同位置的Token了。

这里引申出一个小白常问的概念:上下文长度(Context Length)。它指的是模型训练时能接收的最大Token长度。如果训练时只学了短文本的位置Embedding,推理时就无法处理超长文本——因为模型没见过长位置的编码,就像没学过的字无法认识一样。

二、LLM的核心:预训练过程详解

当我们拿到带位置信息的Token Embedding后,下一步就是送入模型进行“特征加工”。主流LLM(比如GPT系列)用的是“仅解码器(Decoder-only)”的Transformer结构,这个结构会对每个Token的Embedding做复杂的特征提取,最终输出一个经过加工的Embedding向量。

这个输出的Embedding,就是用来做“下一个Token预测”的核心。很多小白觉得这个过程复杂,其实可以把它简化成一个“分类问题”,步骤如下:

  1. 线性层转换:把输出的Embedding送入一个线性层,输出维度等于词表大小——相当于让模型判断“下一个Token是词表中的哪一个”;
  2. Softmax归一化:把线性层的输出转换成概率(所有Token的概率和为1);
  3. 训练目标:最大化“预测正确下一个Token”的概率(简单说就是让模型尽量猜对);
  4. 推理逻辑:从概率分布中“采样”出一个Token,作为下一个生成的内容。

核心机制:因果自注意力(Causal Self-Attention)

训练时,模型能一次性处理整个句子的所有Token,同时预测每个Token的下一个Token,这靠的是“因果自注意力”机制——通过一个“掩码(Mask)”,让模型在预测当前Token的下一个Token时,只能看到前面的Token,看不到后面的Token(避免“作弊”)。

具体来说:计算注意力权重时,会把当前Token之后所有位置的权重设为0,这样模型就只能基于已有的前文信息做预测,符合人类“从左到右阅读”的逻辑。

而推理阶段,模型则是“逐Token生成”:先输入第一个Token,预测第二个;再把前两个Token作为输入,预测第三个;以此类推,这就是“自回归生成”的核心逻辑。

延伸:生成时的采样策略(小白必知)

推理时从概率分布中采样下一个Token,不是“随机乱选”,而是有对应的策略,不同场景选不同策略:

  • 贪婪策略(Greedy Search):直接选概率最高的Token——优点是稳定,缺点是容易生成重复、生硬的文本;
  • Top-k采样:只从概率最高的k个Token中采样——平衡稳定性和多样性;
  • 核采样(Nucleus Sampling):只从概率和达到某一阈值(比如0.9)的Token中采样——比Top-k更灵活,能适应不同文本的概率分布。

另外一个关键参数是Temperature(温度),用来控制生成的随机性,小白可以记这个规律:温度越小越稳定,越大越多样。

三、代码落地:从0看懂nanoGPT实现

理解了原理,再看代码就很简单了。这里以经典的nanoGPT(Karpathy实现的极简GPT)为例,拆解核心代码逻辑。nanoGPT的代码仓库地址:https://github.com/karpathy/nanoGPT/tree/master

所有Transformer类模型的核心都是“堆叠多个Block”,每个Block主要包含两部分:多头因果自注意力(Multi-headed Causal Self-Attention)前馈神经网络(Feed-forward Neural Network)。结构示意图如下:

1. 单个Block的实现(核心代码解读)

每个Block的作用是“特征增强”,通过注意力机制捕捉Token间的关联,再通过前馈网络加工特征。代码中用了“预归一化”(先做LayerNorm再做注意力/前馈),这是GPT-2之后的主流做法,能让训练更稳定。

importtorchimporttorch.nnasnnfromtorch.nnimportfunctionalasFclassBlock(nn.Module):def__init__(self,config):super().__init__()# 第一层归一化self.ln_1=nn.LayerNorm(config.n_embd,bias=config.bias)# 因果自注意力模块self.attn=CausalSelfAttention(config)# 第二层归一化self.ln_2=nn.LayerNorm(config.n_embd,bias=config.bias)# 前馈神经网络模块self.mlp=MLP(config)defforward(self,x):# 残差连接:x + 注意力输出(缓解梯度消失)x=x+self.attn(self.ln_1(x))# 残差连接:x + 前馈网络输出x=x+self.mlp(self.ln_2(x))returnx

2. 完整nanoGPT的结构(整体逻辑)

整个GPT模型的结构可以拆解为:Token Embedding层(将Token转为向量)→ 位置Embedding层(添加位置信息)→ Dropout层(防止过拟合)→ 堆叠多个Block(特征加工)→ 最终归一化层 → 输出层(预测下一个Token)。

classGPT(nn.Module):def__init__(self,config):super().__init__()# 校验必要的配置参数(词表大小、上下文长度)assertconfig.vocab_sizeisnotNoneassertconfig.block_sizeisnotNoneself.config=config# Transformer核心模块集合self.transformer=nn.ModuleDict(dict(wte=nn.Embedding(config.vocab_size,config.n_embd),# Token Embedding层wpe=nn.Embedding(config.block_size,config.n_embd),# 位置Embedding层drop=nn.Dropout(config.dropout),# Dropout层h=nn.ModuleList([Block(config)for_inrange(config.n_layer)]),# 堆叠多个Blockln_f=nn.LayerNorm(config.n_embd,bias=config.bias),# 最终归一化层))# 输出层:将特征向量映射到词表维度(预测下一个Token)self.lm_head=nn.Linear(config.n_embd,config.vocab_size,bias=False)# 权重共享:Token Embedding层和输出层共享权重(提升效率、减少参数)self.transformer.wte.weight=self.lm_head.weight# 初始化所有参数self.apply(self._init_weights)# 对残差连接的投影层做特殊初始化(GPT-2论文推荐,提升训练稳定性)forpn,pinself.named_parameters():ifpn.endswith('c_proj.weight'):torch.nn.init.normal_(p,mean=0.0,std=0.02/math.sqrt(2*config.n_layer))# 参数初始化函数(默认用正态分布初始化)def_init_weights(self,module):ifisinstance(module,nn.Linear):torch.nn.init.normal_(module.weight,mean=0.0,std=0.02)ifmodule.biasisnotNone:torch.nn.init.zeros_(module.bias)elifisinstance(module,nn.Embedding):torch.nn.init.normal_(module.weight,mean=0.0,std=0.02)

关键知识点:代码中用到了“权重共享”(Token Embedding层和输出层共享权重)。这是GPT系列的经典优化,既能减少模型参数数量(提升训练效率),又能让Token的语义向量和预测向量更一致,从而提升模型性能。

3. 训练与推理的前向传播逻辑

无论是训练还是推理,核心都是“构建Embedding→特征加工→输出预测”的流程。下面重点看前向传播的核心代码:

defforward(self,idx,targets=None):device=idx.device b,t=idx.size()# b:批量大小,t:序列长度assertt<=self.config.block_size,f"序列长度不能超过上下文长度{self.config.block_size}"# 1. 构建位置索引(0到t-1)pos=torch.arange(0,t,dtype=torch.long,device=device)# 2. 生成Token Embedding和位置Embeddingtok_emb=self.transformer.wte(idx)# (b, t, n_embd):批量×序列长度×嵌入维度pos_emb=self.transformer.wpe(pos)# (t, n_embd):序列长度×嵌入维度# 3. 叠加Embedding并经过Dropoutx=self.transformer.drop(tok_emb+pos_emb)# 4. 送入所有Block进行特征加工forblockinself.transformer.h:x=block(x)# 5. 最终归一化x=self.transformer.ln_f(x)# 6. 输出预测(如果有目标值,计算损失)logits=self.lm_head(x)# (b, t, vocab_size):预测每个位置的下一个Token概率loss=NoneiftargetsisnotNone:# 调整维度以匹配交叉熵损失的输入要求loss=F.cross_entropy(logits.view(-1,logits.size(-1)),# (b*t, vocab_size)targets.view(-1)# (b*t,))returnlogits,loss

4. 推理阶段的生成逻辑(核心代码解读)

推理阶段的核心是“自回归循环”:不断将生成的Token拼接到输入序列中,重复预测下一个Token。代码中用了@torch.no_grad()装饰器,关闭梯度计算(提升推理速度,避免不必要的内存占用)。

@torch.no_grad()defgenerate(self,idx,max_new_tokens,temperature=1.0,top_k=None):""" 输入:idx(初始序列,shape=(b,t))、max_new_tokens(要生成的最大Token数) 输出:生成完成的序列(shape=(b,t+max_new_tokens)) """for_inrange(max_new_tokens):# 裁剪序列长度:如果输入序列超过上下文长度,只保留最后block_size个Tokenidx_cond=idxifidx.size(1)<=self.config.block_sizeelseidx[:,-self.config.block_size:]# 前向传播:获取当前序列的预测logitslogits,_=self(idx_cond)# 只取最后一个Token的logits(因为我们只需要预测下一个Token)logits=logits[:,-1,:]/temperature# 除以温度调整随机性# 可选:Top-k采样(只从概率最高的k个Token中选择)iftop_kisnotNone:v,_=torch.topk(logits,min(top_k,logits.size(-1)))logits[logits<v[:,[-1]]]=-float('Inf')# 把k以外的Token概率设为负无穷# 转换为概率分布probs=F.softmax(logits,dim=-1)# 从概率分布中采样下一个Tokenidx_next=torch.multinomial(probs,num_samples=1)# 把新生成的Token拼接到输入序列中,进入下一轮循环idx=torch.cat((idx,idx_next),dim=1)returnidx

四、深入理解:温度参数(Temperature)的作用

前面提到温度参数控制生成随机性,这里展开讲清楚原理,小白也能听懂。温度的核心作用是“调整logits的分布形状”,进而改变最终的概率分布——logits是模型输出的原始分数,还没经过softmax转换为概率。

1. 不同温度的效果

  • 温度>1(增加随机性):会放大logits的数值,让logits分布更“平坦”。经过softmax后,不同Token的概率更接近,模型更容易选择低概率Token,生成的文本更多样。比如原始logits是[10,20,30],除以温度2后变成[5,10,15],概率分布更均匀。
  • 温度<1(减少随机性):会缩小logits的数值,让logits分布更“尖锐”。经过softmax后,高概率Token的优势更明显,低概率Token几乎不会被选中,生成的文本更稳定、更可预测。比如原始logits[10,20,30],除以温度0.5后变成[20,40,60],概率集中在高分数Token上。
  • 温度=1(原始分布):不改变logits,概率分布完全遵循模型的原始预测结果。

2. 为什么需要调整温度?

不同场景需要不同的生成效果,温度参数就是为了适配这些场景:

  • 需要创造性:比如写诗歌、编故事,用温度>1(比如1.2),让文本更多样;
  • 需要准确性:比如机器翻译、问答系统,用温度<1(比如0.7),让输出更稳定、更少错误;
  • 平衡需求:日常文本生成,用温度=1,保留模型的原始预测逻辑。

到这里,LLM从原理到代码的核心逻辑就讲完了。总结一下:LLM的核心是“下一个Token预测”,从文本分词到Embedding,再到Transformer的特征加工,最后通过采样生成文本,整个流程环环相扣。结合nanoGPT的代码,能更直观地理解每个环节的作用,小白可以先把核心代码跑起来,再逐步拆解细节~

那么,如何系统的去学习大模型LLM?

作为一名从业五年的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。

所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。

由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~

为什么要学习大模型?

我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。

👉大模型学习指南+路线汇总👈

我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。

👉①.基础篇👈

基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。

👉②.进阶篇👈

接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。

👉③.实战篇👈

实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。

👉④.福利篇👈

最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询