社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  chatgpt

【ChatGPT有点热】浅聊Temperature参数对大语言模型的推理能力的影响

AINLP • 1 年前 • 508 次点击  

 “ 


前两天在玩OpenAI接口的时候,发现一个关于temperature的蛮有意思的点,记录下来,希望能抛砖引玉,引出大家的进一步的观点,或者给大家使用大模型的时候提供一些思路。

本文大致为观察和实验、原理探索、结论三个方面。

老样子,先把结论献上,业内同学可以不看后面的原理解释的内容。

结论

Temperature影响模型的生成内容,进而影响模型的“推理能力”

GPT4在某些场景下,受temperature的影响较GPT3.5小很多。

文末提供了不同场景的参考temperature,但具体值还是建议多测试实验,加入“let's think step by step”这类提示符,可以提高生成效果,特别是推理场景。

另外,也引出几个问题和思考, 希望可以与大家一起交流:

思考

为什么temperature会影响“推理”能力?

大模型的推理能力,是真的在“推理”,还是只是统计层面的概率分布?

为什么GPT4的结果受temperature影响要较GPT3.5小很多?


观察

套壳站泛滥,很多站会宣称自己用了GPT4,实际是3.5。通过一些特殊的问题,可以分辨出模型是GPT3.5还是GPT4,这本质上是看模型的推理能力,有这么一个小学生级别的算术题:

我的狗Tony的年龄是我的一半,我今年10岁,65年后,Tony多少岁,只需要回答年龄的数字

答案很明确,10/2+65=70岁。但是这个问题确实蕴含了理解和推理,以及答案格式约束。即,通过“我的狗Tony的年龄是我的一半”和“我今年10岁”推断出Tony的目前年龄是5岁,进而得知65年后Tony是70岁,返回70这个数字。

但是对于语言模型来说,这是一个颇具挑战性的任务,一来是我选择狗Tony,65年后,这一现实中出现的比较少的语料组合,防止模型简单的重复已有的语料,另外,这个问题是数学运算和逻辑推断的结合,而非简单的创作,另外也有输出格式的要求。

当然结果也是蛮有意思,下面是GPT3.4和4网页版:

下面依次是文心一言、通义千问、讯飞星火和Claude:

可以看到,ChatGPT网页版(3.5)和讯飞星火回答正确,但是比较啰嗦,GPT4出人意料的回答错误,但是遵循了只回复年龄数字的要求。

上面是网页版的回答。

由于网页版没法调整temperature参数,我们调用API,来进行实验,看temperature是否会对推理能力产生影响。

实验

下面是API接口返回结果,主要针对OpenAI的系列模型。

当temperature为1.5的时候,gpt-3.5-turbo得到了正确的答案。但是似乎结果不稳定,固定1.5多次尝试:

结果很发散,虽然确实有一次正确的回答。

gpt-3.5-turbo-16k类似,这里就不展开。

而gpt-4稳如老狗(这让我进一步加深了, 网页版GPT4和API的GPT4并不是同样的模型的观点)

接下来,让我们加入“magic words”: 

Let’s think step by step

全部正确!这是非常让人惊喜但是也疑惑的,加入这么简单的一句话,就能完全改变结果。

私以为,这句话的加入,让推理过程显式的生成出来,而前面生成的内容也会进一步影响最终的结果,有了不同step的结果做辅助,最终结果就更可靠。

实验和观察结束,本着知其然,也要知其所以然的原则,管中窥一下豹

首先我们需要定义,什么是推理能力。

 “ 

推理是一种认知过程,涉及使用证据、论证和逻辑来得出结论或做出判断。【1】

这是一般意义上的推理,但对于大语言模型来说,推理能力被定义为:可以迭代或递归地分解问题,或者说将复杂问题分解为顺序的中间步骤,然后生成最终答案。【2】【3】

但不管是通过Chain of Thoutght, 还是“let’s think step by step”

总归这里的推理,还是显示的推理,对此,也有很多人提出了自己的质疑,包括Lecun

也有对Chain of Thought进行了研究,虽然确实是可以提高模型效果,但是也存在一个问题,即很有用,但并没有回答模型为什么可以进行“推理”。

写到这可能有些跑题,但如果只讨论temperature,也只是回避了推理能力是否存在这一问题。

但关于推理,就先到这,回到Temperature。

对于OpenAI接口,这个参数的定义是这样的:

简而言之这个参数的效果就是越大,生成的结果越随机,我们用一个简单的问题“一加五等于”来进行测试:

可以看到,当temperature大于1.5后,开始胡说八道。

但比较有意思的是对于GPT4模型,似乎不受影响。

Temperature在模型生成的时候到底如何影响结果?

由于OpenAI对模型完全闭源,我们只能从文档中看到只言片语:

可以认为,GPT系列模型采用了Temperature sampling和Nucleus sampling【4】,下面的公式就是Temperature sampling的计算过程:

我们看到的模型生成的文字,实际上是逐字生成的,可以简单的理解为,模型每次在一堆字里面,以一定的概率去挑选可能的字,比如生成“我是小老弟”,在有了“我是小”的情况下,去在一堆字里面挑选出了“老”这个字。

那么temperature如何起作用?

举例:有一堆字,这堆字,每一个字被挑中的概率如下:

[0.04, 0.01, 0.12, 0.17,0.21, 0.03,0.02, 0.2,0.055,0.1, 0.045,]

Temperature可以对这些值进行缩放,如图,原始的分布是当T=1时候(左上角),

可以看到,T越小,会把之前较大的值放的更大,较小的收的更小;当T较大的时候,会将这些值拉的更均匀,换句话,使每个字被选到的概率更平均。

这也是为什么当temperature越大,模型会越喜欢“胡说八道”。

从Transformer的代码来看,

Temperature sampling的实现也确实是比较简单的, 当然这里和OpenAI接口的区别是,不能设置为0,最大值可以超过2。

用ChatGLM2做测试:

可以看到,temperature太高基本上就处于完全不可用的状态,但加入top_p结果就能恢复正常。

这也就是OpenAI接口temperature限制0-2,同时不建议与top_p同时使用的原因。

至此,temperature如何在模型生成中影响结果,已经得出了结论。

但也引出了文初的3个问题。

小老弟目前无法回答这3个问题,希望可以与读者们一起探讨。

但总归,我们得到结论,temperature和top_p这两个参数,对模型的生成结果,甚至推理能力,有很大的影响。

最后,也放上不同场景的参考temperature,当然,具体的值,也是要大家根据自己的真实业务需求进行调整测试。

参考资料:

【1】https://arxiv.org/pdf/2212.10403.pdf

【2】https://arxiv.org/pdf/2305.14992.pdf

【3】https://arxiv.org/pdf/2212.09597.pdf

【4】https://platform.openai.com/docs/api-reference/chat/create#chat/create-temperature


进技术交流群请添加AINLP小助手微信(id: ainlp2)

请备注具体方向+所用到的相关技术点

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括LLM、预训练模型、自动生成、文本摘要、智能问答、聊天机器人、机器翻译、知识图谱、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/162789
 
508 次点击