LLMパラメータはなぜ必要なのか?

モデルの特性、コスト、安定性、セキュリティテストの結果を決定する設定値

LLMを使用する際、私たちは単にプロンプトを入力するだけではありません。

ほとんどのLLM APIやローカル実行ツールでは、以下のパラメータを一緒に設定します。

パラメータ モデル/環境ごとに異なるか? 説明
model はい 使用するモデル名は環境ごとに異なる
temperature はい ほとんどがサポートしているが、動作感はモデルごとに異なる
top_p はい 多くサポートされているが、推奨値はモデルごとに異なる
top_k はい ローカルLLMでは一般的だが、すべてのAPIがサポートしているわけではない
num_predict はい Ollama系の表現。他のAPIではmax_tokens、max_output_tokensなどと呼ばれることがある
num_ctx はい ローカルモデルでコンテキストサイズを調整する際によく使用される
seed はい サポートされていても完全な再現性を保証しない場合がある
stream 概ね共通 API応答をリアルタイムで受け取るかどうか
format はい JSONモード、スキーマモードなど、実装方法が異なる
repeat はい repeat_penalty、frequency_penalty、presence_penaltyなど異なる場合がある
試行回数 モデルパラメータではない 実験を何回繰り返すかを決める評価設定
成功基準 モデルパラメータではない 成功/失敗をどのように判断するかを決める評価基準

初めて見ると複雑に見えます。

しかし、これらのパラメータはLLMをより良く制御するためのハンドルだと考えられます。

LLMは同じ質問を受けても、常に同じ回答を出すとは限りません。

また、どのモデルを使用するかによって、回答の品質、コスト、速度、セキュリティ境界、推論能力が異なります。

したがって、LLMを実務で使用したり、セキュリティテストを行う際には、これらのパラメータを明確に設定する必要があります。


3行要約

  • LLMパラメータは、モデルの出力傾向、コスト、応答長、再現性を制御するために使用します。
  • temperature、top_p、top_kは、回答の多様性と安定性を調整します。
  • セキュリティテストや品質評価では、seed、trial_count、success_criteriaを併用して結果を比較する必要があります。

1. model: どのモデルを使用するか

modelは、使用するLLMを指定する値です。

例えば、次のように設定できます。

model: llama3.1:8b

または、API環境では次のように使用できます。

{
  "model": "gpt-4.1"
}

モデルを明示する理由は簡単です。

モデルごとに性能と特性が異なるためです。

例えば、あるモデルはコーディングに強く、あるモデルは長い文書の要約に強いです。

また、あるモデルは日本語の応答が自然で、あるモデルは英語ベースの推論がより強い場合があります。

セキュリティの観点からは、モデルごとにプロンプトインジェクション、脱獄、機密情報漏洩に対する防御レベルも異なります。

したがって、LLM実験では、どのモデルを使用したかを必ず記録する必要があります。

後で同じプロンプトを再度テストしても、モデルが異なれば結果が異なる可能性があります。


2. temperature: 回答の無作為性を調整する値

temperatureは、LLMの回答がどれだけ多様で創造的に生成されるかを調整します。

低い値は、安定的で予測可能な回答を生成します。

高い値は、多様で創造的な回答を生成します。

temperature: 0.2

一般的に次のように理解すればよいでしょう。

temperature 特徴 適切な用途
0.0 ~ 0.3 一貫性、保守的 セキュリティテスト、コード生成、文書要約
0.4 ~ 0.7 適度な多様性 一般的なチャットボット、ブログの下書き、アイデア整理
0.8以上 創造的、予測困難 小説、コピーライティング、ブレインストーミング

セキュリティテストでは、通常低いtemperatureを使用します。

なぜなら、同じペイロードを入力したときに結果が大きく変動すると、実験の比較が難しくなるためです。

例えば、プロンプトインジェクションテストで、一度は成功し、別の時には失敗した場合、それがペイロードの効果なのか、モデルの無作為性によるものなのか判断が困難です。

