✅ 1. 埋め込み(Embedding)
$$
\mathbf{e}_i = \mathbf{E} \cdot \mathbf{one_hot}(w_i)
$$
- 意味:語彙中の単語 $w_i$ をベクトルに変換する
- $\mathbf{E} $:語彙サイズ × 埋め込み次元の行列(学習対象)
- $\mathbf{e}_i $:単語 $w_i$ に対応する埋め込みベクトル
✅ 2. 自己注意(Self-Attention)
$$
\text{Attention}(Q, K, V) = \text{softmax}\left( \frac{QK^\top}{\sqrt{d_k}} \right)V
$$
- 意味:ある単語が他の単語にどれだけ注意を向けるかを決定し、情報を加重平均する
- $Q, K, V$:Query, Key, Value の行列(それぞれ線形変換された入力ベクトル)
- $\sqrt{d_k}$:スケーリング因子(安定化のため)
✅ 3. 多頭注意(Multi-Head Attention)
$$
\text{MHA}(X) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W^O
\quad \text{where} \quad \text{head}_i = \text{Attention}(XW^Q_i, XW^K_i, XW^V_i)
$$
- 意味:異なる「視点」(ヘッド)で注意を学習し、多様な意味関係を捉える
- 各 $W^Q_i, W^K_i, W^V_i$ は学習パラメータ行列
✅ 4. 残差接続とLayerNorm
$$
\text{LayerNorm}(x + \text{SubLayer}(x))
$$
- 意味:勾配消失の防止と学習安定化のための構造
- LayerNorm:特徴ごとに正規化(均一性の付与)
✅ 5. FFN(Feed Forward Network)
$$
\text{FFN}(x) = \text{ReLU}(xW_1 + b_1)W_2 + b_2
$$
- 意味:各トークンを非線形変換する2層MLP
- 全トークンに独立に適用(位置ごとの深い変換)
✅ 6. 言語モデリング出力(Softmax)
$$
P(w_{t+1} \mid w_{\leq t}) = \text{softmax}(z)
\quad \text{where} \quad z = h_t W^T + b
$$
- 意味:現在の隠れ状態 $h_t$ に基づいて次の単語の確率を出力
- softmax により語彙全体にわたる確率分布となる
✅ 7. クロスエントロピー損失
$$
\mathcal{L} = - \sum_{i=1}^V y_i \log(\hat{y}_i)
$$
- 意味:モデル出力 $\hat{y}$(確率)と正解ラベル $y$ との誤差を計測
- $V$:語彙サイズ。
- **最尤推定(MLE)**に基づく損失関数
✅ 8. トークン列の生成(関数形式)
$$
\text{LLM}(w_1, \dots, w_t) = w_{t+1}
\quad \text{または} \quad
\text{LLM}\theta(x) = \arg\max{w} P(w \mid x; \theta)
$$
- 意味:過去の文脈 $x$ に対して次単語 $w$ を予測(または確率的にサンプリング)
✅ 9. 位置エンコーディング(例:sin/cos形式)
$$
\text{PE}{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right), \quad
\text{PE}{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right)
$$
- 意味:トークンの順序を明示的に表す
- 各位置 $pos$ にユニークなベクトルを与え、学習可能な埋め込みと加算
✅ 10. 最小二乗回帰(応用例)
$$
\min_x | Ax - y |^2
$$
- 意味:文脈 $A$(単語ベクトル行列)から意味ベクトル $y$ を再構成する最適な係数 $x$ を求める
- 応用:要約生成、意味解析、文埋め込み
✅ 出力制御パラメータ一覧
パラメータ名 | 設定値 | 説明 |
---|---|---|
temperature |
2.0 | **出力のランダム性(創造性)**を調整する。値が高いほど多様な出力に。 通常は 0.7〜1.0。2.0 は非常に自由度が高く「破天荒」な出力になる。 |
max_tokens |
256 | 出力される最大トークン数(単語や記号の単位)。 例:256トークン ≒ 日本語で200文字程度。 |
top_p |
1.0 | 確率質量によるサンプリング制限(nucleus sampling)。1.0で制限なし(≒全候補から選ぶ)。 |
frequency_penalty |
0.5 | 繰り返し抑制(頻出単語のペナルティ)。同じ語を繰り返し使うことを控えさせる。0.0〜2.0の範囲。 |
presence_penalty |
0.6 | 新規性促進(既出語の再出現へのペナルティ)。新しい単語の導入を促す。 |
✅ 使用例(JSON形式)
{
"temperature": 2.0,
"max_tokens": 256,
"top_p": 1.0,
"frequency_penalty": 0.5,
"presence_penalty": 0.6
}
✅ 備考
-
temperature
とtop_p
は通常どちらか一方だけ調整します。両方高いと出力がかなり予測不能になります。 -
frequency_penalty
とpresence_penalty
の併用は、詩・物語・創作向けに適しています。 -
temperature: 2.0
は最大限の創造性を狙った設定であり、思考実験や創作プロンプト向きです。
✅ プロンプトエンジニアリング要素表
区分 | 要素/技法 | 説明 | 例 |
---|---|---|---|
🎯 目的 | 指示(Instruction) | モデルに明確なタスクや目的を伝える | 「要約してください」「Pythonでコードを書いてください」 |
制約(Constraint) | 出力形式・字数・言語などの制限を明示する | 「300字以内で」「日本語で」「JSON形式で」 | |
役割指定(Role-play) | モデルに仮の役割・専門性を与える | 「あなたは医師です」「法律家として答えてください」 | |
🧠 思考誘導 | チェイン・オブ・ソート | ステップバイステップで考えるよう促す | 「まず前提を確認し、次に選択肢を検討し、最後に結論を述べてください」 |
ゼロショット/少数ショット | 例を与えずに指示(ゼロ)/数個の例を提示(少数) | 「以下に質問と回答例を挙げます...続けてください」 | |
明示的プロンプト構造 | 入力/出力を構造化して指示 | 「Input: xxx\nOutput:」 | |
🧪 形式制御 | 出力形式指定(Format guide) | 表・JSON・コードブロックなど形式指定 | 「表形式で」「マークダウンで」「Pythonコードで」 |
文体・トーン調整 | 語調・語彙・文体などを指定 | 「論文調で」「カジュアルに」「敬語で」 | |
🌐 言語処理 | 翻訳/コード変換 | 言語間・形式間の変換処理を行わせる | 「英語を日本語に訳して」「LaTeXにしてください」 |
要約/抽象化 | 長文を短く・重要情報のみ抽出 | 「以下の文章を要約してください」「箇条書きで整理してください」 | |
🧮 論理制御 | 条件分岐型プロンプト | 条件を満たす場合のみ回答、などの論理誘導 | 「もしAならB、そうでなければCと答えてください」 |
評価・分類 | 評価値(スコア)、ラベル付けなどの指示 | 「この文章のトーンを1〜5で評価してください」 | |
🧰 ツール連携 | Chain of Tools / API連携 | LLM外部のツールと接続して結果を活用 | Pythonコードで実行 → LLMが説明を補足 |
🤖 生成制御 | 温度・確率(temperature等) | 出力の多様性や確率調整 |
temperature: 0.2 (確定的)〜temperature: 1.5 (創造的) |
禁止語/キーワード強制 | 出力中の語彙制御(明示 or ソフト誘導) | 「'AI'という語を含めないでください」/「必ず‘多様性’を含めてください」 |