地 址:博乐
电 话:0783-988172
网址:china.soccer-success.com
邮 箱:anciqu854@126.com
机器之心报道
编辑 :小舟
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 osimport jsonimport tqdmimport openaifrom time import sleepfrom pathlib import Pathchat_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 timeclass 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 modelN = 128 # max_tokens# Testing chat modelsfor 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 modelsfor 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 resultsprint("\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 计算也会造成必定程度的随机性