当前位置: 首页 > news >正文

大语言模型的词语生成机制:Logits、Softmax 与Sampling详解

大语言模型的词语生成机制:Logits、Softmax 与Sampling详解

大型语言模型(LLM)即使面对相同的提示,也能产生多样、富有创意且有时令人惊讶的输出。这种随机性不是bug,而是模型从概率分布中采样下一个标记的核心特性。本文将解析关键采样策略,并展示温度、top-ktop-p等参数如何影响一致性与创造力之间的平衡。

在本教程中,我们将采用实践方式来理解:

  • 对数如何变成概率
  • 温度、top-ktop-p抽样的工作原理
  • 不同采样策略如何影响模型的下一个token分布

到最后,你会理解LLM推理背后的机制,并能够调整输出的创造力或确定性。

我们开始吧。

概述

本文分为四个部分;它们是:

  • Logits如何转换为概率
  • Temperature温度
  • Top-k抽样
  • Top-p抽样

对数如何成为概率

当你向LLM提问时,它会输出一个logit向量。Logit是模型为词汇中每个可能的下一个词组分配的原始分数。

如果模型的词汇表为𝑉它会输出一个向量𝑉每个下一个词的位置。logit是一个真实的数字。它通过softmax函数转换为概率:


其中𝑥我是令牌的logit我以及𝑝我是对应的概率。Softmax将这些原始分数转换为概率分布。全部𝑝我为正数,且它们的和为1。

假设我们给模型这个提示:

今天的天气真___

模型将词汇中的每个词都视为可能的下一个词。为了简化,假设词汇中只有6个标记:

wonderful cloudy nice hot gloomy delicious

模型为每个令牌生成一个logit。以下是模型可能输出的对数示例集以及基于softmax函数的相应概率:

TokenLogitProbability
wonderful1.20.0457
cloudy2.00.1017
nice3.50.4556
hot3.00.2764
gloomy1.80.0832
delicious1.00.0374

你可以用PyTorch的softmax函数来确认:

importtorchimporttorch.nn.functionalasF vocab=["wonderful","cloudy","nice","hot","gloomy","delicious"]logits=torch.tensor([1.2,2.0,3.5,3.0,1.8,1.0])probs=F.softmax(logits,dim=-1)print(probs)# Output:# tensor([0.0457, 0.1017, 0.4556, 0.2764, 0.0832, 0.0374])

基于此结果,概率最高的代币为“好”。大型语言模型并不总是选择概率最高的令牌;相反,它们从概率分布中抽样,每次都产生不同的输出。在这种情况下,看到“漂亮”的概率是46%。

如果你想让模型给出更有创意的答案,如何改变概率分布,使得“阴云”、“高温”等答案也更频繁地出现?

温度

温度(𝑇)是一个模型推理参数。它不是一个模型参数;它是生成输出的算法中的一个参数。它在应用 softmax 前先对 logit 进行扩展:

你可以预期概率分布会更具确定性,如果𝑇 <1,因为 各值之间的差值𝑥我会被夸大。另一方面,如果𝑇 >1,作为每个值的差值𝑥我将被降低。

现在,让我们可视化温度对概率分布的影响:

importmatplotlib.pyplotaspltimporttorchimporttorch.nn.functionalasF vocab=["wonderful","cloudy","nice","hot","gloomy","delicious"]logits=torch.tensor([1.2,2.0,3.5,3.0,1.8,1.0])# (vocab_size,)scores=logits.unsqueeze(0)
http://www.cnnetsun.cn/news/64285.html

相关文章:

  • AI产品经理必读:构建智能交互系统的终极指南!
  • 谷歌浏览器性能面板使用指南
  • 警惕绿色积分陷阱!一分钟揭秘消费骗局
  • 13、CentOS网络管理全攻略
  • 技术实践:用大模型平台重构医疗数据分析Pipeline
  • 智元AGIBOT荣登具身智能机器人技术研发排行榜TOP1
  • Gitee vs GitHub 2025深度评测:国产代码托管平台的崛起与超越
  • JVM 安全与沙箱深度解析
  • t-SNE快速降维算法详解与实现
  • Python编程入门从零开始掌握基础语法一
  • 20、BusyBox:嵌入式系统的强大工具
  • python 生成psd文件
  • 25、Linux内核调试全攻略:挑战与解决方案
  • 30、Linux移植与实时性:从定制平台到实时系统的深入解析
  • 【界面案例】火语言RPA读取Excel文件,循环写入界面表格
  • 【JAVA进阶】鸿蒙开发与SpringBoot深度融合:从接口设计到服务部署全解析
  • [C#][winform]基于yolov11的水下目标检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面
  • 【睿擎派】云端一体,多种通信协议构建机械臂运动控制系统
  • 4.1用户空间RTOSAPI
  • 11、嵌入式Linux开发:内核日志存储、追踪系统与设备树管理
  • 17、Yocto项目软件层与应用开发全解析
  • 宁波紧固件产业集群的外向型制造与装备升级路径
  • AI赋能工业4.0:数据堂一站式数据服务加速制造智能化落地
  • 如何打造吸睛动态头像?GIF动态头像制作指南
  • 评估AI的终极答案:LLM-As-a-Judge!AI时代,谁来评判AI?答案是AI自己!
  • Meta封闭技术大门:开源先锋为何倒向闭源阵营?
  • HRNet:深度高分辨率表示学习用于人体姿态估计-k学长深度学习专栏
  • Miniconda环境隔离机制揭秘:保障模型复现精准性
  • 颠覆认知:实测6款AI工具,论文写作“专用”比“通用”强在哪?
  • 【自动控制】自动控制原理中,最小相位系统是什么?