获课:xingkeit.top/17392/
大模型推理:当AI“想事情”的时候,它到底在做什么?
我第一次盯着大模型生成文字的过程时,心里冒出的想法是:这不就是个超级自动补全吗?你给它几个字,它一个字一个字地往外蹦,直到你觉得“差不多了”或者它自己觉得“该停了”。后来深入学习才发现,这个“蹦字”的过程远比自动补全复杂得多——它像一场精密的舞台剧,前半段是导演在埋头读剧本(预填充),后半段是演员在逐句即兴表演(解码),而temperature和top_p这些参数,就是调控演员“即兴程度”的旋钮。
预填充:AI“通读一遍”的瞬间
想象一下这个场景:你给AI一段很长的提示词,比如“请帮我写一篇关于人工智能发展史的文章”,然后按回车。在输出第一个字之前,AI的GPU风扇突然狂转,几秒后开始输出。这几秒里发生了什么?就是预填充(Prefill)阶段。
预填充的本质是让模型“一口气读完”你给它的全部输入。在这个过程中,模型会把每一个输入Token都送进神经网络,计算出它们之间的注意力权重。这个过程是并行的——所有输入Token同时计算,速度很快,但计算量巨大。这也解释了为什么你给AI输入越长,它“思考”的时间就越久,因为要计算的内容更多了。
我印象最深的一个数据点是:预填充阶段的计算量占整个推理过程的大头,但时间只占一小部分。 因为在GPU上,并行计算是它的强项。这就好比你在读一份100页的合同,虽然内容多,但你只需要快速浏览一遍,不需要逐字精读——这就是预填充在做的事情:快速建立对全部输入的理解。
解码:逐字“蹦词”的马拉松
预填充完成后,模型有了对整体输入的理解,接下来就进入解码(Decoding)阶段——真正一个Token一个Token地往外输出。这个阶段是串行的:生成第一个Token,把它拼接到输入里,再生成第二个Token,再拼接,如此反复,直到触发停止条件。
解码的每一步,模型都要做一次完整的神经网络前向计算,计算量巨大。这也解释了为什么大模型生成内容时,输出的字越多越慢——因为每蹦一个字都要重新算一遍。我测试过不同长度的输出,发现100个Token的生成时间大概是10个Token的10倍,几乎就是线性增长。
解码策略的核心问题其实就一个:每一步都有成千上万个候选Token,你选哪一个? 选最可能出现的那个(贪心解码),还是随机一点(采样解码)?这就引出了temperature和top_p这两个关键参数。
temperature:AI的“胆量”调节器
temperature这个参数,在数学上叫做“对概率分布的平滑系数”——听上去很绕,但说人话就是控制AI敢不敢选“不太可能”的那个词。
temperature=0时,AI永远是“胆小鬼”——它每次都选概率最高的那个Token,结果永远确定,没有变化。temperature=1时,保持原始概率分布,该是多少就是多少。temperature>1时,AI变得“胆大”——它会把原本概率低的Token的概率提升,选词更加冒进,结果可能天马行空甚至胡言乱语。
我做过一个简单实验:给AI同一个提示词“写一首关于春天的诗”,temperature=0时,每次输出几乎一模一样,都是那套“春风十里不如你”的老梗;temperature=0.8时,每次都不一样,有些句子还挺有新意;temperature=1.5时,开始出现奇怪的组合——“春天的冰箱”、“盛开的大象”——就离谱。
每个任务都有它最适合的temperature值。 写代码、做数学题这类需要精确性的任务,temperature越低越好(甚至可以到0.1);写故事、头脑风暴这类需要创造力的任务,temperature可以高一些(0.7-1.0);如果模型在胡说八道,先别骂它,检查一下temperature是不是调太高了。
top_p:AI的“词库”过滤器
如果说temperature决定“敢不敢选冷门词”,那top_p就是决定“在多大范围内选词”。它用概率质量累积的方式来决定候选词的范围——只从累计概率超过p的那个最小词集里选。
top_p=1时,所有词都在候选范围内(不筛选)。top_p=0.9时,只保留累计概率达到90%的那些词,舍弃概率极低的“长尾词”。top_p=0.5时,候选范围更小,只保留概率最高的那一小撮词。
我自己的使用习惯是:temperature和top_p配合使用,而不是单独依赖某一个。 temperature控制“冒进程度”,top_p控制“选择范围”。比如写代码时用temperature=0.1、top_p=0.9——既保证选择范围够广不会漏掉合适的词,又把胆量压到最低不让模型瞎编。做创意写作时用temperature=0.8、top_p=0.95——既敢选有点意外的词,又不会选到概率极低的胡言乱语。
我的三个核心观点
折腾大模型推理参数这么久,我有三个明确的结论:
第一,参数调优是艺术,不是科学。 没有哪个公式能告诉你temperature=0.7比0.8更好。唯一的办法是:准备一组测试用例,跑一遍对比,肉眼判断哪个更好。因为“更好”本身就是一个主观判断——代码准确是客观的,但“文案更有创意”是主观的。
第二,预填充质量决定了解码的上限。 很多人在解码参数上反复调,却忽略了输入的提示词质量。我见过太多案例,提示词写得模糊不清,怎么调temperature都救不回来。提示词里的信息密度和结构清晰度,比任何解码参数都重要——你是希望模型在清晰的边界内发挥,还是在模糊的边界内瞎猜?
第三,理解推理流程比记住参数公式更重要。 你知道temperature是除以T再取softmax,这很好,但更重要的是你明白:temperature=0为什么每次都一样,temperature>1为什么可能胡说八道。知其所以然,才能在遇到具体问题时迅速定位:是候选词分布太平坦了(调temperature),还是候选词范围太宽了(调top_p),还是两者都有问题。
回到推理的本质
大模型的推理过程,说到底就是一场信息压缩与解压的对话。预填充阶段把长输入压缩成稠密的表示向量,解码阶段再从这些向量里逐字解压出新的文本。temperature和top_p就像是解压时的“噪声旋钮”——旋得小,解压出来的东西稳定、可预测、但可能缺乏惊喜;旋得大,解压出来的东西多样、有创意、但也可能失真。
这个过程的魅力就在于它充满了“不确定性”。同样一个输入,同样的参数,每次输出都可能有细微的差别。这种不确定性与我们传统编程里的“确定性”形成了鲜明对比——传统编程是你给同样的输入必定得到同样的输出,而大模型天生就带有概率性。这种概率性既是它的弱点(不可控),也是它的优势(创造力)。
而我逐渐学会的,不是去消灭这种不确定性,而是用temperature和top_p这些参数去驾驭它——知道什么时候该收紧,什么时候该放松,什么时候该让AI自由发挥,什么时候该把它锁死。这种驾驭能力,大概就是用好大模型最核心的技艺之一吧。
本站不存储任何实质资源,该帖为网盘用户发布的网盘链接介绍帖,本文内所有链接指向的云盘网盘资源,其版权归版权方所有!其实际管理权为帖子发布者所有,本站无法操作相关资源。如您认为本站任何介绍帖侵犯了您的合法版权,请发送邮件
[email protected] 进行投诉,我们将在确认本文链接指向的资源存在侵权后,立即删除相关介绍帖子!
暂无评论