はじめに: パターン知識の再利用
Il 高度な転移学習 事前トレーニングされたモデルを活用するための鍵 計算リソースを使用して最初からトレーニングする必要がなく、巨大なデータセット上でのトレーニングが可能になります。 のようなモデル バート e GPT 何百ものトレーニングを受けてきました 数十億のトークンを使用して、言語を深く理解することができます。 転送された データが少なくリソースが限られている特定のタスクに集中します。
この記事では、最新の微調整戦略、プロンプト エンジニアリング、 検索拡張生成 (RAG) と Hugging Face エコシステムの比較。 Llama、Mistral、Falcon などのオープンソース モデル。
何を学ぶか
- BERT: 理解タスクのための双方向の事前トレーニングと微調整
- GPT: 自動回帰生成とコンテキスト内学習
- 微調整戦略: フル、LoRA、アダプター、QLoRA
- プロンプトエンジニアリング: より良い成果を得るテクニック
- RAG: LLM とリサーチを組み合わせて正確な答えを得る
- オープンソース モデル: Llama、Mistral、Falcon - いつどれを使用するか
- Hugging Face Hub: 事前トレーニングされたモデルのエコシステム
BERT: 双方向テキスト理解
バート (トランスフォーマーによる双方向エンコーダー表現) が革命を起こした 双方向の事前トレーニングによって言語表現が生成されることを実証する NLP 異常に裕福。事前トレーニング中に、BERT は 2 つの目標を使用します。
- マスクされた言語モデリング (MLM): トークンの 15% がマスクされており、モデルは双方向コンテキストからトークンを予測する必要があります。
- 次の文の予測 (NSP): モデルは、元のテキストで 2 つの文が連続しているかどうかを予測します
微調整するには、BERT 出力の上に分類レイヤーを追加するだけです。 数千のラベル付きサンプルですべてをトレーニングします。
from transformers import BertTokenizer, BertForSequenceClassification
from transformers import Trainer, TrainingArguments
import torch
# Caricare BERT per classificazione di sentiment
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained(
'bert-base-uncased',
num_labels=2 # positivo/negativo
)
# Tokenizzare i dati
texts = ["This movie is great!", "Terrible waste of time."]
labels = [1, 0] # 1=positivo, 0=negativo
inputs = tokenizer(texts, padding=True, truncation=True,
max_length=128, return_tensors="pt")
inputs['labels'] = torch.tensor(labels)
# Forward pass
outputs = model(**inputs)
print(f"Loss: {outputs.loss:.4f}")
print(f"Logits: {outputs.logits}")
# Fine-tuning con Trainer API
training_args = TrainingArguments(
output_dir='./results',
num_train_epochs=3,
per_device_train_batch_size=16,
learning_rate=2e-5,
weight_decay=0.01,
warmup_steps=100,
evaluation_strategy="epoch"
)
効率的な微調整: LoRA と QLoRA
数十億のパラメータを使用してモデルを完全に微調整するには、膨大なリソースが必要です。 パラメータ効率の良い微調整 (PEFT) モデルを適応させることができます パラメータのほんの一部のみを変更します。
LoRA (低ランク適応)
LoRA モデルの元の重みを凍結し、低ランクの行列を追加します 注意層と一緒にトレーニング可能。通常、変更されるパラメータは 1% 未満です トータルでフルファインチューニングに匹敵するパフォーマンスを実現します。
QLoRA
QLoRA LoRA と 4 ビット量子化を組み合わせて微調整が可能 48 GB の VRAM を備えた単一の GPU 上で 65B のパラメーター モデルを実行できます。データ型を使用する NF4 (NormalFloat 4 ビット) と二重量子化により効率を最大化します。
from peft import LoraConfig, get_peft_model, TaskType
from transformers import AutoModelForCausalLM, AutoTokenizer
# Configurazione LoRA
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=16, # Rango delle matrici LoRA
lora_alpha=32, # Scaling factor
lora_dropout=0.1,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
bias="none"
)
# Applicare LoRA al modello
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
peft_model = get_peft_model(model, lora_config)
# Contare parametri addestrabili
trainable = sum(p.numel() for p in peft_model.parameters() if p.requires_grad)
total = sum(p.numel() for p in peft_model.parameters())
print(f"Trainable: {trainable:,} / {total:,} "
f"({100*trainable/total:.2f}%)")
# Output: ~0.5% dei parametri sono addestrabili
プロンプトエンジニアリング: LLM とのコミュニケーション術
Il 迅速なエンジニアリング そして、それを導く指示を策定する実践。 重みを変更せずに、目的の出力に向かってモデル化します。主なテクニックには次のようなものがあります。 数回の学習 (プロンプトに例を示します)、 思考の連鎖 (モデルに段階的に考えるように依頼します)、 役割のプロンプト (モデルに特定の役割を割り当てます) e 構造化された出力 (リクエスト JSON などの特定の形式)。
RAG: 検索拡張生成
Il ラグ LLM の生成能力と検索システムを組み合わせます。 特定の文書に基づいて正確な回答を提供します。ただ依存するのではなく、 事前トレーニング中に保存された知識により、モデルは関連するコンテキストを受け取ります 文書データベースから取得されます。
RAG プロセスは 3 つのフェーズに分かれています。
- インデックス作成: ドキュメントはチャンクに分割され、ベクトル埋め込みに変換されます。
- 検索: クエリを指定すると、類似性検索によって最も類似したチャンクが取得されます。
- 世代: 取得されたチャンクは、LLM のコンテキストとしてプロンプトに挿入されます。
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
# 1. Splitting dei documenti
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
separators=["\n\n", "\n", ". ", " "]
)
chunks = text_splitter.split_text(document_text)
# 2. Creazione degli embedding e vector store
embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2"
)
vector_store = FAISS.from_texts(chunks, embeddings)
# 3. Retrieval e generazione
query = "Come funziona il transfer learning?"
relevant_docs = vector_store.similarity_search(query, k=3)
# Costruire il prompt con contesto
context = "\n".join([doc.page_content for doc in relevant_docs])
prompt = f"""Basandoti sul seguente contesto, rispondi alla domanda.
Contesto:
{context}
Domanda: {query}
Risposta:"""
オープンソース モデル: Llama、Mistral、Falcon
オープンソースのテンプレート エコシステムが爆発的に拡大し、テンプレートに代わる競争力のある選択肢が提供されています 所有者:
- ラマ (メタ): 7B ~ 70B パラメータのモデル ファミリで、微調整とオンプレミス展開に優れています。 Llama 3 は GPT-3.5 で競争力のあるパフォーマンスを実現
- ミストラル: 革新的なアーキテクチャを備えた効率的なモデル (スライディング ウィンドウの注意、専門家の混合)。 Mistral 7B は多くのベンチマークで Llama 2 13B を上回ります
- ファルコン: 高品質のデータセット (RefinedWeb) でトレーニングされ、優れたゼロショット パフォーマンスを提供します
選択はユースケースによって異なります。汎用テキスト生成の場合は、Llama 3、そして多くの場合、 より良い選択。限られたリソースで効率を高めるには、Mistral 7B が最適です。特定のタスクについては、 これらのモデルのいずれかで LoRA を微調整すると、優れた結果が得られます。
ハグフェイス: 完全なエコシステム
ハグフェイス NLPディープラーニングのベンチマークとなっており、 完全なエコシステムを提供します。
- モデルハブ: 500,000 を超える事前トレーニング済みモデル、1 行のコードでダウンロード可能
- トランスフォーマー ライブラリ: 全モデルの統一 API (BERT、GPT、T5、Llama など)
- データセット: トレーニングと評価用の数千のデータセット
- APIトレーナー: 分散トレーニング、混合精度、勾配累積による最適化されたトレーニング ループ
- スペース: デモと ML アプリの無料ホスティング
シリーズの次のステップ
- 次の記事では、詳しく見ていきます TinyML とエッジ AI
- 深層学習モデルを組み込みデバイスやスマートフォンに導入する方法を見ていきます。
- モデル圧縮のための量子化、枝刈り、知識の蒸留を分析します。







