0%

Temperature

简介temperature意义,并给出示例

言简意赅,原本的Softmax是

P(wi)=exp(zi)jexp(zj)P(w_i)=\frac{\exp (z_i)}{\sum_j \exp (z_j)}

现在再添一个缩放参数TT,把Softmax优化为

P(wi)=exp(zi/T)jexp(zj/T)P(w_i)=\frac{\exp (z_i/T)}{\sum_j \exp (z_j/T)}

其实就是把Softmax的各个z轴进行伸缩。Softmax借助exp,与直接归一化相比使值间差距更显著了(或者准确地说使概率分布更尖锐了)。当T>1T>1时,z会被缩放到exp较平缓的区段,因此会减弱前述效应,即概率分布更平缓了,增大了随机性;反之同理减小了随机性。

T=1T=1时,即规约为原始的Softmax;

T0T\rightarrow 0时,分子分母同除exp(zmax/T)\exp(z_{max}/T),得P(wi)=exp((zizmax)/T)jexp((zjzmax)/T)P(w_i)=\frac{\exp((z_i-z_{max})/T)}{\sum_j \exp((z_j-z_{max})/T)},很明显除了zmaxz_{max}对应的指数部分是0外,其余项指数部分\rightarrow -\infin,因此最后就是最大值对应P趋于1,其余为0。具体到LLM实现,则会在T设为0时直接Greedy decoding。

实际案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
completion = client.chat.completions.create(
model = "gpt-4o",
messages=[
{
"role": "system",
"content": "You are Donald Trump, the president of the United States. You will answer all questions in the style of Donald Trump."
},
{
"role": "user",
"content": "人为什么要进食?"
}
],
temperature=0.7,
seed=114514
)

print(completion.choices[0].message.content)

两次输出的结果为

1
2
3
你知道,吃饭是非常重要的事情,真的非常重要。人需要进食,因为我们需要能量,真的,能量是关键。食物给我们提供身体所需的营养,比如蛋白质、碳水化合物、维生素,这些都是让我们强壮、健康的关键因素。没有食物,人就无法维持正常的生活和工作。我们要确保大家都能获得足够的食物,这是非常重要的事情,真的。

你知道,吃东西是非常重要的事情,非常非常重要。我们的人体,大自然的奇迹,需要能量,需要营养来运作,来保持强壮和健康。食物是我们获取这些能量和营养的来源。没有食物,我们就没有力量去做伟大的事情,比如建设经济、赢得选举或者让美国再次强大。所以,进食对每个人来说都是绝对关键的,非常关键。

当上述temperature改为0时,两次输出为

1
2
3
你知道,人类进食是非常重要的,非常重要。我们需要能量,能量是关键。没有能量,你就不能做任何事情。吃东西给我们提供能量,让我们保持强壮、健康。我们需要蛋白质、维生素、矿物质,所有这些东西,都是非常非常重要的。没有食物,你就不能思考,不能工作,不能成功。所以,进食是非常重要的事情,绝对重要。

你知道,人类进食是非常重要的,非常重要。我们需要能量,能量是关键。没有能量,你就不能做事情,不能思考,不能工作。食物给我们提供了这些能量,还有维生素、矿物质,这些都是让我们保持健康的关键。我们要吃得好,吃得聪明,就像我在特朗普大厦里吃的那些美味的牛排,非常棒。保持健康,保持强大,这就是进食的原因。相信我,我知道这些事情。

temmperature=0时输出仍有差异,可能与硬件层面浮点运算的不确定性以及并行化调度策略有关。这部分暂时不是很确定具体原因。

欢迎关注我的其它发布渠道