大模型中的temperature参数+随机采样策略

一、问题来源:

使用GPT-3.5的时候发现相同的输入会得不一样的结果

二、根因定位:

核心就在于采样策略,一图胜千言:
在这里插入图片描述
上图中语言模型 (language model) 的预测输出其实是字典中所有词的概率分布,而通常会选择生成其中概率最大的那个词。不过图中出现了一个采样策略 (sampling strategy),这意味着有时候我们可能并不想总是生成概率最大的那个词。设想一个人的行为如果总是严格遵守规律缺乏变化,容易让人觉得乏味;同样一个语言模型若总是按概率最大的生成词,那么就容易变成 XX讲话稿了

解码策略

  • greedy decoding
  • beam search decoding
  • Sampling-based decoding
  • Softmax temperature
    在这里插入图片描述
    在这里插入图片描述

temperature参数

因此在生成词的过程中引入了采样策略,在最后从概率分布中选择词的过程中引入一定的随机性,这样一些本来不大可能组合在一起的词可能也会被生成,进而生成的文本有时候会变得有趣甚至富有创造性。采样的关键是引入一个temperature参数,用于控制随机性。假设 p(x)为模型输出的原始分布,则加入 temperature 后的新分布为:
在这里插入图片描述
下图展示了不同的 temperature 分别得到的概率分布。temperature 越大,则新的概率分布越均匀,随机性也就越大,越容易生成一些意想不到的词。

def sample(p, temperature=1.0):  # 定义采样策略
    distribution = np.log(p) / temperature
    distribution = np.exp(distribution)
    return distribution / np.sum(distribution)

p = [0.05, 0.2, 0.1, 0.5, 0.15]

for i, t in zip(range(4), [0.1, 0.4, 0.8, 1.5]):
    plt.subplot(2, 2, i+1)
    plt.bar(np.arange(5), sample(p, t))
    plt.title("temperature = %s" %t, size=16)
    plt.ylim(0,1)

在这里插入图片描述

top-k参数

在这里插入图片描述

top-p参数

在这里插入图片描述
https://www.cnblogs.com/massquantity/p/9511694.html
https://zhuanlan.zhihu.com/p/560847355

### 大型语言模型生成随机序列的技术原理 大型语言模型通过复杂的神经网络架构来学习输入文本的概率分布,从而能够预测下一个最可能的字符或单词。这种概率预测机制使得模型可以用于生成看似随机但实际上遵循一定统计规律的序列[^1]。 具体来说,在生成过程中,给定前缀(即已有的部分序列),模型会计算后续各个候选字符或词语出现的可能性,并依据这些可能性按比例抽样决定实际产生的新元素。由于每次选择都带有一定的随机成分,因此即使对于相同的起始条件,多次运行也可能得到不同的输出结果[^2]。 为了更好地控制生成过程中的不确定性程度,通常还会引入温度参数\(T\)。当\(T>0\)时,较低的温度会使模型倾向于选取高概率项;而较高的温度则增加了低频选项被选中的几率,进而增强最终产出内容的变化性和新颖度。 ```python import torch from transformers import GPT2LMHeadModel, GPT2Tokenizer def generate_random_sequence(model_name='gpt2', prompt="Once upon a time", max_length=50, temperature=1.0): device = 'cuda' if torch.cuda.is_available() else 'cpu' tokenizer = GPT2Tokenizer.from_pretrained(model_name) model = GPT2LMHeadModel.from_pretrained(model_name).to(device) input_ids = tokenizer(prompt, return_tensors='pt').input_ids.to(device) output = model.generate( input_ids, do_sample=True, max_length=max_length, top_p=0.9, # nucleus sampling temperature=temperature ) generated_text = tokenizer.decode(output[0], skip_special_tokens=True) return generated_text print(generate_random_sequence()) ``` 此代码片段展示了如何利用预训练好的GPT-2模型配合调整后的采样策略(如核采样top-p)以及设定合适的温度值来自动生成一段具有一定连贯性的随机文本序列[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值