简介

本文详细解析了大模型输出环节的采样策略,包括温度、top-k和top-p三种方法如何影响输出的随机性与创造性。同时探讨了结构化输出的实现途径,如提示词设计、后置处理和受限采样。文章最后指出,LLM的创造力来源于概率性,理解并管理这种不确定性是有效使用大模型的关键,而非简单地将其视为缺陷。


通过前面的文章,我们了解了输入阶段的嵌入,以及 Transformer 模型的处理。从整体来看,输出环节还没有“打开”,本文将一探究竟。

借用 Chip Huyen 的著作《AI Engineering》[1]中的一张配图:

从矩阵运算的角度来看,最终输出的是一个长度为字典大小的向量,经过 softmax 激活函数得到就是每个token的概率分布

如何选择 token 呢?这蕴含着确定性与随机性的权衡:选择概率最大的 token 会使输出更稳定、更可预测,而采用随机采样则能提升多样性与创造性。这一权衡最终反映在模型的采样策略上。

一、采样策略

总的来说有温度、top-k 和 top-p 三种采样策略。

1.1 温度

“温度”这个名字比较传神,温度越高越活跃,也就是更有创造性。

我们就以 DeepSeek 体验一下温度的作用,发送下述提示词,控制温度的值,观察输出:

{        "model": "deepseek-chat",        "messages": [          {"role": "system", "content": "你是一位诗人,我出上句,你来对下句"},          {"role": "user", "content": "天若有情天亦老,"}        ],        "temperature": 0,        "stream": false}

当 temperature 设置为 0 时,输出是固定的:

  • • 月如无恨月长圆

当 temperature 设置为 2 时,输出比较随机:

  • • 月如无恨月长圆
  • • 人间道义尽沧桑
  • • 情深偏易断肠多
  • • 月如无恨月长圆。踏破璀璨星空,为寻前世因缘。清风拂柳千年慢,我倾战意翻云,乾坤内,与谁来争。凝望明月高悬,此意气飘然,今夜群星皆不醒,我本肆意剑出行!啊 举杯与苍天似深情,放声狂笑称心情。剑指长天向侠行!尽我此生豪马踏名城!
  • • 酒逢知己醉千杯
  • • 水能无怨水当干,然未曾几测高深。
  • • 红绡先冷迎风眠
  • • …

效果与直观理解一致,其背后的原理也很简单,作用点就在 softmax 的计算上。

token 的 logit 除了一下温度值,实现的效果就是 越大, 之间的差值就越小,也就是提高了其他 token 被选中的概率

1.2 top-k

top-k 采样的动机是减少 softmax 激活函数的计算量,对 logits 进行排序选择数值最大的 k 个,然后对这个 k 个,不是整个字典,进行 softmax 计算。

该采样策略使用的比较少,例如 DeepSeek 就没有提供相关的参数,原因是 k 是绝对的数,需要根据输出的大小进行调整。

1.3 top-p

top-p 采样策略是当前比较流行的策略,它并没有降低计算量,还是得全量计算 softmax 激活函数,然后对概率进行排序,选择累积概率大于 p 的 tokens 作为备选。

我们还是以上面的示例,控制 top_p 的值,观察输出:

当 top_p 设置为 0.01 时,输出是固定的:

  • • 月如无恨月长圆

当 top_p 设置为 1 时,输出也很固定:

  • • 月如无恨月长圆

与预期不太相符,笔者猜测可能的原因是最相关的 token 概率值遥遥领先,此时可以通过设置 logprobs 来验证一下:

{    "token": "月",    "logprob": -0.031558793,    "bytes": [        230,        156,        136    ],    "top_logprobs": [        {            "token": "月",            "logprob": -0.031558793,            "bytes": [                230,                156,                136            ]        },        {            "token": "人间",            "logprob": -3.471668,            "bytes": [                228,                186,                186,                233,                151,                180            ]        },        {            "token": "人",            "logprob": -14.080235,            "bytes": [                228,                186,                186            ]        }    ]}

返回的这个是对数概率,换算一下,“月”的概率是96.89%,“人间”的概率是3.1%,“月”的概率确实遥遥领先。

二、结构化输出

在某些实际的应用场景中,我们期望 LLM 的输出是结构化的,例如生成一个 SQL 或者正则表达式。

对于结构化输出,有办法对 LLM 进行限制么?方法还是有一些,但是不能完全保障。

    1. 提示词,在提示词中明确要求输出的格式
    1. 后置处理,对输出进行格式校验
    1. 受限采样,在采样的过程中进行限制,过滤掉不符合格式的token
    1. 微调

一般情况下“后置处理”是成本最小,但是效果最好的方式。

三、 如何看待输出的不确定性

大模型在训练时汇集了海量的数据,对于相同或相似的输入,可能生成截然不同的输出。这种不一致是预期内的,比较难理解的现象是幻觉,对其原因业界也有一些猜想,但是并没有原理解释(如果理解了其原理,不就能解决了😅)。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝 一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝 一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