Redian新闻
>
你有没深入想过,什么造成了GPT-4的输出很随机?

你有没深入想过,什么造成了GPT-4的输出很随机?

公众号新闻
机器之心报道
编辑:小舟
Google Deepmind 可能早就意识到了这个问题。
今年,大型语言模型(LLM)成为 AI 领域最受关注的焦点,OpenAI 的 ChatGPT 和 GPT-4 更是爆火出圈。GPT-4 在自然语言理解与生成、逻辑推理、代码生成等方面性能出色,令人惊艳。

然而,人们逐渐发现 GPT-4 的生成结果具有较大的不确定性。对于用户输入的问题,GPT-4 给出的回答往往是随机的。

我们知道,大模型中有一个 temperature 参数,用于控制生成结果的多样性和随机性。temperature 设置为 0 意味着贪婪采样(greedy sampling),模型的生成结果应该是确定的,而 GPT-4 即使在 temperature=0.0 时,生成的结果依然是随机的。

在一场圆桌开发者会议上,有人曾直接向 OpenAI 的技术人员询问过这个问题,得到的回答是这样的:「老实说,我们也很困惑。我们认为系统中可能存在一些错误,或者优化的浮点计算中存在一些不确定性......」

值得注意的是,早在 2021 年就有网友针对 OpenAI Codex 提出过这个疑问。这意味着这种随机性可能有更深层次的原因。

图源:https://community.openai.com/t/a-question-on-determinism/8185

现在,一位名为 Sherman Chann 的开发者在个人博客中详细分析了这个问题,并表示:「GPT-4 生成结果的不确定性是由稀疏 MoE 引起的」。


Sherman Chann 博客地址:https://152334h.github.io/blog/non-determinism-in-gpt-4/

Sherman Chann 这篇博客受到了 Google DeepMind 最近一篇关于 Soft MoE 的论文《From Sparse to Soft Mixtures of Experts》启发。

论文地址:https://arxiv.org/pdf/2308.00951.pdf

在 Soft MoE 论文的 2.2 节中,有这样一段描述:
在容量限制下,所有稀疏 MoE 都以固定大小的组来路由 token,并强制(或鼓励)组内平衡。当组内包含来自不同序列或输入的 token 时,这些 token 通常会相互竞争专家缓冲区中的可用位置。因此,模型在序列级别不再具有确定性,而仅在批次级别(batch-level)具有确定性,因为某些输入序列可能会影响其他输入的最终预测。

此前,有人称 GPT-4 是一个混合专家模型(MoE)。Sherman Chann 基于此做出了一个假设:
GPT-4 API 用执行批推理(batch inference)的后端来托管。尽管一些随机性可能是因为其他因素,但 API 中的绝大多数不确定性是由于其稀疏 MoE 架构未能强制执行每个序列的确定性。

也就是说,Sherman Chann 假设:「稀疏 MoE 模型中的批推理是 GPT-4 API 中大多数不确定性的根本原因」。为了验证这个假设,Sherman Chann 用 GPT-4 编写了一个代码脚本:

import os
import json
import tqdm
import openai
from time import sleep
from pathlib import Path

chat_models = ["gpt-4""gpt-3.5-turbo"]
message_history = [
    {"role""system""content""You are a helpful assistant."},
    {"role""user""content""Write a unique, surprising, extremely randomized story with highly unpredictable changes of events."}
]

completion_models = ["text-davinci-003""text-davinci-001""davinci-instruct-beta""davinci"]
prompt = "[System: You are a helpful assistant]\n\nUser: Write a unique, surprising, extremely randomized story with highly unpredictable changes of events.\n\nAI:"

results = []

import time
class TimeIt:
    def __init__(self, name): self.name = name
    def __enter__(self): self.start = time.time()
    def __exit__(self, *args): print(f"{self.name} took {time.time() - self.start} seconds")

