[LLM] 大型モデルの温度係数は何ですか?

記事ディレクトリ

1. LLM の温度係数

  • 温度パラメータは、生成言語モデルで生成されるテキストのランダム性と創造性を制御し、モデルのソフトマックス出力層で予測される単語の確率を調整します。
  • 値が大きいほど、予測単語の確率の分散が小さくなり、多くの単語が選択される可能性が高くなり、テキストの多様化に役立ちます。
  • 例: プロンプト: 「素早い茶色のキツネ」
    • 温度 = 0.1:
      「機敏な茶色のキツネが怠惰な犬を飛び越えました。機敏な茶色のキツネは怠惰な犬を飛び越えました。機敏な茶色のキツネは怠惰な犬を飛び越えました。
    • 温度 = 0.5:
      「機敏な茶色のキツネが怠惰な犬を飛び越えました。怠惰な猫は感心しませんでした。素早い茶色のキツネは逃げていきました。」
    • 温度 = 1.0:
      「機敏な茶色のキツネが怠惰な犬を飛び越えました。突然、鳥の群れが頭上を飛んでいき、キツネはその足跡で立ち止まりました。どこへ行くのかと空を見上げました。」

ソフトマックスで計算された確率分布: p ( xi ) = exi ∑ j = 1 V exjp\left(x_i\right)=\frac{e^{x_i}}{\sum_{j=1}^V e^{x_j } }p( ×私は)=j = 1Veバツjeバツ私は
温度係数をソフトマックスに加算する場合: p ( xi ) = exi T ∑ j = 1 V exj T = 1 ∑ j = 1 V exj − xi T p\left(x_i\right)=\dfrac{e^{\dfrac { x_i}{T}}}{\sum_{j=1}^V e^{\dfrac{x_j}{T}}} \\ =\frac{1}{\sum_{j=1}^V e ^ {\frac{x_{j}-x_i}{T}}}p( ×私は)=j = 1VeTバツjeTバツ私は=j = 1VeTバツj×私は1
単純な分析:温度の値は0から1までの範囲にあります。値が大きい場合は、上式の分子と分母を同時に分子で割ると、温度が大きいほど全体の温度が大きくなることがわかります価値。

2. コード例

import torch
import torch.nn as nn
import torch.nn.functional as F
import matplotlib.pyplot as plt

criterion = nn.CrossEntropyLoss()
x = torch.Tensor([[1, 2, 3 ,4]])
y = torch.LongTensor([3])
# 折线图横坐标
x_ = [i for i in range(len(x.squeeze(0)))]
t = [1, 0.5, 0.1]
col = ['red', 'blue', 'green']

for i in range(len(t)):
    temp = t[i]
    out = F.softmax(x / temp, dim=1)
    loss = criterion(out, y)
    y_ = out.squeeze(0).tolist()
    plt.plot(x_, y_, color=col[i], linestyle='dashed', linewidth=2, \
             marker='o', markerfacecolor='red', markersize=8, label = "temp:" + str(temp))
    print("softmax概率值:", out, "\nloss:", loss, "\n")

# 图例放在右上角
plt.legend(loc = "upper left")
plt.title("diffterent temperature")
plt.xlabel("xlabel")
plt.ylabel("logits")
plt.show()

ここに画像の説明を挿入
T が減少すると、ソフトマックス出力の各カテゴリの確率分散が大きくなり、T が大きいほど滑らかになります。これは、今の分析を裏付けます。

参照

[1]ソフトマックスでよく登場する温度係数 T (τ) についての話
[2] LLM パラメータの謎を解く: 言語 AI から最良の出力を得る

おすすめ

転載: blog.csdn.net/qq_35812205/article/details/131714617