P-Tuning v2(ピーチューニング ブイツー)
Tsinghua 大学が提案した Prefix Tuning の改良版。各 Transformer 層の入力に学習可能な連続トークンを挿入し、分類タスクでもフルファインチューニングに匹敵する性能を実現。特に中規模モデル(330M〜10B)での性能改善が顕著。
P-Tuning v2(ピーチューニング v2)とは
P-Tuning v2 は、Tsinghua 大学の Liu らが 2022 年に発表した論文「P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks」で提案された、Prefix Tuning をベースとした改良型 PEFT 手法である。P-Tuning v1 が主に embedding 層への介入に留まっていたのに対し、v2 は Prefix Tuning と同様に各 Transformer 層に学習可能な連続トークンを挿入しつつ、タスク固有の最適化を加えている。
概要と v1 からの進化
P-Tuning v1 の課題
P-Tuning v1(2021 年)は LSTM/MLP ベースのプロンプトエンコーダーを使い、入力 embedding 層のみに連続プロンプトを挿入する手法だった。GPT-3 の Few-shot で有効性を示したが、以下の課題があった:
- 小〜中規模モデルで性能が不安定:1B 未満のモデルではフルファインチューニングに大きく劣後
- NLU タスクで弱い:生成タスク向きだが、分類・抽出タスクでの性能が不十分
- embedding 層のみの介入:深い層での表現制御ができない
P-Tuning v2 の改善点
| 改善点 | v1 | v2 |
|---|---|---|
| 介入層 | embedding 層のみ | 全 Transformer 層 |
| 対応タスク | 主に NLG | NLU + NLG 両方 |
| 最小有効モデルサイズ | 10B+ | 330M+ |
| 分類タスク性能 | フル FT の 80〜90% | フル FT の 95〜100% |
| 固定情報量 | 少ない | 層ごとに独立な情報量 |
技術的特徴
Deep Prompt Tuning
P-Tuning v2 の核心は「Deep Prompt Tuning」である。各 Transformer 層の入力に独立した Prefix トークンを追加する。
- 浅い層の Prefix:構文的・表層的なタスク適応を担当
- 深い層の Prefix:意味的・タスク固有の表現を制御
- 層ごとの独立性:各層の Prefix は独立に学習され、異なる役割を獲得
タスク固有の最適化
- 分類タスク:CLS トークンの代わりに Prefix の最終ベクトルを分類ヘッドに入力
- Token Classification(NER、POS):各トークン位置の表現を直接利用
- QA タスク:Start/End スパン予測に Prefix 情報を活用
ベンチマーク結果
| タスク | モデル | Full FT | P-Tuning v2 | 差分 |
|---|---|---|---|---|
| SuperGLUE | RoBERTa-Large (355M) | 84.7 | 84.3 | -0.4 |
| SQuAD 2.0 | DeBERTa-XL (900M) | 88.4 | 88.1 | -0.3 |
| NER (CoNLL) | BERT-Large (340M) | 92.4 | 91.8 | -0.6 |
| SRL | RoBERTa-Large (355M) | 86.2 | 85.9 | -0.3 |
| NER (OntoNotes) | GPT-2 Medium (355M) | 90.1 | 89.5 | -0.6 |
330M〜900M クラスのモデルでもフルファインチューニングとの差がわずか 0.3〜0.6 ポイントという画期的な結果。
実装と利用
Hugging Face PEFT ライブラリで PrefixTuningConfig として利用可能(P-Tuning v2 は実質的に Deep Prefix Tuning と同等のため)。
from peft import PrefixTuningConfig, get_peft_model, TaskType
config = PrefixTuningConfig(
task_type=TaskType.TOKEN_CLS, # NER 等のトークン分類
num_virtual_tokens=20,
prefix_projection=True, # reparameterization 有効化
)
model = get_peft_model(base_model, config)
学習のコツ
- Prefix 長:NLU タスクでは 20〜40、NLG では 40〜100 が推奨
- 学習率:5e-3〜1e-2(通常のファインチューニングの 100〜1000 倍)
- reparameterization:小規模モデルでは MLP 経由が安定。大規模モデルでは直接最適化でも可
- Dropout:Prefix ベクトルに 0.1 の Dropout を適用すると汎化性能が向上
Prompt Tuning / Prefix Tuning / P-Tuning v2 の関係
- Prompt Tuning:embedding 層のみ。最軽量だが小規模モデルで弱い
- Prefix Tuning:全層 KV に Prefix。NLG に強いが NLU は未検証
- P-Tuning v2:全層入力に Prefix + NLU タスク最適化。最もバランスが良い
3 手法は連続的な発展関係にあり、P-Tuning v2 が最も汎用的。
よくある質問(FAQ)
Q1: P-Tuning v2 はどの程度のモデルサイズから有効ですか? A: 330M(BERT-Large/RoBERTa-Large クラス)から有効。Prompt Tuning が 10B 以上を要求するのに対し、大幅に敷居が下がった。
Q2: P-Tuning v1 と v2 はどちらを使うべきですか? A: ほぼ全てのケースで v2 を推奨。v1 は embedding 層のみの介入で性能上限が低く、v2 の上位互換。v1 は歴史的な参照として理解する価値がある。
Q3: LoRA と P-Tuning v2 の使い分けは? A: 2026 年現在、実務では LoRA/QLoRA が主流。P-Tuning v2 はマルチタスク環境でのタスク切替効率が LoRA より高い点で優位。両者を併用する研究も進んでいる。
まとめ
- P-Tuning v2 は全 Transformer 層への Deep Prompt 挿入で NLU/NLG 両方に対応
- 330M クラスの中規模モデルでもフルファインチューニング同等の性能
- Hugging Face PEFT で PrefixTuningConfig として簡単に利用可能
- LoRA と並ぶ実用的な PEFT 手法として 2026 年も活用されている