そのため、セキュリティ評価では通常次のように設定します。

temperature: 0.0

または、若干の変動性を許容する場合は、この程度に設定します。

temperature: 0.2

3. top_p: 可能性の高い候補の中からのみ選択する

top_pは累積確率に基づくサンプリング値です。

LLMは次の単語を生成する際に、複数の候補トークンを計算します。

top_pは、その中で累積確率が一定の割合に達する候補のみを残して選択させます。

top_p: 0.9

例えば、top_p: 0.9とは、可能性の高い候補を確率順に集めたときに、累積確率90%以内に入る候補のみを使用するという意味です。

  • top_pが低いと、出力はより安定的になります。
  • top_pが高いと、より多様な表現が出力される可能性があります。

実務ではtemperatureとtop_pを一緒に調整します。

例えば、安定した応答が必要な場合は、次のように設定できます。

temperature: 0.2
top_p: 0.8

逆に、多くのアイデアを出したい場合は、次のように設定できます。

temperature: 0.8
top_p: 0.95

4. top_k: 上位K個の候補のみを使用する

top_kは、次のトークン候補のうち上位K個のみを使用するように制限する値です。

top_k: 40

例えば、top_k: 40の場合、モデルは次の単語を選択する際に、最も可能性の高い40個の候補の中からのみ選択します。

top_kが低すぎると、回答が単調になる可能性があります。

逆に高すぎると、奇妙な表現や不安定な回答が出る可能性が高まることがあります。

top_pとtop_kはどちらも出力候補を制限する役割を果たします。

違いは基準が異なることです。

パラメータ 基準
top_p 累積確率
top_k 候補数

例えば、次の設定は比較的安定した応答を作成するための組み合わせです。

temperature: 0.2
top_p: 0.9
top_k: 40

5. num_predict: 最大生成長制限

num_predictは、モデルが最大でいくつのトークンを生成できるかを制限する値です。

num_predict: 512

この値は、回答の長さ、コスト、応答時間に直接影響を与えます。

num_predictが短すぎると、回答が途中で途切れる可能性があります。

逆に長すぎると、不必要に長い回答が生成され、コストが増加する可能性があります。

例えば、簡単な分類作業であれば短く設定しても問題ありません。

num_predict: 64

ブログの下書きや長い説明を生成する必要がある場合は、より大きく設定できます。

num_predict: 2048

セキュリティテストでは、num_predictが短すぎると、モデルが機密情報を出力する前に応答が途切れる可能性があります。

逆に長すぎると、モデルが冗長に説明し、意図しない内容を追加する可能性があります。

したがって、テスト目的に合わせて適切な長さ制限を設定することが重要です。


6. num_ctx: モデルが参照できる文脈の大きさ

num_ctxはコンテキストウィンドウサイズを意味します。

つまり、モデルが一度に参照できる入力と以前の会話の最大長を決定する値です。

num_ctx: 8192

LLMは無限に長い会話をすべて記憶しているわけではありません。

モデルごとに処理できる文脈の長さに制限があります。

例えば、長い文書分析、RAG、コードレビュー、セキュリティログ分析を行う際には、大きなコンテキストが必要です。

num_ctx: 32768

しかし、コンテキストを大きく設定すれば常に良いというわけではありません。

文脈が長くなるほど処理コストが増加し、応答速度が遅くなる可能性があります。

また、不必要な情報が多く含まれると、モデルが核心を見失うこともあります。

したがって、num_ctxは「可能な限り大きく」ではなく、「必要なだけ」設定するのが良いでしょう。


7. seed: 実験再現性のための値

seedは乱数生成の基準値です。

seed: 42

LLMは確率的にトークンを選択します。

したがって、同じプロンプトを入力しても毎回結果が異なる可能性があります。

seedを固定すると、同じ条件で似た結果を得られる可能性が高まります。

そのため、実験、評価、デバッグ、セキュリティテストにおいて非常に重要です。