C = 30  # number of completions to make per model
N = 128 # max_tokens
# Testing chat models
for model in chat_models:
    sequences = set()
    errors = 0 # although I track errors, at no point were any errors ever emitted
    with TimeIt(model):
        for _ in range(C):
            try:
                completion = openai.ChatCompletion.create(
                    model=model,
                    messages=message_history,
                    max_tokens=N,
                    temperature=0,
                    logit_bias={"100257"-100.0}, # this doesn't really do anything, because chat models don't do <|endoftext|> much
                )
                sequences.add(completion.choices[0].message['content'])
                sleep(1# cheaply avoid rate limiting
            except Exception as e:
                print('something went wrong for', model, e)
                errors += 1
    print(f"\nModel {model} created {len(sequences)} ({errors=}) unique sequences:")
    print(json.dumps(list(sequences)))
    results.append((len(sequences), model))
# Testing completion models
for model in completion_models:
    sequences = set()
    errors = 0
    with TimeIt(model):
        for _ in range(C):
            try:
                completion = openai.Completion.create(
                    model=model,
                    prompt=prompt,
                    max_tokens=N,
                    temperature=0,
                    logit_bias = {"50256"-100.0}, # prevent EOS
                )
                sequences.add(completion.choices[0].text)
                sleep(1)
            except Exception as e:
                print('something went wrong for', model, e)
                errors += 1
    print(f"\nModel {model} created {len(sequences)} ({errors=}) unique sequences:")
    print(json.dumps(list(sequences)))
    results.append((len(sequences), model))

# Printing table of results
print("\nTable of Results:")
print("Num_Sequences\tModel_Name")
for num_sequences, model_name in results:
    print(f"{num_sequences}\t{model_name}")

当 N=30,max_tokens=128 时,结果如下表所示:


在 Sherman Chann 注意到 logit_bias 问题之前,还得到了如下结果(max_tokens=256):


实验结果表明,GPT-4 的输出总是不确定的(unique completion 数值很高,表明对于相同的输入,GPT-4 生成的输出总是不同的),这几乎可以证实 GPT-4 存在问题。并且,所有其他不会陷入重复无用循环的模型也存在某种程度的不确定性。这似乎说明不可靠的 GPU 计算也会造成一定程度的随机性。

Sherman Chann 表示:「如果不确定性是稀疏 MoE 批推理固有的特征,那么这一事实对于任何使用该类模型的研究来说都应该是显而易见的。Google Deepmind 的研究团队显然知道这一点,并且他们认为这个问题很微不足道,以至于只是把它写成了一句不经意的话放在论文中」。

此外,Sherman Chann 还推测 GPT-3.5-Turbo 可能也使用了 MoE。

网友怎么看

这篇博客发表后,开发者们也开始讨论 GPT-4 输出的不确定问题。有人认为这可能是「多线程并行」造成的:


也有人表示:「虽然计算是确定的,但是执行计算的多个处理器之间可能存在时钟频率偏差」:


一位支持 Sherman Chann 的假设的开发者说道:「GPT-3.5-Turbo 可能就是 OpenAI 为 GPT-4 构建的小型测试模型」。


还有开发者分析道:「按照 Soft MoE 论文的说法,稀疏 MoE 不仅引入了不确定性,还可能会使模型的响应质量取决于有多少并发请求正在争夺专家模块的分配」。


对此,你怎么看?

参考链接:
https://news.ycombinator.com/item?id=37006224


如何快速掌握大模型技术与实践?
机器之心主办的「Llama 2大模型算法与应用实践」论坛,拆解以 Llama 2 为代表的大模型算法和应用,帮助你系统学习大模型算法理论,并上手搭建一个专属大模型,在实践中巩固学习成果。
你将了解:大模型技术细节、行业落地案例、多模态改造、量化及低成本微调……
机器之心特意为你准备了「限时早鸟优惠」,现在报名可享单人门票八折;3人以上还有更大优惠!赶快扫描下图二维码领取限时福利吧!

© THE END 
转载请联系本公众号获得授权
投稿或寻求报道:[email protected]

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
T-,小藤级新闻联播都看过,但这个细节你有注意到吗?聊一聊:你有没有什么在停车场找车的好办法?实现输入到输出「模态自由」, NUS华人团队开源NExT-GPT,最接近AGI的大一统多模态大模型来了買了一顆皇冠大巴后面追出很多小孩,不停挥手……特朗普:从未想过,这种事会发生在美国前总统身上过寿不能随便过,“寿有三不过,后代福气多”,三不过指的是什么?刚砸了Meta饭碗,Apple又惹到了Google……今年,什么品牌还让你有购买欲?| 2023金字招牌大调查(填问卷还可参与抽奖)你可曾想过,谁不是烟雾缭绕“芯片战”最大的输家,暴跌34%这个国家人口全球第4、镍储量全球第 1!为什么造不出像样的新能源车?谷歌新模型的算力已是GPT-4的5倍,要大力出奇迹反超OpenAI了?有几条命敢这么造?美国男子为拍视频跳鳄鱼坑。12项性能位居第一,中国最接近GPT-4的大模型来了!现已全面开放服务!今年,什么品牌还让你有购买欲?| 2023金字招牌大调查OpenAI已经偷偷发布了GPT 4.5?交往过,怀孕过,流产过,但他还是个宝宝谷歌百人“复仇者联盟”出击!将发对标GPT-4的大模型,26位研发主管名单流出你有没有想过,当你老了,走不动了……董思槿学历造假?!少数民族参加高考,硕士论文怎么造的?《梦中的白云》&《深深的怀念》憋屈过,也心疼过,才真的有底气说:孩子被欺负应该这么做英伟达推出大模型加速包;Meta将训练对标GPT-4的大模型;ChatGPT等成费水大户丨AIGC大事日报CoWoS封装,缘何成为了GPU短板?GPT作文能力比拼:GPT3.5、GPT4、百度文心一言、讯飞星火为了输出而输出的茶颜悦色,是第几次“翻车”了?360正式发布自研大模型,周鸿祎:国产大模型追赶GPT4的速度远超想象玩过,哭过,爱过,我老顽童走了!这些患者的天价救命药将退出中国,什么原因造成了这一困局?微信键盘全平台体验:最适合微信的输入法,但不适合所有人篝火与诗,最是难凉“牵手门”的董小姐和暧昧的成都GPT-4破防啦!用密码和GPT-4聊天,成功绕过了GPT-4的安全机制!港中大(深圳)告诉你方法
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。