プロンプトエンジニアリング


## ✅ 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 | \*\*出力のランダム性（創造性）\*\*を調整する。値が高いほど多様な出力に。<br>通常は 0.7〜1.0。2.0 は非常に自由度が高く「破天荒」な出力になる。 |
| `max_tokens`        | 256 | 出力される**最大トークン数（単語や記号の単位）**。<br>例：256トークン ≒ 日本語で200文字程度。                            |
| `top_p`             | 1.0 | **確率質量によるサンプリング制限**（nucleus sampling）。1.0で制限なし（≒全候補から選ぶ）。                          |
| `frequency_penalty` | 0.5 | **繰り返し抑制（頻出単語のペナルティ）**。同じ語を繰り返し使うことを控えさせる。0.0〜2.0の範囲。                              |
| `presence_penalty`  | 0.6 | **新規性促進（既出語の再出現へのペナルティ）**。新しい単語の導入を促す。                                             |

---

## ✅ 使用例（JSON形式）

```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'という語を含めないでください」／「必ず‘多様性’を含めてください」          |

---