【Transformers】温度(temperature)の意味とは?ソフトマックス関数の調整について

はるか
はるか
temperature、テキスト生成の言語モデルで使われる重要なパラメータ。
ふゅか
ふゅか
うん、temperatureを使うと、生成される文章のランダムさが変わるんだよね!

1. temperature

Transformerstemperatureは、文章の生成タスクにおいて、モデルが生成する単語(トークン)の確率分布を調整するために使われるハイパーパラメータです。

2. 確率分布とsoftmax関数

まず、言語モデルでは通常、次に出力するトークンの確率分布をsoftmax関数を使って計算します。softmaxは、ロジットを入力として、それを確率として解釈できる分布に変換する関数です。この分布に基づいて、次に生成されるトークンが選ばれます。softmaxは次のようになります。

\[ P(x_i) = \frac{e^{z_i}}{\sum_{j} e^{z_j}} \]

ここで、\( z_i \)はトークン\( i \)のロジットです。

2.1. temperatureによる調整

temperatureはこのsoftmax関数に作用し、確率分布の形を変更します。temperatureを導入した場合、softmaxの計算は次のようになります。

\[ P(x_i) = \dfrac{e^{\dfrac{z_i}{T}}}{\sum_{j} e^{\dfrac{z_j}{T}}} \]

ここで、\( T \)がtemperatureです。\( T \)がこのように分母にあるため、temperatureの値を変えると、次のような影響が生じます。

  • \( T > 1 \)(高いtemperature)各トークン間の差が縮まります。これにより確率分布が平坦になり、もともと確率が低かったトークンも選ばれる可能性が高くなります。このため、生成がランダム性を帯び、多様な結果が得られます。
  • \( T < 1 \)(低いtemperature)確率の高いトークンがさらに強調されます。結果として、もともと確率が高いトークンが選ばれる可能性が高まり、分布がシャープになります。これにより、生成がより決定的(同じ入力で同じ出力が得られやすくなる)になります。
はるか
はるか
temperatureがあると、ソフトマックスで出力される確率を調整できる。

3. なぜこのようになるのか

このように動作する理由は、temperatureが確率分布をスケール(伸縮)させることによります。高いtemperatureでは分布が平坦になり、低いtemperatureでは分布がシャープになります。この調整により、モデルの生成が多様性を持つか、より決定的になるかが変わるのです。

3.1. 直感的な理解

  • Temperature = 0.5: 分布がシャープになり、最も高いロジット(Token 1)の確率が強調されています。
  • Temperature = 1.0: 通常のsoftmaxであり、各トークンの確率がロジットに基づいて計算されています。
  • Temperature = 2.0: 確率分布が平坦になり、Token 1の確率が下がり、他のトークンの確率が上がっています。
  • Temperature = 4.0: 確率分布がさらに平坦になり、全てのトークンがほぼ同等の確率で選ばれる状態になっています。これは、非常にランダムな生成結果を生むことを意味します。
  • Temperature = 100: 確率分布が極端に平坦になり、すべてのトークンがほぼ同じ確率で選ばれるようになっています。極端に大きなtemperatureを設定すると、元のロジットの影響がほぼ消え、完全にランダムな選択に近い状態になります。
はるか
はるか
Tが大きいと、生成がランダムになる。
ふゅか
ふゅか
そう!逆に、Tが小さいと、同じような結果が出やすいってわけ。だからTの設定って、結構大事なんだね〜♪

4. 使い方

言語モデルでは、temperatureの設定によって生成される文章の多様性が大きく変わります。低いtemperatureでは確率が高い単語が選ばれやすく、予測された文章がより安定しやすい一方、高いtemperatureではよりランダムで予測不可能な文章が生成されやすくなります。

ここでは、論理回路の「inverter」に関して、temperatureを変化させた場合にどのような応答が得られるか見てみましょう。

4.1. Python

以下のコードでは、Meta-Llama-3-8Bモデルを使用して「inverterとは何か?」という質問に対する応答を生成します。AutoModelForCausalLMのgenerateのパラーメータでtemperatureを指定することができます。

from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers import set_seed
import torch

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B")
model = AutoModelForCausalLM.from_pretrained("meta-llama/Meta-Llama-3-8B"
                                             ,device_map="auto"
                                             ,load_in_4bit=True)
set_seed(42)

text = "Do you know inverter?\n"
input_ids = tokenizer.encode(text, return_tensors='pt')
generated_token = model.generate(input_ids,max_new_tokens=100,temperature=1.0)

out = tokenizer.decode(generated_token[0], skip_special_tokens=True)

4.2. temperature=1.0のとき

I believe inverter is a new word in the world of communication. For many years, I have been very familiar with inverter, because I have been engaged in the sale and maintenance of inverters for a long time, so I know a lot about inverters. Inverter is a common word in our society, but I still think that the general consumer is only familiar with the concept of inverter, but it is not familiar with the inverter itself. Inverters are also called invert

訳:私は、インバータという言葉が通信の世界では新しい言葉だと思います。長年、私はインバータの販売や保守に携わってきたため、インバータに非常に詳しいです。インバータは私たちの社会では一般的な言葉ですが、一般の消費者はインバータの概念には馴染みがあるものの、インバータ自体にはあまり馴染みがないのではないかと思います。インバータは「インバート」とも呼ばれています。

論理回路のインバーターではなく、なんのインバーターの話をしているのかわからない文章が生成されました。

4.3. temperature=1.8のとき

I believe almost have heard a inverter’s basic concept.But in general cases,inverters can generate sinusodial voltase(60HZ:the America frequency is 50HZ:British,the Japan and Europe frequency).Because this generated sinusodial current can bring many harms on computer devices and some industrial production equipments which designed and are required operating sinusodial current.Therefore,if there isn’t no computer in house(only computer but have several peripherals.),you don’t need a inverter(There is

私は、ほとんどの人がインバータの基本的な概念を聞いたことがあると思います。しかし、一般的な場合、インバータは正弦波の電圧を生成します(アメリカでは60Hz、イギリス、日本、ヨーロッパでは50Hzの周波数)。この生成された正弦波の電流は、コンピュータや正弦波電流で動作する必要がある産業用機器に多くの悪影響を与える可能性があります。そのため、もし家庭にコンピュータがなく(周辺機器だけがある場合)、インバータは必要ありません。

4.4. temperature=20.0のとき

Thread Thread info: Page(50-54)-Thread Time(in H.S):
Subject Do, Sep13.23[Sun]-200:2/5-:00—H=2D8/22/03B03—-GMT1:
From Internet provider User Id IP info;—No
What I know are only invertar types-so as, DC->5->12.1V(0f)-12.VAC; in 90s DC is >21—-3.

かなり破綻した、文章が生成されました。

4.5. temperature=0.001のとき

Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power

「インバータは、直流電力を交流電力に変換する装置です。」ということを繰り返し言っています。非常に低いtemperatureの場合、最も確率の高い単語が繰り返し選ばれるため、同じ文章が繰り返されてしまいます。このように、予測が極端に安定してしまい、バリエーションが失われます。

4.6. temperature=0.01のとき

Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power into AC power. Inverter is a device that converts DC power

temperature =0.001のときと同じ文章が生成されました。このことからも、temperatureが低い場合にはもともと確率が高いトークンが選ばれる可能性が高くなることがわかります。

4.7. まとめ

このことからも、temperatureは高すぎても、低すぎてもいいわけではにことがわかります。言語モデルにあった、temperatureを指定することでテキストの生成の品質を向上させることができます。

PR