なぜ知っておくか
AIは仕組みを知らなくても使える。ただ、なぜこのプロンプトが効くのか、なぜ長い会話の途中で前の話を忘れるのか、RAGはどういう原理で動いているのか——仕組みを少し知っていると、こういった疑問のほとんどに説明がつく。
「ステップバイステップで考えてください」が精度を上げる理由、コンテキストの最初と最後が優先されやすい理由、ハルシネーションを完全に防ぐ方法がない理由。使い方の判断に直結する知識は、思ったより少ない。
この記事はLLMの内部構造とプロンプト技法の整理メモ。深く理解する必要はないが、この程度を知っておくと使い方の引き出しが増える。
データ構造
辞書は概念では2つ、実質1つで管理している。
- トークナイザ辞書:文字列をトークンに分割するルール集
- トークンID辞書:トークンと整数IDの対応表
行列は大枠で4つある。
- エンベディング行列:トークンIDを座標(ベクトル)に変換する
- アテンション行列:アテンション処理用の行列(Wq・Wk・Wv・Wo)
- 処理中にアテンションスコア行列(QとKから作られる一時的な行列)が生成される
- Q・KはWq・Wkから得られる中間結果
- フィードフォワード行列:文脈を踏まえた上で意味を深掘りする知識の源泉
- 出力行列:最後のトークンの座標を次のトークンの確率分布に変換する
処理の流れ
(1) トークナイザーで分割
入力テキストをモデルが扱える単位(トークン)に分割する。
「りんごが好き」→「りんご」「が」「好き」
(2) トークンID辞書でトークンを整数に変換
分割されたトークンを整数IDに変換する。
「りんご」→ 12045
(3) エンベディング行列から座標を取得
整数IDに対応する多次元の座標(ベクトル)を取得する。これが以降の計算のスタート地点になる。
12045 → [0.23, -0.87, 0.41, …]
(4) アテンション処理:文脈を取り込んで座標を更新
各トークンは(3)の座標をスタートとして、アテンション行列をかけて座標を移動させる処理を繰り返す。
BERT(双方向)とGPT/Claude(一方向)の違い
BERTはすべてのトークンが互いに参照し合う双方向の設計になっている。
- 「りんご」は「が」「好き」を吸収して座標が変わる
- 「が」は「りんご」「好き」を吸収して座標が変わる
- 「好き」は「りんご」「が」を吸収して座標が変わる
GPT/ClaudeはCausal Masking(一方向)の設計で、前のトークンしか参照できない。
- 「りんご」は他のトークンを参照しない
- 「が」は「りんご」だけを参照する
- 「好き」は「りんご」「が」を参照する
BERTの用途:文章を「理解・分類」するタスク向き
- Google検索(2019年〜)
- RAGのベクトル検索部分(BERT系アーキテクチャが使われることが多い)
吸収には重みがある
「どのトークンにどれだけ注目するか」のスコアを計算して重み付きで取り込む。その重みの計算にQuery・Key・Valueという3つの行列を使う。
- Query:「自分は何を探しているか」
- Key:「自分は何を持っているか」
- Value:「実際に渡す情報」
各トークンがQueryを出し、他のトークンのKeyと照合して注目度を決め、Valueを重み付きで集める。この処理が層ごとに繰り返される。層が進むごとに、単語レベルの関係から文レベル、さらに抽象的な意味へと座標が移動していく(大規模モデルだと80〜100層以上)。
KVキャッシュ
過去のトークンが計算した「Key」と「Value」はメモリに保存しておく。新しいトークンが生成されたときはその新トークンの分だけを計算し、過去のキャッシュと合流させる仕組みをKVキャッシュと呼ぶ。
フィードフォワード(知識の源泉)
各層ごとにアテンションの後にフィードフォワード処理がある。1層の中で座標は2回動く。アテンションで他のトークンの情報を取り込み(「りんご」が「好き」の影響を受けて「好意の対象としてのりんご」という文脈上の位置に移動する)、次にフィードフォワードで自分の座標だけを内部変換する。他のトークンとは無関係に、自分が持っている知識(果物、赤い、甘い、食べ物…)の中からその文脈に関連する意味を座標に反映させる。この「自分が持っている知識」がフィードフォワード行列に格納されている。
(5) 最後のトークンの座標から次の単語の確率を生成
プロンプトの最後のトークンの座標だけを使って次の単語を予測する。
- 最後のトークンの座標に出力行列をかけて確率分布に変換する
- Temperatureの設定に合わせて次のトークンを選ぶ
- 選んだトークンを入力に加えて(3)から繰り返す(KVキャッシュにより新トークン分のみ計算)
Temperature
Temperatureはトークン選択の確率分布の広がりを制御するパラメータ。
- 0.0〜0.3:決定的(正確性重視)
- 0.7〜1.0:標準
- 1.0超:ランダム・創造的(モデルによっては1.0が上限。Claude APIなど)
コンテキストの特性
最初と最後のプロンプトが優先される仕組み
コンテキストウィンドウ内の全トークンに対してattentionを計算するため、原理的には古いトークンも新しいトークンも同等に「見える」。ただし実際には位置によるバイアスがある。
- RLHF:最新の指示に従う挙動が学習で最適化されている
- Positional Encoding:位置情報の扱い方はモデルによって異なる。原典のTransformerは埋め込みベクトルへの加算方式だったが、現在の主流はRoPE(Rotary Position Embedding)で、各アテンション層でQ・Kに対して回転行列として直接適用する。ALiBiのようにアテンションスコアにバイアスを加える方式も存在する
- Lost in the Middle問題:コンテキストの中間部分は最初と最後より注目されにくい傾向がある
- 構造的な理由:早いトークンほどそれ以降のすべてのトークンから参照されるので計算全体への影響が大きくなる
「ここまでの会話は忘れて」はある程度有効だが、影響は残ると考えておくのが妥当と言える。
強調の影響力
最初のプロンプト群はKVアンカーとして強力で、強調ワードや明示的な区切りよりも優先される。強調ワードや区切りはモデルが学習でそれを重要視するよう最適化されているか次第で、構造的な保証はない。ロールの変更はRLHFで最適化されているので途中でも効果が出やすい。
ハルシネーション
現状のLLMにはハルシネーションを確実に検知する方法がない。対策として使えるのは以下の3つ。
- 確信度を聞く:「この回答の確信度は?」と直接聞く
- 別の言い方で複数回聞く:ハルシネーションは一貫しないことが多い性質を利用する。ただし学習データに偏りがある場合やもっともらしい答えが1つしかない場合は一貫して同じ嘘をつくこともある。またTemperatureが低い設定だとハルシネーションでも毎回同じ答えが出てくる
- 具体的な根拠・出典を求める:WebSearchでURLが存在していてその内容が正しいなら正確性は高いと言える
学習データの偏り
AIはインターネット上の公開情報で学習している。ここに構造的な偏りがある。
人間は公開の場では本音を出さない。ブログや論文、フォーラムに書くのは、人に見せられる形に整えた情報だ。実際の現場で起きている泥臭い判断や、理屈では説明しにくい意思決定のプロセスは、ほとんど公開されない。
つまりAIの知識は、人間の「建前」側に偏っている。教科書的に正しい答え、一般論としてもっともらしい回答は得意だが、現場の実態に即した判断は苦手になる。
この偏りを補正できるのが、現場の経験を持つ人間の役割になる。AIが出す「正しいが現実には合わない答え」に対して、「うちの現場ではこうだ」というコンテキストを与えることで、実用的な出力に近づけることができる。AIを道具として使いこなすには、この偏りを前提にしておく必要がある。
ロール
会話には3つのロールがある。
| ロール |
役割 |
| システム |
性格やルールを定義 |
| ユーザ |
ユーザの発言 |
| アシスタント |
AIの回答 |
プロンプトの中では各ロールが制御用マーカーで区切られているが、AIにとってはすべて「入力」として一続きに処理される。「どこまでが自分の過去の発言か」という区別はなく、全部が等しくトークンの列として見える。
RAG
RAGはユーザーが書いたプロンプトと同じ扱いになる。プロンプトに毎回膨大な情報を書けないので、ユーザーのプロンプトから関係ありそうな情報をベクトルデータベースで参照して追加する仕組みになっている。
プロンプト手法
基本の考え方:
- 主語を省略しない
- 指示語(こそあど)や程度語は具体的に
- 指示と素材のセクションを分ける
- タスクは分割する
Chain-of-Thought (CoT)
ステップバイステップで中間的な推論を出力させる。より複雑な思考が必要な場合、答えに至る思考プロセスを1〜2個例示としてプロンプトに含める。弱点として間違った方向に進むと修正できない。
※プロンプト:「ステップバイステップで考えてください。論理的に一歩ずつ順を追って説明してください。」
Tree-of-Thoughts (ToT)
複数の解決策を出し、それらを自己評価・選別し、最善の道筋を絞り込む手法。
※プロンプト:
- 複数の案を出させて思考を枝分かれさせる
- 各案の欠点や利点を評価させる
- 評価の高い案での思考を前進させる
- 全ての案を俯瞰して合理的な結論をださせる
Step-Back Prompting
具体的な問題から一歩引いて、背後にある一般原理や概念を先に特定させてから回答させる手法。原則に立ち返ることでハルシネーションを抑制し精度を高めることができる。
※プロンプト:いきなり「どうすればいい?」ではなく「基本的な仕組みは?原則は?」と質問し、その答えを踏まえてどうすればいいか確認する。
Self-Consistency
同じ問題に対して複数の推論パスを実行し、最も多い回答を最終解とする(多数決)。正しい答えは一致しやすく間違いはバラバラになりやすいという性質を利用している。
Chain-of-Verification (CoVe)
回答に含まれる事実を自ら検証してから最終回答を出す手法。
- 回答を生成させる
- その回答が正しいか確認するために自問自答させる
- 最初の回答と自問自答を照合して最終的な回答にする
Self-Ask
複雑な質問に対し自分への追加の質問を繰り返し行い、その答えを積み上げて最終回答を導く手法。
Reflexion
失敗やエラー結果をフィードバックとして受け取り、次の試行で修正する反復プロセス。
Meta-Prompting
プロンプトの書き方や構造そのものをAIに定義させる、あるいはプロンプトを生成するためのプロンプト。
Few-shot / One-shot / Zero-shot
例示の数による学習制御。
Rephrase and Respond (RaR)
AIにユーザーの質問をより理解しやすい形に「言い換え」させてから回答させる。
Flipped Interaction
AIに先に質問をさせ、ユーザーがそれに答えることで必要な情報を揃えてからタスクを実行する。
LLMと製造業の実務がどうつながるか:
シリーズ記事一覧・著者への相談はこちら →