nikkie-ftnextの日記

イベントレポートや読書メモを発信

LLMのtemperatureをさがして(この1年で見聞きした情報まとめ)

はじめに

#ミリアニムビナナ異文化交流 ほんと最高😭 nikkieです。

LLM文脈で登場するtemperature(温度)なるものに関して、知っていることを書き出します。
読んで誤りに気づかれた場合は、@ftnextまでお知らせいただけると助かります。

目次

OpenAIのドキュメントより

ドキュメント「Text generation models」

OpenAIのドキュメントにあたっていきます。
「Text generation models」
https://platform.openai.com/docs/guides/text-generation

OpenAI's text generation models (often called generative pre-trained transformers or large language models) ()

OpenAIのドキュメントでは、テキスト生成モデルを指してLLMなんですね

Chat Completions APIのリファレンス

このドキュメント内の「Chat Completions API1
APIリファレンスが案内されます。
https://platform.openai.com/docs/api-reference/chat

APIのリクエストのパラメタの中にtemperatureがあります。 https://platform.openai.com/docs/api-reference/chat/create#chat-create-temperature

  • sampling temperature
  • 0から2までの数値をとる
  • デフォルト値は1

Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.

  • 高い値は出力をよりランダムにする
  • (意訳)低い値は出力をより決定的にする

We generally recommend altering this or top_p but not both.

一般にtemperatureまたはtop_pを変えることをオススメするが、両方とも変えることはオススメしない

再び「Text generation models」、FAQより

元のドキュメントのFAQにもtemperatureの大小について同様の記載があります:
How should I set the temperature parameter?

Lower values for temperature result in more consistent outputs (e.g. 0.2), while higher values generate more diverse and creative results (e.g. 1.0).

temperatureの低い値(例 0.2)はより変わらない出力となり、対して高い値(例 1.0)はより多様で創造的な出力を生成する

Select a temperature value based on the desired trade-off between coherence and creativity for your specific application.

あなたのアプリケーション特有の一貫性と創造性の間の望ましいトレードオフに基づいて、temperatureの値を選んでください

『大規模言語モデル入門』より

2023年上半期時点の自然言語処理への知の高速道路、『大規模言語モデル入門』の中ではOpenAIのAPIも叩いています(9章)。
脱線ですが、推しポイントは並行処理APIを呼び出している点。

さて、temperatureについても説明されます。

temperatureは出力のランダムさを制御する温度パラメータ(図7.9)です。(Kindle版 p.483)

最小値は0であり、この場合デコーダは常に最も確率の高いトークンを出力します。(Kindle版 p.483)

7章の図7.9は百聞は一見に如かずで、めちゃめちゃ分かりやすいです

温度パラメータの値が0に近いとき、特定のトークンに確率のピークを持つ確率分布となり、温度パラメータの値が大きくなるにつれて、より均一な確率分布になります。(Kindle版 p.395)

松尾研LLM講座より

講義資料がダウンロード可能です(ありがとうございます!)

第1回:Overview of Language Models

LLMの概要パートより、言語モデルとは

ある単語の系列(≒文章)がどれくらい発生しやすいかをモデル化したもの (スライド5)

このモデル化に条件付き確率を採用(詳しくはスライド6)

条件付き確率を何らかのニューラルネットで推定したモデル(スライド7)」、これが大規模言語モデルに繋がっていきます。
スライド7の図は分かりやすく
日本 -> の -> 首都 -> は とトークンの並びが来たら次に来るのは

  • 「東京」が最大確率
  • 「京都」が次点
  • 他のトークンも小さい確率をとっている

この確率分布がtemperatureと関わります

第3回:Pre-training Pipeline

Transformerについて扱う回。
「評価」の中にtemperatureが登場します。

事前学習済みLLMを使って, テキストを出力(デコード)してみる. (スライド88)

3つ紹介されるデコード方式の中で

デコード方式③:Random Sampling
Temperature: 0以上の実数(スカラー値) (スライド91)

https://docs.cohere.com/docs/temperature より図が引用されています。

すでに見た事項の言い換えですが、

  • temperatureが低いと、確率最大がスパイクしていますが
  • temperatureが高いと、確率が一様に近づいていますね

温故知新:temperatureはChatGPTのAPI固有ではない

ChatGPTより前のモデルでも、上記のデコードを制御する目的でtemperatureを指定できます。
GPT-2のテキスト生成でtemperatureを指定した例を用意しました。

https://huggingface.co/blog/how-to-generate#sampling を参考に動かしました(この記事は積ん読

  • Python 3.11.4
  • transformers==4.36.2
  • torch==2.1.2

Ng先生「ChatGPT Prompt Engineering for Developers」より

OpenAIのドキュメントで「the desired trade-off between coherence and creativity(一貫性と創造性の間の望ましいトレードオフ)」と言われていた点、Andrew Ngセンセの講座でも言及されていました2

Expandingが該当します
https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/7/expanding

要点としては、temperatureの値を高くすると、モデルの出力はよりランダムになるということ(言い換えると多様)。

temperatureの設定に関して

なので、アプリケーションの価値から考えて

  • テキスト出力が多様になることでユーザに価値を提供できるならtemperatureの値は大きく
    • 例えば、ChatBot(以前と同じ応答をしなくなりそう)
  • 逆に、確実性や予測可能性がユーザ価値であるならばtemperatureの値は0
    • 例えば、要約、でしょうか(要約をどう使うかで少しだけ多様にしたい場合もあるかもですね)
    • プロンプトを試行錯誤する場合はtemperature=0(変数はプロンプト1つだけにしたいので)

となると理解しています

終わりに

temperatureについて、自分が知っていることを書き出しました。
書き出してみて改めて気づいた繋がりもありましたね。
そうか、次のトークンの出力に使う確率分布をtemperatureで操作しているのか!

P.S. temperature=0にしても一意に決定しない、ですよね?

直近はOpenAIのAPIを触っていないのですが、半年くらい前にNgセンセの教えにならってtemperature=0としたときは数パターン返ってくる経験をしました。
深追いできていないのですが、2023/11のDevDayで発表された「Reproducible outputs」を次は試してみたいな、と思っています。
https://platform.openai.com/docs/guides/text-generation/reproducible-outputs

we offer some control towards deterministic outputs by giving you access to the seed parameter and the system_fingerprint response field.


  1. Chat CompletionsとCompletionsがあるのですが、しまさんのスライドが分かりやすかったです
  2. オススメです