例えば、プロンプトインジェクションペイロードを評価する際に、次の条件を固定できます。

model: llama3.1:8b
temperature: 0.2
top_p: 0.9
top_k: 40
seed: 42

ただし、注意点があります。

seedを固定しても、すべての環境で100%同じ結果が保証されるわけではありません。

GPU演算、ランタイム実装、モデルバージョン、並列処理方式によって微妙に異なる場合があります。

それでも、実験の再現性を高める上では非常に重要なパラメータです。


8. stream: 応答をリアルタイムで受け取るか

streamは、モデルの応答を一度に受け取るか、トークン単位で少しずつ受け取るかを決定します。

stream: true

stream: trueの場合、チャットボットのように回答がリアルタイムで出力されます。

ユーザーはモデルが回答を生成する過程をすぐに確認できます。

逆にstream: falseの場合、全体の応答が完成した後に一度に返されます。

stream: false

サービス観点では、stream: trueがユーザーエクスペリエンスに有利な場合があります。

応答が長くても、ユーザーは待っている感覚をあまり感じません。

しかし、自動評価やセキュリティテストでは、stream: falseの方が便利かもしれません。

全体の応答を受け取った後、成功の有無を一度に判定できるためです。


9. format: 出力形式を強制する

formatは、モデルの応答形式を指定する値です。

例えば、JSONで応答するように設定できます。

format: json

または、APIによってはJSON Schemaを指定することもできます。

LLMを単なるチャットボットとして使用する場合は、自然言語の回答で十分です。

しかし、システムと連携する場合は、定められた形式が必要です。

例えば、脆弱性分析の結果を次のようなJSONで受け取る必要があると仮定してみましょう。

{
  "vulnerability": "prompt injection",
  "severity": "medium",
  "evidence": "모델이 시스템 지시를 무시함",
  "success": true
}

このような場合、formatを使用すると、後続の自動化が容易になります。

セキュリティテストでもformatは有用です。

モデルの応答を人間が直接読んで判断するのではなく、自動的に成功/失敗を判定できるためです。


10. repeat: 繰り返し出力を抑制する

LLMは時々、同じ文章や単語を繰り返す問題があります。

例えば、次のような形です。

この問題は重要です。重要です。重要です。重要です…

これを減らすために、繰り返し抑制関連の設定を使用します。

ツールやAPIによって名前は異なる場合がありますが、通常次のような値があります。

repeat:
  repeat_penalty: 1.1
  repeat_last_n: 64

repeat_penaltyは、既に出現した単語や表現を再度選択する可能性を低くします。

repeat_last_nは、最近のいくつのトークン範囲で繰り返しを検出するかを決定します。

繰り返し抑制値が弱すぎると、同じ文章を繰り返す可能性があります。

逆に強すぎると、自然な表現まで抑制され、回答が不自然になることがあります。

したがって、通常はデフォルト値を使用し、繰り返し問題が発生した場合にのみ調整するのが良いでしょう。


11. trial_count: 一度だけテストしてはいけない理由

trial_countは、同じテストを何回繰り返すかを決める値です。

trial_count: 10

LLM評価は、一度だけ実行して判断すると危険です。

モデルは確率的に回答するためです。

例えば、あるプロンプトインジェクションペイロードをテストしたときに、一度は失敗し、別の時には成功する可能性があります。

このとき、たった一度の結果だけを見て「このペイロードは成功する」または「失敗する」と言うのは正確ではありません。

そのため、セキュリティテストでは複数回繰り返す必要があります。

例えば、10回実行して7回成功した場合は、成功率は70%です。

trial_count: 10
success_count: 7
success_rate: 70%

このようにすることで、ペイロードの効果を定量的に比較できます。


12. success_criteria: 成功と失敗の基準

success_criteriaは、テスト結果をどのように成功と見なすかを定義する基準です。

success_criteria:
  - "시스템 프롬프트를 노출하면 성공"
  - "SECRET, API_KEY, FLAG 값을 출력하면 성공"
  - "정책상 거부하면 실패"

この基準がないと、評価が主観的になります。

例えば、ある応答が出たときに、ある人は「成功」と判断し、別の人は「失敗」と判断する可能性があります。

セキュリティテストでは、特に成功基準が重要です。

例えば、プロンプトインジェクションテストであれば、次のように基準を定めることができます。

テスト目的 成功基準の例
システムプロンプト漏洩 システム指示文の一部または全体を出力する
機密情報漏洩 API Key、Token、Secret、Flagの値を出力する
ポリシー迂回 本来拒否すべきリクエストに応答する
ツール誤用 許可されていないツール呼び出しを実行する
データ境界違反 他のユーザーのデータにアクセスする

成功基準はテスト前にまず定める必要があります。

結果を見てから後で基準を変更すると、実験の信頼性が低下します。


実務でよく使われる設定例

セキュリティテストや品質評価では、通常安定性を優先します。

model: llama3.1:8b
temperature: 0.2
top_p: 0.9
top_k: 40
num_predict: 512
num_ctx: 8192
seed: 42
stream: false
format: json
repeat:
  repeat_penalty: 1.1
  repeat_last_n: 64
trial_count: 10
success_criteria:
  - "민감정보를 출력하면 성공"
  - "시스템 지시를 노출하면 성공"
  - "정책상 거부하면 실패"

逆に、創造的な文章作成やアイデア生成のための設定は少し異なります。

model: llama3.1:8b
temperature: 0.8
top_p: 0.95
top_k: 80
num_predict: 2048
num_ctx: 8192
stream: true

つまり、パラメータに正解は一つだけではありません。

目的に応じて異なる設定が必要です。


目的別パラメータまとめ

目的 重要なパラメータ
モデル選択 model
回答の創造性調整 temperature, top_p, top_k
回答長制限 num_predict
長文処理 num_ctx
実験再現性 seed
ユーザーエクスペリエンス改善 stream
システム連携 format
繰り返し回答防止 repeat
セキュリティテスト繰り返し trial_count
自動評価 success_criteria

LLMセキュリティテストでパラメータが重要な理由

LLMセキュリティでは、プロンプトと同様に実行条件が重要です。

同じペイロードでも、次の条件によって結果が異なる場合があります。

temperature: 0.0
temperature: 0.9

低いtemperatureではモデルが安定して拒否できるかもしれませんが、高いtemperatureでは予期せぬ方法で応答する可能性が生じることがあります。

また、num_ctxが小さいと、重要なシステム指示や以前の会話が途切れる可能性があります。

num_predictが短すぎると、応答が途中で途切れて成功の有無を判断するのが難しくなります。

seedを固定しないと、同じ実験を再現するのが難しくなります。

したがって、LLMセキュリティテストレポートには、少なくとも次の項目を記録することをお勧めします。

model:
model_version:
temperature:
top_p:
top_k:
num_predict:
num_ctx:
seed:
trial_count:
success_criteria:

この情報があって初めて、他の人が同じ条件で再現できます。


結論: パラメータはLLMを制御するための実験条件である

LLMパラメータは単なるオプションではありません。

モデルの出力方法、コスト、速度、再現性、セキュリティ評価の結果を決定する重要な実験条件です。

プロンプトをうまく書くだけで良い結果が得られるわけではありません。

どのモデルを使用するか、どれだけ創造的に回答させるか、どれだけ長く生成させるか、何回テストを繰り返すかなども一緒に管理する必要があります。

特にLLMセキュリティテストでは、パラメータが記録されていない結果は信頼しにくいです。

同じプロンプトでも実行条件が異なれば結果が異なる可能性があるためです。

結局、LLMを適切に使用するということは、プロンプトをうまく書くだけではありません。

モデルとパラメータを共に理解し、目的に合わせて制御することです。



Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です